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 | |
parent | 6bacc34ddf228e7ec5021e096b3deca26d213b22 (diff) | |
download | fsf-binutils-gdb-94277a38987e6809e7a80208ebb1f77cc2c17d46.zip fsf-binutils-gdb-94277a38987e6809e7a80208ebb1f77cc2c17d46.tar.gz fsf-binutils-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')
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/sepdebug.exp | 33 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/sepsymtab.c | 23 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/sepsymtab.exp | 53 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 57 |
5 files changed, 138 insertions, 35 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 440fde9..7396d50 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2006-10-17 Daniel Jacobowitz <dan@codesourcery.com> + * 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. + +2006-10-17 Daniel Jacobowitz <dan@codesourcery.com> + * gdb.threads/manythreads.c (thread_function, main): Don't cast int to pointer or pointer to int. * gdb.threads/manythreads.exp: Don't expect the string "LWP". diff --git a/gdb/testsuite/gdb.base/sepdebug.exp b/gdb/testsuite/gdb.base/sepdebug.exp index 5bc00c5..4593549 100644 --- a/gdb/testsuite/gdb.base/sepdebug.exp +++ b/gdb/testsuite/gdb.base/sepdebug.exp @@ -47,39 +47,6 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb return -1 } -# FIXME: 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_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} -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 - # Note: the procedure gdb_gnu_strip_debug will produce an executable called # ${binfile}, which is just like the executable ($binfile) but without # the debuginfo. Instead $binfile has a .gnudebuglink section which contains diff --git a/gdb/testsuite/gdb.base/sepsymtab.c b/gdb/testsuite/gdb.base/sepsymtab.c new file mode 100644 index 0000000..1c53958 --- /dev/null +++ b/gdb/testsuite/gdb.base/sepsymtab.c @@ -0,0 +1,23 @@ +/* Copyright 2006 + 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +int +main (int argc, char **argv, char **envp) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/sepsymtab.exp b/gdb/testsuite/gdb.base/sepsymtab.exp new file mode 100644 index 0000000..b386f3c --- /dev/null +++ b/gdb/testsuite/gdb.base/sepsymtab.exp @@ -0,0 +1,53 @@ +# Copyright 2006 +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +if $tracelevel then { + strace $tracelevel +} + +# +# test running programs +# + +set testfile "sepsymtab" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ + executable {debug}] != "" } { + untested sepsymtab.exp + return -1 +} + +if [gdb_gnu_strip_debug $binfile no-main] { + # check that you have a recent version of strip and objcopy installed + unsupported "cannot produce separate debug info files" + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +set command "info sym main" +set command_regex [string_to_regexp $command] +gdb_test_multiple "$command" "$command" { + -re "^${command_regex}\[\r\n\]+main in section \[^\r\n\]+\[\r\n\]+$gdb_prompt \$" { + pass "$command" + } +} 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. |