This is the mail archive of the
mailing list for the glibc project.
Re: [RFC 2.0] Implementing hwcap2
- From: Roland McGrath <roland at hack dot frob dot com>
- To: Mike Frysinger <vapier at gentoo dot org>
- Cc: libc-alpha at sourceware dot org, David Miller <davem at davemloft dot net>, ryan dot arnold at gmail dot com, rth at twiddle dot net, rsa at us dot ibm dot com
- Date: Thu, 28 Mar 2013 16:40:33 -0700 (PDT)
- Subject: Re: [RFC 2.0] Implementing hwcap2
- References: <1364493171 dot 3473 dot 23 dot camel at localhost dot localdomain> <CAAKybw9spaVz5EeH6Fb6xN19FUO=PmpDCB2raJctbnCkfN+txg at mail dot gmail dot com> <20130328 dot 173934 dot 1310725546115298719 dot davem at davemloft dot net> <201303281931 dot 43830 dot vapier at gentoo dot org>
> 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.
IMHO the change to the dl-irel.h files should also include adding a typedef
for the function type of IFUNC selectors, so those elf_ifunc_invoke
return (*(ifunc_selector_t *) addr) (GLRO(dl_hwcap));
Then every selector's definition should be preceded by a forward
declaration using ifunc_selector_t (perhaps not the ideal name)
so that prototype mismatches will be caught.