Browse Source
When reading an exec with a .debug_line section containing a vendor-specific extended opcode, we get: ... $ gdb -batch -iex "set complaints 10" dw2-vendor-extended-opcode During symbol reading: mangled .debug_line section ... and reading of the .debug_line section is abandoned. The vendor-specific extended opcode should be ignored, as specified in the DWARF standard (7.1 Vendor Extensibility). [ FWIW, vendor-specific standard opcodes are already ignored. ] Fix this by ignoring all vendor-specific extended opcodes. Build and tested on x86_64-linux. gdb/ChangeLog: 2020-08-03 Tom de Vries <tdevries@suse.de> PR symtab/26333 * dwarf2/read.c (dwarf_decode_lines_1): Ignore DW_LNE_lo_user/DW_LNE_hi_user range. gdb/testsuite/ChangeLog: 2020-08-03 Tom de Vries <tdevries@suse.de> PR symtab/26333 * lib/dwarf.exp (DW_LNE_user): New proc. * gdb.dwarf2/dw2-vendor-extended-opcode.c: New test. * gdb.dwarf2/dw2-vendor-extended-opcode.exp: New file.gdb-10-branch
6 changed files with 149 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||
/* This testcase is part of GDB, the GNU debugger.
|
|||
|
|||
Copyright 2020 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/>. */
|
|||
|
|||
void |
|||
foo (void) |
|||
{ |
|||
|
|||
} |
|||
|
|||
int |
|||
main() |
|||
{ |
|||
asm ("main_label: .globl main_label"); |
|||
foo (); |
|||
|
|||
asm ("main_label_2: .globl main_label_2"); |
|||
return 0; |
|||
} |
|||
@ -0,0 +1,81 @@ |
|||
# Copyright 2020 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/>. |
|||
load_lib dwarf.exp |
|||
|
|||
# This test can only be run on targets which support DWARF-2 and use gas. |
|||
if {![dwarf2_support]} { |
|||
verbose "Skipping dw2-vendor-extended-opcode test." |
|||
return 0 |
|||
} |
|||
|
|||
# The .c files use __attribute__. |
|||
if [get_compiler_info] { |
|||
return -1 |
|||
} |
|||
if !$gcc_compiled { |
|||
verbose "Skipping dw2-vendor-extended-opcode test." |
|||
return 0 |
|||
} |
|||
|
|||
standard_testfile dw2-vendor-extended-opcode.c dw2-vendor-extended-opcode-dw.S |
|||
|
|||
set asm_file [standard_output_file $srcfile2] |
|||
Dwarf::assemble $asm_file { |
|||
declare_labels Llines |
|||
global srcdir subdir srcfile |
|||
|
|||
set DW_LNE_lo_usr 0x80 |
|||
set DW_LNE_hi_usr 0xff |
|||
|
|||
cu {} { |
|||
compile_unit { |
|||
{language @DW_LANG_C} |
|||
{name dw2-vendor-extended-opcode.c} |
|||
{stmt_list $Llines DW_FORM_sec_offset} |
|||
} { |
|||
subprogram { |
|||
{external 1 flag} |
|||
{MACRO_AT_func {main}} |
|||
} |
|||
} |
|||
} |
|||
|
|||
lines {version 2} Llines { |
|||
include_dir "${srcdir}/${subdir}" |
|||
file_name "$srcfile" 1 |
|||
|
|||
program { |
|||
{DW_LNE_set_address main_label} |
|||
{line 27} |
|||
{DW_LNE_user 1 $DW_LNE_lo_usr} |
|||
{DW_LNE_user 2 $DW_LNE_hi_usr} |
|||
{DW_LNS_copy} |
|||
|
|||
{DW_LNE_set_address main_label_2} |
|||
{DW_LNE_end_sequence} |
|||
} |
|||
} |
|||
} |
|||
|
|||
if { [prepare_for_testing "failed to prepare" ${testfile} \ |
|||
[list $srcfile $asm_file] {nodebug}] } { |
|||
return -1 |
|||
} |
|||
|
|||
if ![runto_main] { |
|||
return -1 |
|||
} |
|||
|
|||
gdb_breakpoint "$srcfile:27" message |
|||
Loading…
Reference in new issue