From: Simon Marchi <simon.marchi@polymtl.ca>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@polymtl.ca>
Subject: [PATCH v2 09/13] gdb: add create_new_frame(frame_id) overload
Date: Tue, 13 Dec 2022 22:34:37 -0500 [thread overview]
Message-ID: <20221214033441.499512-10-simon.marchi@polymtl.ca> (raw)
In-Reply-To: <20221214033441.499512-1-simon.marchi@polymtl.ca>
The subsequent patches will need to call create_new_frame with an
existing frame_id representing a user created frame. They could call
the existing create_new_frame, passing both addresses, but it seems
nicer to have a version of the function that takes a frame_id directly.
Change-Id: If31025314fec0c3e644703e4391a5ef8079e1a32
---
gdb/frame.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/gdb/frame.c b/gdb/frame.c
index 528ad76b58de..b9132d0f35a7 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1929,22 +1929,23 @@ select_frame (frame_info_ptr fi)
/* Create an arbitrary (i.e. address specified by user) or innermost frame.
Always returns a non-NULL value. */
-frame_info_ptr
-create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
+static frame_info_ptr
+create_new_frame (frame_id id)
{
- frame_info *fi;
+ gdb_assert (id.user_created_p);
+ gdb_assert (id.stack_status == frame_id_stack_status::FID_STACK_VALID);
+ gdb_assert (id.code_addr_p);
- frame_debug_printf ("addr=%s, pc=%s", hex_string (addr), hex_string (pc));
+ frame_debug_printf ("stack_addr=%s, core_addr=%s",
+ hex_string (id.stack_addr), hex_string (id.code_addr));
/* Avoid creating duplicate frames, search for an existing frame with that id
in the stash. */
- frame_id id = frame_id_build (addr, pc);
- id.user_created_p = 1;
frame_info_ptr frame = frame_stash_find (id);
if (frame != nullptr)
return frame;
- fi = FRAME_OBSTACK_ZALLOC (struct frame_info);
+ frame_info *fi = FRAME_OBSTACK_ZALLOC (struct frame_info);
fi->next = create_sentinel_frame (current_program_space,
get_current_regcache ());
@@ -1953,7 +1954,7 @@ create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
Do this before looking for this frame's unwinder. A sniffer is
very likely to read this, and the corresponding unwinder is
entitled to rely that the PC doesn't magically change. */
- fi->next->prev_pc.value = pc;
+ fi->next->prev_pc.value = id.code_addr;
fi->next->prev_pc.status = CC_VALUE;
/* We currently assume that frame chain's can't cross spaces. */
@@ -1975,6 +1976,15 @@ create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
return frame_info_ptr (fi);
}
+frame_info_ptr
+create_new_frame (CORE_ADDR stack, CORE_ADDR pc)
+{
+ frame_id id = frame_id_build (stack, pc);
+ id.user_created_p = 1;
+
+ return create_new_frame (id);
+}
+
/* Return the frame that THIS_FRAME calls (NULL if THIS_FRAME is the
innermost frame). Be careful to not fall off the bottom of the
frame chain and onto the sentinel frame. */
--
2.38.1
next prev parent reply other threads:[~2022-12-14 3:36 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-14 3:34 [PATCH v2 00/13] Make frame_info_ptr automatic Simon Marchi
2022-12-14 3:34 ` [PATCH v2 01/13] gdb: move type_map_instance to compile/compile.c Simon Marchi
2022-12-14 3:34 ` [PATCH v2 02/13] gdb: move compile_instance to compile/compile.h Simon Marchi
2022-12-14 3:34 ` [PATCH v2 03/13] gdb: remove language.h include from frame.h Simon Marchi
2022-12-14 3:34 ` [PATCH v2 04/13] gdb: move sect_offset and cu_offset to dwarf2/types.h Simon Marchi
2022-12-14 3:34 ` [PATCH v2 05/13] gdb: move call site types to call-site.h Simon Marchi
2022-12-14 3:34 ` [PATCH v2 06/13] gdb: move frame_info_ptr to frame.{c,h} Simon Marchi
2022-12-20 17:01 ` Bruno Larsen
2023-01-03 18:59 ` Simon Marchi
2022-12-14 3:34 ` [PATCH v2 07/13] gdb: add frame_id::user_created_p Simon Marchi
2022-12-14 3:34 ` [PATCH v2 08/13] gdb: add user-created frames to stash Simon Marchi
2022-12-14 3:34 ` Simon Marchi [this message]
2022-12-14 3:34 ` [PATCH v2 10/13] gdb: make it possible to restore selected user-created frames Simon Marchi
2022-12-14 3:34 ` [PATCH v2 11/13] gdb: make user-created frames reinflatable Simon Marchi
2023-01-23 12:57 ` Tom de Vries
2023-01-23 14:34 ` Luis Machado
2023-01-24 3:55 ` Simon Marchi
2023-01-24 8:22 ` Luis Machado
2023-01-25 3:45 ` Simon Marchi
2023-01-30 8:49 ` Luis Machado
2023-01-30 16:20 ` Simon Marchi
2022-12-14 3:34 ` [PATCH v2 12/13] gdb: make frame_info_ptr grab frame level and id on construction Simon Marchi
2022-12-14 3:34 ` [PATCH v2 13/13] gdb: make frame_info_ptr auto-reinflatable Simon Marchi
2022-12-20 16:57 ` [PATCH v2 00/13] Make frame_info_ptr automatic Bruno Larsen
2023-01-03 19:00 ` Simon Marchi
2023-01-03 19:09 ` Simon Marchi
2023-01-18 18:10 ` Tom Tromey
2023-01-19 3: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=20221214033441.499512-10-simon.marchi@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=gdb-patches@sourceware.org \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).