gas: Fix .debug_info CU header for --gdwarf-5
authorMark Wielaard <mark@klomp.org>
Mon, 3 Aug 2020 00:04:17 +0000 (02:04 +0200)
committerMark Wielaard <mark@klomp.org>
Tue, 4 Aug 2020 09:28:39 +0000 (11:28 +0200)
DWARF5 CU headers have a new unit type field and move the abbrev offset
to the end of the header.

gas/ChangeLog:

* 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.

gas/ChangeLog
gas/dwarf2dbg.c
gas/testsuite/gas/elf/dwarf-4-cu.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf-4-cu.s [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf-5-cu.d [new file with mode: 0644]
gas/testsuite/gas/elf/dwarf-5-cu.s [new file with mode: 0644]
gas/testsuite/gas/elf/elf.exp

index a85120512776e9bf13cccfbfbfd01ab8bcbf4156..14be27927ac448d6263055a90354fc5509897451 100644 (file)
@@ -1,3 +1,13 @@
+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.
index 69955fea5bfb5cf0f21b0460cc8f0e154722eb3d..b19e057c7620c62335ecc56880db70954360fcd3 100644 (file)
@@ -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 (file)
index 0000000..85a0739
--- /dev/null
@@ -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 (file)
index 0000000..828f410
--- /dev/null
@@ -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 (file)
index 0000000..839b4b7
--- /dev/null
@@ -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 (file)
index 0000000..828f410
--- /dev/null
@@ -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
index 86b304ae34fc106fb1ff962cc7a25558510d2f61..155f78efa7f8bed282d753d2f21aa72b69b51315 100644 (file)
@@ -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"