On Wed, Feb 26, 2014 at 10:06 PM, H. Peter Anvin <h...@zytor.com> wrote: > On 02/26/2014 07:39 PM, Andi Kleen wrote: >> On Wed, Feb 26, 2014 at 05:02:13PM -0800, Andy Lutomirski wrote: >>> This makes no difference for 64-bit, bit it's critical for 32-bit code: >>> these functions are called from outside the kernel, so they need to comply >>> with the ABI. >> >> That's an odd patch. If that was wrong things couldn't have worked at all. >> Probably hidden by inlining? If yes just make it static >> >> Also you would rather need notrace more often. >> > > It has to support *an* ABI... the syscall vdso entry point uses the old > int $0x80 calling convention rather than the normal ABI. It would > depend on the test program and eventual glibc implementation. And sure > enough, the test program has: > > int (*vdso_gettimeofday)(struct timeval *tv, struct timezone *tz) > __attribute__ ((regparm (3))); > int (*vdso_clock_gettime)(clockid_t clk_id, struct timespec *tp) > __attribute__ ((regparm (3))); > time_t (*vdso_time)(time_t *t) __attribute__ ((regparm (3))); > > That being said, since this code is compiled separately, the compiler > flags there determine what actually matters. However, there we have: > > KBUILD_CFLAGS_32 += -m32 -msoft-float -mregparm=3 -freg-struct-return -fpic > > The normal ABI almost certainly makes more sense; as such -mregparm=3 is > probably not what we want, and I suspect it makes more sense to just > drop that from the CFLAGS line?
Hmm. What happens on a native 32-bit build? IIRC the whole kernel is build with regparm(3). If we want to save a cycle or two, then regparm(3) is probably faster. But I think that these functions should either be asmlinkage or (on 32 bit builds) explicitly regparm(3) to avoid confusion. --Andy -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/