On Mon, Mar 21, 2016 at 12:16 PM, Andi Kleen <[email protected]> wrote: > From: Andi Kleen <[email protected]> > > The kernel needs to explicitely enable RD/WRFSBASE to handle context > switch correctly. So the application needs to know if it can safely use > these instruction. Just looking at the CPUID bit is not enough because it > may be running in a kernel that does not enable the instructions. > > One way for the application would be to just try and catch the SIGILL. > But that is difficult to do in libraries which may not want > to overwrite the signal handlers of the main application. > > So we need to provide a way for the application to discover the kernel > capability. > > I used AT_HWCAP2 in the ELF aux vector which is already used by > PPC for similar things. We define a new Linux defined bitmap > returned in AT_HWCAP. Currently it has only one bit set, > for kernel is FSGSBASE capable. > > The application can then access it manually or using > the getauxval() function in newer glibc.
How about adding a VDSO function instead? The VDSO can use alternatives, so it can use the new instructions if supported, or else use the old syscall. -- Brian Gerst

