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:
parent
c5646e1120
commit
f908a0eb77
3 changed files with 51 additions and 0 deletions
|
@ -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,
|
||||
|
|
34
gdb/frame.c
34
gdb/frame.c
|
@ -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,
|
||||
|
|
10
gdb/frame.h
10
gdb/frame.h
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue