This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC PATCH] aarch64: new ifunc resolver ABI


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.
>>
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]