diff options
author | Alan Modra <amodra@gmail.com> | 2021-01-21 16:46:20 +1030 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2021-01-26 06:24:00 -0800 |
commit | a2aa107b13785088fe417163b4f21e481e9f8130 (patch) | |
tree | 7937862b585a771d5084616cb1daea058298df19 | |
parent | 74c2eff55954b850b8bc9804cbf4e599919a811a (diff) | |
download | fsf-binutils-gdb-a2aa107b13785088fe417163b4f21e481e9f8130.zip fsf-binutils-gdb-a2aa107b13785088fe417163b4f21e481e9f8130.tar.gz fsf-binutils-gdb-a2aa107b13785088fe417163b4f21e481e9f8130.tar.bz2 |
PR27218, memory access violation in dwarf2dbg.c
PR 27218
* dwarf2dbg.c (dwarf2_gen_line_info): Correct setting of dwarf_level.
(dwarf2_directive_filename, dwarf2_directive_loc): Likewise, and
error for negative file numbers.
(cherry picked from commit 498ff0328fed7689f7a675d8c9f0f04bed1f1522)
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/dwarf2dbg.c | 26 |
2 files changed, 20 insertions, 13 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index bb336ab..92ce959 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2021-01-25 Alan Modra <amodra@gmail.com> + + PR 27218 + * dwarf2dbg.c (dwarf2_gen_line_info): Correct setting of dwarf_level. + (dwarf2_directive_filename, dwarf2_directive_loc): Likewise, and + error for negative file numbers. + 2021-01-25 H.J. Lu <hongjiu.lu@intel.com> PR gas/27195 diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 0195a82..419582f 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -536,9 +536,10 @@ dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc) /* Early out for as-yet incomplete location information. */ if (loc->line == 0) return; - if (loc->filenum == 0 && DWARF2_LINE_VERSION < 5) + if (loc->filenum == 0) { - dwarf_level = 5; + if (dwarf_level < 5) + dwarf_level = 5; if (DWARF2_LINE_VERSION < 5) return; } @@ -1032,10 +1033,11 @@ dwarf2_directive_filename (void) num = get_absolute_expression (); - if ((offsetT) num < 1 && DWARF2_LINE_VERSION < 5) + if ((offsetT) num < 1) { - dwarf_level = 5; - if (DWARF2_LINE_VERSION < 5) + if (num == 0 && dwarf_level < 5) + dwarf_level = 5; + if ((offsetT) num < 0 || DWARF2_LINE_VERSION < 5) { as_bad (_("file number less than one")); ignore_rest_of_line (); @@ -1135,18 +1137,16 @@ dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED) if (filenum < 1) { - if (filenum != 0 || DWARF2_LINE_VERSION < 5) + if (filenum == 0 && dwarf_level < 5) + dwarf_level = 5; + if (filenum < 0 || DWARF2_LINE_VERSION < 5) { - dwarf_level = 5; - if (DWARF2_LINE_VERSION < 5) - { - as_bad (_("file number less than one")); - return; - } + as_bad (_("file number less than one")); + return; } } - if (filenum >= (int) files_in_use || files[filenum].filename == NULL) + if ((valueT) filenum >= files_in_use || files[filenum].filename == NULL) { as_bad (_("unassigned file number %ld"), (long) filenum); return; |