[PATCH 1/2] as: Automatically enable DWARF5 support

H.J. Lu hjl.tools@gmail.com
Tue Jan 26 12:57:34 GMT 2021


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.

(cherry picked from commit 705989f19adf20dd70c50237ec61cd708f2b0939)
---
 gas/ChangeLog                         | 11 +++++++++++
 gas/dwarf2dbg.c                       | 24 ++++++++++++++++++------
 gas/testsuite/gas/elf/dwarf-5-file0.d |  2 +-
 gas/testsuite/gas/lns/lns-diag-1.l    |  2 --
 4 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3ac2f7b72e2..bb336ab9d5d 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,14 @@
+2021-01-25  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.
+
 2020-11-15  Mark Wielaard  <mark@klomp.org>
 
 	Backport from the mainline:
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 1160cafc13e..0195a82daf1 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -537,7 +537,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
@@ -1030,9 +1034,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
@@ -1129,8 +1137,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;
+	    }
 	}
     }
 
diff --git a/gas/testsuite/gas/elf/dwarf-5-file0.d b/gas/testsuite/gas/elf/dwarf-5-file0.d
index 5d76b7bcd14..6cc96e3284f 100644
--- a/gas/testsuite/gas/elf/dwarf-5-file0.d
+++ b/gas/testsuite/gas/elf/dwarf-5-file0.d
@@ -1,4 +1,4 @@
-#as: --gdwarf-5
+#as: --gdwarf-3
 #name: DWARF5 .line 0
 #readelf: -wl
 
diff --git a/gas/testsuite/gas/lns/lns-diag-1.l b/gas/testsuite/gas/lns/lns-diag-1.l
index 1256e85cfcb..3d8a52f4d5b 100644
--- a/gas/testsuite/gas/lns/lns-diag-1.l
+++ b/gas/testsuite/gas/lns/lns-diag-1.l
@@ -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'
-- 
2.29.2



More information about the Binutils mailing list