aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-10-17 20:17:45 +0000
committerDaniel Jacobowitz <drow@false.org>2006-10-17 20:17:45 +0000
commit94277a38987e6809e7a80208ebb1f77cc2c17d46 (patch)
tree5c697071b847efa42f79a78f20bf087e27a48121 /gdb/testsuite
parent6bacc34ddf228e7ec5021e096b3deca26d213b22 (diff)
downloadgdb-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')
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.base/sepdebug.exp33
-rw-r--r--gdb/testsuite/gdb.base/sepsymtab.c23
-rw-r--r--gdb/testsuite/gdb.base/sepsymtab.exp53
-rw-r--r--gdb/testsuite/lib/gdb.exp57
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.