Wed Nov 27 11:29:06 1996 Michael Snyder <msnyder@cleaver.cygnus.com>

* blockframe.c:         ...Remove old-style CALL_DUMMY code...
        * h8300-tdep.c:
        * config/h8300/tm-h8300.h:
start-sanitize-m32r
        * m32r-tdep.c:
        * config/m32r/tm-m32r.h:
end-sanitize-m32r
        * sh-tdep.c:
        * config/sh/tm-sh.h:
start-sanitize-v850
        * v850-tdep.c:
        * config/v850/tm-v850.h:
end-sanitize-v850
This commit is contained in:
Michael Snyder 1996-11-27 19:31:26 +00:00
parent 50f04a5a37
commit 409f64ae05
7 changed files with 24 additions and 115 deletions

View file

@ -1,3 +1,19 @@
Wed Nov 27 11:29:06 1996 Michael Snyder <msnyder@cleaver.cygnus.com>
* blockframe.c: ...Remove old-style CALL_DUMMY code...
* h8300-tdep.c:
* config/h8300/tm-h8300.h:
start-sanitize-m32r
* m32r-tdep.c:
* config/m32r/tm-m32r.h:
end-sanitize-m32r
* sh-tdep.c:
* config/sh/tm-sh.h:
start-sanitize-v850
* v850-tdep.c:
* config/v850/tm-v850.h:
end-sanitize-v850
Wed Nov 27 10:32:14 1996 Michael Snyder <msnyder@cleaver.cygnus.com>
* breakpoint.c: DELETE command will not delete CALL_DUMMY breakpoint.

View file

