diff options
Diffstat (limited to 'gnu/dist')
| -rw-r--r-- | gnu/dist/toolchain/gdb/config/sparc/tm-sp64.h | 6 | ||||
| -rw-r--r-- | gnu/dist/toolchain/gdb/sparc-tdep.c | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/gnu/dist/toolchain/gdb/config/sparc/tm-sp64.h b/gnu/dist/toolchain/gdb/config/sparc/tm-sp64.h index 7121a7f9fab..048b7c3725a 100644 --- a/gnu/dist/toolchain/gdb/config/sparc/tm-sp64.h +++ b/gnu/dist/toolchain/gdb/config/sparc/tm-sp64.h @@ -358,12 +358,18 @@ extern CORE_ADDR sparc64_read_sp (); extern CORE_ADDR sparc64_read_fp (); extern void sparc64_write_sp PARAMS ((CORE_ADDR)); extern void sparc64_write_fp PARAMS ((CORE_ADDR)); +extern CORE_ADDR sparc64_frame_address PARAMS ((struct frame_info *fi)); #define TARGET_READ_SP() (sparc64_read_sp ()) #define TARGET_READ_FP() (sparc64_read_fp ()) #define TARGET_WRITE_SP(X) (sparc64_write_sp (X)) #define TARGET_WRITE_FP(X) (sparc64_write_fp (X)) +#undef FRAME_LOCALS_ADDRESS +#undef FRAME_ARGS_ADDRESS +#define FRAME_LOCALS_ADDRESS(X) (sparc64_frame_address (X)) +#define FRAME_ARGS_ADDRESS(X) (sparc64_frame_address (X)) + #undef TM_PRINT_INSN_MACH #define TM_PRINT_INSN_MACH bfd_mach_sparc_v9a diff --git a/gnu/dist/toolchain/gdb/sparc-tdep.c b/gnu/dist/toolchain/gdb/sparc-tdep.c index 48da1e602d7..ae890ff676e 100644 --- a/gnu/dist/toolchain/gdb/sparc-tdep.c +++ b/gnu/dist/toolchain/gdb/sparc-tdep.c @@ -2029,6 +2029,14 @@ sparc64_write_fp (val) write_register (FP_REGNUM, val); } +CORE_ADDR +sparc64_frame_address (struct frame_info *fi) +{ + if (fi->frame & 0x1) + return (fi->frame - 2047); + return fi->frame; +} + /* The SPARC 64 ABI passes floating-point arguments in FP0-31. They are also copied onto the stack in the correct places. */ |
