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: Fri, 28 Jun 2019 16:35:26 +0000
- Subject: Re: [RFC PATCH] aarch64: new ifunc resolver ABI
- References: <d242d10d-8f83-1913-44d3-4c9fc49e0477@arm.com>
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.
> > 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.
>