diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-10-17 20:17:45 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-10-17 20:17:45 +0000 |
commit | 94277a38987e6809e7a80208ebb1f77cc2c17d46 (patch) | |
tree | 5c697071b847efa42f79a78f20bf087e27a48121 /gdb/testsuite/lib | |
parent | 6bacc34ddf228e7ec5021e096b3deca26d213b22 (diff) | |
download | gdb-94277a38987e6809e7a80208ebb1f77cc2c17d46.zip gdb-94277a38987e6809e7a80208ebb1f77cc2c17d46.tar.gz gdb-94277a38987e6809e7a80208ebb1f77cc2c17d46.tar.bz2 |
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')
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 0d8a430..86c7e1d 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. |