gas: Fix .debug_info CU header for --gdwarf-5

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.
This commit is contained in:
Mark Wielaard 2020-08-03 02:04:17 +02:00
parent 25b1f10d9b
commit a3b3e8586d
7 changed files with 78 additions and 2 deletions

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

View 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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View 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"