binutils-gdb/gdb/testsuite/gdb.base/infoline-reloc-main-from-ze...

52 lines
1.6 KiB
Plaintext
Raw Normal View History

Fix lost line info for symbol at addr zero This patch fixes a unique condition where GDB fails to provide line information of symbol at address zero when code is compiled with text address zero but loaded at an offset > 0. For example lets compile following code snippet: int main() { return 0; } gcc -O0 -g3 -nostdlib -emain -Wl,-Ttext=0x00 -o file.out file.c Start gdb and run: add-symbol-file file.out 0xffff0000 info line main GDB will return error saying no line info is available for the symbol. This is a direct consequence of the fix for PR 12528 where GDB tries to ignore line table for a function which has been garbage collected by the linker. As the garbage collected symbols are sent to address zero GDB assumes a symbol actually placed at address zero as garbage collected. This was fixed with an additional check address < lowpc. But when symbol is loaded at an offset lowpc becomes lowpc + offset while no offset is added to address rather final symbol address is calculated based on baseaddr and address added together. So in case where symbols are loaded at an offset the condition address < lowpc will always return true. This patch fixes this by comparing address against a non offset lowpc. This patch also adds a GDB test case to replicate this behavior. gdb: 2018-06-27 Omair Javaid <omair.javaid@linaro.org> PR gdb/21695 * dwarf2read.c (lnp_state_machine::check_line_address): Update declaration. (dwarf_decode_lines_1): Adjust. gdb/testsuite: 2018-06-27 Omair Javaid <omair.javaid@linaro.org> PR gdb/21695 * gdb.base/infoline-reloc-main-from-zero.exp: New test. * gdb.base/infoline-reloc-main-from-zero.c: New file.
2018-05-15 16:04:21 +02:00
# Copyright 2018 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/>.
# This file is part of the gdb testsuite
#
# PR gdb/21695
# This tests if gdb can display line information of relocated symbols in the
# case where executable text section was at address zero before relocation.
#
standard_testfile .c
if [get_compiler_info] {
return -1
}
# Build executable with stripped startup code and text section starting at zero
set opts {debug "additional_flags=-nostdlib -emain -Wl,-Ttext=0x00"}
if {[build_executable $testfile.exp $testfile $srcfile $opts] == -1} {
untested "failed to compile"
return -1
}
clean_restart
# Load symbols at an offset 0xffff0000 using add-symbol-file
gdb_test "add-symbol-file $binfile 0xffff0000" \
"Reading symbols from .*" \
"add-symbol-file" \
"add symbol table from file \".*\" at.*\\(y or n\\) " "y"
# Check if we are able to read offset adjusted line information of main
gdb_test "info line main" \
"Line.*starts at address 0xffff0000.*and ends at.*"