On Tue, Mar 25, 2014 at 10:44:21PM +1100, Anton Blanchard wrote:
> Fix STK_PARAM and use it instead of hardcoding ABIv1 offsets.

>  _GLOBAL(memcpy)
>  BEGIN_FTR_SECTION
> -     std     r3,48(r1)       /* save destination pointer for return value */
> +     std     r3,STK_PARAM(R3)(r1)    /* save destination pointer for return 
> value */

Here and elsewhere you're assuming you have a parameter save area.
That won't be true with ELFv2 for calls to functions like memcpy.

typedef __SIZE_TYPE__ size_t;
extern void *memcpy (void *dest, const void *src, size_t n);

void foo (void *dest, const void *src, size_t n)
{
  memcpy (dest, src, n);
}

foo:
0:      addis 2,12,.TOC.-0b@ha
        addi 2,2,.TOC.-0b@l
        .localentry     foo,.-foo
        mflr 0
        std 0,16(1)
        stdu 1,-32(1)   # <========
        bl memcpy
        nop
        addi 1,1,32
        ld 0,16(1)
        mtlr 0
        blr

-- 
Alan Modra
Australia Development Lab, IBM
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to