|
|
|
@ -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, |
|
|
|
|