mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
Update.
1998-07-16 23:06 Ulrich Drepper <drepper@cygnus.com> * debug/Makefile (distribute): Add sigcontextinfo.h. Add rules to generate and install catchsegv. * debug/catchsegv.sh: New file.
This commit is contained in:
parent
eb0e1178c5
commit
6ce7ab198a
@ -1,3 +1,9 @@
|
||||
1998-07-16 23:06 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* debug/Makefile (distribute): Add sigcontextinfo.h.
|
||||
Add rules to generate and install catchsegv.
|
||||
* debug/catchsegv.sh: New file.
|
||||
|
||||
1998-07-16 Mark Kettenis <kettenis@phys.uva.nl>
|
||||
|
||||
* sysdeps/mach/hurd/dl-sysdep.c (open_file): Return a Hurd I/O
|
||||
|
@ -22,6 +22,7 @@
|
||||
subdir := debug
|
||||
|
||||
headers := execinfo.h
|
||||
distribute = sigcontextinfo.h
|
||||
|
||||
routines := backtrace backtracesyms backtracesymsfd
|
||||
|
||||
@ -29,14 +30,24 @@ CFLAGS-backtrace.c = -fno-omit-frame-pointer
|
||||
|
||||
tests = backtrace-tst
|
||||
|
||||
extra-libs = libSegFault
|
||||
extra-libs = libSegFault
|
||||
extra-libs-others = $(extra-libs)
|
||||
|
||||
libSegFault-routines = segfault
|
||||
libSegFault-inhibit-o = $(filter-out .os,$(object-suffixes))
|
||||
|
||||
distribute += catchsegv.sh
|
||||
install-bin = catchsegv
|
||||
generated = catchsegv
|
||||
|
||||
include ../Rules
|
||||
|
||||
$(objpfx)catchsegv: catchsegv.sh $(common-objpfx)soversions.mk \
|
||||
$(common-objpfx)config.make
|
||||
sed 's/@VERSION@/$(version)/;s/@SLIB@/$(slibdir)/' $< > $@.new
|
||||
chmod 555 $@.new
|
||||
mv -f $@.new $@
|
||||
|
||||
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
|
||||
# This ensures they will load libc.so for needed symbols if loaded by
|
||||
# a statically-linked program that hasn't already loaded it.
|
||||
|
84
debug/catchsegv.sh
Executable file
84
debug/catchsegv.sh
Executable file
@ -0,0 +1,84 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
# This file is part of the GNU C Library.
|
||||
# Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
# The GNU C Library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of the
|
||||
# License, or (at your option) any later version.
|
||||
|
||||
# The GNU C Library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
prog="$1"
|
||||
shift
|
||||
args="$*"
|
||||
|
||||
if test $# -eq 0; then
|
||||
case "$args" in
|
||||
--h | --he | --hel | --help)
|
||||
echo 'Usage: catchsegv PROGRAM ARGS...'
|
||||
echo ' --help print this help, then exit'
|
||||
echo ' --version print version number, then exit'
|
||||
echo "Report bugs using the \`glibcbug' script to <bugs@gnu.org>."
|
||||
exit 0
|
||||
;;
|
||||
--v | --ve | --ver | --vers | --versi | --versio | --version)
|
||||
echo 'catchsegv (GNU libc) @VERSION@'
|
||||
echo 'Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
Written by Ulrich Drepper.'
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
LD_PRELOAD="${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so"
|
||||
export LD_PRELOAD
|
||||
SEGFAULT_USE_ALTSTACK=1
|
||||
export SEGFAULT_USE_ALTSTACK
|
||||
SEGFAULT_OUTPUT_NAME="$prog.segv.$$"
|
||||
export SEGFAULT_OUTPUT_NAME
|
||||
|
||||
$prog $args
|
||||
exval=$?
|
||||
|
||||
unset LD_PRELOAD
|
||||
# Check for an segmentation fault.
|
||||
if test $exval -eq 139; then
|
||||
# We caught a segmentation error. The output is in the file with the
|
||||
# name we have in SEGFAULT_OUTPUT_NAME. In the output the names of
|
||||
# functions in shared objects are available, but names in the static
|
||||
# part of the program are not. We use addr2line to get this information.
|
||||
(read line; echo "$line"
|
||||
read line; echo "$line"
|
||||
while read line; do
|
||||
case "$line" in
|
||||
[*) addr="`echo $line | sed 's/^[\(.*\)]$/\1/'`"
|
||||
complete="`addr2line -f -e $prog $addr 2>/dev/null|`"
|
||||
if $? -eq 0; then
|
||||
echo "`echo $complete|sed 'N;s/\(.*\)\n\(.*\)/\2(\1)/;'`$line"
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
;;
|
||||
*) echo "$line"
|
||||
;;
|
||||
esac
|
||||
done) < $SEGFAULT_OUTPUT_NAME
|
||||
rm $SEGFAULT_OUTPUT_NAME
|
||||
fi
|
||||
|
||||
exit $exval
|
Loading…
Reference in New Issue
Block a user