libraries/electric-fence: Added (A malloc(3) debugger)
Signed-off-by: Niels Horn <niels.horn@slackbuilds.org>
This commit is contained in:
parent
2b7c409af9
commit
7a462a7aaa
|
@ -0,0 +1,30 @@
|
|||
Electric Fence is a debugger that uses virtual memory hardware to detect
|
||||
illegal memory accesses. It can detect two common programming bugs:
|
||||
software that overruns or underruns the boundaries of a malloc() memory
|
||||
allocation, and software that touches a memory allocation that has been
|
||||
released by free().
|
||||
|
||||
Unlike other malloc() debuggers, Electric Fence will detect read accesses
|
||||
as well as writes, and it will stop and pinpoint the exact instruction
|
||||
that causes an error. It is not as thorough as Purify, however.
|
||||
|
||||
In order to debug a program it needs to be linked with Electric Fence's
|
||||
library or dynamic linking needs to be used; README.Debian explains that
|
||||
in detail.
|
||||
|
||||
In addition to the static library (libefence.a), this package also
|
||||
contains a shared library of electric fence (libefence.so). Thus, you
|
||||
don't need to recompile your programs any more, all you need to do is:
|
||||
|
||||
LD_PRELOAD=libefence.so ./your-buggy-program
|
||||
|
||||
and libefence's malloc will be used.
|
||||
|
||||
If you're using c++, and you and want to statically link your c++
|
||||
programs, you shouldn't use g++ to link libefence.a, but rather:
|
||||
gcc -o myprog myprog.o -lstdc++ -lg++ -lefence
|
||||
(if you use g++, the order is different, and efence's malloc doesn't
|
||||
get used)
|
||||
|
||||
Be sure to read the `libefence` manpage which describes how to set
|
||||
various environment variables which alter lebefence's behavior
|
|
@ -0,0 +1,110 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Slackware build script for Electric Fence
|
||||
|
||||
# Copyright 2009-2010 Sean Donner (sean.donner@gmail.com)
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use of this script, with or without modification, is
|
||||
# permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of this script must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
PRGNAM=electric-fence
|
||||
VERSION=${VERSION:-2.1.16}
|
||||
BUILD=${BUILD:-1}
|
||||
TAG=${TAG:-_SBo}
|
||||
|
||||
if [ -z "$ARCH" ]; then
|
||||
case "$( uname -m )" in
|
||||
i?86) ARCH=i486 ;;
|
||||
arm*) ARCH=arm ;;
|
||||
*) ARCH=$( uname -m ) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
CWD=$(pwd)
|
||||
TMP=${TMP:-/tmp/SBo}
|
||||
PKG=$TMP/package-$PRGNAM
|
||||
OUTPUT=${OUTPUT:-/tmp}
|
||||
|
||||
if [ "$ARCH" = "i486" ]; then
|
||||
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
elif [ "$ARCH" = "i686" ]; then
|
||||
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
elif [ "$ARCH" = "x86_64" ]; then
|
||||
SLKCFLAGS="-O2 -fPIC"
|
||||
LIBDIRSUFFIX="64"
|
||||
else
|
||||
SLKCFLAGS="-O2"
|
||||
LIBDIRSUFFIX=""
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
rm -rf $PKG
|
||||
mkdir -p $TMP $PKG $OUTPUT
|
||||
cd $TMP
|
||||
rm -rf $PRGNAM-$VERSION
|
||||
tar xfvz $CWD/${PRGNAM}_$VERSION.tar.gz
|
||||
cd $PRGNAM-$VERSION
|
||||
chown -R root:root .
|
||||
|
||||
find . \
|
||||
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
|
||||
-exec chmod 755 {} \; -o \
|
||||
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
|
||||
-exec chmod 644 {} \;
|
||||
|
||||
# Compile and install static library
|
||||
make CFLAGS="${SLKCFLAGS//-fPIC/}" CXXFLAGS="${SLKCFLAGS//-fPIC/}"
|
||||
install -D -m 644 libefence.a $PKG/usr/lib${LIBDIRSUFFIX}/libefence.a
|
||||
|
||||
# Compile and install shared object library
|
||||
rm *.o
|
||||
make CFLAGS="$SLKCFLAGS -fPIC -fPIC" CXXFLAGS="$SLKCFLAGS -fPIC"
|
||||
gcc -shared -Wl,-soname,libefence.so.0 -o libefence.so.0.0 efence.o page.o print.o -lc -lpthread
|
||||
install -D -m 755 libefence.so.0.0 $PKG/usr/lib${LIBDIRSUFFIX}/libefence.so.0.0
|
||||
|
||||
# Install manpage
|
||||
install -D -m 644 libefence.3 $PKG/usr/man/man3/libefence.3
|
||||
|
||||
# Create library symlinks
|
||||
( cd $PKG/usr/lib${LIBDIRSUFFIX}
|
||||
ln -s libefence.so.0.0 libefence.so.0
|
||||
ln -s libefence.so.0 libefence.so
|
||||
)
|
||||
|
||||
# Strip debugging
|
||||
find $PKG -exec file {} + | sed -n '/ELF.*executable\|shared object/s/:.*$//p' | \
|
||||
xargs strip --strip-unneeded 2> /dev/null || true
|
||||
find $PKG -exec file {} + | sed -n '/current ar archive/s/:.*$//p' | \
|
||||
xargs strip --strip-debug 2> /dev/null || true
|
||||
|
||||
find $PKG/usr/man -type f -exec gzip -9 {} \;
|
||||
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
|
||||
|
||||
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
|
||||
cp -a COPYING README debian/changelog debian/README.gdb \
|
||||
$PKG/usr/doc/$PRGNAM-$VERSION
|
||||
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
|
||||
|
||||
mkdir -p $PKG/install
|
||||
cat $CWD/slack-desc > $PKG/install/slack-desc
|
||||
|
||||
cd $PKG
|
||||
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
|
|
@ -0,0 +1,10 @@
|
|||
PRGNAM="electric-fence"
|
||||
VERSION="2.1.16"
|
||||
HOMEPAGE="http://packages.debian.org/sid/electric-fence"
|
||||
DOWNLOAD="http://ftp.debian.org/debian/pool/main/e/electric-fence/electric-fence_2.1.16.tar.gz"
|
||||
MD5SUM="9b0055bb54604fb77712d2096442ad53"
|
||||
DOWNLOAD_x86_64=""
|
||||
MD5SUM_x86_64=""
|
||||
MAINTAINER="Sean Donner"
|
||||
EMAIL="sean.donner@gmail.com"
|
||||
APPROVED="Niels Horn"
|
|
@ -0,0 +1,19 @@
|
|||
# HOW TO EDIT THIS FILE:
|
||||
# The "handy ruler" below makes it easier to edit a package description. Line
|
||||
# up the first '|' above the ':' following the base package name, and the '|' on
|
||||
# the right side marks the last column you can put a character in. You must make
|
||||
# exactly 11 lines for the formatting to be correct. It's also customary to
|
||||
# leave one space after the ':'.
|
||||
|
||||
|-----handy-ruler------------------------------------------------------|
|
||||
electric-fence: Electric Fence (A malloc(3) debugger)
|
||||
electric-fence:
|
||||
electric-fence: Electric Fence is a debugger that uses virtual memory hardware to
|
||||
electric-fence: detect illegal memory accesses. It can detect two common programming
|
||||
electric-fence: bugs: software that overruns or underruns the boundaries of a malloc()
|
||||
electric-fence: memory allocation, and software that touches a memory allocation that
|
||||
electric-fence: has been released by free().
|
||||
electric-fence:
|
||||
electric-fence:
|
||||
electric-fence:
|
||||
electric-fence:
|
Loading…
Reference in New Issue