@ -222,7 +222,6 @@ extern CORE_ADDR m32r_push_arguments PARAMS ((int nargs,
one that takes account of generic CALL_DUMMY frames */
#define GET_SAVED_REGISTER
#if 1
#define CALL_DUMMY {0}
#define CALL_DUMMY_LENGTH (0)
#define CALL_DUMMY_START_OFFSET (0)
@ -230,27 +229,3 @@ extern CORE_ADDR m32r_push_arguments PARAMS ((int nargs,
#define FIX_CALL_DUMMY(DUMMY1, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP)
#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
#define CALL_DUMMY_ADDRESS() entry_point_address ()
#else
/*
/* Use these defines if, for whatever reason, you want to use a
genuine call_dummy sequence (A sequence of machine instructions
that GDB will write into the target address space, usually on the
stack, for calling a function in the inferior):
This sequence of words defines the instructions:
ld24 R8, <destination>
jl R8
nop
trap
*/
#define CALL_DUMMY { 0xe8000000, 0x1ec87000, 0x10f110f1 }
#define CALL_DUMMY_LENGTH (12)
#define CALL_DUMMY_START_OFFSET (0)
#define CALL_DUMMY_BREAKPOINT_OFFSET (8)
#define FIX_CALL_DUMMY(DUMMY1, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP) \
m32r_fix_call_dummy (DUMMY1, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP)
#define CALL_DUMMY_LOCATION ON_STACK
#define NEED_TEXT_START_END
#endif

View file

@ -248,36 +248,6 @@ extern CORE_ADDR sh_push_arguments PARAMS ((int nargs,
unsigned char struct_return,
CORE_ADDR struct_addr));
#if 0
/* Use these defines if, for whatever reason, you want to use a
genuine call_dummy sequence (A sequence of machine instructions
that GDB will write into the target address space, usually on the
stack, for calling a function in the inferior):
This sequence of words defines the instructions:
mov.w @(2,PC), R8
jsr @R8
nop
trap
<destination>
Note that the destination address is actually written into a word
8 bytes after the start of the CALL_DUMMY. The first instruction
loads it from here using PC-relative addressing. Note also the
NOP that must follow the jsr instruction to fill up the delay slot.
*/
#define CALL_DUMMY { 0xd801480b, 0x0009c3c3, 0x32323232, }
#define CALL_DUMMY_LENGTH (12)
#define CALL_DUMMY_START_OFFSET (0)
#define CALL_DUMMY_BREAKPOINT_OFFSET (6)
#define FIX_CALL_DUMMY(DUMMY, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP) \
sh_fix_call_dummy(DUMMY, STARTADDR, FUNADDR, NARGS, ARGS, TYPE, GCCP)
#define CALL_DUMMY_LOCATION ON_STACK
#else /* These defines write NO instructions into the inferior process,
and are therefore preferred because they make target calls faster. */
#define CALL_DUMMY {0}
#define CALL_DUMMY_LENGTH (0)
#define CALL_DUMMY_START_OFFSET (0)
@ -287,7 +257,7 @@ extern CORE_ADDR sh_push_arguments PARAMS ((int nargs,
#define CALL_DUMMY_ADDRESS() entry_point_address ()
extern CORE_ADDR sh_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR));
#define PUSH_RETURN_ADDRESS(PC, SP) sh_push_return_address (PC, SP)
#endif
#define FRAME_CHAIN(FRAME) sh_frame_chain(FRAME)
#define PUSH_DUMMY_FRAME generic_push_dummy_frame ()

View file

@ -113,27 +113,6 @@ extern CORE_ADDR v850_skip_prologue PARAMS ((CORE_ADDR pc));
extern void v850_pop_frame PARAMS ((struct frame_info *frame));
#define POP_FRAME v850_pop_frame (get_current_frame ())
#if 0
/* Use these defines if, for whatever reason, you want to use a
genuine call_dummy sequence (A sequence of machine instructions
that GDB will write into the target address space, usually on the
stack, for calling a function in the inferior):
This sequence of words defines the instructions:
jarl <offset24>, r31
trap
*/
#define CALL_DUMMY { 0x0000ff80, 0xffffffff }
#define CALL_DUMMY_LENGTH (8)
#define CALL_DUMMY_START_OFFSET (0)
#define CALL_DUMMY_BREAKPOINT_OFFSET (4)
#define CALL_DUMMY_LOCATION ON_STACK
#define FIX_CALL_DUMMY(DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP) \
v850_fix_call_dummy (DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP);
#else /* These defines write NO instructions into the inferior process,
and are therefore preferred because they make target calls faster. */
#define CALL_DUMMY {0}
#define CALL_DUMMY_START_OFFSET (0)
#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
@ -142,7 +121,7 @@ extern void v850_pop_frame PARAMS ((struct frame_info *frame));
#define CALL_DUMMY_ADDRESS() entry_point_address ()
extern CORE_ADDR v850_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR));
#define PUSH_RETURN_ADDRESS(PC, SP) v850_push_return_address (PC, SP)
#endif
#define PUSH_DUMMY_FRAME generic_push_dummy_frame ()

View file

@ -613,13 +613,8 @@ h8300_push_return_address (pc, sp)
else
wordsize = 2;
#if CALL_DUMMY_LOCATION != AT_ENTRY_POINT
pc = pc - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
#else
pc = CALL_DUMMY_ADDRESS ();
#endif /* CALL_DUMMY_LOCATION */
sp -= wordsize;
store_unsigned_integer (buf, wordsize, pc);
store_unsigned_integer (buf, wordsize, CALL_DUMMY_ADDRESS ());
write_memory (sp, buf, wordsize);
return sp;
}

View file

@ -482,7 +482,7 @@ sh_push_arguments (nargs, args, sp, struct_return, struct_addr)
while (len > 0)
{
if (argreg > ARGLAST_REGNUM || odd_sized_struct)
{ /* must go on the stack */
{ /* must go on the stack */
write_memory (sp + stack_offset, val, 4);
stack_offset += 4;
}
@ -490,7 +490,7 @@ sh_push_arguments (nargs, args, sp, struct_return, struct_addr)
That's because some *&^%$ things get passed on the stack
AND in the registers! */
if (argreg <= ARGLAST_REGNUM)
{ /* there's room in a register */
{ /* there's room in a register */
regval = extract_address (val, REGISTER_RAW_SIZE(argreg));
write_register (argreg++, regval);
}
@ -513,12 +513,7 @@ sh_push_return_address (pc, sp)
CORE_ADDR pc;
CORE_ADDR sp;
{
#if CALL_DUMMY_LOCATION != AT_ENTRY_POINT
pc = pc - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
#else
pc = CALL_DUMMY_ADDRESS ();
#endif /* CALL_DUMMY_LOCATION */
write_register (PR_REGNUM, pc);
write_register (PR_REGNUM, CALL_DUMMY_ADDRESS ());
return sp;
}

View file

@ -407,21 +407,14 @@ v850_push_arguments (nargs, args, sp, struct_return, struct_addr)
Set up the return address for the inferior function call.
Needed for targets where we don't actually execute a JSR/BSR instruction */
#ifdef PUSH_RETURN_ADDRESS
CORE_ADDR
v850_push_return_address (pc, sp)
CORE_ADDR pc;
CORE_ADDR sp;
{
#if CALL_DUMMY_LOCATION != AT_ENTRY_POINT
pc = pc - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
#else
pc = CALL_DUMMY_ADDRESS ();
#endif /* CALL_DUMMY_LOCATION */
write_register (RP_REGNUM, pc);
write_register (RP_REGNUM, CALL_DUMMY_ADDRESS ());
return sp;
}
#endif /* PUSH_RETURN_ADDRESS */
/* Function: frame_saved_pc
Find the caller of this frame. We do this by seeing if RP_REGNUM
@ -472,22 +465,8 @@ v850_fix_call_dummy (dummy, sp, fun, nargs, args, type, gcc_p)
int gcc_p;
{
long offset24;
CORE_ADDR call_dummy_start;
#ifdef NEED_TEXT_START_END
extern CORE_ADDR text_end;
#endif
#if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
call_dummy_start = entry_point_address ();
#elif (CALL_DUMMY_LOCATION == AFTER_TEXT_END)
call_dummy_start = text_end;
#elif (CALL_DUMMY_LOCATION == BEFORE_TEXT_END)
call_dummy_start = (text_end - CALL_DUMMY_LENGTH) & ~3;
#elif (CALL_DUMMY_LOCATION == ON_STACK)
call_dummy_start = sp;
#endif
offset24 = (long) fun - (long) call_dummy_start;
offset24 = (long) fun - (long) entry_point_address ();
offset24 &= 0x3fffff;
offset24 |= 0xff800000; /* jarl <offset24>, r31 */