From: Andrew Cagney <cagney@gnu.org>
To: gdb-patches@sources.redhat.com
Subject: [patch/rfc] trad_frame_cache
Date: Mon, 22 Mar 2004 01:24:00 -0000 [thread overview]
Message-ID: <405E405A.90203@gnu.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 445 bytes --]
Hello,
This patch adds a successor to "struct trad_frame_saved_reg" - "struct
trad_frame_cache". Unlike the former, the latter:
- has space for a frame ID and ABI base
- is opaque
For the moment I've included a minimal set of methods), more will
follow. My signal trampoline code uses this as a common template for
describing the location of registers saved in a signal trampoline.
Comments? I'll look to commit in a few days,
Andrew
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 5071 bytes --]
2004-03-21 Andrew Cagney <cagney@redhat.com>
* Makefile.in (trad_frame_h): Add $(frame_h).
* trad-frame.h: Update copyright. Include "frame.h".
(struct trad_frame_cache, trad_frame_cache_zalloc): Declare.
(trad_frame_set_id, trad_frame_get_id): Declare.
(trad_frame_set_reg_addr, trad_frame_get_register): Declare.
* trad-frame.c: Update copyright.
(struct trad_frame_cache): Define.
(trad_frame_cache_zalloc): New function.
(trad_frame_set_id, trad_frame_get_id): New functions.
(trad_frame_set_reg_addr, trad_frame_get_register): New functions.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.526
diff -u -r1.526 Makefile.in
--- Makefile.in 21 Mar 2004 22:34:11 -0000 1.526
+++ Makefile.in 22 Mar 2004 01:13:54 -0000
@@ -756,7 +756,7 @@
terminal_h = terminal.h
top_h = top.h
tracepoint_h = tracepoint.h
-trad_frame_h = trad-frame.h
+trad_frame_h = trad-frame.h $(frame_h)
typeprint_h = typeprint.h
ui_file_h = ui-file.h
ui_out_h = ui-out.h
Index: trad-frame.c
===================================================================
RCS file: /cvs/src/src/gdb/trad-frame.c,v
retrieving revision 1.4
diff -u -r1.4 trad-frame.c
--- trad-frame.c 20 Aug 2003 22:30:17 -0000 1.4
+++ trad-frame.c 22 Mar 2004 01:13:54 -0000
@@ -1,6 +1,6 @@
/* Traditional frame unwind support, for GDB the GNU Debugger.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2004 Free Software Foundation, Inc.
This file is part of GDB.
@@ -24,6 +24,25 @@
#include "trad-frame.h"
#include "regcache.h"
+struct trad_frame_cache
+{
+ struct frame_info *next_frame;
+ CORE_ADDR this_base;
+ struct trad_frame_saved_reg *prev_regs;
+ struct frame_id this_id;
+};
+
+struct trad_frame_cache *
+trad_frame_cache_zalloc (struct frame_info *next_frame)
+{
+ struct trad_frame_cache *this_trad_cache;
+
+ this_trad_cache = FRAME_OBSTACK_ZALLOC (struct trad_frame_cache);
+ this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (next_frame);
+ this_trad_cache->next_frame = next_frame;
+ return this_trad_cache;
+}
+
/* A traditional frame is unwound by analysing the function prologue
and using the information gathered to track registers. For
non-optimized frames, the technique is reliable (just need to check
@@ -79,6 +98,13 @@
}
void
+trad_frame_set_reg_addr (struct trad_frame_cache *this_trad_cache,
+ int regnum, CORE_ADDR addr)
+{
+ this_trad_cache->prev_regs[regnum].addr = addr;
+}
+
+void
trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
int regnum)
{
@@ -131,4 +157,30 @@
error ("Register %s not available",
gdbarch_register_name (gdbarch, regnum));
}
+}
+
+void
+trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
+ struct frame_info *next_frame,
+ int regnum, int *optimizedp,
+ enum lval_type *lvalp, CORE_ADDR *addrp,
+ int *realregp, void *bufferp)
+{
+ trad_frame_prev_register (next_frame, this_trad_cache->prev_regs,
+ regnum, optimizedp, lvalp, addrp, realregp,
+ bufferp);
+}
+
+void
+trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
+ struct frame_id this_id)
+{
+ this_trad_cache->this_id = this_id;
+}
+
+void
+trad_frame_get_id (struct trad_frame_cache *this_trad_cache,
+ struct frame_id *this_id)
+{
+ (*this_id) = this_trad_cache->this_id;
}
Index: trad-frame.h
===================================================================
RCS file: /cvs/src/src/gdb/trad-frame.h,v
retrieving revision 1.4
diff -u -r1.4 trad-frame.h
--- trad-frame.h 1 Jul 2003 13:25:19 -0000 1.4
+++ trad-frame.h 22 Mar 2004 01:13:54 -0000
@@ -1,6 +1,6 @@
/* Traditional frame unwind support, for GDB the GNU Debugger.
- Copyright 2003 Free Software Foundation, Inc.
+ Copyright 2003, 2004 Free Software Foundation, Inc.
This file is part of GDB.
@@ -22,7 +22,31 @@
#ifndef TRAD_FRAME_H
#define TRAD_FRAME_H
+#include "frame.h" /* For "struct frame_id". */
+
struct frame_info;
+struct trad_frame_cache;
+
+/* A simple, or traditional frame cache.
+
+ The entire cache is populated in a single pass and then generic
+ routines are used to extract the various cache values. */
+
+struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *next_frame);
+
+/* This frame's ID. */
+void trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
+ struct frame_id this_id);
+void trad_frame_get_id (struct trad_frame_cache *this_trad_cache,
+ struct frame_id *this_id);
+
+void trad_frame_set_reg_unknown (struct trad_frame_cache *this_trad_cache,
+ int regnum, CORE_ADDR addr);
+void trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
+ struct frame_info *next_frame,
+ int regnum, int *optimizedp,
+ enum lval_type *lvalp, CORE_ADDR *addrp,
+ int *realregp, void *bufferp);
/* A traditional saved regs table, indexed by REGNUM, encoding where
the value of REGNUM for the previous frame can be found in this
next reply other threads:[~2004-03-22 1:24 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-22 1:24 Andrew Cagney [this message]
2004-03-23 13:51 ` Andrew Cagney
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=405E405A.90203@gnu.org \
--to=cagney@gnu.org \
--cc=gdb-patches@sources.redhat.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