[04/22] Split dwarf_decode_macros into two overloads

Message ID 20200322184523.28959-5-tom@tromey.com
State New
Headers show
Series
  • More splitting of dwarf2/read.c
Related show

Commit Message

Tom Tromey March 22, 2020, 6:45 p.m.
This splits dwarf_decode_macros into two overloads -- one that's
suitable for splitting into a separate file, and one that finds the
correct section and should remain in dwarf2/read.c.

gdb/ChangeLog
2020-03-22  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (dwarf_decode_macros): Split into two overloads.
---
 gdb/ChangeLog     |   4 ++
 gdb/dwarf2/read.c | 102 +++++++++++++++++++++++++++-------------------
 2 files changed, 63 insertions(+), 43 deletions(-)

-- 
2.17.2

Comments

Jose E. Marchesi via Gdb-patches March 23, 2020, 4:13 p.m. | #1
On Sun, Mar 22, 2020 at 1:45 PM Tom Tromey <tom@tromey.com> wrote:
>

> This splits dwarf_decode_macros into two overloads -- one that's

> suitable for splitting into a separate file, and one that finds the

> correct section and should remain in dwarf2/read.c.

>

> gdb/ChangeLog

> 2020-03-22  Tom Tromey  <tom@tromey.com>

>

>         * dwarf2/read.c (dwarf_decode_macros): Split into two overloads.

> ---

>  gdb/ChangeLog     |   4 ++

>  gdb/dwarf2/read.c | 102 +++++++++++++++++++++++++++-------------------

>  2 files changed, 63 insertions(+), 43 deletions(-)

>

> diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c

> index 1410dd48a2f..2d126461c74 100644

> --- a/gdb/dwarf2/read.c

> +++ b/gdb/dwarf2/read.c

> @@ -23753,56 +23753,18 @@ dwarf_decode_macro_bytes (struct dwarf2_per_objfile *dwarf2_per_objfile,

>  }

>

>  static void

> -dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

> -                     int section_is_gnu)

> +dwarf_decode_macros (struct dwarf2_per_objfile *dwarf2_per_objfile,

> +                    buildsym_compunit *builder, dwarf2_section_info *section,

> +                    struct line_header *lh, unsigned int offset_size,

> +                    unsigned int offset, int section_is_gnu)

>  {

> -  struct dwarf2_per_objfile *dwarf2_per_objfile

> -    = cu->per_cu->dwarf2_per_objfile;

> -  struct objfile *objfile = dwarf2_per_objfile->objfile;

> -  struct line_header *lh = cu->line_header;

>    bfd *abfd;

>    const gdb_byte *mac_ptr, *mac_end;

>    struct macro_source_file *current_file = 0;

>    enum dwarf_macro_record_type macinfo_type;

> -  unsigned int offset_size = cu->header.offset_size;

>    const gdb_byte *opcode_definitions[256];

>    void **slot;

> -  struct dwarf2_section_info *section;

> -  const char *section_name;

>

> -  if (cu->dwo_unit != NULL)

> -    {

> -      if (section_is_gnu)

> -       {

> -         section = &cu->dwo_unit->dwo_file->sections.macro;

> -         section_name = ".debug_macro.dwo";

> -       }

> -      else

> -       {

> -         section = &cu->dwo_unit->dwo_file->sections.macinfo;

> -         section_name = ".debug_macinfo.dwo";

> -       }

> -    }

> -  else

> -    {

> -      if (section_is_gnu)

> -       {

> -         section = &dwarf2_per_objfile->macro;

> -         section_name = ".debug_macro";

> -       }

> -      else

> -       {

> -         section = &dwarf2_per_objfile->macinfo;

> -         section_name = ".debug_macinfo";

> -       }

> -    }

> -

> -  section->read (objfile);

> -  if (section->buffer == NULL)

> -    {

> -      complaint (_("missing %s section"), section_name);

> -      return;

> -    }

>    abfd = section->get_bfd_owner ();

>

>    /* First pass: Find the name of the base filename.

> @@ -23827,7 +23789,6 @@ dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

>        return;

>      }

>

> -  buildsym_compunit *builder = cu->get_builder ();

>    do

>      {

>        /* Do we at least have room for a macinfo type byte?  */

> @@ -23949,6 +23910,61 @@ dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

>                             include_hash.get ());

>  }

>

> +/* An overload of dwarf_decode_macros that finds the correct section

> +   and ensures it is read in before calling the other overload.  */

> +

> +static void

> +dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

> +                     int section_is_gnu)

> +{

> +  struct dwarf2_per_objfile *dwarf2_per_objfile

> +    = cu->per_cu->dwarf2_per_objfile;

> +  struct objfile *objfile = dwarf2_per_objfile->objfile;

> +  struct line_header *lh = cu->line_header;

> +  unsigned int offset_size = cu->header.offset_size;

> +  struct dwarf2_section_info *section;

> +  const char *section_name;

> +

> +  if (cu->dwo_unit != NULL)


Since you're touching these lines, want to change NULL to nullptr? (in
a few places)

Christian

> +    {

> +      if (section_is_gnu)

> +       {

> +         section = &cu->dwo_unit->dwo_file->sections.macro;

> +         section_name = ".debug_macro.dwo";

> +       }

> +      else

> +       {

> +         section = &cu->dwo_unit->dwo_file->sections.macinfo;

> +         section_name = ".debug_macinfo.dwo";

> +       }

> +    }

> +  else

> +    {

> +      if (section_is_gnu)

> +       {

> +         section = &dwarf2_per_objfile->macro;

> +         section_name = ".debug_macro";

> +       }

> +      else

> +       {

> +         section = &dwarf2_per_objfile->macinfo;

> +         section_name = ".debug_macinfo";

> +       }

> +    }

> +

> +  section->read (objfile);

> +  if (section->buffer == NULL)

> +    {

> +      complaint (_("missing %s section"), section_name);

> +      return;

> +    }

> +

> +  buildsym_compunit *builder = cu->get_builder ();

> +

> +  dwarf_decode_macros (dwarf2_per_objfile, builder, section, lh,

> +                      offset_size, offset, section_is_gnu);

> +}

> +

>  /* Return the .debug_loc section to use for CU.

>     For DWO files use .debug_loc.dwo.  */

>

> --

> 2.17.2

>
Simon Marchi March 24, 2020, 1:58 a.m. | #2
On 2020-03-22 2:45 p.m., Tom Tromey wrote:
> @@ -23949,6 +23910,61 @@ dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

>  			    include_hash.get ());

>  }

>  

> +/* An overload of dwarf_decode_macros that finds the correct section

> +   and ensures it is read in before calling the other overload.  */

> +

> +static void

> +dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

> +                     int section_is_gnu)


Spaces -> tabs.

Simon
Tom Tromey March 26, 2020, 2:09 a.m. | #3
>>>>> "Christian" == Christian Biesinger <cbiesinger@google.com> writes:


>> +  if (cu->dwo_unit != NULL)


Christian> Since you're touching these lines, want to change NULL to nullptr? (in
Christian> a few places)

I made this change.

Tom
Tom Tromey March 26, 2020, 2:10 a.m. | #4
>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:


>> +static void

>> +dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,

>> +                     int section_is_gnu)


Simon> Spaces -> tabs.

Done.

Tom

Patch

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 1410dd48a2f..2d126461c74 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -23753,56 +23753,18 @@  dwarf_decode_macro_bytes (struct dwarf2_per_objfile *dwarf2_per_objfile,
 }
 
 static void
-dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
-                     int section_is_gnu)
+dwarf_decode_macros (struct dwarf2_per_objfile *dwarf2_per_objfile,
+		     buildsym_compunit *builder, dwarf2_section_info *section,
+		     struct line_header *lh, unsigned int offset_size,
+		     unsigned int offset, int section_is_gnu)
 {
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct line_header *lh = cu->line_header;
   bfd *abfd;
   const gdb_byte *mac_ptr, *mac_end;
   struct macro_source_file *current_file = 0;
   enum dwarf_macro_record_type macinfo_type;
-  unsigned int offset_size = cu->header.offset_size;
   const gdb_byte *opcode_definitions[256];
   void **slot;
-  struct dwarf2_section_info *section;
-  const char *section_name;
 
-  if (cu->dwo_unit != NULL)
-    {
-      if (section_is_gnu)
-	{
-	  section = &cu->dwo_unit->dwo_file->sections.macro;
-	  section_name = ".debug_macro.dwo";
-	}
-      else
-	{
-	  section = &cu->dwo_unit->dwo_file->sections.macinfo;
-	  section_name = ".debug_macinfo.dwo";
-	}
-    }
-  else
-    {
-      if (section_is_gnu)
-	{
-	  section = &dwarf2_per_objfile->macro;
-	  section_name = ".debug_macro";
-	}
-      else
-	{
-	  section = &dwarf2_per_objfile->macinfo;
-	  section_name = ".debug_macinfo";
-	}
-    }
-
-  section->read (objfile);
-  if (section->buffer == NULL)
-    {
-      complaint (_("missing %s section"), section_name);
-      return;
-    }
   abfd = section->get_bfd_owner ();
 
   /* First pass: Find the name of the base filename.
@@ -23827,7 +23789,6 @@  dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
       return;
     }
 
-  buildsym_compunit *builder = cu->get_builder ();
   do
     {
       /* Do we at least have room for a macinfo type byte?  */
@@ -23949,6 +23910,61 @@  dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
 			    include_hash.get ());
 }
 
+/* An overload of dwarf_decode_macros that finds the correct section
+   and ensures it is read in before calling the other overload.  */
+
+static void
+dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
+                     int section_is_gnu)
+{
+  struct dwarf2_per_objfile *dwarf2_per_objfile
+    = cu->per_cu->dwarf2_per_objfile;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct line_header *lh = cu->line_header;
+  unsigned int offset_size = cu->header.offset_size;
+  struct dwarf2_section_info *section;
+  const char *section_name;
+
+  if (cu->dwo_unit != NULL)
+    {
+      if (section_is_gnu)
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macro;
+	  section_name = ".debug_macro.dwo";
+	}
+      else
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macinfo;
+	  section_name = ".debug_macinfo.dwo";
+	}
+    }
+  else
+    {
+      if (section_is_gnu)
+	{
+	  section = &dwarf2_per_objfile->macro;
+	  section_name = ".debug_macro";
+	}
+      else
+	{
+	  section = &dwarf2_per_objfile->macinfo;
+	  section_name = ".debug_macinfo";
+	}
+    }
+
+  section->read (objfile);
+  if (section->buffer == NULL)
+    {
+      complaint (_("missing %s section"), section_name);
+      return;
+    }
+
+  buildsym_compunit *builder = cu->get_builder ();
+
+  dwarf_decode_macros (dwarf2_per_objfile, builder, section, lh,
+		       offset_size, offset, section_is_gnu);
+}
+
 /* Return the .debug_loc section to use for CU.
    For DWO files use .debug_loc.dwo.  */