[RFC 2.0] Implementing hwcap2
David Miller
davem@davemloft.net
Fri Mar 29 00:11:00 GMT 2013
From: Roland McGrath <roland@hack.frob.com>
Date: Thu, 28 Mar 2013 16:40:33 -0700 (PDT)
>> how ? resolve_* are not exported symbols, and they're not in the header files.
>
> Those are just the users of the changed ABI. The ABI in question is the
> convention by which the dynamic linker calls IFUNC resolver entry points.
> Richard quoted the an example of the affected callees because Ryan's change
> didn't change the callers, which are elf_ifunc_invoke in dl-irel.h. Those
> that pass GLRO(dl_hwcap) (arm, powerpc, s390, sparc) do so using a cast to
> a hand-written function pointer type, which takes 'unsigned long int' for
> arm, powerpc, and s390, and 'int' for sparc. Though GLRO(dl_hwcap) already
> has type uint64_t, the prototypes in those casts (for sparc, arm,
> powerpc32, and s390-32) will truncate the value being passed. So in fact,
> Ryan hasn't changed the ABI, but he intends to and needs to for the purpose
> of his change to take effect.
I'd rather not do this on Sparc.
IFUNC resolvers are written in assembler and shared between 64-bit and
32-bit sparc.
If we change the hwcap argument type to be a uint64_t then on 32-bit
the argument will be passed differently compared to now where we can
always expect the low 32-bits of the hwcaps to be in %o0.
More information about the Libc-alpha
mailing list