diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2021-02-02 10:40:50 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-02-02 10:40:50 -0500 |
commit | a0c1eeba9b13b759b058dd5640ccb0dc2630a723 (patch) | |
tree | 0f811556652afc721275b1c2c9b28515a1b3a762 /gdb/dwarf2 | |
parent | 5424d7ed94cf5a7ca24636ab9f4e6d5c353fc0d3 (diff) | |
download | fsf-binutils-gdb-a0c1eeba9b13b759b058dd5640ccb0dc2630a723.zip fsf-binutils-gdb-a0c1eeba9b13b759b058dd5640ccb0dc2630a723.tar.gz fsf-binutils-gdb-a0c1eeba9b13b759b058dd5640ccb0dc2630a723.tar.bz2 |
gdb/dwarf: change read_loclist_index complaints into errors
Unlike read_rnglists_index, read_loclist_index uses complaints when it
detects an inconsistency (a DW_FORM_loclistx value without a
.debug_loclists section or an offset outside of the section). I really
think they should be errors, since there's no point in continuing if
this situation happens, we will likely segfault or read garbage.
gdb/ChangeLog:
* dwarf2/read.c (read_loclist_index): Change complaints into
errors.
Change-Id: Ic3a1cf6e682d47cb6e739dd76fd7ca5be2637e10
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r-- | gdb/dwarf2/read.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 0a00f89..a9f7ce3 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -20218,19 +20218,22 @@ read_loclist_index (struct dwarf2_cu *cu, ULONGEST loclist_index) section->read (objfile); if (section->buffer == NULL) - complaint (_("DW_FORM_loclistx used without .debug_loclists " - "section [in module %s]"), objfile_name (objfile)); + error (_("DW_FORM_loclistx used without .debug_loclists " + "section [in module %s]"), objfile_name (objfile)); + struct loclists_rnglists_header header; read_loclists_rnglists_header (&header, section); if (loclist_index >= header.offset_entry_count) - complaint (_("DW_FORM_loclistx pointing outside of " - ".debug_loclists offset array [in module %s]"), - objfile_name (objfile)); + error (_("DW_FORM_loclistx pointing outside of " + ".debug_loclists offset array [in module %s]"), + objfile_name (objfile)); + if (loclist_base + loclist_index * cu->header.offset_size >= section->size) - complaint (_("DW_FORM_loclistx pointing outside of " - ".debug_loclists section [in module %s]"), - objfile_name (objfile)); + error (_("DW_FORM_loclistx pointing outside of " + ".debug_loclists section [in module %s]"), + objfile_name (objfile)); + const gdb_byte *info_ptr = section->buffer + loclist_base + loclist_index * cu->header.offset_size; |