mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
* mn10200-tdep.c (mn10200_push_arguments): Stack only needs to
be two byte aligned. Round argument sizes up to two byte boundary. Write out args in two byte hunks. (mn10200_push_return_address): Implement. * config/mn10200/tm-mn10200.h (EXTRACT_RETURN_VALUE): Abort for structures > 8 bytes (temporary). (STORE_RETURN_VALUE): Likewise. (CALL_DUMMY): No longer undefine. (USE_STRUCT_CONVENTION): Use for args > 8 bytes. (REG_STRUCT_HAS_ADDR): Define. Inferior function calls for the mn10200.
This commit is contained in:
parent
f9114af581
commit
25de138b06
@ -1,3 +1,16 @@
|
||||
Tue Feb 11 12:28:09 1997 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* mn10200-tdep.c (mn10200_push_arguments): Stack only needs to
|
||||
be two byte aligned. Round argument sizes up to two byte boundary.
|
||||
Write out args in two byte hunks.
|
||||
(mn10200_push_return_address): Implement.
|
||||
* config/mn10200/tm-mn10200.h (EXTRACT_RETURN_VALUE): Abort for
|
||||
structures > 8 bytes (temporary).
|
||||
(STORE_RETURN_VALUE): Likewise.
|
||||
(CALL_DUMMY): No longer undefine.
|
||||
(USE_STRUCT_CONVENTION): Use for args > 8 bytes.
|
||||
(REG_STRUCT_HAS_ADDR): Define.
|
||||
|
||||
start-sanitize-r5900
|
||||
Fri Feb 07 09:04:37 1997 Gavin Koch <gavin@cygnus.com>
|
||||
|
||||
|
@ -122,7 +122,7 @@ extern CORE_ADDR mn10200_frame_saved_pc PARAMS ((struct frame_info *));
|
||||
|
||||
#define EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \
|
||||
{ \
|
||||
if (TYPE_LENGTH (TYPE) > 4) \
|
||||
if (TYPE_LENGTH (TYPE) > 8) \
|
||||
abort (); \
|
||||
else if (TYPE_LENGTH (TYPE) > 2 && TYPE_CODE (TYPE) != TYPE_CODE_PTR) \
|
||||
{ \
|
||||
@ -141,7 +141,7 @@ extern CORE_ADDR mn10200_frame_saved_pc PARAMS ((struct frame_info *));
|
||||
|
||||
#define STORE_RETURN_VALUE(TYPE, VALBUF) \
|
||||
{ \
|
||||
if (TYPE_LENGTH (TYPE) > 4) \
|
||||
if (TYPE_LENGTH (TYPE) > 8) \
|
||||
abort (); \
|
||||
else if (TYPE_LENGTH (TYPE) > 2 && TYPE_CODE (TYPE) != TYPE_CODE_PTR) \
|
||||
{ \
|
||||
@ -171,7 +171,6 @@ extern void mn10200_pop_frame PARAMS ((struct frame_info *));
|
||||
|
||||
#define USE_GENERIC_DUMMY_FRAMES
|
||||
#define CALL_DUMMY {0}
|
||||
#undef CALL_DUMMY /* for now, no function calls */
|
||||
#define CALL_DUMMY_START_OFFSET (0)
|
||||
#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
|
||||
#define CALL_DUMMY_LOCATION AT_ENTRY_POINT
|
||||
@ -191,8 +190,11 @@ mn10200_push_arguments PARAMS ((int, struct value **, CORE_ADDR,
|
||||
|
||||
#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP)
|
||||
|
||||
#define REG_STRUCT_HAS_ADDR(gcc_p,type) \
|
||||
(TYPE_LENGTH (type) > 8)
|
||||
|
||||
#define USE_STRUCT_CONVENTION(GCC_P, TYPE) \
|
||||
(TYPE_NFIELDS (TYPE) > 1 || TYPE_LENGTH (TYPE) > 4)
|
||||
(TYPE_NFIELDS (TYPE) > 1 || TYPE_LENGTH (TYPE) > 8)
|
||||
|
||||
/* Override the default get_saved_register function with
|
||||
one that takes account of generic CALL_DUMMY frames. */
|
||||
|
@ -530,15 +530,15 @@ mn10200_push_arguments (nargs, args, sp, struct_return, struct_addr)
|
||||
int stack_offset = 0;
|
||||
|
||||
/* This should be a nop, but align the stack just in case something
|
||||
went wrong. */
|
||||
sp &= ~3;
|
||||
went wrong. Stacks are two byte aligned on the mn10200. */
|
||||
sp &= ~1;
|
||||
|
||||
/* Now make space on the stack for the args.
|
||||
|
||||
XXX This doesn't appear to handle pass-by-invisible reference
|
||||
arguments. */
|
||||
for (argnum = 0; argnum < nargs; argnum++)
|
||||
len += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3);
|
||||
len += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 1) & ~1);
|
||||
|
||||
/* Allocate stack space. */
|
||||
sp -= len;
|
||||
@ -567,11 +567,11 @@ mn10200_push_arguments (nargs, args, sp, struct_return, struct_addr)
|
||||
while (len > 0)
|
||||
{
|
||||
/* XXX This looks wrong; we can have one and two byte args. */
|
||||
write_memory (sp + stack_offset, val, 4);
|
||||
write_memory (sp + stack_offset, val, 2);
|
||||
|
||||
len -= 4;
|
||||
val += 4;
|
||||
stack_offset += 4;
|
||||
len -= 2;
|
||||
val += 2;
|
||||
stack_offset += 2;
|
||||
}
|
||||
args++;
|
||||
}
|
||||
@ -588,8 +588,11 @@ mn10200_push_return_address (pc, sp)
|
||||
CORE_ADDR pc;
|
||||
CORE_ADDR sp;
|
||||
{
|
||||
unsigned char buf[4];
|
||||
|
||||
return sp;
|
||||
store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
|
||||
write_memory (sp - 4, buf, 4);
|
||||
return sp - 4;
|
||||
}
|
||||
|
||||
/* Function: frame_saved_pc
|
||||
|
Loading…
Reference in New Issue
Block a user