HomeFreeBSD

Pass CPUID[1] %edx (cpu_feature), %ecx (cpu_feature2) and

Description

Pass CPUID[1] %edx (cpu_feature), %ecx (cpu_feature2) and
CPUID[7].%ebx (cpu_stdext_feature), %ecx (cpu_stdext_feature2) to the
ifunc resolvers on x86.

It is much more clean to use CPUID instruction in usermode to retrieve
this information than to pass AT_HWCAP aux vector from kernel, on
x86. Still, the change does allow for use of AT_HWCAP on arches where it is
needed, by passing aux array to ifunc_init() initializer which should
prepare arguments for ifunc resolvers.

Current signature for resolvers on x86 is
func_t iresolve(uint32_t cpu_feature, uint32_t cpu_feature2,

	    uint32_t cpu_stdext_feature, uint32_t cpu_stdext_feature2);

where arguments have identical meaning as the kernel variables of the
same name. The ABIs allow to use resolvers with the void or shortened
list of arguments.

Reviewed by: jhb
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D8448

Details

Provenance
kibAuthored on
Reviewer
jhb
Differential Revision
D8448: Pass cpuid values to the ifunc resolvers on x86.
Parents
rS308688: Assert that there is no unresolved symbols during rtld linking.
Branches
Unknown
Tags
Unknown