glibc/debug/catchsegv.sh

108 lines
3.2 KiB
Bash
Raw Normal View History

#!/bin/sh
# Copyright (C) 1998-2021 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 Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 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
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
Prefer https to http for gnu.org and fsf.org URLs Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 13:40:42 +08:00
# <https://www.gnu.org/licenses/>.
Update. 1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com> * shlib-versions: Remove definition for libSegFault. * memory.texi: Comment out the relocating allocator description. * manual/signal.texi: Remove reference to relocating allocator. * manual/top-menu.texi: Regenerated. * posix/fnmatch.c: Implement [: :] and change to recognize ^ as negation only when not _POSIXLY_CORRECT. * sysdeps/generic/glob.c: Add several optimizations. * posix/glob.h: Undefine __PMT to prevent warnings. Reported by Roland McGrath. * posix/regex.c: Define namespace macros only for _LIBC. * sysdeps/arm/dl-machine.h: Fix typo. * sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack, sigpending, sigqueue, and sigtimedwait. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file. * timezone/leapseconds: Update from tzdata1998f. 1998-07-18 Mark Kettenis <kettenis@phys.uva.nl> * stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked. * stdio/Versions [GLIBC_2.1]: Add fputs_unlocked. * libio/stdio.h: Fix typo. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the magic memobj port arg parsing stuff. Fix it someday when we are ready to really use it. (_dl_sysdep_output): New function, modified from _dl_sysdep_error. (_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * stdio/fputs.c: Add fputs_unlocked as weak alias for fputs. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as a weak alias. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/generic/sigsuspend.c: Likewise. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/i386/sigcontextinfo.h: New file. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (map-file): Don't use $(wildcard) to find the generated version script, instead look in $(version-maps). ($(common-objpfx)libc.so): Only depend on libc.map if versioning is used. * extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script if versioning is used. Don't use $(wildcard) to find the generated version script, instead look in $(verson-maps). 1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove unused function handle. * sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC. * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. * debug/catchsegv.sh: Fix argument processing, quoting and various typos. Put the crash info always in the current directory. Find program in $PATH if it contains no directory component. * Makerules (install-lib.so-versioned, install-lib.so-unversioned): New variables. (install-lib-nosubdir): Depend on unversioned libs in slibdir, not libdir. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (+tsrcs): Remove references to %-map variables and *.map files. Add Versions in subdirs. * Makerules (distinfo-vars): Don't write out %-map variables. 1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com> * inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR. Include <paths.h> instead. * sysdeps/generic/paths.h: Define _PATH_RWHODIR. * sysdeps/unix/sysv/linux/paths.h: Likewise. Reported by Dale Scheetz <dwarf@polaris.net>. 1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c: Strictly check whether catalog file is larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
1998-07-21 01:25:48 +08:00
if test $# -eq 0; then
echo "$0: missing program name" >&2
Update. 1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com> * shlib-versions: Remove definition for libSegFault. * memory.texi: Comment out the relocating allocator description. * manual/signal.texi: Remove reference to relocating allocator. * manual/top-menu.texi: Regenerated. * posix/fnmatch.c: Implement [: :] and change to recognize ^ as negation only when not _POSIXLY_CORRECT. * sysdeps/generic/glob.c: Add several optimizations. * posix/glob.h: Undefine __PMT to prevent warnings. Reported by Roland McGrath. * posix/regex.c: Define namespace macros only for _LIBC. * sysdeps/arm/dl-machine.h: Fix typo. * sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack, sigpending, sigqueue, and sigtimedwait. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file. * timezone/leapseconds: Update from tzdata1998f. 1998-07-18 Mark Kettenis <kettenis@phys.uva.nl> * stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked. * stdio/Versions [GLIBC_2.1]: Add fputs_unlocked. * libio/stdio.h: Fix typo. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the magic memobj port arg parsing stuff. Fix it someday when we are ready to really use it. (_dl_sysdep_output): New function, modified from _dl_sysdep_error. (_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * stdio/fputs.c: Add fputs_unlocked as weak alias for fputs. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as a weak alias. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/generic/sigsuspend.c: Likewise. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/i386/sigcontextinfo.h: New file. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (map-file): Don't use $(wildcard) to find the generated version script, instead look in $(version-maps). ($(common-objpfx)libc.so): Only depend on libc.map if versioning is used. * extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script if versioning is used. Don't use $(wildcard) to find the generated version script, instead look in $(verson-maps). 1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove unused function handle. * sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC. * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. * debug/catchsegv.sh: Fix argument processing, quoting and various typos. Put the crash info always in the current directory. Find program in $PATH if it contains no directory component. * Makerules (install-lib.so-versioned, install-lib.so-unversioned): New variables. (install-lib-nosubdir): Depend on unversioned libs in slibdir, not libdir. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (+tsrcs): Remove references to %-map variables and *.map files. Add Versions in subdirs. * Makerules (distinfo-vars): Don't write out %-map variables. 1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com> * inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR. Include <paths.h> instead. * sysdeps/generic/paths.h: Define _PATH_RWHODIR. * sysdeps/unix/sysv/linux/paths.h: Likewise. Reported by Dale Scheetz <dwarf@polaris.net>. 1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c: Strictly check whether catalog file is larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
1998-07-21 01:25:48 +08:00
echo "Try \`$0 --help' for more information." >&2
exit 1
fi
prog="$1"
shift
if test $# -eq 0; then
case "$prog" 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 'For bug reporting instructions, please see:'
cat <<\EOF
@REPORT_BUGS_TO@.
EOF
exit 0
;;
--v | --ve | --ver | --vers | --versi | --versio | --version)
echo 'catchsegv @PKGVERSION@@VERSION@'
echo 'Copyright (C) 2021 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
segv_output=`mktemp ${TMPDIR:-/tmp}/segv_output.XXXXXX` || exit
# Redirect stderr to avoid termination message from shell.
(exec 3>&2 2>/dev/null
Update. 1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com> * shlib-versions: Remove definition for libSegFault. * memory.texi: Comment out the relocating allocator description. * manual/signal.texi: Remove reference to relocating allocator. * manual/top-menu.texi: Regenerated. * posix/fnmatch.c: Implement [: :] and change to recognize ^ as negation only when not _POSIXLY_CORRECT. * sysdeps/generic/glob.c: Add several optimizations. * posix/glob.h: Undefine __PMT to prevent warnings. Reported by Roland McGrath. * posix/regex.c: Define namespace macros only for _LIBC. * sysdeps/arm/dl-machine.h: Fix typo. * sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack, sigpending, sigqueue, and sigtimedwait. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file. * timezone/leapseconds: Update from tzdata1998f. 1998-07-18 Mark Kettenis <kettenis@phys.uva.nl> * stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked. * stdio/Versions [GLIBC_2.1]: Add fputs_unlocked. * libio/stdio.h: Fix typo. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the magic memobj port arg parsing stuff. Fix it someday when we are ready to really use it. (_dl_sysdep_output): New function, modified from _dl_sysdep_error. (_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * stdio/fputs.c: Add fputs_unlocked as weak alias for fputs. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as a weak alias. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/generic/sigsuspend.c: Likewise. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/i386/sigcontextinfo.h: New file. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (map-file): Don't use $(wildcard) to find the generated version script, instead look in $(version-maps). ($(common-objpfx)libc.so): Only depend on libc.map if versioning is used. * extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script if versioning is used. Don't use $(wildcard) to find the generated version script, instead look in $(verson-maps). 1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove unused function handle. * sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC. * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. * debug/catchsegv.sh: Fix argument processing, quoting and various typos. Put the crash info always in the current directory. Find program in $PATH if it contains no directory component. * Makerules (install-lib.so-versioned, install-lib.so-unversioned): New variables. (install-lib-nosubdir): Depend on unversioned libs in slibdir, not libdir. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (+tsrcs): Remove references to %-map variables and *.map files. Add Versions in subdirs. * Makerules (distinfo-vars): Don't write out %-map variables. 1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com> * inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR. Include <paths.h> instead. * sysdeps/generic/paths.h: Define _PATH_RWHODIR. * sysdeps/unix/sysv/linux/paths.h: Likewise. Reported by Dale Scheetz <dwarf@polaris.net>. 1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c: Strictly check whether catalog file is larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
1998-07-21 01:25:48 +08:00
LD_PRELOAD=${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so \
SEGFAULT_USE_ALTSTACK=1 \
SEGFAULT_OUTPUT_NAME=$segv_output \
"$prog" ${1+"$@"} 2>&3 3>&-)
exval=$?
# Check for output. Even if the program terminated correctly it might
1998-10-06 21:07:23 +08:00
# be that a minor process (clone) failed. Therefore we do not check the
# exit code.
if test -s "$segv_output"; then
# The program caught a signal. 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.
Update. 1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com> * shlib-versions: Remove definition for libSegFault. * memory.texi: Comment out the relocating allocator description. * manual/signal.texi: Remove reference to relocating allocator. * manual/top-menu.texi: Regenerated. * posix/fnmatch.c: Implement [: :] and change to recognize ^ as negation only when not _POSIXLY_CORRECT. * sysdeps/generic/glob.c: Add several optimizations. * posix/glob.h: Undefine __PMT to prevent warnings. Reported by Roland McGrath. * posix/regex.c: Define namespace macros only for _LIBC. * sysdeps/arm/dl-machine.h: Fix typo. * sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack, sigpending, sigqueue, and sigtimedwait. * sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file. * timezone/leapseconds: Update from tzdata1998f. 1998-07-18 Mark Kettenis <kettenis@phys.uva.nl> * stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked. * stdio/Versions [GLIBC_2.1]: Add fputs_unlocked. * libio/stdio.h: Fix typo. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the magic memobj port arg parsing stuff. Fix it someday when we are ready to really use it. (_dl_sysdep_output): New function, modified from _dl_sysdep_error. (_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * stdio/fputs.c: Add fputs_unlocked as weak alias for fputs. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as a weak alias. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/generic/sigsuspend.c: Likewise. 1998-07-19 Roland McGrath <roland@baalperazim.frob.com> * sysdeps/mach/hurd/i386/sigcontextinfo.h: New file. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (map-file): Don't use $(wildcard) to find the generated version script, instead look in $(version-maps). ($(common-objpfx)libc.so): Only depend on libc.map if versioning is used. * extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script if versioning is used. Don't use $(wildcard) to find the generated version script, instead look in $(verson-maps). 1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove unused function handle. * sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC. * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. * debug/catchsegv.sh: Fix argument processing, quoting and various typos. Put the crash info always in the current directory. Find program in $PATH if it contains no directory component. * Makerules (install-lib.so-versioned, install-lib.so-unversioned): New variables. (install-lib-nosubdir): Depend on unversioned libs in slibdir, not libdir. 1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Make-dist (+tsrcs): Remove references to %-map variables and *.map files. Add Versions in subdirs. * Makerules (distinfo-vars): Don't write out %-map variables. 1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com> * inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR. Include <paths.h> instead. * sysdeps/generic/paths.h: Define _PATH_RWHODIR. * sysdeps/unix/sysv/linux/paths.h: Likewise. Reported by Dale Scheetz <dwarf@polaris.net>. 1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com> * catgets/open_catalog.c: Strictly check whether catalog file is larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
1998-07-21 01:25:48 +08:00
case $prog in
*/*) ;;
*)
old_IFS=$IFS
IFS=:
for p in $PATH; do
test -n "$p" || p=.
if test -f "$p/$prog"; then
prog=$p/$prog
break
fi
done
IFS=$old_IFS
;;
esac
sed '/Backtrace/q' "$segv_output"
sed '1,/Backtrace/d' "$segv_output" |
(while read line; do
line=`echo $line | sed "s@^$prog\\(\\[.*\\)@\1@"`
case "$line" in
\[*) addr=`echo "$line" | sed 's/^\[\(.*\)\]$/\1/'`
complete=`addr2line -f -e "$prog" $addr 2>/dev/null`
if test $? -eq 0; then
echo "`echo "$complete"|sed 'N;s/\(.*\)\n\(.*\)/\2(\1)/;'`$line"
else
echo "$line"
fi
;;
2010-03-16 02:50:59 +08:00
*) echo "$line"
;;
esac
done)
fi
rm -f "$segv_output"
exit $exval