diff options
author | Jerome Guitton <guitton@adacore.com> | 2010-07-26 09:38:50 +0000 |
---|---|---|
committer | Jerome Guitton <guitton@adacore.com> | 2010-07-26 09:38:50 +0000 |
commit | a04ba9855e937fe9ffb6b928f889bbae4587dbf7 (patch) | |
tree | d1d4fbc8abd85435902743926be4e32f0dc4f50b | |
parent | caac4577e57452617544ff0d881ad64258270671 (diff) | |
download | gdb-a04ba9855e937fe9ffb6b928f889bbae4587dbf7.zip gdb-a04ba9855e937fe9ffb6b928f889bbae4587dbf7.tar.gz gdb-a04ba9855e937fe9ffb6b928f889bbae4587dbf7.tar.bz2 |
gdb/testsuite/
* gdb.base/code_elim.exp: New file.
* gdb.base/code_elim1.c: New file.
* gdb.base/code_elim2.c: New file.
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/code_elim.exp | 173 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/code_elim1.c | 37 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/code_elim2.c | 35 |
4 files changed, 251 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0543f80..090c6c2 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-07-26 Jerome Guitton <guitton@adacore.com> + + * gdb.base/code_elim.exp: New file. + * gdb.base/code_elim1.c: New file. + * gdb.base/code_elim2.c: New file. + 2010-07-21 Pedro Alves <pedro@codesourcery.com> PR symtab/11827 diff --git a/gdb/testsuite/gdb.base/code_elim.exp b/gdb/testsuite/gdb.base/code_elim.exp new file mode 100644 index 0000000..cc625e0 --- /dev/null +++ b/gdb/testsuite/gdb.base/code_elim.exp @@ -0,0 +1,173 @@ +# Copyright 2002, 2003, 2005, 2007, 2008, 2009, 2010 +# 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 <http://www.gnu.org/licenses/>. */ + +# code_elim.exp -- tests that GDB can handle executables where some data/code +# has been eliminated by the linker. + +if $tracelevel then { + strace $tracelevel +} + +set testfile1 code_elim1 +set testfile2 code_elim2 +set srcfile1 ${testfile1}.c +set srcfile2 ${testfile2}.c +set binfile1 ${objdir}/${subdir}/${testfile1} +set binfile2 ${objdir}/${subdir}/${testfile2} +set opts [list debug] +lappend opts "additional_flags=-ffunction-sections" +lappend opts "additional_flags=-fdata-sections" +lappend opts "additional_flags=-Wl,-gc-sections" +lappend opts "additional_flags=-Wl,-e,main" + +remote_exec build "rm -f ${binfile1}" +remote_exec build "rm -f ${binfile2}" + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable $opts] != "" } { + untested code_elim.exp + return -1 +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable $opts] != "" } { + untested code_elim.exp + return -1 +} + +proc get_var_address { var } { + global gdb_prompt hex + + # Match output like: + # $1 = (int *) 0x0 + # $5 = (int (*)()) 0 + # $6 = (int (*)()) 0x24 <function_bar> + + gdb_test_multiple "print &${var}" "get address of ${var}" { + -re "\\\$\[0-9\]+ = \\(.*\\) (0|$hex)( <${var}>)?\[\r\n\]+${gdb_prompt} $" { + pass "get address of ${var}" + if { $expect_out(1,string) == "0" } { + return "0x0" + } else { + return $expect_out(1,string) + } + } + } + return "" +} + +proc not_null_var_address { var } { + + # Same as get_var_address, expect that it reports a failure if a null + # address is returned by gdb. + + set address [get_var_address $var] + regexp "0x\[0-9a-fA-F\]+" $address address + if { "$address" == "0x0" } { + fail "$var has null address" + } +} + +proc test_eliminated_var { var } { + global gdb_prompt hex + + # Match output 'No symbol "${var}" in current context' + + gdb_test_multiple "print &${var}" "test eliminated var ${var}" { + -re "No symbol \"${var}\" in current context\\.\[\r\n\]+${gdb_prompt} $" { + pass "test eliminated var ${var}" + } + -re "\\\$\[0-9\]+ = \\(.*\\) (0|$hex)( <${var}>)?\[\r\n\]+${gdb_prompt} $" { + fail "test eliminated var ${var}" + } + } +} + +# Check that the code and data eliminated in binfile1 are not included +# into partial symtab... and that non-eliminated symbols are still there. + +gdb_exit +gdb_start + +gdb_test "add-symbol-file ${binfile1} 0x100000" \ + "Reading symbols from .*${testfile1}\\.\\.\\.done\\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)" \ + "add-symbol-file ${testfile1} 0x100000" \ + "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ + "y" + +test_eliminated_var my_global_symbol +test_eliminated_var my_static_symbol +test_eliminated_var my_global_func +not_null_var_address main + +# Same thing for symtabs + +gdb_exit +global GDBFLAGS +set saved_gdbflags $GDBFLAGS +set GDBFLAGS "$GDBFLAGS --readnow $binfile1" +gdb_start +set GDBFLAGS $saved_gdbflags + +test_eliminated_var my_global_symbol +test_eliminated_var my_static_symbol +test_eliminated_var my_global_func +not_null_var_address main + +# binfile2 contains the symbols that have been eliminated in binfile1. Check +# the eliminated symbols does not hide these valid ones. + +gdb_exit +gdb_start + +gdb_test "add-symbol-file ${binfile1} 0x100000" \ + "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ + "add-symbol-file ${testfile1} 0x100000" \ + "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ + "y" + +gdb_test "add-symbol-file ${binfile2} 0x200000" \ + "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ + "add-symbol-file ${testfile2} 0x200000" \ + "add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \ + "y" + +not_null_var_address my_global_symbol +not_null_var_address my_static_symbol +not_null_var_address my_global_func +not_null_var_address main + +# Same thing, but loading binfile2 before binfile1. + +gdb_exit +gdb_start + +gdb_test "add-symbol-file ${binfile2} 0x200000" \ + "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ + "add-symbol-file ${testfile2} 0x200000" \ + "add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \ + "y" + +gdb_test "add-symbol-file ${binfile1} 0x100000" \ + "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ + "add-symbol-file ${testfile1} 0x100000" \ + "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ + "y" + +not_null_var_address my_global_symbol +not_null_var_address my_static_symbol +not_null_var_address my_global_func +not_null_var_address main + + diff --git a/gdb/testsuite/gdb.base/code_elim1.c b/gdb/testsuite/gdb.base/code_elim1.c new file mode 100644 index 0000000..6aef483 --- /dev/null +++ b/gdb/testsuite/gdb.base/code_elim1.c @@ -0,0 +1,37 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2010 + 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 <http://www.gnu.org/licenses/>. */ + +int my_global_symbol = 42; + +static int my_static_symbol; + +int +main () +{ + int v_in_main; + + return v_in_main; +} + +int +my_global_func () +{ + int v_in_global_func; + + return v_in_global_func; +} diff --git a/gdb/testsuite/gdb.base/code_elim2.c b/gdb/testsuite/gdb.base/code_elim2.c new file mode 100644 index 0000000..61a4556 --- /dev/null +++ b/gdb/testsuite/gdb.base/code_elim2.c @@ -0,0 +1,35 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2010 + 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 <http://www.gnu.org/licenses/>. */ + +int my_global_symbol = 42; + +static int my_static_symbol; + +int +main () +{ + return my_global_func (); +} + +int +my_global_func () +{ + my_static_symbol = my_global_symbol; + my_global_symbol = my_static_symbol + my_global_symbol; + return my_global_symbol; +} |