summaryrefslogtreecommitdiff
path: root/gdb/sparc-tdep.h
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-06-27 16:35:59 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-06-27 16:35:59 +0000
commitec55b84eeaaa0e16fb752dd7b2934c1de38ddff5 (patch)
treec55905ff802d3a1009f72046cfacc5373ea2a3f0 /gdb/sparc-tdep.h
parent225c042e8c58864a404eb3439c5d230614dc6f83 (diff)
downloadgdb-ec55b84eeaaa0e16fb752dd7b2934c1de38ddff5.tar.gz
Add support for single register window model on SPARC
2011-06-27 Eric Botcazou <ebotcazou@adacore.com> * sparc-tdep.h (struct sparc_frame_cache): Add frame_offset, saved_regs_mask and copied_regs_mask fields. (sparc_record_save_insn): New prototype. * sparc-tdep.c (sparc_alloc_frame_cache): Initialize the new fields. (sparc_record_save_insn): New function. (sparc_analyze_prologue): Add head comment. Recognize store insns of call-saved registers. Use OFFSET consistently. Recognize flat frames and cache their settings. (sparc32_skip_prologue): Handle flat frames. (sparc_frame_cache): Add frame_offset to the base address. (sparc32_frame_cache): Adjust to new frame description. (sparc32_frame_prev_register): Likewise. * sparc64-tdep.c (sparc64_frame_prev_register): Likewise. * sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_cache): Likewise. * sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_cache): Likewise. * sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_cache): Force the frame by calling sparc_record_save_insn. * sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_cache): Likewise. * sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_cache): Likewise. * sparc64obsd-tdep.c (sparc64obsd_frame_cache): Likewise.
Diffstat (limited to 'gdb/sparc-tdep.h')
-rw-r--r--gdb/sparc-tdep.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h
index 0eb7afaeeb0..d4e8b067c61 100644
--- a/gdb/sparc-tdep.h
+++ b/gdb/sparc-tdep.h
@@ -146,6 +146,15 @@ struct sparc_frame_cache
/* Do we have a frame? */
int frameless_p;
+ /* The offset from the base register to the CFA. */
+ int frame_offset;
+
+ /* Mask of `local' and `in' registers saved in the register save area. */
+ unsigned short int saved_regs_mask;
+
+ /* Mask of `out' registers copied or renamed to their `in' sibling. */
+ unsigned char copied_regs_mask;
+
/* Do we have a Structure, Union or Quad-Precision return value? */
int struct_return_p;
@@ -159,6 +168,10 @@ extern unsigned long sparc_fetch_instruction (CORE_ADDR pc);
/* Fetch StackGhost Per-Process XOR cookie. */
extern ULONGEST sparc_fetch_wcookie (struct gdbarch *gdbarch);
+/* Record the effect of a SAVE instruction on CACHE. */
+extern void sparc_record_save_insn (struct sparc_frame_cache *cache);
+
+/* Do a full analysis of the prologue at PC and update CACHE accordingly. */
extern CORE_ADDR sparc_analyze_prologue (struct gdbarch *gdbarch,
CORE_ADDR pc, CORE_ADDR current_pc,
struct sparc_frame_cache *cache);