diff options
author | Nick Clifton <nickc@redhat.com> | 2020-11-12 11:43:20 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-11-12 11:43:20 +0000 |
commit | bcb78b47614ed252226da1a688558a17d8a99ce8 (patch) | |
tree | 18d3480d3cb634ae6c431ef27e1b338ccecfbe84 | |
parent | ab33b15255460ac45a001c8ebf69ef73f6f1fba4 (diff) | |
download | gdb-bcb78b47614ed252226da1a688558a17d8a99ce8.zip gdb-bcb78b47614ed252226da1a688558a17d8a99ce8.tar.gz gdb-bcb78b47614ed252226da1a688558a17d8a99ce8.tar.bz2 |
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.
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/dwarf2dbg.c | 18 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/dwarf2-20.d | 18 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/dwarf2-20.s | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/warn-2.s | 15 |
6 files changed, 54 insertions, 17 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 854e583..36258e8 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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. diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 4e03c63..25ebc94 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -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 diff --git a/gas/testsuite/gas/elf/dwarf2-20.d b/gas/testsuite/gas/elf/dwarf2-20.d new file mode 100644 index 0000000..363510a --- /dev/null +++ b/gas/testsuite/gas/elf/dwarf2-20.d @@ -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 diff --git a/gas/testsuite/gas/elf/dwarf2-20.s b/gas/testsuite/gas/elf/dwarf2-20.s new file mode 100644 index 0000000..0ad0cc3 --- /dev/null +++ b/gas/testsuite/gas/elf/dwarf2-20.s @@ -0,0 +1,10 @@ + .section .alloc0,"a" + .nop + .section .alloc1,"a" + .nop + .section .nonalloc,"" + .nop + .section .allocexec,"ax" + .nop + .section .nonallocexec,"x" + .nop diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 9d75154..edacf27 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -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 diff --git a/gas/testsuite/gas/elf/warn-2.s b/gas/testsuite/gas/elf/warn-2.s index 79d6205..8a128a1 100644 --- a/gas/testsuite/gas/elf/warn-2.s +++ b/gas/testsuite/gas/elf/warn-2.s @@ -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 } |