------- Comment #2 from acahalan at gmail dot com 2006-04-21 03:16 ------- #define asmlinkage __attribute__((regparm(0))) #define prevent_tail_call(ret) __asm__ ("" : "=r" (ret) : "0" (ret))
As I recall, the kernel expects the stack to remain untouched so that it can restore that portion of the stack into registers for a return from a system call. I think it's even in the right format to do an IRET instruction. The i386 kernel has a 4044-byte stack, and the kernel tries to be very fast (including cache-friendly), so copying data around to satisfy the normal ABI is not desirable. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27234