[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [patch] pagetable cleanups



On Thu, 2005-04-14 at 15:48 +0100, Mark Williamson wrote:
> > Yes, was intentionally.  I think that isn't bad, it makes the code more
> > readable.  And I think it actually is impossible to return structs in C,
> > you can only return a pointer to a struct, which would't help for the
> > "building entries as expressions" case.
> 
> Returning structs by values works with GCC.  That said, I've never checked 
> whether that's standard or a GCC extension.  For big structs I think it 
> transparently generates a memcpy, don't know what it generates for little 
> ones.

Depends on the ABI.

For ppc64 Linux:
        Aggregates or unions of any length, and character strings of
        length longer than 8 bytes, will be returned in a storage buffer
        allocated by the caller. The caller will pass the address of
        this buffer as a hidden first argument in r3, causing the first
        explicit argument to be passed in r4.

For ppc32 (System V R4 ABI) it's a little different for small
structures:
        A structure or union whose size is less than or equal to 8 bytes
        shall be returned in r3 and r4, as if it were first stored in an
        8-byte aligned memory area and then the low-addressed word were
        loaded into r3 and the high-addressed word into r4.

        Values of type long double and structures or unions that do not
        meet the requirements for being returned in registers are
        returned in a storage buffer allocated by the caller. The
        address of this buffer is passed as a hidden argument in r3 as
        if it were the first argument, causing gr in the argument
        passing algorithm above to be initialized to 4 instead of 3.

x86 (again from SVR4):
        If a function returns a structure or union, then the caller
        provides space for the return value and places its address on
        the stack as argument word zero. In effect, this address becomes
        a ``hidden'' first argument.

So no memcpys at all; the caller fills in the values directly into the
callee's struct.

-- 
Hollis Blanchard
IBM Linux Technology Center


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.