2002-10-31 Andrew Cagney <cagney@redhat.com>

* frame.c (frame_read_unsigned_register): New function.
	(frame_read_signed_register): New function.
	* frame.h (frame_read_unsigned_register): Declare.
	(frame_read_signed_register): Declare.
This commit is contained in:
Andrew Cagney 2002-10-31 20:14:33 +00:00
parent c5646e1120
commit f908a0eb77
3 changed files with 51 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2002-10-31 Andrew Cagney <cagney@redhat.com>
* frame.c (frame_read_unsigned_register): New function.
(frame_read_signed_register): New function.
* frame.h (frame_read_unsigned_register): Declare.
(frame_read_signed_register): Declare.
2002-10-31 Andrew Cagney <cagney@redhat.com>
* h8500-tdep.c (h8500_print_registers_info): New static function,

View file

@ -152,6 +152,40 @@ frame_unwind_unsigned_register (struct frame_info *frame, int regnum,
(*val) = extract_unsigned_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
}
void
frame_read_unsigned_register (struct frame_info *frame, int regnum,
ULONGEST *val)
{
/* NOTE: cagney/2002-10-31: There is a bit of dogma here - there is
always a frame. Both this, and the equivalent
frame_read_signed_register() function, can only be called with a
valid frame. If, for some reason, this function is called
without a frame then the problem isn't here, but rather in the
caller. It should of first created a frame and then passed that
in. */
/* NOTE: cagney/2002-10-31: As a side bar, keep in mind that the
``current_frame'' should not be treated as a special case. While
``get_next_frame (current_frame) == NULL'' currently holds, it
should, as far as possible, not be relied upon. In the future,
``get_next_frame (current_frame)'' may instead simply return a
normal frame object that simply always gets register values from
the register cache. Consequently, frame code should try to avoid
tests like ``if get_next_frame() == NULL'' and instead just rely
on recursive frame calls (like the below code) when manipulating
a frame chain. */
gdb_assert (frame != NULL);
frame_unwind_unsigned_register (get_next_frame (frame), regnum, val);
}
void
frame_read_signed_register (struct frame_info *frame, int regnum,
LONGEST *val)
{
/* See note in frame_read_unsigned_register(). */
gdb_assert (frame != NULL);
frame_unwind_signed_register (get_next_frame (frame), regnum, val);
}
void
generic_unwind_get_saved_register (char *raw_buffer,
int *optimizedp,

View file

@ -366,6 +366,16 @@ extern void get_saved_register (char *raw_buffer, int *optimized,
extern int frame_register_read (struct frame_info *frame, int regnum,
void *buf);
/* Return the value of register REGNUM that belongs to FRAME. The
value is obtained by unwinding the register from the next / more
inner frame. */
/* NOTE: cagney/2002-09-13: Return void as one day these functions may
be changed to return an indication that the read succeeded. */
extern void frame_read_signed_register (struct frame_info *frame,
int regnum, LONGEST *val);
extern void frame_read_unsigned_register (struct frame_info *frame,
int regnum, ULONGEST *val);
/* Map between a frame register number and its name. A frame register
space is a superset of the cooked register space --- it also
includes builtin registers. */