diff options
author | Michael Snyder <msnyder@vmware.com> | 1997-06-28 04:07:56 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1997-06-28 04:07:56 +0000 |
commit | 08d8f99560920cb059d1d670649b93d9ab384f0d (patch) | |
tree | d616b7f1adb3b28d9c46bbbc1d51056b4f3bcc91 /gdb/mips-tdep.c | |
parent | 0af60e0326d6263693fcad779e7f41cdcaf012f7 (diff) | |
download | gdb-08d8f99560920cb059d1d670649b93d9ab384f0d.zip gdb-08d8f99560920cb059d1d670649b93d9ab384f0d.tar.gz gdb-08d8f99560920cb059d1d670649b93d9ab384f0d.tar.bz2 |
Fri Jun 27 21:05:45 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
* mips-tdep.c (mips_push_arguments): handle alignment of
integer and struct args on stack for mips64 big-endian.
Diffstat (limited to 'gdb/mips-tdep.c')
-rw-r--r-- | gdb/mips-tdep.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 285d379..dfca27a 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -1276,6 +1276,7 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) if (typecode == TYPE_CODE_STRUCT && MIPS_EABI && len > MIPS_REGSIZE) { store_address (valbuf, MIPS_REGSIZE, VALUE_ADDRESS (arg)); + typecode = TYPE_CODE_PTR; len = MIPS_REGSIZE; val = valbuf; } @@ -1369,8 +1370,23 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) else { /* Write this portion of the argument to the stack. */ + int longword_offset; + partial_len = len; - write_memory (sp + stack_offset, val, partial_len); + longword_offset = 0; + if (TARGET_BYTE_ORDER == BIG_ENDIAN) + if (MIPS_REGSIZE == 8 && + (typecode == TYPE_CODE_INT || + typecode == TYPE_CODE_PTR || + typecode == TYPE_CODE_FLT) && len <= 4) + longword_offset = 4; + else if ((typecode == TYPE_CODE_STRUCT || + typecode == TYPE_CODE_UNION) && + len < MIPS_REGSIZE) + longword_offset = MIPS_REGSIZE - len; + + write_memory (sp + stack_offset + longword_offset, + val, partial_len); stack_offset += ROUND_UP (partial_len, MIPS_REGSIZE); } |