You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
6.8 KiB
292 lines
6.8 KiB
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.d b/gas/testsuite/gas/elf/dwarf-5-file0-2.d |
|
new file mode 100644 |
|
index 00000000000..4b3ed29f4c9 |
|
--- /dev/null |
|
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.d |
|
@@ -0,0 +1,15 @@ |
|
+#as: --gdwarf-5 |
|
+#name: DWARF5 .file 0 dir file |
|
+#readelf: -wl |
|
+ |
|
+#... |
|
+ The Directory Table \(offset 0x.*, lines 1, columns 1\): |
|
+ Entry Name |
|
+#... |
|
+ 0 \(indirect line string, offset: 0x.*\): /example |
|
+ |
|
+ The File Name Table \(offset 0x.*, lines 2, columns 2\): |
|
+ Entry Dir Name |
|
+ 0 0 \(indirect line string, offset: 0x.*\): test.c |
|
+ 1 0 \(indirect line string, offset: 0x.*\): test.c |
|
+#pass |
|
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s |
|
new file mode 100644 |
|
index 00000000000..135a03bf493 |
|
--- /dev/null |
|
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s |
|
@@ -0,0 +1,111 @@ |
|
+ .file "test.c" |
|
+ .text |
|
+.Ltext0: |
|
+ .file 0 "/example" "test.c" |
|
+ .globl x |
|
+ .section .bss |
|
+ .balign 4 |
|
+ .type x, @object |
|
+ .size x, 4 |
|
+x: |
|
+ .zero 4 |
|
+ .text |
|
+.Letext0: |
|
+ .file 1 "test.c" |
|
+ .section .debug_info,"",%progbits |
|
+.Ldebug_info0: |
|
+ .long 0x32 |
|
+ .2byte 0x5 |
|
+ .byte 0x1 |
|
+ .byte 0x4 |
|
+ .long .Ldebug_abbrev0 |
|
+ .uleb128 0x1 |
|
+ .long .LASF2 |
|
+ .byte 0x1d |
|
+ .long .LASF0 |
|
+ .long .LASF1 |
|
+ .long .Ldebug_line0 |
|
+ .uleb128 0x2 |
|
+ .string "x" |
|
+ .byte 0x1 |
|
+ .byte 0x1 |
|
+ .byte 0x5 |
|
+ .long 0x2e |
|
+ .uleb128 0x5 |
|
+ .byte 0x3 |
|
+ .long x |
|
+ .uleb128 0x3 |
|
+ .byte 0x4 |
|
+ .byte 0x5 |
|
+ .string "int" |
|
+ .byte 0 |
|
+ .section .debug_abbrev,"",%progbits |
|
+.Ldebug_abbrev0: |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x11 |
|
+ .byte 0x1 |
|
+ .uleb128 0x25 |
|
+ .uleb128 0xe |
|
+ .uleb128 0x13 |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x1f |
|
+ .uleb128 0x1b |
|
+ .uleb128 0x1f |
|
+ .uleb128 0x10 |
|
+ .uleb128 0x17 |
|
+ .byte 0 |
|
+ .byte 0 |
|
+ .uleb128 0x2 |
|
+ .uleb128 0x34 |
|
+ .byte 0 |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x8 |
|
+ .uleb128 0x3a |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3b |
|
+ .uleb128 0xb |
|
+ .uleb128 0x39 |
|
+ .uleb128 0xb |
|
+ .uleb128 0x49 |
|
+ .uleb128 0x13 |
|
+ .uleb128 0x3f |
|
+ .uleb128 0x19 |
|
+ .uleb128 0x2 |
|
+ .uleb128 0x18 |
|
+ .byte 0 |
|
+ .byte 0 |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x24 |
|
+ .byte 0 |
|
+ .uleb128 0xb |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3e |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x8 |
|
+ .byte 0 |
|
+ .byte 0 |
|
+ .byte 0 |
|
+ .section .debug_aranges,"",%progbits |
|
+ .long 0x14 |
|
+ .2byte 0x2 |
|
+ .long .Ldebug_info0 |
|
+ .byte 0x4 |
|
+ .byte 0 |
|
+ .2byte 0 |
|
+ .2byte 0 |
|
+ .long 0 |
|
+ .long 0 |
|
+ .section .debug_line,"",%progbits |
|
+.Ldebug_line0: |
|
+ .section .debug_str,"MS",%progbits,1 |
|
+.LASF2: |
|
+ .string "GNU C17 11.2.1 -g" |
|
+ .section .debug_line_str,"MS",%progbits,1 |
|
+.LASF1: |
|
+ .string "/example" |
|
+.LASF0: |
|
+ .string "test.c" |
|
+ .ident "GCC: (GNU) 11.2.1" |
|
+ .section .note.GNU-stack,"",%progbits |
|
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s |
|
index 135a03bf493..bab4a16b56b 100644 |
|
--- a/gas/testsuite/gas/elf/dwarf-5-file0-2.s |
|
+++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s |
|
@@ -5,7 +5,7 @@ |
|
.globl x |
|
.section .bss |
|
.balign 4 |
|
- .type x, @object |
|
+ .type x, %object |
|
.size x, 4 |
|
x: |
|
.zero 4 |
|
@@ -14,30 +14,30 @@ x: |
|
.file 1 "test.c" |
|
.section .debug_info,"",%progbits |
|
.Ldebug_info0: |
|
- .long 0x32 |
|
+ .4byte 0x32 |
|
.2byte 0x5 |
|
.byte 0x1 |
|
.byte 0x4 |
|
- .long .Ldebug_abbrev0 |
|
+ .4byte .Ldebug_abbrev0 |
|
.uleb128 0x1 |
|
- .long .LASF2 |
|
+ .4byte .LASF2 |
|
.byte 0x1d |
|
- .long .LASF0 |
|
- .long .LASF1 |
|
- .long .Ldebug_line0 |
|
+ .4byte .LASF0 |
|
+ .4byte .LASF1 |
|
+ .4byte .Ldebug_line0 |
|
.uleb128 0x2 |
|
- .string "x" |
|
+ .asciz "x" |
|
.byte 0x1 |
|
.byte 0x1 |
|
.byte 0x5 |
|
- .long 0x2e |
|
+ .4byte 0x2e |
|
.uleb128 0x5 |
|
.byte 0x3 |
|
- .long x |
|
+ .4byte x |
|
.uleb128 0x3 |
|
.byte 0x4 |
|
.byte 0x5 |
|
- .string "int" |
|
+ .asciz "int" |
|
.byte 0 |
|
.section .debug_abbrev,"",%progbits |
|
.Ldebug_abbrev0: |
|
@@ -88,24 +88,24 @@ x: |
|
.byte 0 |
|
.byte 0 |
|
.section .debug_aranges,"",%progbits |
|
- .long 0x14 |
|
+ .4byte 0x14 |
|
.2byte 0x2 |
|
- .long .Ldebug_info0 |
|
+ .4byte .Ldebug_info0 |
|
.byte 0x4 |
|
.byte 0 |
|
.2byte 0 |
|
.2byte 0 |
|
- .long 0 |
|
- .long 0 |
|
+ .4byte 0 |
|
+ .4byte 0 |
|
.section .debug_line,"",%progbits |
|
.Ldebug_line0: |
|
.section .debug_str,"MS",%progbits,1 |
|
.LASF2: |
|
- .string "GNU C17 11.2.1 -g" |
|
+ .asciz "GNU C17 11.2.1 -g" |
|
.section .debug_line_str,"MS",%progbits,1 |
|
.LASF1: |
|
- .string "/example" |
|
+ .asciz "/example" |
|
.LASF0: |
|
- .string "test.c" |
|
+ .asciz "test.c" |
|
.ident "GCC: (GNU) 11.2.1" |
|
.section .note.GNU-stack,"",%progbits |
|
diff -rup binutils.orig/gas/dwarf2dbg.c binutils-2.35.2/gas/dwarf2dbg.c |
|
--- binutils.orig/gas/dwarf2dbg.c 2021-11-08 14:59:19.759524743 +0000 |
|
+++ binutils-2.35.2/gas/dwarf2dbg.c 2021-11-08 15:00:55.179909708 +0000 |
|
@@ -588,6 +588,7 @@ get_basename (const char * pathname) |
|
|
|
static unsigned int |
|
get_directory_table_entry (const char * dirname, |
|
+ const char * file0_dirname, |
|
size_t dirlen, |
|
bfd_boolean can_use_zero) |
|
{ |
|
@@ -617,7 +618,7 @@ get_directory_table_entry (const char * |
|
{ |
|
if (dirs == NULL || dirs[0] == NULL) |
|
{ |
|
- const char * pwd = getpwd (); |
|
+ const char * pwd = file0_dirname ? file0_dirname : getpwd (); |
|
|
|
if (dwarf_level >= 5 && strcmp (dirname, pwd) != 0) |
|
{ |
|
@@ -626,7 +627,7 @@ get_directory_table_entry (const char * |
|
directory). Since we are about to create a directory entry that |
|
is not the same, allocate the current directory first. |
|
FIXME: Alternatively we could generate an error message here. */ |
|
- (void) get_directory_table_entry (pwd, strlen (pwd), TRUE); |
|
+ (void) get_directory_table_entry (pwd, NULL, strlen (pwd), TRUE); |
|
d = 1; |
|
} |
|
else |
|
@@ -722,7 +723,7 @@ allocate_filenum (const char * pathname) |
|
file = get_basename (pathname); |
|
dir_len = file - pathname; |
|
|
|
- dir = get_directory_table_entry (pathname, dir_len, FALSE); |
|
+ dir = get_directory_table_entry (pathname, NULL, dir_len, FALSE); |
|
|
|
/* Do not use slot-0. That is specifically reserved for use by |
|
the '.file 0 "name"' directive. */ |
|
@@ -762,6 +763,7 @@ allocate_filename_to_slot (const char * |
|
const char *file; |
|
size_t dirlen; |
|
unsigned int i, d; |
|
+ const char *file0_dirname = dirname; |
|
|
|
/* Short circuit the common case of adding the same pathname |
|
as last time. */ |
|
@@ -836,7 +838,8 @@ allocate_filename_to_slot (const char * |
|
file = filename; |
|
} |
|
|
|
- d = get_directory_table_entry (dirname, dirlen, num == 0); |
|
+ d = get_directory_table_entry (dirname, file0_dirname, dirlen, |
|
+ num == 0); |
|
i = num; |
|
|
|
if (! assign_file_to_slot (i, file, d)) |
|
diff -rup binutils.orig/gas/testsuite/gas/elf/elf.exp binutils-2.35.2/gas/testsuite/gas/elf/elf.exp |
|
--- binutils.orig/gas/testsuite/gas/elf/elf.exp 2021-11-08 14:59:19.856524118 +0000 |
|
+++ binutils-2.35.2/gas/testsuite/gas/elf/elf.exp 2021-11-08 14:59:36.225418609 +0000 |
|
@@ -274,6 +274,7 @@ 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-5-file0-2" $dump_opts |
|
run_dump_test "dwarf-5-dir0" $dump_opts |
|
run_dump_test "dwarf-4-cu" $dump_opts |
|
run_dump_test "dwarf-5-cu" $dump_opts |
|
|
|
|