as: Automatically enable DWARF5 support

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.
This commit is contained in:
H.J. Lu 2021-01-18 06:25:05 -08:00
parent 6a9ad81c44
commit 705989f19a
4 changed files with 30 additions and 9 deletions

View 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> 2021-01-18 Alan Modra <amodra@gmail.com>
PR 27198 PR 27198

View File

@ -551,7 +551,11 @@ dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
if (loc->line == 0) if (loc->line == 0)
return; return;
if (loc->filenum == 0 && DWARF2_LINE_VERSION < 5) 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 /* Don't emit sequences of line symbols for the same line when the
symbols apply to assembler code. It is necessary to emit 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) if ((offsetT) num < 1 && DWARF2_LINE_VERSION < 5)
{ {
as_bad (_("file number less than one")); dwarf_level = 5;
ignore_rest_of_line (); if (DWARF2_LINE_VERSION < 5)
return NULL; {
as_bad (_("file number less than one"));
ignore_rest_of_line ();
return NULL;
}
} }
/* FIXME: Should we allow ".file <N>\n" as an expression meaning /* 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) if (filenum != 0 || DWARF2_LINE_VERSION < 5)
{ {
as_bad (_("file number less than one")); dwarf_level = 5;
return; if (DWARF2_LINE_VERSION < 5)
{
as_bad (_("file number less than one"));
return;
}
} }
} }

View File

@ -1,4 +1,4 @@
#as: --gdwarf-5 #as: --gdwarf-3
#name: DWARF5 .line 0 #name: DWARF5 .line 0
#readelf: -wl #readelf: -wl

View File

@ -1,5 +1,4 @@
.*: Assembler messages: .*: Assembler messages:
.*:2: Error: file number less than one
.*:3: Error: missing string .*:3: Error: missing string
.*:4: Error: file table slot 1 is already occupied.* .*:4: Error: file table slot 1 is already occupied.*
.*:8: Error: unassigned file number 3 .*:8: Error: unassigned file number 3
@ -9,7 +8,6 @@
.*:19: Error: bad or irreducible absolute expression .*:19: Error: bad or irreducible absolute expression
.*:23: Error: isa number less than zero .*:23: Error: isa number less than zero
.*:26: Error: bad or irreducible absolute expression .*:26: Error: bad or irreducible absolute expression
.*:26: Error: file number less than one
.*:27: Error: bad or irreducible absolute expression .*:27: Error: bad or irreducible absolute expression
.*:28: Error: unknown .loc sub-directive `frobnitz' .*:28: Error: unknown .loc sub-directive `frobnitz'
.*:29: Error: unknown .loc sub-directive `frobnitz' .*:29: Error: unknown .loc sub-directive `frobnitz'