Messages in this thread | | | Date | Wed, 26 Feb 2014 21:06:25 -0800 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH 1/2] x86: Mark __vdso entries as asmlinkage |
| |
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?
-hpa
| |