aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-11-12 11:43:20 +0000
committerNick Clifton <nickc@redhat.com>2020-11-12 11:43:20 +0000
commitbcb78b47614ed252226da1a688558a17d8a99ce8 (patch)
tree18d3480d3cb634ae6c431ef27e1b338ccecfbe84
parentab33b15255460ac45a001c8ebf69ef73f6f1fba4 (diff)
downloadgdb-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/ChangeLog9
-rw-r--r--gas/dwarf2dbg.c18
-rw-r--r--gas/testsuite/gas/elf/dwarf2-20.d18
-rw-r--r--gas/testsuite/gas/elf/dwarf2-20.s10
-rw-r--r--gas/testsuite/gas/elf/elf.exp1
-rw-r--r--gas/testsuite/gas/elf/warn-2.s15
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 }