On Mon, Mar 21, 2016 at 02:49:44PM -0400, Brian Gerst wrote: > 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.
What would be the point of that? It would be a lot more complicated, and I don't see any advantages over the aux vector. vdso also requires custom assembler stubs in the C library. -Andi

