[rfa] mips argument passing fixes for o32

Daniel Jacobowitz dmj+@andrew.cmu.edu
Thu Jul 12 10:39:00 GMT 2001


On Thu, Jul 12, 2001 at 04:23:49AM -0400, Andrew Cagney wrote:
> > The shift fix matches this
> > comment in GCC and is not really specified by the ABI document:
> 
> 
> > -		      && TARGET_BYTE_ORDER == BIG_ENDIAN
> > +		      && (TARGET_BYTE_ORDER == BIG_ENDIAN
> > +			  || TYPE_LENGTH (arg_type) < MIPS_SAVED_REGSIZE)
> > 
> 
> I don't think this change is right.  In little endian mode, a one byte 
> struct will end up being stored at A+4 instead of A.
> 
> Which failures did it appear to fix?  Which endian is MIPS/Linux?

MIPS/Linux can be either big or little endian; the failure was on
little endian.

The effect is to store a one byte struct at A+3 (not A+4); this matches
what at least GCC does from what I can tell, and the comment in GCC
says that SGI compilers do the same.

The testcase was the passing of a three_char_t in call-ar-st (calling
print_three_chars from the gdb prompt).

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer



More information about the Gdb-patches mailing list