summaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib/gdb.exp
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2006-10-17 20:17:45 +0000
committerDaniel Jacobowitz <dan@debian.org>2006-10-17 20:17:45 +0000
commit137b258452b9c30be8956be3e2467a9b1d43bbd1 (patch)
tree5bbe475f631f37e9a042b829add7173ee5a235e6 /gdb/testsuite/lib/gdb.exp
parentdeb47d7d708e58efbbaa0214c93fc11691e78e4f (diff)
downloadgdb-137b258452b9c30be8956be3e2467a9b1d43bbd1.tar.gz
gdb/
* Makefile.in (symtab.o): Update. * symtab.h (matching_bfd_section): New prototype. * symtab.c (matching_bfd_section): New. (find_pc_sect_psymbol, find_pc_sect_symtab): Use it. * minsyms.c (lookup_minimal_symbol_by_pc_section): Likewise. * printcmd.c (sym_info): Ignore separate debug objfiles. gdb/testsuite/ * gdb.base/sepdebug.exp: Remove debug format test. * lib/gdb.exp (gdb_gnu_strip_debug): Perform debug format test. Handle no-symtab. * gdb.base/sepsymtab.c, gdb.base/sepsymtab.exp: New.
Diffstat (limited to 'gdb/testsuite/lib/gdb.exp')
-rw-r--r--gdb/testsuite/lib/gdb.exp57
1 files changed, 55 insertions, 2 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 0d8a430192e..86c7e1de062 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -2276,7 +2276,7 @@ proc gdb_skip_bogus_test { msg } {
# Note: the procedure gdb_gnu_strip_debug will produce an executable called
# ${binfile}.dbglnk, which is just like the executable ($binfile) but without
# the debuginfo. Instead $binfile has a .gnu_debuglink section which contains
-# the name of a idebuginfo only file. This file will be stored in the
+# the name of a debuginfo only file. This file will be stored in the
# gdb.base/.debug subdirectory.
# Functions for separate debug info testing
@@ -2307,8 +2307,45 @@ proc separate_debug_filename { exec } {
return $debug_file
}
+# Create stripped files for DEST, replacing it. If ARGS is passed, it is a
+# list of optional flags. The only currently supported flag is no-main,
+# which removes the symbol entry for main from the separate debug file.
-proc gdb_gnu_strip_debug { dest } {
+proc gdb_gnu_strip_debug { dest args } {
+
+ # First, make sure that we can do this. This is nasty. We need to
+ # check for the stabs debug format. To do this we must run gdb on
+ # the unstripped executable, list 'main' (as to have a default
+ # source file), use get_debug_format (which does 'info source')
+ # and then see if the debug info is stabs. If so, we bail out. We
+ # cannot do this any other way because get_debug_format finds out
+ # the debug format using gdb itself, and in case of stabs we get
+ # an error loading the program if it is already stripped. An
+ # alternative would be to find out the debug info from the flags
+ # passed to dejagnu when the test is run.
+
+ gdb_exit
+ gdb_start
+ gdb_load ${dest}
+ gdb_test "list main" "" ""
+ get_debug_format
+ if { [test_debug_format "stabs"] } then {
+ # The separate debug info feature doesn't work well in
+ # binutils with stabs. It produces a corrupted debug info
+ # only file, and gdb chokes on it. It is almost impossible to
+ # capture the failing message out of gdb, because it happens
+ # inside gdb_load. At that point any error message is
+ # intercepted by dejagnu itself, and, because of the error
+ # threshold, any faulty test result is changed into an
+ # UNRESOLVED. (see dejagnu/lib/framework.exp)
+ unsupported "no separate debug info handling with stabs"
+ return -1
+ } elseif { [test_debug_format "unknown"] } then {
+ # gdb doesn't know what the debug format is. We are out of luck here.
+ unsupported "unknown debugging format"
+ return -1
+ }
+ gdb_exit
set debug_file [separate_debug_filename $dest]
set strip_to_file_program strip
@@ -2342,6 +2379,22 @@ proc gdb_gnu_strip_debug { dest } {
return 1
}
+ # If no-main is passed, strip the symbol for main from the separate
+ # file. This is to simulate the behavior of elfutils's eu-strip, which
+ # leaves the symtab in the original file only. There's no way to get
+ # objcopy or strip to remove the symbol table without also removing the
+ # debugging sections, so this is as close as we can get.
+ if { [llength $args] == 1 && [lindex $args 0] == "no-main" } {
+ set result [catch "exec $objcopy_program -N main ${debug_file} ${debug_file}-tmp" output]
+ verbose "result is $result"
+ verbose "output is $output"
+ if {$result == 1} {
+ return 1
+ }
+ file delete "${debug_file}"
+ file rename "${debug_file}-tmp" "${debug_file}"
+ }
+
# Link the two previous output files together, adding the .gnu_debuglink
# section to the stripped_file, containing a pointer to the debug_file,
# save the new file in dest.