* [patch/rfc] dummy frames using regcache
@ 2002-06-26 13:08 Andrew Cagney
2002-06-28 15:39 ` Andrew Cagney
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2002-06-26 13:08 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 472 bytes --]
Hello,
Attached is the next in the regcache series. This converts dummy frames
to the regcache. Tested on the i386.
Note the fixme though:
+ /* FIXME: cagney/2002-06-26: This should be via the
+ gdbarch_register_read() method so that it, on the fly,
+ constructs either a raw or pseudo register from the raw
+ register cache. */
+ regcache_read (registers, regnum, bufferp);
I've opened a change-request against that one.
Andrew
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 5173 bytes --]
2002-06-26 Andrew Cagney <ac131313@redhat.com>
* blockframe.c (generic_find_dummy_frame): Change return type to
``struct regcache''.
(struct dummy_frame): Replace field ``registers'' with regcache, a
struct regcache object.
(generic_find_dummy_frame): Update.
(generic_push_dummy_frame): Update. Use regcache_xfree,
regcache_xmalloc and regcache_cpy.
(generic_pop_dummy_frame): Update. Use regcache_cpy and
regcache_xfree.
(deprecated_generic_find_dummy_frame): Update.
(generic_read_register_dummy): Update. Use
regcache_read_as_address.
(generic_call_dummy_register_unwind): Update. Use regcache_read.
Index: blockframe.c
===================================================================
RCS file: /cvs/src/src/gdb/blockframe.c,v
retrieving revision 1.30
diff -u -r1.30 blockframe.c
--- blockframe.c 26 Jun 2002 15:28:46 -0000 1.30
+++ blockframe.c 26 Jun 2002 17:23:59 -0000
@@ -1127,7 +1127,7 @@
CORE_ADDR fp;
CORE_ADDR sp;
CORE_ADDR top;
- char *registers;
+ struct regcache *regcache;
/* Address range of the call dummy code. Look for PC in the range
[LO..HI) (after allowing for DECR_PC_AFTER_BREAK). */
@@ -1144,7 +1144,7 @@
adjust for DECR_PC_AFTER_BREAK. This is because it is only legal
to call this function after the PC has been adjusted. */
-static char *
+static struct regcache *
generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
{
struct dummy_frame *dummyframe;
@@ -1156,7 +1156,7 @@
|| fp == dummyframe->sp
|| fp == dummyframe->top))
/* The frame in question lies between the saved fp and sp, inclusive */
- return dummyframe->registers;
+ return dummyframe->regcache;
return 0;
}
@@ -1164,7 +1164,10 @@
char *
deprecated_generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
{
- return generic_find_dummy_frame (pc, fp);
+ struct regcache *regcache = generic_find_dummy_frame (pc, fp);
+ if (regcache == NULL)
+ return NULL;
+ return deprecated_grub_regcache_for_registers (regcache);
}
/* Function: pc_in_call_dummy (pc, sp, fp)
@@ -1195,11 +1198,10 @@
CORE_ADDR
generic_read_register_dummy (CORE_ADDR pc, CORE_ADDR fp, int regno)
{
- char *dummy_regs = generic_find_dummy_frame (pc, fp);
+ struct regcache *dummy_regs = generic_find_dummy_frame (pc, fp);
if (dummy_regs)
- return extract_address (&dummy_regs[REGISTER_BYTE (regno)],
- REGISTER_RAW_SIZE (regno));
+ return regcache_read_as_address (dummy_regs, regno);
else
return 0;
}
@@ -1226,7 +1228,7 @@
if (INNER_THAN (dummy_frame->fp, fp)) /* stale -- destroy! */
{
dummy_frame_stack = dummy_frame->next;
- xfree (dummy_frame->registers);
+ regcache_xfree (dummy_frame->regcache);
xfree (dummy_frame);
dummy_frame = dummy_frame_stack;
}
@@ -1234,13 +1236,13 @@
dummy_frame = dummy_frame->next;
dummy_frame = xmalloc (sizeof (struct dummy_frame));
- dummy_frame->registers = xmalloc (REGISTER_BYTES);
+ dummy_frame->regcache = regcache_xmalloc (current_gdbarch);
dummy_frame->pc = read_pc ();
dummy_frame->sp = read_sp ();
dummy_frame->top = dummy_frame->sp;
dummy_frame->fp = fp;
- read_register_bytes (0, dummy_frame->registers, REGISTER_BYTES);
+ regcache_cpy (dummy_frame->regcache, current_regcache);
dummy_frame->next = dummy_frame_stack;
dummy_frame_stack = dummy_frame;
}
@@ -1288,10 +1290,10 @@
if (!dummy_frame)
error ("Can't pop dummy frame!");
dummy_frame_stack = dummy_frame->next;
- write_register_bytes (0, dummy_frame->registers, REGISTER_BYTES);
+ regcache_cpy (current_regcache, dummy_frame->regcache);
flush_cached_frames ();
- xfree (dummy_frame->registers);
+ regcache_xfree (dummy_frame->regcache);
xfree (dummy_frame);
}
@@ -1356,7 +1358,7 @@
/* If needed, find and return the value of the register. */
if (bufferp != NULL)
{
- char *registers;
+ struct regcache *registers;
#if 1
/* Get the address of the register buffer that contains all the
saved registers for this dummy frame. Cache that address. */
@@ -1373,8 +1375,11 @@
#endif
gdb_assert (registers != NULL);
/* Return the actual value. */
- memcpy (bufferp, registers + REGISTER_BYTE (regnum),
- REGISTER_RAW_SIZE (regnum));
+ /* FIXME: cagney/2002-06-26: This should be via the
+ gdbarch_register_read() method so that it, on the fly,
+ constructs either a raw or pseudo register from the raw
+ register cache. */
+ regcache_read (registers, regnum, bufferp);
}
}
@@ -1520,10 +1525,12 @@
if (lval) /* found it in a CALL_DUMMY frame */
*lval = not_lval;
if (raw_buffer)
- memcpy (raw_buffer,
- generic_find_dummy_frame (frame->pc, frame->frame) +
- REGISTER_BYTE (regnum),
- REGISTER_RAW_SIZE (regnum));
+ /* FIXME: cagney/2002-06-26: This should be via the
+ gdbarch_register_read() method so that it, on the fly,
+ constructs either a raw or pseudo register from the raw
+ register cache. */
+ regcache_read (generic_find_dummy_frame (frame->pc, frame->frame),
+ regnum, raw_buffer);
return;
}
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [patch/rfc] dummy frames using regcache
2002-06-26 13:08 [patch/rfc] dummy frames using regcache Andrew Cagney
@ 2002-06-28 15:39 ` Andrew Cagney
2002-06-28 15:40 ` Daniel Jacobowitz
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2002-06-28 15:39 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
> Hello,
>
> Attached is the next in the regcache series. This converts dummy frames to the regcache. Tested on the i386.
>
> Note the fixme though:
>
> + /* FIXME: cagney/2002-06-26: This should be via the
> + gdbarch_register_read() method so that it, on the fly,
> + constructs either a raw or pseudo register from the raw
> + register cache. */
> + regcache_read (registers, regnum, bufferp);
FYI,
> 2002-06-26 Andrew Cagney <ac131313@redhat.com>
>
> * blockframe.c (generic_find_dummy_frame): Change return type to
> ``struct regcache''.
> (struct dummy_frame): Replace field ``registers'' with regcache, a
> struct regcache object.
> (generic_find_dummy_frame): Update.
> (generic_push_dummy_frame): Update. Use regcache_xfree,
> regcache_xmalloc and regcache_cpy.
> (generic_pop_dummy_frame): Update. Use regcache_cpy and
> regcache_xfree.
> (deprecated_generic_find_dummy_frame): Update.
> (generic_read_register_dummy): Update. Use
> regcache_read_as_address.
> (generic_call_dummy_register_unwind): Update. Use regcache_read.
>
I've now checked this in (.....holds breath ...).
Andrew
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch/rfc] dummy frames using regcache
2002-06-28 15:39 ` Andrew Cagney
@ 2002-06-28 15:40 ` Daniel Jacobowitz
0 siblings, 0 replies; 3+ messages in thread
From: Daniel Jacobowitz @ 2002-06-28 15:40 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
On Fri, Jun 28, 2002 at 06:38:59PM -0400, Andrew Cagney wrote:
> >Hello,
> >
> >Attached is the next in the regcache series. This converts dummy frames
> >to the regcache. Tested on the i386.
> >
> >Note the fixme though:
> >
> >+ /* FIXME: cagney/2002-06-26: This should be via the
> >+ gdbarch_register_read() method so that it, on the fly,
> >+ constructs either a raw or pseudo register from the raw
> >+ register cache. */
> >+ regcache_read (registers, regnum, bufferp);
>
> FYI,
>
> >2002-06-26 Andrew Cagney <ac131313@redhat.com>
> >
> > * blockframe.c (generic_find_dummy_frame): Change return type to
> > ``struct regcache''.
> > (struct dummy_frame): Replace field ``registers'' with regcache, a
> > struct regcache object.
> > (generic_find_dummy_frame): Update.
> > (generic_push_dummy_frame): Update. Use regcache_xfree,
> > regcache_xmalloc and regcache_cpy.
> > (generic_pop_dummy_frame): Update. Use regcache_cpy and
> > regcache_xfree.
> > (deprecated_generic_find_dummy_frame): Update.
> > (generic_read_register_dummy): Update. Use
> > regcache_read_as_address.
> > (generic_call_dummy_register_unwind): Update. Use regcache_read.
> >
>
> I've now checked this in (.....holds breath ...).
Great! I'm working on a port where this'll be very helpful.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2002-06-28 22:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-26 13:08 [patch/rfc] dummy frames using regcache Andrew Cagney
2002-06-28 15:39 ` Andrew Cagney
2002-06-28 15:40 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox