Commit c157b3f0 by Richard Henderson Committed by Richard Henderson

mn10300: Fix debug offsets into the stack frame

We were using debugging hooks to semi-correct a mistake
in the lack of ARG_POINTER_CFA_OFFSET.

From-SVN: r168672
parent cc909bba
2011-01-11 Richard Henderson <rth@redhat.com> 2011-01-11 Richard Henderson <rth@redhat.com>
* config/mn10300/mn10300.h (ARG_PIONTER_CFA_OFFSET): New.
(DEBUGGER_AUTO_OFFSET): Remove.
(DEBUGGER_ARG_OFFSET): Remove.
* config/mn10300/mn10300.c (mn10300_gen_multiple_store): Make static. * config/mn10300/mn10300.c (mn10300_gen_multiple_store): Make static.
Emit register stores with the same offsets as the hardware. Emit register stores with the same offsets as the hardware.
(mn10300_store_multiple_operation): Don't check that the register (mn10300_store_multiple_operation): Don't check that the register
......
...@@ -463,6 +463,9 @@ enum reg_class ...@@ -463,6 +463,9 @@ enum reg_class
#define FIRST_PARM_OFFSET(FNDECL) 4 #define FIRST_PARM_OFFSET(FNDECL) 4
/* But the CFA is at the arg pointer directly, not at the first argument. */
#define ARG_POINTER_CFA_OFFSET(FNDECL) 0
#define ELIMINABLE_REGS \ #define ELIMINABLE_REGS \
{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
{ ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
...@@ -726,34 +729,8 @@ struct cum_arg ...@@ -726,34 +729,8 @@ struct cum_arg
#undef PREFERRED_DEBUGGING_TYPE #undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
#define DWARF2_DEBUGGING_INFO 1 #define DWARF2_DEBUGGING_INFO 1
#define DWARF2_ASM_LINE_DEBUG_INFO 1 #define DWARF2_ASM_LINE_DEBUG_INFO 1
/* GDB always assumes the current function's frame begins at the value
of the stack pointer upon entry to the current function. Accessing
local variables and parameters passed on the stack is done using the
base of the frame + an offset provided by GCC.
For functions which have frame pointers this method works fine;
the (frame pointer) == (stack pointer at function entry) and GCC provides
an offset relative to the frame pointer.
This loses for functions without a frame pointer; GCC provides an offset
which is relative to the stack pointer after adjusting for the function's
frame size. GDB would prefer the offset to be relative to the value of
the stack pointer at the function's entry. Yuk! */
#define DEBUGGER_AUTO_OFFSET(X) \
((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) \
+ (frame_pointer_needed \
? 0 : - mn10300_initial_offset (FRAME_POINTER_REGNUM, \
STACK_POINTER_REGNUM)))
#define DEBUGGER_ARG_OFFSET(OFFSET, X) \
((GET_CODE (X) == PLUS ? OFFSET : 0) \
+ (frame_pointer_needed \
? 0 : - mn10300_initial_offset (ARG_POINTER_REGNUM, \
STACK_POINTER_REGNUM)))
/* Specify the machine mode that this machine uses /* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */ for the index in the tablejump instruction. */
#define CASE_VECTOR_MODE Pmode #define CASE_VECTOR_MODE Pmode
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment