diff --git a/gas/ChangeLog b/gas/ChangeLog index 1b377fd3b3..c6a8a4f19b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,17 @@ +2020-03-06 Nick Clifton + + 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 PR 25612 diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h index 3a50f86b22..e982e57b47 100644 --- a/gas/config/tc-ia64.h +++ b/gas/config/tc-ia64.h @@ -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 diff --git a/gas/doc/as.texi b/gas/doc/as.texi index ff0ef63fbd..711578fc76 100644 --- a/gas/doc/as.texi +++ b/gas/doc/as.texi @@ -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. diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 7384a17c57..181401300e 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -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; } diff --git a/gas/testsuite/gas/elf/dwarf-5-file0.d b/gas/testsuite/gas/elf/dwarf-5-file0.d new file mode 100644 index 0000000000..a3d1fdfb6e --- /dev/null +++ b/gas/testsuite/gas/elf/dwarf-5-file0.d @@ -0,0 +1,6 @@ +#as: --gdwarf-5 +#name: DWARF5 .line 0 +#readelf: -wl + +#pass + diff --git a/gas/testsuite/gas/elf/dwarf-5-file0.s b/gas/testsuite/gas/elf/dwarf-5-file0.s new file mode 100644 index 0000000000..c00ec5e8bc --- /dev/null +++ b/gas/testsuite/gas/elf/dwarf-5-file0.s @@ -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 + diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index b0522af3bb..c80175cc51 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -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"