aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-03-26 09:28:08 -0600
committerTom Tromey <tom@tromey.com>2020-03-26 09:28:14 -0600
commit4f44ae6c69b839712a33a46aaa62d58d2b16b4ca (patch)
tree1f72cc9e602841300aa6cd37cc234dda8602b1cb /gdb
parenta0194fa8f23c64bef0f4b4bb4a76e9c64f003169 (diff)
downloadgdb-4f44ae6c69b839712a33a46aaa62d58d2b16b4ca.zip
gdb-4f44ae6c69b839712a33a46aaa62d58d2b16b4ca.tar.gz
gdb-4f44ae6c69b839712a33a46aaa62d58d2b16b4ca.tar.bz2
Add dwarf2_section_info::read_string method
This moves a string-reading function to be a method on dwarf2_section_info, and then updates the users. gdb/ChangeLog 2020-03-26 Tom Tromey <tom@tromey.com> * dwarf2/section.h (struct dwarf2_section_info) <read_string>: New method. * dwarf2/section.c: New method. From read_indirect_string_at_offset_from. * dwarf2/read.c (mapped_debug_names::namei_to_name): Update. (read_indirect_string_at_offset_from): Move to section.c. (read_indirect_string_at_offset): Rewrite. (read_indirect_line_string_at_offset): Remove. (read_indirect_string, read_indirect_line_string) (dwarf_decode_macro_bytes): Update.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/dwarf2/read.c60
-rw-r--r--gdb/dwarf2/section.c17
-rw-r--r--gdb/dwarf2/section.h5
4 files changed, 46 insertions, 49 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 236f552..15e65eb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,18 @@
2020-03-26 Tom Tromey <tom@tromey.com>
+ * dwarf2/section.h (struct dwarf2_section_info) <read_string>: New
+ method.
+ * dwarf2/section.c: New method. From
+ read_indirect_string_at_offset_from.
+ * dwarf2/read.c (mapped_debug_names::namei_to_name): Update.
+ (read_indirect_string_at_offset_from): Move to section.c.
+ (read_indirect_string_at_offset): Rewrite.
+ (read_indirect_line_string_at_offset): Remove.
+ (read_indirect_string, read_indirect_line_string)
+ (dwarf_decode_macro_bytes): Update.
+
+2020-03-26 Tom Tromey <tom@tromey.com>
+
* dwarf2/section.h (struct dwarf2_section_info)
<overload_complaint>: Declare.
(dwarf2_section_buffer_overflow_complaint): Don't declare.
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index f284d62..fab5b94 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -1256,8 +1256,7 @@ static const char *read_indirect_line_string
const struct comp_unit_head *, unsigned int *);
static const char *read_indirect_string_at_offset
- (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd,
- LONGEST str_offset);
+ (struct dwarf2_per_objfile *dwarf2_per_objfile, LONGEST str_offset);
static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
const gdb_byte *,
@@ -5171,8 +5170,8 @@ mapped_debug_names::namei_to_name (uint32_t namei) const
+ namei * offset_size),
offset_size,
dwarf5_byte_order);
- return read_indirect_string_at_offset
- (dwarf2_per_objfile, dwarf2_per_objfile->objfile->obfd, namei_string_offs);
+ return read_indirect_string_at_offset (dwarf2_per_objfile,
+ namei_string_offs);
}
/* Find a slot in .debug_names for the object named NAME. If NAME is
@@ -18770,52 +18769,14 @@ read_checked_initial_length_and_offset (bfd *abfd, const gdb_byte *buf,
return length;
}
-/* Return pointer to string at section SECT offset STR_OFFSET with error
- reporting strings FORM_NAME and SECT_NAME. */
-
-static const char *
-read_indirect_string_at_offset_from (struct objfile *objfile,
- bfd *abfd, LONGEST str_offset,
- struct dwarf2_section_info *sect,
- const char *form_name,
- const char *sect_name)
-{
- sect->read (objfile);
- if (sect->buffer == NULL)
- error (_("%s used without %s section [in module %s]"),
- form_name, sect_name, bfd_get_filename (abfd));
- if (str_offset >= sect->size)
- error (_("%s pointing outside of %s section [in module %s]"),
- form_name, sect_name, bfd_get_filename (abfd));
- gdb_assert (HOST_CHAR_BIT == 8);
- if (sect->buffer[str_offset] == '\0')
- return NULL;
- return (const char *) (sect->buffer + str_offset);
-}
-
/* Return pointer to string at .debug_str offset STR_OFFSET. */
static const char *
read_indirect_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
- bfd *abfd, LONGEST str_offset)
-{
- return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile,
- abfd, str_offset,
- &dwarf2_per_objfile->str,
- "DW_FORM_strp", ".debug_str");
-}
-
-/* Return pointer to string at .debug_line_str offset STR_OFFSET. */
-
-static const char *
-read_indirect_line_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
- bfd *abfd, LONGEST str_offset)
+ LONGEST str_offset)
{
- return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile,
- abfd, str_offset,
- &dwarf2_per_objfile->line_str,
- "DW_FORM_line_strp",
- ".debug_line_str");
+ return dwarf2_per_objfile->str.read_string (dwarf2_per_objfile->objfile,
+ str_offset, "DW_FORM_strp");
}
/* Return pointer to string at .debug_str offset as read from BUF.
@@ -18830,7 +18791,7 @@ read_indirect_string (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd,
{
LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr);
- return read_indirect_string_at_offset (dwarf2_per_objfile, abfd, str_offset);
+ return read_indirect_string_at_offset (dwarf2_per_objfile, str_offset);
}
/* Return pointer to string at .debug_line_str offset as read from BUF.
@@ -18845,8 +18806,9 @@ read_indirect_line_string (struct dwarf2_per_objfile *dwarf2_per_objfile,
{
LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr);
- return read_indirect_line_string_at_offset (dwarf2_per_objfile, abfd,
- str_offset);
+ return dwarf2_per_objfile->line_str.read_string (dwarf2_per_objfile->objfile,
+ str_offset,
+ "DW_FORM_line_strp");
}
/* Given index ADDR_INDEX in .debug_addr, fetch the value.
@@ -23549,7 +23511,7 @@ dwarf_decode_macro_bytes (struct dwarf2_per_objfile *dwarf2_per_objfile,
}
else
body = read_indirect_string_at_offset (dwarf2_per_objfile,
- abfd, str_offset);
+ str_offset);
}
is_define = (macinfo_type == DW_MACRO_define
diff --git a/gdb/dwarf2/section.c b/gdb/dwarf2/section.c
index 9714368..7766179 100644
--- a/gdb/dwarf2/section.c
+++ b/gdb/dwarf2/section.c
@@ -187,3 +187,20 @@ dwarf2_section_info::read (struct objfile *objfile)
bfd_section_name (sectp), bfd_get_filename (abfd));
}
}
+
+const char *
+dwarf2_section_info::read_string (struct objfile *objfile, LONGEST str_offset,
+ const char *form_name)
+{
+ read (objfile);
+ if (buffer == NULL)
+ error (_("%s used without %s section [in module %s]"),
+ form_name, get_name (), get_file_name ());
+ if (str_offset >= size)
+ error (_("%s pointing outside of %s section [in module %s]"),
+ form_name, get_name (), get_file_name ());
+ gdb_assert (HOST_CHAR_BIT == 8);
+ if (buffer[str_offset] == '\0')
+ return NULL;
+ return (const char *) (buffer + str_offset);
+}
diff --git a/gdb/dwarf2/section.h b/gdb/dwarf2/section.h
index 555efec..02f42df 100644
--- a/gdb/dwarf2/section.h
+++ b/gdb/dwarf2/section.h
@@ -98,6 +98,11 @@ struct dwarf2_section_info
buffer. */
void overflow_complaint () const;
+ /* Return pointer to string in this section at offset STR_OFFSET
+ with error reporting string FORM_NAME. */
+ const char *read_string (struct objfile *objfile, LONGEST str_offset,
+ const char *form_name);
+
union
{
/* If this is a real section, the bfd section. */