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.
This commit is contained in:
parent
a0194fa8f2
commit
4f44ae6c69
4 changed files with 46 additions and 49 deletions
|
@ -1,3 +1,16 @@
|
||||||
|
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>
|
2020-03-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* dwarf2/section.h (struct dwarf2_section_info)
|
* dwarf2/section.h (struct dwarf2_section_info)
|
||||||
|
|
|
@ -1256,8 +1256,7 @@ static const char *read_indirect_line_string
|
||||||
const struct comp_unit_head *, unsigned int *);
|
const struct comp_unit_head *, unsigned int *);
|
||||||
|
|
||||||
static const char *read_indirect_string_at_offset
|
static const char *read_indirect_string_at_offset
|
||||||
(struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd,
|
(struct dwarf2_per_objfile *dwarf2_per_objfile, LONGEST str_offset);
|
||||||
LONGEST str_offset);
|
|
||||||
|
|
||||||
static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
|
static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
|
||||||
const gdb_byte *,
|
const gdb_byte *,
|
||||||
|
@ -5171,8 +5170,8 @@ mapped_debug_names::namei_to_name (uint32_t namei) const
|
||||||
+ namei * offset_size),
|
+ namei * offset_size),
|
||||||
offset_size,
|
offset_size,
|
||||||
dwarf5_byte_order);
|
dwarf5_byte_order);
|
||||||
return read_indirect_string_at_offset
|
return read_indirect_string_at_offset (dwarf2_per_objfile,
|
||||||
(dwarf2_per_objfile, dwarf2_per_objfile->objfile->obfd, namei_string_offs);
|
namei_string_offs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a slot in .debug_names for the object named NAME. If NAME is
|
/* 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 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. */
|
/* Return pointer to string at .debug_str offset STR_OFFSET. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
read_indirect_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
|
read_indirect_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,
|
return dwarf2_per_objfile->str.read_string (dwarf2_per_objfile->objfile,
|
||||||
abfd, str_offset,
|
str_offset, "DW_FORM_strp");
|
||||||
&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)
|
|
||||||
{
|
|
||||||
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 pointer to string at .debug_str offset as read from BUF.
|
/* 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);
|
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.
|
/* 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);
|
LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr);
|
||||||
|
|
||||||
return read_indirect_line_string_at_offset (dwarf2_per_objfile, abfd,
|
return dwarf2_per_objfile->line_str.read_string (dwarf2_per_objfile->objfile,
|
||||||
str_offset);
|
str_offset,
|
||||||
|
"DW_FORM_line_strp");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given index ADDR_INDEX in .debug_addr, fetch the value.
|
/* 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
|
else
|
||||||
body = read_indirect_string_at_offset (dwarf2_per_objfile,
|
body = read_indirect_string_at_offset (dwarf2_per_objfile,
|
||||||
abfd, str_offset);
|
str_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
is_define = (macinfo_type == DW_MACRO_define
|
is_define = (macinfo_type == DW_MACRO_define
|
||||||
|
|
|
@ -187,3 +187,20 @@ dwarf2_section_info::read (struct objfile *objfile)
|
||||||
bfd_section_name (sectp), bfd_get_filename (abfd));
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -98,6 +98,11 @@ struct dwarf2_section_info
|
||||||
buffer. */
|
buffer. */
|
||||||
void overflow_complaint () const;
|
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
|
union
|
||||||
{
|
{
|
||||||
/* If this is a real section, the bfd section. */
|
/* If this is a real section, the bfd section. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue