Add support for a ".file 0" directive if supporting DWARF 5 or higher.

PR 25614
	* dwarf2dbg.c (dwarf2_directive_filename): Allow a file number of
	0 if the dwarf_level is 5 or more.  Complain if a filename follows
	a file 0.
	* testsuite/gas/elf/dwarf-5-file0.s: New test.
	* testsuite/gas/elf/dwarf-5-file0.d: New test driver.
	* testsuite/gas/elf/elf.exp: Run the new test.

	PR 25612
	* config/tc-ia64.h (DWARF2_VERISION): Fix typo.
	* doc/as.texi: Fix another typo.
This commit is contained in:
Nick Clifton 2020-03-06 17:13:22 +00:00
parent 436b5e99c8
commit 84d9ab33f3
7 changed files with 57 additions and 8 deletions

View File

@ -1,3 +1,17 @@
2020-03-06 Nick Clifton <nickc@redhat.com>
PR 25614
* dwarf2dbg.c (dwarf2_directive_filename): Allow a file number of
0 if the dwarf_level is 5 or more. Complain if a filename follows
a file 0.
* testsuite/gas/elf/dwarf-5-file0.s: New test.
* testsuite/gas/elf/dwarf-5-file0.d: New test driver.
* testsuite/gas/elf/elf.exp: Run the new test.
PR 25612
* config/tc-ia64.h (DWARF2_VERISION): Fix typo.
* doc/as.texi: Fix another typo.
2020-03-06 Nick Clifton <nickc@redhat.com>
PR 25612

View File

@ -325,5 +325,5 @@ typedef struct unwind_record
/* VMS backtraces expect dwarf version 3. */
#ifdef TE_VMS
#define DWARF2_VERSION (dwarf_level < 3 ? 3 : debug_level)
#define DWARF2_VERSION (dwarf_level < 3 ? 3 : dwarf_level)
#endif

View File

@ -780,7 +780,7 @@ per target basis.
@item --gdwarf-5
This option is the same as the @option{--gdwarf-2} option, except that it
allows for the possibility of the generation of extra debug information as per
version 4 of the DWARF specification. Note - enabling this option does not
version 5 of the DWARF specification. Note - enabling this option does not
guarantee the generation of any extra infortmation, the choice to do so is on a
per target basis.

View File

@ -794,17 +794,27 @@ dwarf2_directive_filename (void)
}
num = get_absolute_expression ();
filename = demand_copy_C_string (&filename_len);
if (filename == NULL)
return NULL;
demand_empty_rest_of_line ();
if ((offsetT) num < 1)
if ((offsetT) num < 1 && dwarf_level < 5)
{
as_bad (_("file number less than one"));
ignore_rest_of_line ();
return NULL;
}
if (num == 0)
{
demand_empty_rest_of_line ();
return NULL;
}
filename = demand_copy_C_string (&filename_len);
if (filename == NULL)
/* demand_copy_C_string will have already generated an error message. */
return NULL;
demand_empty_rest_of_line ();
/* A .file directive implies compiler generated debug information is
being supplied. Turn off gas generated debug info. */
debug_type = DEBUG_NONE;
@ -821,7 +831,7 @@ dwarf2_directive_filename (void)
return NULL;
}
get_filenum (filename, (unsigned int) num);
(void) get_filenum (filename, (unsigned int) num);
return filename;
}

View File

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

View File

@ -0,0 +1,18 @@
.text
.file 0
.line 1
.long 3
.file 1 "asdf"
.line 2
.long 5
.file 0
.line 4
.long 3
.file 2 "def"
.line 5
.long 3

View File

@ -272,6 +272,7 @@ if { [is_elf_format] } then {
run_dump_test "dwarf2-17" $dump_opts
run_dump_test "dwarf2-18" $dump_opts
run_dump_test "dwarf2-19" $dump_opts
run_dump_test "dwarf-5-file0" $dump_opts
run_dump_test "bss"
run_dump_test "bad-bss"
run_dump_test "bad-section-flag"