| |
@@ -0,0 +1,323 @@
|
| |
+ commit 58f3b6a3495074da39ba6e19935e4401dcbacf88
|
| |
+ Author: H.J. Lu <hjl.tools@gmail.com>
|
| |
+ Date: Thu Sep 9 09:14:42 2021 -0700
|
| |
+
|
| |
+ gas: Use the directory name in .file 0
|
| |
+
|
| |
+ DWARF5 allows .file 0 to take an optional directory name. Set the entry
|
| |
+ 0 of the directory table to the directory name in .file 0.
|
| |
+
|
| |
+ PR gas/28266
|
| |
+ * dwarf2dbg.c (get_directory_table_entry): Add an argument for
|
| |
+ the directory name in .file 0 and use it, instead of PWD.
|
| |
+ (allocate_filenum): Pass NULL to get_directory_table_entry.
|
| |
+ (allocate_filename_to_slot): Pass the incoming dirname to
|
| |
+ get_directory_table_entry.
|
| |
+ * testsuite/gas/elf/dwarf-5-file0-2.d: New file.
|
| |
+ * testsuite/gas/elf/dwarf-5-file0-2.s: Likewise.
|
| |
+ * testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2.
|
| |
+
|
| |
+ diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
|
| |
+ index 8f5248534ad..9e3437b8948 100644
|
| |
+ --- a/gas/dwarf2dbg.c
|
| |
+ +++ b/gas/dwarf2dbg.c
|
| |
+ @@ -592,6 +592,7 @@ get_basename (const char * pathname)
|
| |
+
|
| |
+ static unsigned int
|
| |
+ get_directory_table_entry (const char *dirname,
|
| |
+ + const char *file0_dirname,
|
| |
+ size_t dirlen,
|
| |
+ bool can_use_zero)
|
| |
+ {
|
| |
+ @@ -621,7 +622,7 @@ get_directory_table_entry (const char *dirname,
|
| |
+ {
|
| |
+ 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)
|
| |
+ {
|
| |
+ @@ -630,7 +631,8 @@ get_directory_table_entry (const char *dirname,
|
| |
+ 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
|
| |
+ @@ -726,7 +728,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. */
|
| |
+ @@ -766,6 +768,7 @@ allocate_filename_to_slot (const char *dirname,
|
| |
+ 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. */
|
| |
+ @@ -856,7 +859,8 @@ allocate_filename_to_slot (const char *dirname,
|
| |
+ 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 --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/elf.exp b/gas/testsuite/gas/elf/elf.exp
|
| |
+ index 18bc1db8c70..2485008d569 100644
|
| |
+ --- a/gas/testsuite/gas/elf/elf.exp
|
| |
+ +++ b/gas/testsuite/gas/elf/elf.exp
|
| |
+ @@ -297,6 +297,7 @@ if { [is_elf_format] } then {
|
| |
+ 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-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
|
| |
+ commit 9f81b99e2426d19760c20c07f8cd3ae5cd85e8df
|
| |
+ Author: Alan Modra <amodra@gmail.com>
|
| |
+ Date: Fri Sep 10 18:01:43 2021 +0930
|
| |
+
|
| |
+ Re: gas: Use the directory name in .file 0
|
| |
+
|
| |
+ PR gas/28266
|
| |
+ * testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than
|
| |
+ @object, .4byte instead of .long, and .asciz instead of .string.
|
| |
+
|
| |
+ 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
|
| |
This fixes a change that was introduced with the update from 2.35.1-41.fc34 to 2.35.2-4.fc34 and broke a ccache test:
https://koschei.fedoraproject.org/package/ccache?last_seen_ts=1631215764&collection=f34
https://github.com/ccache/ccache/issues/919#issuecomment-904918762
https://sourceware.org/bugzilla/show_bug.cgi?id=28266
I would also like to see this fixed in F35 and F34 if possible. What is the desired mechanism for this? Thank you.