Hi, support for the single register window (aka flat) model on SPARC was just re-introduced in GCC: http://gcc.gnu.org/ml/gcc-patches/2011-06/msg00820.html The -mflat option had been present in the 3.x series of compilers but was removed when the 4.x series debuted. Due to renewed interest, most notably from the LEON folks, it will be supported again in future GCC releases. The implementation has been almost entirely overhauled and, in particular, the weird register usage of the old flavor (e.g. %i7 as frame pointer) has been dropped. Instead the new flavor preserves the canonical register usage and frame layout; the only visible change is that 'save' & 'restore' instructions are replaced with their "manual" equivalents in the generated code. While CFIs are adjusted automatically by GCC, GDB has hardcoded assumptions about how frames are established on SPARC, which makes it unable to unwind the "flat" frames; in particular backtraces don't work. The attached patch is aimed at fixing that. It extends the frame sniffer to recognize the "flat" frames and decode the locations of call-saved registers. Regtested (in normal mode) on SPARC/Solaris and SPARC64/Solaris. It was also used to debug the new -mflat implementation of GCC, both 32-bit and 64-bit, so it works reasonably well in this mode. OK for the mainline? 2011-06-16 Eric Botcazou * 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. -- Eric Botcazou