This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: sh4 abi doc



> From: Elena Zannoni [mailto:ezannoni@redhat.com] 
> Sent: Thursday, September 26, 2002 9:51 AM

> in the meantime, do you know what is the official rule for returning
> results on the stack, instead of in the return register?
> Seems that gdb and gcc are disagreeing on this.
> Gdb expects structs to be returned on the stack if their size is > 1.

Here's what we have:

"Aggregate types not bigger than 8 bytes that have the same size and
alignment as one of the integer scalar types are returned in the same
registers as the integer type they match.

"For example, a 2-byte aligned structure with size 2 bytes has the
same size and alignment as a short int, and will be returned in R0.
A 4-byte aligned structure with size 8 bytes has the same size and
alignment as a long long int, and will be returned in R0 and R1.

"When an aggregate type is returned in R0 and R1, R0 contains the first
four bytes of the aggregate, and R1 contains the remainder. If the size
of the aggregate type is not a multiple of 4 bytes, the aggregate is
tail-padded up to a multiple of 4 bytes. The value of the padding is
undefined.

"All other aggregate types are returned by address. The caller function
passes the address of an area large enough to hold the aggregate value
in R2. The called function stores the result in this location."

I hope that makes sense, it was difficult to describe both clearly and
accurately!  

Actually, the SH-4 ABI documentation that Red Hat supplies with
the gnupro tools says the same thing in fewer words, but (IMO)
not as clearly.

Steve.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]