2003-06-21 Andrew Cagney <cagney@redhat.com>

* frame.c (get_frame_register): New function.
	(frame_unwind_register_signed): New function.
	(get_frame_register_signed): New function.
	(frame_unwind_register_unsigned): New function.
	(get_frame_register_unsigned): New function.
	* frame.h: Add comments on naming schema.
	(get_frame_register, frame_unwind_register_signed): Declare.
	(get_frame_register_signed, get_frame_register_signed): Declare.
	(frame_unwind_register_unsigned): Declare.
	(get_frame_register_unsigned): Declare.
This commit is contained in:
Andrew Cagney 2003-06-21 16:26:02 +00:00
parent 373bbd04cb
commit f0e7d0e8f2
3 changed files with 110 additions and 3 deletions

View File

@ -1,3 +1,16 @@
2003-06-21 Andrew Cagney <cagney@redhat.com>
* frame.c (get_frame_register): New function.
(frame_unwind_register_signed): New function.
(get_frame_register_signed): New function.
(frame_unwind_register_unsigned): New function.
(get_frame_register_unsigned): New function.
* frame.h: Add comments on naming schema.
(get_frame_register, frame_unwind_register_signed): Declare.
(get_frame_register_signed, get_frame_register_signed): Declare.
(frame_unwind_register_unsigned): Declare.
(get_frame_register_unsigned): Declare.
2003-06-20 Theodore A. Roth <troth@openavr.org>
* avr-tdep.c (avr_gdbarch_init): Don't call set_gdbarch_bfd_vma_bit.

View File

@ -614,6 +614,41 @@ frame_unwind_register (struct frame_info *frame, int regnum, void *buf)
&realnum, buf);
}
void
get_frame_register (struct frame_info *frame,
int regnum, void *buf)
{
frame_unwind_register (frame->next, regnum, buf);
}
LONGEST
frame_unwind_register_signed (struct frame_info *frame, int regnum)
{
char buf[MAX_REGISTER_SIZE];
frame_unwind_register (frame, regnum, buf);
return extract_signed_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
}
LONGEST
get_frame_register_signed (struct frame_info *frame, int regnum)
{
return frame_unwind_register_signed (frame->next, regnum);
}
ULONGEST
frame_unwind_register_unsigned (struct frame_info *frame, int regnum)
{
char buf[MAX_REGISTER_SIZE];
frame_unwind_register (frame, regnum, buf);
return extract_unsigned_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
}
ULONGEST
get_frame_register_unsigned (struct frame_info *frame, int regnum)
{
return frame_unwind_register_unsigned (frame->next, regnum);
}
void
frame_unwind_signed_register (struct frame_info *frame, int regnum,
LONGEST *val)

View File

@ -23,6 +23,47 @@
#if !defined (FRAME_H)
#define FRAME_H 1
/* The following is the intended naming schema for frame functions.
It isn't 100% consistent, but it is aproaching that. Frame naming
schema:
Prefixes:
get_frame_WHAT...(): Get WHAT from the THIS frame (functionaly
equivalent to THIS->next->unwind->what)
frame_unwind_WHAT...(): Unwind THIS frame's WHAT from the NEXT
frame.
put_frame_WHAT...(): Put a value into this frame (unsafe, need to
invalidate the frame / regcache afterwards) (better name more
strongly hinting at its unsafeness)
safe_....(): Safer version of various functions, doesn't throw an
error (leave this for later?). Returns non-zero if the fetch
succeeds. Return a freshly allocated error message?
Suffixes:
void /frame/_WHAT(): Read WHAT's value into the buffer parameter.
ULONGEST /frame/_WHAT_unsigned(): Return an unsigned value (the
alternative is *frame_unsigned_WHAT).
LONGEST /frame/_WHAT_signed(): Return WHAT signed value.
What:
/frame/_memory* (frame, coreaddr, len [, buf]): Extract/return
*memory.
/frame/_register* (frame, regnum [, buf]): extract/return register.
CORE_ADDR /frame/_{pc,sp,...} (frame): Resume address, innner most
stack *address, ...
*/
struct symtab_and_line;
struct frame_unwind;
struct frame_base;
@ -303,16 +344,31 @@ extern void frame_register_unwind (struct frame_info *frame, int regnum,
CORE_ADDR *addrp, int *realnump,
void *valuep);
/* More convenient interface to frame_register_unwind(). */
/* NOTE: cagney/2002-09-13: Return void as one day these functions may
be changed to return an indication that the read succeeded. */
/* Fetch a register from this, or unwind a register from the next
frame. Note that the get_frame methods are wrappers to
frame->next->unwind. They all [potentially] throw an error if the
fetch fails. */
extern void frame_unwind_register (struct frame_info *frame,
int regnum, void *buf);
extern void get_frame_register (struct frame_info *frame,
int regnum, void *buf);
extern LONGEST frame_unwind_register_signed (struct frame_info *frame,
int regnum);
extern LONGEST get_frame_register_signed (struct frame_info *frame,
int regnum);
extern ULONGEST frame_unwind_register_unsigned (struct frame_info *frame,
int regnum);
extern ULONGEST get_frame_register_unsigned (struct frame_info *frame,
int regnum);
/* Use frame_unwind_register_signed. */
extern void frame_unwind_signed_register (struct frame_info *frame,
int regnum, LONGEST *val);
/* Use frame_unwind_register_signed. */
extern void frame_unwind_unsigned_register (struct frame_info *frame,
int regnum, ULONGEST *val);
@ -330,12 +386,15 @@ extern void frame_register (struct frame_info *frame, int regnum,
/* NOTE: cagney/2002-09-13: Return void as one day these functions may
be changed to return an indication that the read succeeded. */
/* Use get_frame_register. */
extern void frame_read_register (struct frame_info *frame, int regnum,
void *buf);
/* Use get_frame_register_signed. */
extern void frame_read_signed_register (struct frame_info *frame,
int regnum, LONGEST *val);
/* Use get_frame_register_unsigned. */
extern void frame_read_unsigned_register (struct frame_info *frame,
int regnum, ULONGEST *val);