[RFC 2/2] Update prototype of IFUNC resolver for MIPS
Szabolcs Nagy
szabolcs.nagy@arm.com
Fri Sep 4 13:18:00 GMT 2015
On 03/09/15 23:03, Faraz Shahbazker wrote:
> Comments are invited on the prototype of the IFUNC resolver for MIPS. We want
> something flexible enough to handle current requirements and extensions.
>
> This patch, from RobertS, provides the resolver with 2 HWCAP registers and a
> callback control function. The callback currently provides the ability to
> toggle/switch between FP ABI modes.
...
> @@ -43,7 +44,9 @@ elf_ifunc_invoke (ElfW(Addr) addr)
> (unsigned long int)t_addr);
> }
>
> - return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap));
> + return ((ElfW(Addr) (*) (unsigned long int, unsigned long int,
> + int (int, int))) addr)
> + (GLRO(dl_hwcap), GLRO(dl_hwcap2), dl_ifunc_control);
> }
>
the only ifunc documentation i know of says
"The calling convention of the STT_GNU_IFUNC function, which takes
no arguments and returns a function pointer, should follow the
processor-specific ABI."
(ifunc.txt at https://sites.google.com/site/x32abi/documents )
this is for x86 and wrong for other archs.
i think the interface contracts of the resolver should be
documented if ifunc is used outside the libc.
> +static int __attribute_used__
> +dl_ifunc_control (int operation, int value)
> +{
...
> + /* Remember the choice for the last compabitle FP ABI. */
> + ifunc_fpabi = in_abi;
...
> +/* FP ABI requirement for ifunc with callback. The new mode switch can only
> + be requested once. */
> +
> +static int ifunc_fpabi = -1;
> +
i think the resolver needs to be as-safe, so modified
objects should be volatile (sig_atomic_t).
the ifunc situation is quite messy, is it supposed to be
used outside of the libc? (i know on x86, gcc target libs
and function multi-versioning use it, but i'd assume other
targets would move away from it outside the libc).
More information about the Libc-alpha
mailing list