This is the mail archive of the 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 2.0] Implementing hwcap2

> 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
implementations read:
	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.


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