diff options
-rw-r--r-- | gdb/ChangeLog | 15 | ||||
-rw-r--r-- | gdb/dummy-frame.c | 2 | ||||
-rw-r--r-- | gdb/dummy-frame.h | 8 | ||||
-rw-r--r-- | gdb/frame.c | 103 | ||||
-rw-r--r-- | gdb/frame.h | 7 | ||||
-rw-r--r-- | gdb/xstormy16-tdep.c | 114 |
6 files changed, 121 insertions, 128 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fd62e36..35833c6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2004-05-01 Andrew Cagney <cagney@redhat.com> + + * frame.c (deprecated_generic_get_saved_register): Delete + function, moved to "xstormy16-tdep.c". + * xstormy16-tdep.c (xstormy16_get_saved_register): Inline + deprecated_generic_get_saved_register from "frame.c". + (xstormy16_frame_saved_register): Call + xstormy16_get_saved_register. + * dummy-frame.c (deprecated_find_dummy_frame_regcache): Make + static. + * dummy-frame.h (deprecated_find_dummy_frame_regcache): Delete. + * frame.h (deprecated_generic_get_saved_register): Delete. + 2004-05-01 Michael Chastain <mec.gnu@mindspring.com> * dwarfread.c: Update documentation on the state of dwarf-1. @@ -21,8 +34,6 @@ * s390-tdep.c (s390_prologue_frame_unwind_cache): Delete calls to frame_relative_level. -2004-05-01 Andrew Cagney <cagney@redhat.com> - * frame.h (deprecated_set_frame_type): Delete declaration. * frame.c (deprecated_set_frame_type): Delete function, update comments. diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c index 216db67..d55b3bd 100644 --- a/gdb/dummy-frame.c +++ b/gdb/dummy-frame.c @@ -112,7 +112,7 @@ find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp) return NULL; } -struct regcache * +static struct regcache * deprecated_find_dummy_frame_regcache (CORE_ADDR pc, CORE_ADDR fp) { struct dummy_frame *dummy = find_dummy_frame (pc, fp); diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h index 7f4c38f..07f8f5a 100644 --- a/gdb/dummy-frame.h +++ b/gdb/dummy-frame.h @@ -32,12 +32,4 @@ struct frame_id; extern const struct frame_unwind *dummy_frame_sniffer (struct frame_info *next_frame); -/* Return the regcache that belongs to the dummy-frame identifed by PC - and FP, or NULL if no such frame exists. */ -/* FIXME: cagney/2002-11-08: The function only exists because of - deprecated_generic_get_saved_register. Eliminate that function and - this, to, can go. */ - -extern struct regcache *deprecated_find_dummy_frame_regcache (CORE_ADDR pc, - CORE_ADDR fp); #endif /* !defined (DUMMY_FRAME_H) */ diff --git a/gdb/frame.c b/gdb/frame.c index 5359fd3..8fb0344 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1057,109 +1057,6 @@ const struct frame_unwind legacy_saved_regs_unwinder = { }; const struct frame_unwind *legacy_saved_regs_unwind = &legacy_saved_regs_unwinder; - -/* Function: deprecated_generic_get_saved_register - Find register number REGNUM relative to FRAME and put its (raw, - target format) contents in *RAW_BUFFER. - - Set *OPTIMIZED if the variable was optimized out (and thus can't be - fetched). Note that this is never set to anything other than zero - in this implementation. - - Set *LVAL to lval_memory, lval_register, or not_lval, depending on - whether the value was fetched from memory, from a register, or in a - strange and non-modifiable way (e.g. a frame pointer which was - calculated rather than fetched). We will use not_lval for values - fetched from generic dummy frames. - - Set *ADDRP to the address, either in memory or as a - DEPRECATED_REGISTER_BYTE offset into the registers array. If the - value is stored in a dummy frame, set *ADDRP to zero. - - The argument RAW_BUFFER must point to aligned memory. */ - -void -deprecated_generic_get_saved_register (char *raw_buffer, int *optimized, - CORE_ADDR *addrp, - struct frame_info *frame, int regnum, - enum lval_type *lval) -{ - if (!target_has_registers) - error ("No registers."); - - /* Normal systems don't optimize out things with register numbers. */ - if (optimized != NULL) - *optimized = 0; - - if (addrp) /* default assumption: not found in memory */ - *addrp = 0; - - /* Note: since the current frame's registers could only have been - saved by frames INTERIOR TO the current frame, we skip examining - the current frame itself: otherwise, we would be getting the - previous frame's registers which were saved by the current frame. */ - - if (frame != NULL) - { - for (frame = get_next_frame (frame); - frame_relative_level (frame) >= 0; - frame = get_next_frame (frame)) - { - if (get_frame_type (frame) == DUMMY_FRAME) - { - if (lval) /* found it in a CALL_DUMMY frame */ - *lval = not_lval; - if (raw_buffer) - /* 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_raw_read - (deprecated_find_dummy_frame_regcache (get_frame_pc (frame), - get_frame_base (frame)), - regnum, raw_buffer); - return; - } - - DEPRECATED_FRAME_INIT_SAVED_REGS (frame); - if (deprecated_get_frame_saved_regs (frame) != NULL - && deprecated_get_frame_saved_regs (frame)[regnum] != 0) - { - if (lval) /* found it saved on the stack */ - *lval = lval_memory; - if (regnum == SP_REGNUM) - { - if (raw_buffer) /* SP register treated specially */ - /* NOTE: cagney/2003-05-09: In-line store_address() - with it's body - store_unsigned_integer(). */ - store_unsigned_integer (raw_buffer, - DEPRECATED_REGISTER_RAW_SIZE (regnum), - deprecated_get_frame_saved_regs (frame)[regnum]); - } - else - { - if (addrp) /* any other register */ - *addrp = deprecated_get_frame_saved_regs (frame)[regnum]; - if (raw_buffer) - read_memory (deprecated_get_frame_saved_regs (frame)[regnum], raw_buffer, - DEPRECATED_REGISTER_RAW_SIZE (regnum)); - } - return; - } - } - } - - /* If we get thru the loop to this point, it means the register was - not saved in any frame. Return the actual live-register value. */ - - if (lval) /* found it in a live register */ - *lval = lval_register; - if (addrp) - *addrp = DEPRECATED_REGISTER_BYTE (regnum); - if (raw_buffer) - deprecated_read_register_gen (regnum, raw_buffer); -} - /* Determine the frame's type based on its PC. */ static enum frame_type diff --git a/gdb/frame.h b/gdb/frame.h index a6e84a6..2ab8b8e 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -574,13 +574,6 @@ extern int deprecated_pc_in_call_dummy (CORE_ADDR pc, CORE_ADDR sp, extern char *deprecated_generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp); -/* The DEPRECATED_GET_SAVED_REGISTER architecture interface is - entirely redundant. New architectures should implement per-frame - unwinders (ref "frame-unwind.h"). */ -extern void deprecated_generic_get_saved_register (char *, int *, CORE_ADDR *, - struct frame_info *, int, - enum lval_type *); - extern void generic_save_call_dummy_addr (CORE_ADDR lo, CORE_ADDR hi); /* FIXME: cagney/2003-02-02: Should be deprecated or replaced with a diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c index 9e7b016..6ca9733 100644 --- a/gdb/xstormy16-tdep.c +++ b/gdb/xstormy16-tdep.c @@ -167,16 +167,116 @@ xstormy16_reg_virtual_type (int regnum) } /* Function: xstormy16_get_saved_register - Find a register's saved value on the call stack. */ + Find a register's saved value on the call stack. + + Find register number REGNUM relative to FRAME and put its (raw, + target format) contents in *RAW_BUFFER. + + Set *OPTIMIZED if the variable was optimized out (and thus can't be + fetched). Note that this is never set to anything other than zero + in this implementation. + + Set *LVAL to lval_memory, lval_register, or not_lval, depending on + whether the value was fetched from memory, from a register, or in a + strange and non-modifiable way (e.g. a frame pointer which was + calculated rather than fetched). We will use not_lval for values + fetched from generic dummy frames. + + Set *ADDRP to the address, either in memory or as a + DEPRECATED_REGISTER_BYTE offset into the registers array. If the + value is stored in a dummy frame, set *ADDRP to zero. + + The argument RAW_BUFFER must point to aligned memory. + + The GET_SAVED_REGISTER architecture interface is entirely + redundant. New architectures should implement per-frame unwinders + (ref "frame-unwind.h"). */ static void -xstormy16_get_saved_register (char *raw_buffer, - int *optimized, +xstormy16_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp, - struct frame_info *fi, - int regnum, enum lval_type *lval) + struct frame_info *frame, int regnum, + enum lval_type *lval) { - deprecated_generic_get_saved_register (raw_buffer, optimized, addrp, fi, regnum, lval); + if (!target_has_registers) + error ("No registers."); + + /* Normal systems don't optimize out things with register numbers. */ + if (optimized != NULL) + *optimized = 0; + + if (addrp) /* default assumption: not found in memory */ + *addrp = 0; + + /* Note: since the current frame's registers could only have been + saved by frames INTERIOR TO the current frame, we skip examining + the current frame itself: otherwise, we would be getting the + previous frame's registers which were saved by the current frame. */ + + if (frame != NULL) + { + for (frame = get_next_frame (frame); + get_frame_type (frame) != SENTINEL_FRAME; + frame = get_next_frame (frame)) + { + if (get_frame_type (frame) == DUMMY_FRAME) + { + if (lval) /* found it in a CALL_DUMMY frame */ + *lval = not_lval; + if (raw_buffer) + { + LONGEST val; + /* 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. */ + val = deprecated_read_register_dummy (get_frame_pc (frame), + get_frame_base (frame), + regnum); + store_unsigned_integer (raw_buffer, + DEPRECATED_REGISTER_RAW_SIZE (regnum), + val); + } + return; + } + + DEPRECATED_FRAME_INIT_SAVED_REGS (frame); + if (deprecated_get_frame_saved_regs (frame) != NULL + && deprecated_get_frame_saved_regs (frame)[regnum] != 0) + { + if (lval) /* found it saved on the stack */ + *lval = lval_memory; + if (regnum == SP_REGNUM) + { + if (raw_buffer) /* SP register treated specially */ + /* NOTE: cagney/2003-05-09: In-line store_address() + with it's body - store_unsigned_integer(). */ + store_unsigned_integer (raw_buffer, + DEPRECATED_REGISTER_RAW_SIZE (regnum), + deprecated_get_frame_saved_regs (frame)[regnum]); + } + else + { + if (addrp) /* any other register */ + *addrp = deprecated_get_frame_saved_regs (frame)[regnum]; + if (raw_buffer) + read_memory (deprecated_get_frame_saved_regs (frame)[regnum], raw_buffer, + DEPRECATED_REGISTER_RAW_SIZE (regnum)); + } + return; + } + } + } + + /* If we get thru the loop to this point, it means the register was + not saved in any frame. Return the actual live-register value. */ + + if (lval) /* found it in a live register */ + *lval = lval_register; + if (addrp) + *addrp = DEPRECATED_REGISTER_BYTE (regnum); + if (raw_buffer) + deprecated_read_register_gen (regnum, raw_buffer); } /* Function: xstormy16_type_is_scalar @@ -433,7 +533,7 @@ xstormy16_frame_saved_register (struct frame_info *fi, int regnum) int size = xstormy16_register_raw_size (regnum); char *buf = (char *) alloca (size); - deprecated_generic_get_saved_register (buf, NULL, NULL, fi, regnum, NULL); + xstormy16_get_saved_register (buf, NULL, NULL, fi, regnum, NULL); return (CORE_ADDR) extract_unsigned_integer (buf, size); } |