Re: [RFA] mips_push_arguments(): Make O64 ABI test explicit

Michael Snyder
2002-07-31T23:11:21Z

Kevin Buettner wrote:
>
> Now that mips-tdep.c defines another ABI such that
>
> mips_default_saved_regsize == 8,
>
> it becomes necessary to revise one of the conditions in
> mips_push_arguments().
>
> The comment above the test in question says:
>
> ...
> Also don't do this adjustment on EABI and O64
> binaries.
> ...
>
> I believe that the expression ``MIPS_SAVED_REGSIZE < 8'' was being used
> to test to see if the O64 ABI was being used.

OK, with you so far...

> I've changed the test
> so that it explicitly checks the tdep struct for the O64 ABI instead.

Ah, but both N32 and N64 use 8-byte registers, and
at least N32 does NOT want to have this adjustment.
I'm guessing N64 doesn't either (haven't tried it yet).

Your patch makes N32 fail, but we could add to it thusly:

> Okay to commit?
>
> * mips-tdep.c (mips_push_arguments): Don't assume that
> ``MIPS_SAVED_REGSIZE < 8'' means that the o64 abi is in use.
> Instead, test for each ABI which might not want this shift.
>
> Index: mips-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mips-tdep.c,v
> retrieving revision 1.85
> diff -u -p -r1.85 mips-tdep.c
> --- mips-tdep.c 31 Jul 2002 20:26:49 -0000 1.85
> +++ mips-tdep.c 31 Jul 2002 20:48:49 -0000
> @@ -2615,7 +2615,7 @@ mips_push_arguments (int nargs,
> such and GDB gets tweaked accordingly. */
>
> if (!MIPS_EABI
> - && MIPS_SAVED_REGSIZE < 8
+ && tdep->mips_abi != MIPS_ABI_O64
+ && tdep->mips_abi != MIPS_ABI_N32
+ && tdep->mips_abi != MIPS_ABI_N64
> && TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
> && partial_len < MIPS_SAVED_REGSIZE
> && (typecode == TYPE_CODE_STRUCT ||

Of course, at this point, we might as well test for all the abis
that DO want the shift, instead of those that don't...

Michael