aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/dwarf2dbg.c18
-rw-r--r--gas/testsuite/gas/elf/dwarf-4-cu.d11
-rw-r--r--gas/testsuite/gas/elf/dwarf-4-cu.s14
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-cu.d11
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-cu.s14
-rw-r--r--gas/testsuite/gas/elf/elf.exp2
7 files changed, 78 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index a851205..14be279 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,15 @@
2020-08-02 Mark Wielaard <mark@klomp.org>
+ * dwarf2dbg.c (out_debug_info): Emit unit type and abbrev offset
+ for DWARF5.
+ * gas/testsuite/gas/elf/dwarf-4-cu.d: New file.
+ * gas/testsuite/gas/elf/dwarf-4-cu.s: Likewise.
+ * gas/testsuite/gas/elf/dwarf-5-cu.d: Likewise.
+ * gas/testsuite/gas/elf/dwarf-5-cu.s: Likewise.
+ * testsuite/gas/elf/elf.exp: Run dwarf-4-cu and dwarf-5-cu.
+
+2020-08-02 Mark Wielaard <mark@klomp.org>
+
* doc/as.texi (--gdwarf-[345]): Fix typo.
2020-08-03 Jozef Lawrynowicz <jozef.l@mittosystems.com>
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 69955fe..b19e057 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -2464,12 +2464,26 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg,
/* DWARF version. */
out_two (DWARF2_VERSION);
- /* .debug_abbrev offset */
- TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
+ if (DWARF2_VERSION < 5)
+ {
+ /* .debug_abbrev offset */
+ TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
+ }
+ else
+ {
+ /* unit (header) type */
+ out_byte (DW_UT_compile);
+ }
/* Target address size. */
out_byte (sizeof_address);
+ if (DWARF2_VERSION >= 5)
+ {
+ /* .debug_abbrev offset */
+ TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
+ }
+
/* DW_TAG_compile_unit DIE abbrev */
out_uleb128 (1);
diff --git a/gas/testsuite/gas/elf/dwarf-4-cu.d b/gas/testsuite/gas/elf/dwarf-4-cu.d
new file mode 100644
index 0000000..85a0739
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-4-cu.d
@@ -0,0 +1,11 @@
+#as: --gdwarf-4
+#name: DWARF4 CU
+#readelf: -wi
+
+#...
+ Compilation Unit @ offset 0x0:
+ Length: 0x.*
+ Version: 4
+ Abbrev Offset: 0x0
+ Pointer Size: .
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-4-cu.s b/gas/testsuite/gas/elf/dwarf-4-cu.s
new file mode 100644
index 0000000..828f410
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-4-cu.s
@@ -0,0 +1,14 @@
+ .text
+ .file 1 "foo/bar.s"
+ .loc_mark_labels 1
+ .globl foobar
+ .type foobar, %function
+foobar:
+ .quad 0x1
+ .size foobar, .-foobar
+
+ .globl baz
+ .type baz, %function
+baz:
+ .quad 0x1
+ .size baz, .-baz
diff --git a/gas/testsuite/gas/elf/dwarf-5-cu.d b/gas/testsuite/gas/elf/dwarf-5-cu.d
new file mode 100644
index 0000000..839b4b7
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-cu.d
@@ -0,0 +1,11 @@
+#as: --gdwarf-5
+#name: DWARF5 CU
+#readelf: -wi
+
+#...
+ Compilation Unit @ offset 0x0:
+ Length: 0x.*
+ Version: 5
+ Abbrev Offset: 0x0
+ Pointer Size: .
+#pass
diff --git a/gas/testsuite/gas/elf/dwarf-5-cu.s b/gas/testsuite/gas/elf/dwarf-5-cu.s
new file mode 100644
index 0000000..828f410
--- /dev/null
+++ b/gas/testsuite/gas/elf/dwarf-5-cu.s
@@ -0,0 +1,14 @@
+ .text
+ .file 1 "foo/bar.s"
+ .loc_mark_labels 1
+ .globl foobar
+ .type foobar, %function
+foobar:
+ .quad 0x1
+ .size foobar, .-foobar
+
+ .globl baz
+ .type baz, %function
+baz:
+ .quad 0x1
+ .size baz, .-baz
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 86b304a..155f78e 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -274,6 +274,8 @@ if { [is_elf_format] } then {
run_dump_test "dwarf2-18" $dump_opts
run_dump_test "dwarf2-19" $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
run_dump_test "pr25917"
run_dump_test "bss"
run_dump_test "bad-bss"