[gas] Fix file 0 dir with -gdwarf-5
authorTom de Vries <tdevries@suse.de>
Fri, 26 Nov 2021 08:59:45 +0000 (09:59 +0100)
committerTom de Vries <tdevries@suse.de>
Fri, 26 Nov 2021 08:59:45 +0000 (09:59 +0100)
In out_dir_and_file_list, if file 0 is copied from file 1, only the filename
is copied, and the dir and md5 fields are left to their default values.

Fix this by adding the copy of the dir and md5 fields.

gas/ChangeLog:

2021-11-26  Tom de Vries  <tdevries@suse.de>

PR 28629
* dwarf2dbg.c (out_dir_and_file_list): When copying file 1 to file 0,
also copy dir and md5 fields.
* testsuite/gas/i386/dwarf5-line-4.d: Adjust expected output.

gas/ChangeLog
gas/dwarf2dbg.c
gas/testsuite/gas/i386/dwarf5-line-4.d

index 8732088c91e870109ed1622022a745d8e0d59fdc..c2886ee75573fa44f0ff950bf78e1a9ec0c19b2f 100644 (file)
@@ -1,3 +1,10 @@
+2021-11-26  Tom de Vries  <tdevries@suse.de>
+
+       PR 28629
+       * dwarf2dbg.c (out_dir_and_file_list): When copying file 1 to file 0,
+       also copy dir and md5 fields.
+       * testsuite/gas/i386/dwarf5-line-4.d: Adjust expected output.
+
 2021-11-18  Nick Clifton  <nickc@redhat.com>
 
        * as.c (parse_args): Add support for --multibyte-handling.
index 256412f9c79197a91918ec99ba4b9fbb7658b647..7300bfe26483d3819c9234c8d65d1ab45c84fbec 100644 (file)
@@ -2123,7 +2123,7 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
   size_t size;
   const char *dir;
   char *cp;
-  unsigned int i;
+  unsigned int i, j;
   bool emit_md5 = false;
   bool emit_timestamps = true;
   bool emit_filesize = true;
@@ -2275,7 +2275,13 @@ out_dir_and_file_list (segT line_seg, int sizeof_offset)
             .file 0 directive.  If that isn't used, but file 1 is,
             then use that as main file name.  */
          if (DWARF2_LINE_VERSION >= 5 && i == 0 && files_in_use >= 1 && files[0].filename == NULL)
-           files[0].filename = files[1].filename;
+           {
+             files[0].filename = files[1].filename;
+             files[0].dir = files[1].dir;
+             if (emit_md5)
+               for (j = 0; i < NUM_MD5_BYTES; ++j)
+                 files[0].md5[j] = files[1].md5[j];
+           }
          else
            files[i].filename = "";
          if (DWARF2_LINE_VERSION < 5 || i != 0)
index 30e1bb2bb8997a59bc96cc548296fa2f95413c7d..a3af48eda8ccaf753a27ed83181723dd84a08768 100644 (file)
@@ -38,7 +38,7 @@ Raw dump of debug contents of section \.z?debug_line:
 
  The File Name Table \(offset 0x.*, lines 2, columns 2\):
   Entry        Dir     Name
-  0    0       \(indirect line string, offset: 0x.*\): dwarf5-line-4.s
+  0    1       \(indirect line string, offset: 0x.*\): dwarf5-line-4.s
   1    1       \(indirect line string, offset: 0x.*\): dwarf5-line-4.s
 
  Line Number Statements: