# Copyright 2007-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . if [target_info exists gdb,nosignals] { verbose "Skipping relativedebug.exp because of nosignals." continue } standard_testfile .c if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { untested "Couldn't compile test program" return -1 } # Get things started. clean_restart ${binfile} runto_main set test "info sharedlibrary" gdb_test_multiple $test $test { -re ".*\(\\*\)\[^\r\n\]*/libc\.so.*$gdb_prompt $" { # Skip the test below if libc doesn't have debug info. unsupported "libc doesn't have debug info" return -1 } -re ".*$gdb_prompt $" { } } # pause () -> SIGALRM -> handler () -> abort () gdb_test "continue" "Program received signal SIGABRT.*" # Backtracing through pause broke if glibc has been prelinked, # because the separate debug files in /usr/lib/debug had different # base addresses. # incorrect (#6): # (gdb) bt # #0 0x00325402 in __kernel_vsyscall () # #1 0x00718f20 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 # #2 0x0071a801 in *__GI_abort () at abort.c:88 # #3 0x0804841f in handler (signo=14) at ./gdb.base/relativedebug.c:27 # #4 # #5 0x00325402 in __kernel_vsyscall () # #6 0x0077ebc6 in ?? () from /lib/i686/nosegneg/libc.so.6 # #7 0x08048455 in main () at ./gdb.base/relativedebug.c:34 # (gdb) # correct (#6): # (gdb) bt # #0 0x00b33402 in __kernel_vsyscall () # #1 0x00718f20 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 # #2 0x0071a801 in *__GI_abort () at abort.c:88 # #3 0x0804841f in handler (signo=14) at ./gdb.base/relativedebug.c:27 # #4 # #5 0x00b33402 in __kernel_vsyscall () # #6 0x0077ebc6 in __pause_nocancel () from /lib/i686/nosegneg/libc.so.6 # #7 0x08048455 in main () at ./gdb.base/relativedebug.c:34 # (gdb) gdb_test "bt" \ ".*\[^a-zA-Z\]pause\[^a-zA-Z\].*" \ "pause found in backtrace"