Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Tom Tromey <tom@tromey.com>, Simon Marchi <simon.marchi@efficios.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 09/11] gdb: add objfile -> solib backlink
Date: Thu, 7 May 2026 22:25:20 -0400	[thread overview]
Message-ID: <65bfee31-e375-4460-9327-e80fb3e2d244@polymtl.ca> (raw)
In-Reply-To: <87o6j3kq0p.fsf@tromey.com>

On 4/28/26 12:28 PM, Tom Tromey wrote:
>>>>>> "Simon" == Simon Marchi <simon.marchi@efficios.com> writes:
> 
> Simon> However, I learned that there may be more than one solib linked to one
> Simon> objfile, so this backlink is actually a vector.
> 
> How / when can this happen?  It seems surprising to me, except maybe for
> separate debug info.

The only case I'm aware of is the dynamic linker itself.  It appears in
all namespaces, with the same load address.  We get one solib for each
"view" of it, but all these solibs point to the same objfile.

I think I learned that around this time:

https://gitlab.com/gnutools/binutils-gdb/-/commit/d33a66a31134bd63c4945d0d570e7296aaac3574

I will make this sentence more precise.

> 
> Simon> @@ -732,10 +733,14 @@ remove_solib (program_space *pspace,
> Simon>    notify_solib_unloaded (pspace, *solib_it, still_in_use, false);
>  
> Simon>    /* Unless the user loaded it explicitly, free SO's objfile.  */
> Simon> -  if (solib_it->objfile != nullptr
> Simon> -      && !(solib_it->objfile->flags & OBJF_USERLOADED)
> Simon> -      && !still_in_use)
> Simon> -    solib_it->objfile->unlink ();
> Simon> +  if (solib_it->objfile != nullptr)
> Simon> +    {
> Simon> +      /* Remove the objfile -> solib backlink.  */
> Simon> +      solib_it->objfile->remove_solib (*solib_it);
> Simon> +
> Simon> +      if (!(solib_it->objfile->flags & OBJF_USERLOADED) && !still_in_use)
> Simon> +	solib_it->objfile->unlink ();
> Simon> +    }
>  
> Doesn't this mean that if one solib is removed, then other solibs with
> the same objfile will have a dangling objfile pointer?

I don't think so because of the still_in_use check, which is initialized
with:

  bool still_in_use
    = solib_it->objfile != nullptr && solib_used (pspace, *solib_it);

solib_used is:

  /* Return true if KNOWN->objfile is used by any other solib object
     in PSPACE's list of shared libraries.  Return false otherwise.  */

  static bool
  solib_used (program_space *pspace, const solib &known)
  {
    for (const solib &pivot : pspace->solibs ())
      if (&pivot != &known && pivot.objfile == known.objfile)
        return true;

    return false;
  }

If another solib points to the same objfile, we won't unlink the
objfile.  "solib_used" is not the best name for this function.

Simon

  reply	other threads:[~2026-05-08  2:25 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-09 19:32 [PATCH 00/11] Multiple solib_ops in a program_space Simon Marchi
2025-12-09 19:32 ` [PATCH 01/11] gdb/solib-rocm: assert that host ops isn't rocm_solib_ops Simon Marchi
2026-05-07 17:56   ` [PATCH 1/11] " Lancelot SIX
2026-05-08  1:37     ` Simon Marchi
2026-05-08 10:36       ` Lancelot SIX
2026-06-08 18:36         ` Simon Marchi
2025-12-09 19:32 ` [PATCH 02/11] gdb/solib: use early return in solib_read_symbols Simon Marchi
2026-04-28 16:16   ` Tom Tromey
2026-05-08  1:44     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 03/11] gdb/solib-rocm: pass reference to cache to rocm_code_object_stream_file Simon Marchi
2026-05-07 18:20   ` [PATCH 3/11] " Lancelot SIX
2026-05-08  1:48     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 04/11] gdb/solib-rocm: add cached_fd to manage cached fd lifetime Simon Marchi
2026-05-07 20:17   ` [PATCH 4/11] " Lancelot SIX
2026-05-08  1:52     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 05/11] gdb: de-constify some methods of solib_ops Simon Marchi
2025-12-09 19:32 ` [PATCH 06/11] gdb/solib-rocm: move per-inferior data to rocm_solib_ops Simon Marchi
2026-04-28 16:19   ` Tom Tromey
2026-05-08  2:02     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 07/11] gdb/solib-rocm: save inferior in rocm_solib_ops Simon Marchi
     [not found]   ` <87a4unm59w.fsf@tromey.com>
2026-05-08  2:10     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 08/11] gdb/solib: add remove_solib function Simon Marchi
2026-04-28 16:23   ` Tom Tromey
2025-12-09 19:32 ` [PATCH 09/11] gdb: add objfile -> solib backlink Simon Marchi
2026-04-28 16:28   ` Tom Tromey
2026-05-08  2:25     ` Simon Marchi [this message]
2025-12-09 19:32 ` [PATCH 10/11] gdb: change default objfile iteration order to start with current objfile Simon Marchi
2026-04-28 16:42   ` Tom Tromey
2026-05-08  2:40     ` Simon Marchi
2025-12-09 19:32 ` [PATCH 11/11] gdb: multiple solib_ops per program space Simon Marchi
2026-04-28 17:27   ` Tom Tromey
2026-05-08  2:52     ` Simon Marchi
2026-04-28 16:00 ` [PATCH 00/11] Multiple solib_ops in a program_space Simon Marchi
2026-04-28 17:28   ` Tom Tromey
2026-05-08  2:40     ` Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=65bfee31-e375-4460-9327-e80fb3e2d244@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@efficios.com \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox