From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1879) id DEF15385840A; Thu, 10 Nov 2022 16:34:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DEF15385840A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668098040; bh=hjY1s70i3zUGq2rYvS8O3Di6YK+cEXG9zuUvgwjBRRo=; h=From:To:Subject:Date:From; b=Siofbk5NHNwnNo31hF82EIZv2olTN4DKZZ/QJFerJwINyZ6E08QQKu5QWPxKde0cT pMXyFKQ2hFnK4znxyLImzWTsLx/P2MkU9bYNJikf/nMJD9YvWG3zUv4z+hwVq2E9sA Y35X8NqVWOoz3KNf8GkGFCjTE/LDm3eX29awzqhU= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Simon Marchi To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb: move frame_info_ptr method implementations to frame-info.c X-Act-Checkin: binutils-gdb X-Git-Author: Simon Marchi X-Git-Refname: refs/heads/master X-Git-Oldrev: 3dc9dde26d1c279e888d1fd0361f720e5a3721f3 X-Git-Newrev: 04e2ac7b2a7c5fbc0afcf151aeb8a26415ad0fac Message-Id: <20221110163400.DEF15385840A@sourceware.org> Date: Thu, 10 Nov 2022 16:34:00 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D04e2ac7b2a7c= 5fbc0afcf151aeb8a26415ad0fac commit 04e2ac7b2a7c5fbc0afcf151aeb8a26415ad0fac Author: Simon Marchi Date: Fri Oct 21 16:06:59 2022 -0400 gdb: move frame_info_ptr method implementations to frame-info.c =20 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. =20 Change-Id: I435c828f81b8a3392c43ef018af31effddf6be9c Reviewed-By: Bruno Larsen Reviewed-By: Tom Tromey Diff: --- 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(-) diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0f5df2ccb7b..fb4d42c7baa 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1088,6 +1088,7 @@ COMMON_SFILES =3D \ 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 00000000000..84791205d90 --- /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 =3D get_frame_id (*this); +} + +/* See frame-info-ptr.h. */ + +void +frame_info_ptr::reinflate () +{ + gdb_assert (m_cached_id !=3D null_frame_id); + + if (m_ptr =3D=3D nullptr) + m_ptr =3D frame_find_by_id (m_cached_id).get (); + gdb_assert (m_ptr !=3D nullptr); +} diff --git a/gdb/frame-info.h b/gdb/frame-info.h index 7159f82b196..1d2d4bdc7e6 100644 --- a/gdb/frame-info.h +++ b/gdb/frame-info.h @@ -25,12 +25,6 @@ =20 struct frame_info; =20 -/* 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 @@ public: } =20 /* Cache the frame_id that the pointer will use to reinflate. */ - void prepare_reinflate () - { - m_cached_id =3D get_frame_id (*this); - } + void prepare_reinflate (); =20 /* Use the cached frame_id to reinflate the pointer. */ - void reinflate () - { - gdb_assert (m_cached_id !=3D null_frame_id); - - if (m_ptr =3D=3D nullptr) - m_ptr =3D frame_find_by_id (m_cached_id).get (); - gdb_assert (m_ptr !=3D nullptr); - } + void reinflate (); =20 private: =20 diff --git a/gdb/frame.c b/gdb/frame.c index 14f9668ce00..c8c4ec817a4 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -19,6 +19,7 @@ =20 #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 =3D 0; =20 -/* See frame-info.h. */ -intrusive_list frame_info_ptr::frame_list; - /* See frame.h. */ =20 unsigned int diff --git a/gdb/frame.h b/gdb/frame.h index 0a142ad2fc4..6b841fd5063 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -280,6 +280,10 @@ extern frame_info_ptr get_next_frame_sentinel_okay (fr= ame_info_ptr); frame. */ extern frame_info_ptr get_prev_frame_always (frame_info_ptr); =20 +/* 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: */ =20 /* The frame's `resume' address. Where the program will resume in