On Tue, 31 May 2011, Dave Martin wrote: > On Tue, May 31, 2011 at 03:35:42PM +0100, Richard Earnshaw wrote: > > I think the difficulty here is that glibc expects either the compiler, > > or libgcc to provide the sync primitives; and while GCC can tie the > > inlined copy of the primitive to use of CPUs with the relevant > > instruction, the libgcc version doesn't know how to specify that the > > code it's relying on requires a minimal kernel version... > > The libgcc 64-bit atomic helpers could do a runtime check on > the __kernel_helper_version field in the vectors page before calling > the 64-bit cmpxchg helper. This will allow the absence of the helper > to be reliably detected on older kernels. Because this is data, it > might cause an extra D-TLB miss to accompany any other miss associated > with calling the kernel helper (if it exists).
Isn't there a way to pull in a global constructor or similar whenever a reference to the 64-bit cmpxchg helper is made, so that the constructor code could simply validate the kuser version number and bail out otherwise? I know this is certainly the case on x86 that if you statically compile a binary on a modern distro in the hope of being able to execute that binary anywhere, you may get a "kernel too old" error message when trying to run it on older distros. The same thing could be done for the ARM 64-bit cmpxchg helper as well, at startup rather than on every invokation, no? Nicolas _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev