[06/15] Add Dwarf member to Dwarf_Lines and Dwarf_Files

Message ID 20250120032041.280173-6-amerey@redhat.com
State Superseded
Headers
Series [01/15] Add eu_search_tree_init |

Commit Message

Aaron Merey Jan. 20, 2025, 3:20 a.m. UTC
  * libdw/dwarf_getsrclines.c (read_srcfiles): Initialize dbg
	member.
	* libdw/libdwP.h (struct Dwarf_Files_s): Add Dwarf member.
	(struct Dwarf_Lines_s): Ditto.

Signed-off-by: Aaron Merey <amerey@redhat.com>
---
 libdw/dwarf_getsrclines.c | 4 ++++
 libdw/libdwP.h            | 2 ++
 2 files changed, 6 insertions(+)
  

Comments

Mark Wielaard Jan. 23, 2025, 12:06 a.m. UTC | #1
Hi Aaron,

On Sun, Jan 19, 2025 at 10:20:32PM -0500, Aaron Merey wrote:
> 	* libdw/dwarf_getsrclines.c (read_srcfiles): Initialize dbg
> 	member.
> 	* libdw/libdwP.h (struct Dwarf_Files_s): Add Dwarf member.
> 	(struct Dwarf_Lines_s): Ditto.

Right, this is what you use in earlier patches to get back at the
Dwarf (dwarf_lock).

A Dwarf_Line_s already has a pointer to a Dwarf_Files, so might it be
able to use that instead of adding a Dwarf dbg to both?

> Signed-off-by: Aaron Merey <amerey@redhat.com>
> ---
>  libdw/dwarf_getsrclines.c | 4 ++++
>  libdw/libdwP.h            | 2 ++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
> index fb2c431b..6ae5abc7 100644
> --- a/libdw/dwarf_getsrclines.c
> +++ b/libdw/dwarf_getsrclines.c
> @@ -717,6 +717,7 @@ read_srcfiles (Dwarf *dbg,
>    if (unlikely (files == NULL))
>      goto no_mem;
>  
> +  files->dbg = dbg;
>    const char **dirs = (void *) &files->info[nfilelist];
>  
>    struct filelist *fileslist = filelist;
> @@ -1197,6 +1198,8 @@ read_srclines (Dwarf *dbg,
>                         + nnewfiles * sizeof (Dwarf_Fileinfo)
>                         + (ndirs + 1) * sizeof (char *),
>                         1);
> +      newfiles->dbg = dbg;
> +
>        /* Copy prevfiles to newfiles.  */
>        for (size_t n = 0; n < nprevfiles; n++)
>  	newfiles->info[n] = prevfiles->info[n];
> @@ -1254,6 +1257,7 @@ read_srclines (Dwarf *dbg,
>       The buffers overlap, so we've clobbered the early elements
>       of SORTLINES by the time we're reading the later ones.  */
>    Dwarf_Lines *lines = buf;
> +  lines->dbg = dbg;
>    lines->nlines = state.nlinelist;
>    for (size_t i = 0; i < state.nlinelist; ++i)
>      {
> diff --git a/libdw/libdwP.h b/libdw/libdwP.h
> index db5abeec..7655e3ec 100644
> --- a/libdw/libdwP.h
> +++ b/libdw/libdwP.h
> @@ -304,6 +304,7 @@ struct Dwarf_Abbrev
>  /* Files in line information records.  */
>  struct Dwarf_Files_s
>    {
> +    Dwarf *dbg;
>      unsigned int ndirs;
>      unsigned int nfiles;
>      struct Dwarf_Fileinfo_s
> @@ -345,6 +346,7 @@ struct Dwarf_Line_s
>  
>  struct Dwarf_Lines_s
>  {
> +  Dwarf *dbg;
>    size_t nlines;
>    struct Dwarf_Line_s info[0];
>  };
> -- 
> 2.47.1
>
  
Aaron Merey Jan. 24, 2025, 2:16 a.m. UTC | #2
Hi Mark,

On Wed, Jan 22, 2025 at 7:06 PM Mark Wielaard <mark@klomp.org> wrote:
>
> On Sun, Jan 19, 2025 at 10:20:32PM -0500, Aaron Merey wrote:
> >       * libdw/dwarf_getsrclines.c (read_srcfiles): Initialize dbg
> >       member.
> >       * libdw/libdwP.h (struct Dwarf_Files_s): Add Dwarf member.
> >       (struct Dwarf_Lines_s): Ditto.
>
> Right, this is what you use in earlier patches to get back at the
> Dwarf (dwarf_lock).
>
> A Dwarf_Line_s already has a pointer to a Dwarf_Files, so might it be
> able to use that instead of adding a Dwarf dbg to both?

That's right, I'll remove the Dwarf_Line_s dbg.

Aaron
  

Patch

diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index fb2c431b..6ae5abc7 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -717,6 +717,7 @@  read_srcfiles (Dwarf *dbg,
   if (unlikely (files == NULL))
     goto no_mem;
 
+  files->dbg = dbg;
   const char **dirs = (void *) &files->info[nfilelist];
 
   struct filelist *fileslist = filelist;
@@ -1197,6 +1198,8 @@  read_srclines (Dwarf *dbg,
                        + nnewfiles * sizeof (Dwarf_Fileinfo)
                        + (ndirs + 1) * sizeof (char *),
                        1);
+      newfiles->dbg = dbg;
+
       /* Copy prevfiles to newfiles.  */
       for (size_t n = 0; n < nprevfiles; n++)
 	newfiles->info[n] = prevfiles->info[n];
@@ -1254,6 +1257,7 @@  read_srclines (Dwarf *dbg,
      The buffers overlap, so we've clobbered the early elements
      of SORTLINES by the time we're reading the later ones.  */
   Dwarf_Lines *lines = buf;
+  lines->dbg = dbg;
   lines->nlines = state.nlinelist;
   for (size_t i = 0; i < state.nlinelist; ++i)
     {
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
index db5abeec..7655e3ec 100644
--- a/libdw/libdwP.h
+++ b/libdw/libdwP.h
@@ -304,6 +304,7 @@  struct Dwarf_Abbrev
 /* Files in line information records.  */
 struct Dwarf_Files_s
   {
+    Dwarf *dbg;
     unsigned int ndirs;
     unsigned int nfiles;
     struct Dwarf_Fileinfo_s
@@ -345,6 +346,7 @@  struct Dwarf_Line_s
 
 struct Dwarf_Lines_s
 {
+  Dwarf *dbg;
   size_t nlines;
   struct Dwarf_Line_s info[0];
 };