From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id K97JCTA5R2iDawcAWB0awg (envelope-from ) for ; Mon, 09 Jun 2025 15:42:40 -0400 Received: by simark.ca (Postfix, from userid 112) id 0E2F71E11C; Mon, 9 Jun 2025 15:42:40 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-9.0 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE autolearn=unavailable autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 3483D1E0C2 for ; Mon, 9 Jun 2025 15:42:39 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B4844383068B for ; Mon, 9 Jun 2025 19:42:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B4844383068B Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 6E81C3858D38 for ; Mon, 9 Jun 2025 19:41:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6E81C3858D38 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6E81C3858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1749498110; cv=none; b=TznizH+PT5sRb5mPcKqa5/bONthtKea7gc64I0Rsqr+PlzCwOvWlE5BI+Xg9EeuF0x6qWPIVvxnDIERkO+W/vQ+DqjGBx/BdTr3Mg2EsM2NlBb3WzrinK9O9Vrd6GKcsRgUCik1HSq7XGWYbUCRraWcMsGsoxi5kHlKeBg0eTmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1749498110; c=relaxed/simple; bh=e0GxCjjAsylVicNh/5xXV5SfSFHw3JqgDM+hKjcQT24=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=u/SDjcZRWv6LCZgBKNHj/JghTsLTnAQqtA6pNM2JBxFO0FIJSe0Z6Y/Qi12P0Cze/G49fyvdf55pm9FDykcg1D2QYM2u3pvEo1Dlq0aANG68TUmdCOEBFJOylZYy1QIhpiuIeyXIYavqoTUsaDyfpjXyF4g1KzVNGZ1/HnR/DdE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6E81C3858D38 Received: by simark.ca (Postfix, from userid 112) id 1F9161E126; Mon, 9 Jun 2025 15:41:50 -0400 (EDT) Received: from smarchi-efficios.internal.efficios.com (192-222-132-26.qc.cable.ebox.net [192.222.132.26]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 8919F1E0C2; Mon, 9 Jun 2025 15:41:48 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH v2 1/4] gdb/solib: add solib -> solib_ops backlink Date: Mon, 9 Jun 2025 15:40:55 -0400 Message-ID: <20250609194146.137730-1-simon.marchi@efficios.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org The subsequent C++ification commit makes it so that one struct solib_ops is instantiated for each program space. For some operations, it will then become necessary to be able to get the right solib_ops instance from a given solib. Add an solib -> solib_ops backlink for that. Change-Id: Ib95407b3fa5fcfba55cf874e0e9dcd2d43a402e4 --- gdb/solib-aix.c | 2 +- gdb/solib-darwin.c | 2 +- gdb/solib-dsbt.c | 2 +- gdb/solib-frv.c | 2 +- gdb/solib-rocm.c | 2 +- gdb/solib-svr4.c | 4 ++-- gdb/solib-target.c | 2 +- gdb/solib.h | 15 +++++++++++++++ 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 4af83de4d371..17eeba940770 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -480,7 +480,7 @@ solib_aix_current_sos () } /* Add it to the list. */ - auto &new_solib = sos.emplace_back (); + auto &new_solib = sos.emplace_back (solib_aix_so_ops); new_solib.original_name = so_name; new_solib.name = so_name; new_solib.lm_info = std::make_unique (info); diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c index 4003c77748ca..88a2962f5dd5 100644 --- a/gdb/solib-darwin.c +++ b/gdb/solib-darwin.c @@ -250,7 +250,7 @@ darwin_current_sos () break; /* Create and fill the new struct solib element. */ - auto &newobj = sos.emplace_back (); + auto &newobj = sos.emplace_back (darwin_so_ops); auto li = std::make_unique (); diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c index 2b3153692805..f6748b69353a 100644 --- a/gdb/solib-dsbt.c +++ b/gdb/solib-dsbt.c @@ -584,7 +584,7 @@ dsbt_current_sos (void) break; } - auto &sop = sos.emplace_back (); + auto &sop = sos.emplace_back (dsbt_so_ops); auto li = std::make_unique (); li->map = loadmap; /* Fetch the name. */ diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index ceef72208a1b..12d3140b513c 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -367,7 +367,7 @@ frv_current_sos () break; } - auto &sop = sos.emplace_back (); + auto &sop = sos.emplace_back (frv_so_ops); auto li = std::make_unique (); li->map = loadmap; li->got_value = got_addr; diff --git a/gdb/solib-rocm.c b/gdb/solib-rocm.c index b27613bbf91a..a3599562e795 100644 --- a/gdb/solib-rocm.c +++ b/gdb/solib-rocm.c @@ -210,7 +210,7 @@ solibs_from_rocm_sos (const std::vector &sos) for (const rocm_so &so : sos) { - auto &newobj = dst.emplace_back (); + auto &newobj = dst.emplace_back (rocm_solib_ops); newobj.lm_info = std::make_unique (*so.lm_info); newobj.name = so.name; diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 48aace1feb48..deefc2578599 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1050,7 +1050,7 @@ solib_from_svr4_sos (const std::vector &sos) for (const svr4_so &so : sos) { - auto &newobj = dst.emplace_back (); + auto &newobj = dst.emplace_back (svr4_so_ops); newobj.name = so.name; newobj.original_name = so.name; @@ -1250,7 +1250,7 @@ svr4_default_sos (svr4_info *info) li->l_addr_p = 1; owning_intrusive_list sos; - auto &newobj = sos.emplace_back (); + auto &newobj = sos.emplace_back (svr4_so_ops); newobj.lm_info = std::move (li); newobj.name = info->debug_loader_name; diff --git a/gdb/solib-target.c b/gdb/solib-target.c index 68dc3cc92c0a..61b841928ff8 100644 --- a/gdb/solib-target.c +++ b/gdb/solib-target.c @@ -245,7 +245,7 @@ solib_target_current_sos (void) /* Build a struct solib for each entry on the list. */ for (lm_info_target_up &info : library_list) { - auto &new_solib = sos.emplace_back (); + auto &new_solib = sos.emplace_back (solib_target_so_ops); /* We don't need a copy of the name in INFO anymore. */ new_solib.name = std::move (info->name); diff --git a/gdb/solib.h b/gdb/solib.h index f5922aa5f5d6..09d56c08b953 100644 --- a/gdb/solib.h +++ b/gdb/solib.h @@ -54,8 +54,19 @@ struct lm_info using lm_info_up = std::unique_ptr; +struct solib_ops; + struct solib : intrusive_list_node { + /* Constructor + + OPS is the solib_ops implementation providing this solib. */ + explicit solib (const solib_ops &ops) : m_ops (&ops) {} + + /* Return the solib_ops implementation providing this solib. */ + const solib_ops &ops () const + { return *m_ops; } + /* Free symbol-file related contents of SO and reset for possible reloading of SO. If we have opened a BFD for SO, close it. If we have placed SO's sections in some target's section table, the caller is responsible for @@ -111,6 +122,10 @@ struct solib : intrusive_list_node that supports outputting multiple segments once the related code supports them. */ CORE_ADDR addr_low = 0, addr_high = 0; + +private: + /* The solib_ops responsible for this solib. */ + const solib_ops *m_ops; }; /* A unique pointer to an solib. */ base-commit: 5c42a6946cdb683340df92a77b1e0321ecb8e09a -- 2.49.0