public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Add dwarf2_section_info::read_string method
@ 2020-03-26 15:33 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2020-03-26 15:33 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4f44ae6c69b839712a33a46aaa62d58d2b16b4ca

commit 4f44ae6c69b839712a33a46aaa62d58d2b16b4ca
Author: Tom Tromey <tom@tromey.com>
Date:   Thu Mar 26 09:28:08 2020 -0600

    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.

Diff:
---
 gdb/ChangeLog        | 13 ++++++++++++
 gdb/dwarf2/read.c    | 60 ++++++++++------------------------------------------
 gdb/dwarf2/section.c | 17 +++++++++++++++
 gdb/dwarf2/section.h |  5 +++++
 4 files changed, 46 insertions(+), 49 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 236f552024a..15e65eb2e02 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
 
 	* dwarf2/section.h (struct dwarf2_section_info)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index f284d623081..fab5b94f0a7 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 9714368a5d2..776617911a2 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 555efecacd6..02f42df78c6 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.  */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-03-26 15:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 15:33 [binutils-gdb] Add dwarf2_section_info::read_string method Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).