mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
157 lines
4.9 KiB
Plaintext
157 lines
4.9 KiB
Plaintext
# Copyright 2002-2022 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.
|
|
|
|
set testfile1 code_elim1
|
|
set testfile2 code_elim2
|
|
set srcfile1 ${testfile1}.c
|
|
set srcfile2 ${testfile2}.c
|
|
set binfile1 [standard_output_file ${testfile1}]
|
|
set binfile2 [standard_output_file ${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"
|
|
|
|
# Place variables in .data instead of .sdata.
|
|
if {[istarget "riscv*-*-*"]} {
|
|
lappend opts "additional_flags=-msmall-data-limit=0"
|
|
}
|
|
|
|
remote_exec build "rm -f ${binfile1}"
|
|
remote_exec build "rm -f ${binfile2}"
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable $opts] != "" } {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable $opts] != "" } {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
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 "symbol-file ${binfile1}" \
|
|
"Reading symbols from .*${testfile1}\\.\\.\\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)" \
|
|
"symbol-file ${testfile1}"
|
|
|
|
with_test_prefix "single psymtabs" {
|
|
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
|
|
|
|
with_test_prefix "single symtabs" {
|
|
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
|
|
|
|
with_test_prefix "order1" {
|
|
gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \
|
|
"Reading symbols from .*${testfile1}\\.\\.\\." \
|
|
"add-symbol-file ${testfile1} 0x100000" \
|
|
"add symbol table from file \".*${testfile1}\" at.*\\(y or n\\) " \
|
|
"y"
|
|
|
|
gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \
|
|
"Reading symbols from .*${testfile2}\\.\\.\\." \
|
|
"add-symbol-file ${testfile2} 0x200000" \
|
|
"add symbol table from file \".*${testfile2}\" at.*\\(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
|
|
|
|
with_test_prefix "order2" {
|
|
gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \
|
|
"Reading symbols from .*${testfile2}\\.\\.\\." \
|
|
"add-symbol-file ${testfile2} 0x200000" \
|
|
"add symbol table from file \".*${testfile2}\" at.*\\(y or n\\) " \
|
|
"y"
|
|
|
|
gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \
|
|
"Reading symbols from .*${testfile1}\\.\\.\\." \
|
|
"add-symbol-file ${testfile1} 0x100000" \
|
|
"add symbol table from file \".*${testfile1}\" at.*\\(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
|
|
}
|