as: Automatically enable DWARF5 support
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 18 Jan 2021 14:25:05 +0000 (06:25 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 18 Jan 2021 14:25:17 +0000 (06:25 -0800)
Currently

$ as -o x.o x.s

fails when x.s contains DWARF5 ".file 0" or ".loc 0" directives.  Update
assembler to automatically enable DWARF5 support so that

$ gcc -S -g -c x.c
$ gcc -c x.s

works.

PR gas/27195
* dwarf2dbg.c (dwarf2_gen_line_info): Set dwarf_level to 5 if
needed.
(dwarf2_directive_filename): Likewise.
(dwarf2_directive_loc): Likewise.
* testsuite/gas/elf/dwarf-5-file0.d: Pass --gdwarf-3.
* testsuite/gas/lns/lns-diag-1.l: Remove the
"Error: file number less than one" errors.

gas/ChangeLog
gas/dwarf2dbg.c
gas/testsuite/gas/elf/dwarf-5-file0.d
gas/testsuite/gas/lns/lns-diag-1.l

index 3d242869eacac71512b100d35abc4bf438e43e14..510be5ff6e7f54aff5775fa61e3784ee817435a9 100644 (file)
@@ -1,3 +1,14 @@
+2021-01-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/27195
+       * dwarf2dbg.c (dwarf2_gen_line_info): Set dwarf_level to 5 if
+       needed.
+       (dwarf2_directive_filename): Likewise.
+       (dwarf2_directive_loc): Likewise.
+       * testsuite/gas/elf/dwarf-5-file0.d: Pass --gdwarf-3.
+       * testsuite/gas/lns/lns-diag-1.l: Remove the
+       "Error: file number less than one" errors.
+
 2021-01-18  Alan Modra  <amodra@gmail.com>
 
        PR 27198
index a428370ecca23b8299076488b1abe78e83d64639..069f63166431028a757e8df0ff06a52847f3d593 100644 (file)
@@ -551,7 +551,11 @@ dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
   if (loc->line == 0)
     return;
   if (loc->filenum == 0 && DWARF2_LINE_VERSION < 5)
-    return;
+    {
+      dwarf_level = 5;
+      if (DWARF2_LINE_VERSION < 5)
+       return;
+    }
 
   /* Don't emit sequences of line symbols for the same line when the
      symbols apply to assembler code.  It is necessary to emit
@@ -1044,9 +1048,13 @@ dwarf2_directive_filename (void)
 
   if ((offsetT) num < 1 && DWARF2_LINE_VERSION < 5)
     {
-      as_bad (_("file number less than one"));
-      ignore_rest_of_line ();
-      return NULL;
+      dwarf_level = 5;
+      if (DWARF2_LINE_VERSION < 5)
+       {
+         as_bad (_("file number less than one"));
+         ignore_rest_of_line ();
+         return NULL;
+       }
     }
 
   /* FIXME: Should we allow ".file <N>\n" as an expression meaning
@@ -1143,8 +1151,12 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
     {
       if (filenum != 0 || DWARF2_LINE_VERSION < 5)
        {
-         as_bad (_("file number less than one"));
-         return;
+         dwarf_level = 5;
+         if (DWARF2_LINE_VERSION < 5)
+           {
+             as_bad (_("file number less than one"));
+             return;
+           }
        }
     }
 
index 5d76b7bcd14b062bf07a63e1cc31453f9a28b0dc..6cc96e3284f518b9a38c014412c38bc32073f81a 100644 (file)
@@ -1,4 +1,4 @@
-#as: --gdwarf-5
+#as: --gdwarf-3
 #name: DWARF5 .line 0
 #readelf: -wl
 
index 1256e85cfcbd3c56f6a1dff82339c0d165ef60e2..3d8a52f4d5b98b574e424663d81ce43962845607 100644 (file)
@@ -1,5 +1,4 @@
 .*: Assembler messages:
-.*:2: Error: file number less than one
 .*:3: Error: missing string
 .*:4: Error: file table slot 1 is already occupied.*
 .*:8: Error: unassigned file number 3
@@ -9,7 +8,6 @@
 .*:19: Error: bad or irreducible absolute expression
 .*:23: Error: isa number less than zero
 .*:26: Error: bad or irreducible absolute expression
-.*:26: Error: file number less than one
 .*:27: Error: bad or irreducible absolute expression
 .*:28: Error: unknown .loc sub-directive `frobnitz'
 .*:29: Error: unknown .loc sub-directive `frobnitz'