With the userland runtime linker we can have multiple variants of a library that are selected based on $HWCAP.
In the kernel part of crypto framework we have a need to have different implementations of algorithms based on the cpu capabilities. Currently we have done this in two ways. For SPARC we are (ab)using $PLATFORM to do this, but that means that symlinks need to be updated for every new platform even if the cpu stays the same. This has actually turned out to be useful though because sometimes we have needed to distinguish between an UltraSPARC II and UltraSPARC III (and later) CPU which have the same hardware capabitlies but different cache sizes. For x86 our only case we have integrated so far is for using SSE and we have a runtime check for that since this was one of the very first SSE consumers on Solaris. The VIA processors have hardware crypto in them. The current development in this area is developing this as a hardware driver for the crypto framework but it might actually make more sense to just have it as a $HWCAP variant of the software aes module. What we would like to be able to do is something like what we have in userland with $HWCAP, for example: /kernel/crypto/aes/aes_hwcap1 /kernel/crypto/aes/aes_hwcap2 [VIA_C7] /kernel/crypto/rsa/rsa_hwcap1 /kernel/crypto/rsa/rsa_hwcap2 [SSE MMX CMOV SEP FPU] Would this be possible to have implemented with krtld ? Or is there a better/existing way to provide $HWCAP like functionality for kernel modules ? -- Darren J Moffat