HomeFreeBSD

[PowerPC] Define powerpc IFUNC kernel/userspace ABI.

Description

[PowerPC] Define powerpc IFUNC kernel/userspace ABI.

This is a prerequisite for anything IFUNC in the ELFv2 / clang switch.

Since probing cpu info on powerpc is a privileged operation, define that we
pass AT_HWCAP / AT_HWCAP2 through as cpu_features and cpu_features2 to ifunc
resolvers.

This is particularly important when dealing with non-PLT GNU IFUNC, which is
not allowed to PLT call from resolvers and therefore can't access global
variables.

The naming convention "cpu_features"/"cpu_features2" is an existing FreeBSD
PowerPC convention and matches the way we treat these variables in
machine/cpu.h.

The underlying variables are u_long, however, as per the commit message for
r332868, only the low 32 bits are ever used, so the underlying flags are
compatible across all of PowerPC.

The resolver prototype is defined to reserve the maximum number of
register-passed parameters the various PowerPC ABIs allow. This leaves
plenty of room for growth without needing to resort to passing via the
stack in the future.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D22787

Details

Provenance
bdragonAuthored on
Reviewer
jhibbits
Differential Revision
D22787: [PowerPC] Define powerpc IFUNC kernel/userspace ABI.
Parents
rS356060: sbin/fstyp: recgonize Dragonfly's hammer and hammer2.
Branches
Unknown
Tags
Unknown