This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [RFC PATCH] aarch64: new ifunc resolver ABI
- From: Szabolcs Nagy <Szabolcs dot Nagy at arm dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Cc: nd <nd at arm dot com>, Florian Weimer <fweimer at redhat dot com>
- Date: Thu, 4 Jul 2019 10:16:43 +0000
- Subject: Re: [RFC PATCH] aarch64: new ifunc resolver ABI
- References: <d242d10d-8f83-1913-44d3-4c9fc49e0477@arm.com> <eee6bf31-3867-3229-6ae4-eae1d3b1aaea@arm.com>
On 28/06/2019 17:35, Szabolcs Nagy wrote:
> On 12/06/2019 11:09, Szabolcs Nagy wrote:
>> Passing a second argument to the ifunc resolver allows accessing
>> AT_HWCAP2 values from the resolver. AArch64 will start using AT_HWCAP2
>> on linux because for ilp32 to remain compatible with lp64 ABI no more
>> than 32bit hwcap flags can be in AT_HWCAP which is already used up.
>
> for the record i'm still planning to commit this for 2.30.
> will try to do it next week.
committed.
>>> Currently the relocation ordering logic does not guarantee that ifunc
>> resolvers can call libc apis or access libc objects, so only the
>> resolver arguments and runtime environment dependent instructions can
>> be used to do the dispatch (this affects ifunc resolvers outside of
>> the libc).
>>
>> Since ifunc resolver is target specific and only supposed to be
>> called by the dynamic linker, the call ABI can be changed in a
>> backward compatible way:
>>
>> Old call ABI passed hwcap as uint64_t, new abi sets the
>> _IFUNC_ARG_HWCAP flag in the hwcap and passes a second argument
>> that's a pointer to an extendible struct. A resolver has to check
>> the _IFUNC_ARG_HWCAP flag before accessing the second argument.
>>
>> The new sys/ifunc.h installed header has the definitions for the
>> new ABI, everything is in the implementation reserved namespace.
>>
>> An alternative approach is to try to support extern calls from ifunc
>> resolvers such as getauxval, but that seems non-trivial
>> https://sourceware.org/ml/libc-alpha/2017-01/msg00468.html
>>
>> 2019-06-12 Szabolcs Nagy <szabolcs.nagy@arm.com>
>>
>> * sysdeps/aarch64/Makefile: Install sys/ifunc.h and add tests.
>> * sysdeps/aarch64/dl-irel.h (elf_ifunc_invoke): Update to new ABI.
>> * sysdeps/aarch64/sys/ifunc.h: New file.
>> * sysdeps/aarch64/tst-ifunc-arg-1.c: New file.
>> * sysdeps/aarch64/tst-ifunc-arg-2.c: New file.
>>
>