aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-03-06 17:13:22 +0000
committerNick Clifton <nickc@redhat.com>2020-03-06 17:13:22 +0000
commit84d9ab33f3dc542c5f20abb9026240cfd48ccd97 (patch)
treecbdd933a1952a9f71c90f3e43e0265cb96390995 /gas
parent436b5e99c8eef55433f2c1de35d8f960425aa4c1 (diff)
downloadgdb-84d9ab33f3dc542c5f20abb9026240cfd48ccd97.zip
gdb-84d9ab33f3dc542c5f20abb9026240cfd48ccd97.tar.gz
gdb-84d9ab33f3dc542c5f20abb9026240cfd48ccd97.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog14
-rw-r--r--gas/config/tc-ia64.h2
-rw-r--r--gas/doc/as.texi2
-rw-r--r--gas/dwarf2dbg.c22
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-file0.d6
-rw-r--r--gas/testsuite/gas/elf/dwarf-5-file0.s18
-rw-r--r--gas/testsuite/gas/elf/elf.exp1
7 files changed, 57 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 1b377fd..c6a8a4f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,19 @@
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
* as.c (dwarf_level): Define.
(show_usage): Add --gdwarf-3, --gdwarf-4 and --gdwarf-5.
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h
index 3a50f86..e982e57 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 ff0ef63..711578f 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 7384a17..1814013 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 0000000..a3d1fdf
--- /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 0000000..c00ec5e
--- /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 b0522af..c80175c 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"