From patchwork Mon Nov 7 15:53:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 60112 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D9A4B38582B4 for ; Mon, 7 Nov 2022 15:53:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D9A4B38582B4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667836438; bh=gwZ2Sa9QyhKqwVJqNqMQhUBuyooSQlPcTSp6+9+xpF8=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=onqCYjKb/V+sc5pr99GR6njUAFyN1RqB5vkW1z9KLN2bAohLj61cD/T+ikxfOpJiU qP6D/oARm4ccKXK1U/Rll0rOPNTMVuNNKAAyZBqOiK+kOLBDyeXjP/cc2I05fVLani L88BhuoL7uPtd/542I7F+X7FxY4KXYmmy12g31IU= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id 6CD613858422 for ; Mon, 7 Nov 2022 15:53:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6CD613858422 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 2A7FrBaT019846 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 7 Nov 2022 10:53:16 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 2A7FrBaT019846 Received: from simark.localdomain (unknown [217.28.27.60]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id B49ED1E124; Mon, 7 Nov 2022 10:53:11 -0500 (EST) To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 3/7] gdb: move frame_info_ptr method implementations to frame-info.c Date: Mon, 7 Nov 2022 10:53:06 -0500 Message-Id: <20221107155310.2590069-3-simon.marchi@polymtl.ca> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221107155310.2590069-1-simon.marchi@polymtl.ca> References: <20221107155310.2590069-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Mon, 7 Nov 2022 15:53:11 +0000 X-Spam-Status: No, score=-3189.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Simon Marchi via Gdb-patches From: Simon Marchi Reply-To: Simon Marchi Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" I don't see any particular reason why the implementations of the frame_info_ptr object are in the header file. It only seems to add some complexity. Since we can't include frame.h in frame-info.h, we have to add declarations of functions defined in frame.c, in frame-info.h. By moving the implementations to a new frame-info.c, we can avoid that. Change-Id: I435c828f81b8a3392c43ef018af31effddf6be9c Reviewed-By: Bruno Larsen --- gdb/Makefile.in | 1 + gdb/frame-info.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ gdb/frame-info.h | 20 ++------------------ gdb/frame.c | 4 +--- gdb/frame.h | 4 ++++ 5 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 gdb/frame-info.c diff --git a/gdb/Makefile.in b/gdb/Makefile.in index c528ee5aa806..32dbbb9c7003 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1086,6 +1086,7 @@ COMMON_SFILES = \ findvar.c \ frame.c \ frame-base.c \ + frame-info.c \ frame-unwind.c \ gcore.c \ gdb-demangle.c \ diff --git a/gdb/frame-info.c b/gdb/frame-info.c new file mode 100644 index 000000000000..84791205d906 --- /dev/null +++ b/gdb/frame-info.c @@ -0,0 +1,47 @@ +/* Frame info pointer + + Copyright (C) 2022 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "defs.h" + +#include "frame-info.h" +#include "frame.h" + +/* See frame-info-ptr.h. */ + +intrusive_list frame_info_ptr::frame_list; + +/* See frame-info-ptr.h. */ + +void +frame_info_ptr::prepare_reinflate () +{ + m_cached_id = get_frame_id (*this); +} + +/* See frame-info-ptr.h. */ + +void +frame_info_ptr::reinflate () +{ + gdb_assert (m_cached_id != null_frame_id); + + if (m_ptr == nullptr) + m_ptr = frame_find_by_id (m_cached_id).get (); + gdb_assert (m_ptr != nullptr); +} diff --git a/gdb/frame-info.h b/gdb/frame-info.h index 7159f82b1962..1d2d4bdc7e68 100644 --- a/gdb/frame-info.h +++ b/gdb/frame-info.h @@ -25,12 +25,6 @@ struct frame_info; -/* Forward declarations of functions, needed for the frame_info_ptr - to work correctly. */ -extern void reinit_frame_cache (); -extern struct frame_id get_frame_id (frame_info_ptr); -extern frame_info_ptr frame_find_by_id (struct frame_id id); - /* A wrapper for "frame_info *". frame_info objects are invalidated whenever reinit_frame_cache is called. This class arranges to invalidate the pointer when appropriate. This is done to help @@ -136,20 +130,10 @@ class frame_info_ptr : public intrusive_list_node } /* Cache the frame_id that the pointer will use to reinflate. */ - void prepare_reinflate () - { - m_cached_id = get_frame_id (*this); - } + void prepare_reinflate (); /* Use the cached frame_id to reinflate the pointer. */ - void reinflate () - { - gdb_assert (m_cached_id != null_frame_id); - - if (m_ptr == nullptr) - m_ptr = frame_find_by_id (m_cached_id).get (); - gdb_assert (m_ptr != nullptr); - } + void reinflate (); private: diff --git a/gdb/frame.c b/gdb/frame.c index 5cf9186e43d7..997fda77d019 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -19,6 +19,7 @@ #include "defs.h" #include "frame.h" +#include "frame-info.h" #include "target.h" #include "value.h" #include "inferior.h" /* for inferior_ptid */ @@ -56,9 +57,6 @@ static frame_info *sentinel_frame; /* Number of calls to reinit_frame_cache. */ static unsigned int frame_cache_generation = 0; -/* See frame-info.h. */ -intrusive_list frame_info_ptr::frame_list; - /* See frame.h. */ unsigned int diff --git a/gdb/frame.h b/gdb/frame.h index f61ea63c290b..5f7dcb69ee90 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -287,6 +287,10 @@ extern frame_info_ptr get_next_frame_sentinel_okay (frame_info_ptr); frame. */ extern frame_info_ptr get_prev_frame_always (frame_info_ptr); +/* Given a frame's ID, relocate the frame. Returns NULL if the frame + is not found. */ +extern frame_info_ptr frame_find_by_id (frame_id id); + /* Base attributes of a frame: */ /* The frame's `resume' address. Where the program will resume in