Stop Gas from generating line info or address ranges for sections that do not contain code or are not loaded.
PR 26850 * dwarf2dbg.c (dwarf2_gen_line_info_1): Do not record lines in sections that are not executable or not loadable. (out_debug_line): Move warning message into dwarf2_gen_line_info_1. * testsuite/gas/elf/dwarf2-20.s: New test. * testsuite/gas/elf/dwarf2-20.d: New test driver. * testsuite/gas/elf/elf.exp: Run the new test. * testsuite/gas/elf/warn-2.s: Use the .nop directive.
This commit is contained in:
parent
ab33b15255
commit
bcb78b4761
@ -1,3 +1,12 @@
|
||||
2020-11-12 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 26850
|
||||
* dwarf2dbg.c
|
||||
* testsuite/gas/elf/dwarf2-20.s: New test.
|
||||
* testsuite/gas/elf/dwarf2-20.d: New test driver.
|
||||
* testsuite/gas/elf/elf.exp: Run the new test.
|
||||
* testsuite/gas/elf/warn-2.s
|
||||
|
||||
2020-11-11 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
|
||||
|
||||
* testsuite/gas/aarch64/ls64.s: Update test.
|
||||
|
||||
@ -504,6 +504,18 @@ dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
|
||||
{
|
||||
struct line_subseg *lss;
|
||||
struct line_entry *e;
|
||||
flagword need_flags = SEC_ALLOC | SEC_LOAD | SEC_CODE;
|
||||
|
||||
/* PR 26850: Do not record LOCs in non-executable, non-allocated,
|
||||
or non-loaded sections. */
|
||||
if ((now_seg->flags & need_flags) != need_flags)
|
||||
{
|
||||
if (! SEG_NORMAL (now_seg))
|
||||
/* FIXME: Add code to suppress multiple warnings ? */
|
||||
as_warn ("dwarf line number information for %s ignored",
|
||||
segment_name (now_seg));
|
||||
return;
|
||||
}
|
||||
|
||||
e = XNEW (struct line_entry);
|
||||
e->next = NULL;
|
||||
@ -2341,11 +2353,10 @@ out_debug_line (segT line_seg)
|
||||
|
||||
/* For each section, emit a statement program. */
|
||||
for (s = all_segs; s; s = s->next)
|
||||
/* Paranoia - this check should have already have
|
||||
been handled in dwarf2_gen_line_info_1(). */
|
||||
if (SEG_NORMAL (s->seg))
|
||||
process_entries (s->seg, s->head->head);
|
||||
else
|
||||
as_warn ("dwarf line number information for %s ignored",
|
||||
segment_name (s->seg));
|
||||
|
||||
if (flag_dwarf_sections)
|
||||
/* We have to switch to the special .debug_line_end section
|
||||
@ -2740,7 +2751,6 @@ dwarf2_init (void)
|
||||
flag_dwarf_cie_version = 1;
|
||||
}
|
||||
|
||||
|
||||
/* Finish the dwarf2 debug sections. We emit .debug.line if there
|
||||
were any .file/.loc directives, or --gdwarf2 was given, and if the
|
||||
file has a non-empty .debug_info section and an empty .debug_line
|
||||
|
||||
18
gas/testsuite/gas/elf/dwarf2-20.d
Normal file
18
gas/testsuite/gas/elf/dwarf2-20.d
Normal file
@ -0,0 +1,18 @@
|
||||
#as: -gdwarf-3
|
||||
#readelf: -wr
|
||||
#name: DWARF2_20: debug ranges ignore non-code sections
|
||||
# The mn10200 target has a pointer size of 3, but it does not use segment selectors. This confuses DWARF and readelf will complain.
|
||||
#xfail: mn102*-*
|
||||
|
||||
Contents of the .debug_aranges section:
|
||||
|
||||
[ ]+Length:[ ]+(16|28|44)
|
||||
[ ]+Version:.*
|
||||
[ ]+Offset into .debug_info:[ ]+0x0
|
||||
[ ]+Pointer Size:[ ]+(2|4|8)
|
||||
[ ]+Segment Size:[ ]+0
|
||||
|
||||
[ ]+Address[ ]+Length
|
||||
[ ]+0+000 0+00.
|
||||
[ ]+0+000 0+000
|
||||
#pass
|
||||
10
gas/testsuite/gas/elf/dwarf2-20.s
Normal file
10
gas/testsuite/gas/elf/dwarf2-20.s
Normal file
@ -0,0 +1,10 @@
|
||||
.section .alloc0,"a"
|
||||
.nop
|
||||
.section .alloc1,"a"
|
||||
.nop
|
||||
.section .nonalloc,""
|
||||
.nop
|
||||
.section .allocexec,"ax"
|
||||
.nop
|
||||
.section .nonallocexec,"x"
|
||||
.nop
|
||||
@ -282,6 +282,7 @@ if { [is_elf_format] } then {
|
||||
run_dump_test "dwarf2-17" $dump_opts
|
||||
run_dump_test "dwarf2-18" $dump_opts
|
||||
run_dump_test "dwarf2-19" $dump_opts
|
||||
run_dump_test "dwarf2-20" $dump_opts
|
||||
run_dump_test "dwarf-5-file0" $dump_opts
|
||||
run_dump_test "dwarf-4-cu" $dump_opts
|
||||
run_dump_test "dwarf-5-cu" $dump_opts
|
||||
|
||||
@ -1,18 +1,7 @@
|
||||
;# { dg-do assemble }
|
||||
;# { dg-options "--gdwarf2 --defsym nop_type=0" }
|
||||
;# { dg-options "--gdwarf2 --defsym nop_type=1" { target ia64-*-* } }
|
||||
;# { dg-options "--gdwarf2 --defsym nop_type=2" { target or1k*-*-* } }
|
||||
;# { dg-options "--gdwarf2" }
|
||||
|
||||
.offset 40
|
||||
|
||||
.ifeq nop_type - 1
|
||||
nop 0
|
||||
.else
|
||||
.ifeq nop_type - 2
|
||||
l.nop 0
|
||||
.else
|
||||
nop
|
||||
.endif
|
||||
.endif
|
||||
.nop
|
||||
|
||||
;# { dg-warning "Warning: dwarf line number information for .* ignored" "" { xfail v850*-*-* } 0 }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user