asmlinkage FASTCALL

Pavel Machek (pavel@ucw.cz)
Thu, 28 Feb 2002 23:11:20 +0100


Hi!

Well, asmlinkage is "__attribute__ regparm(0)", while fastcall is
"__attribute__ regparm(3)". If you mix them on gcc 3.1, you get nice
miscompilation. That should be fixed.

Index: arch/i386/kernel/signal.c
===================================================================
RCS file: /cvs/Repository/linux/arch/i386/kernel/signal.c,v
retrieving revision 1.3
diff -u -u -r1.3 signal.c
--- arch/i386/kernel/signal.c 2001/10/16 23:40:31 1.3
+++ arch/i386/kernel/signal.c 2002/02/28 22:11:41
@@ -28,7 +28,7 @@

#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))

-asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
+int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));

int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
{
Index: arch/i386/kernel/vm86.c
===================================================================
RCS file: /cvs/Repository/linux/arch/i386/kernel/vm86.c,v
retrieving revision 1.2
diff -u -u -r1.2 vm86.c
--- arch/i386/kernel/vm86.c 2001/07/21 13:03:51 1.2
+++ arch/i386/kernel/vm86.c 2002/02/28 22:11:41
@@ -62,7 +62,7 @@
( (unsigned)( & (((struct kernel_vm86_regs *)0)->VM86_REGS_PART2) ) )
#define VM86_REGS_SIZE2 (sizeof(struct kernel_vm86_regs) - VM86_REGS_SIZE1)

-asmlinkage struct pt_regs * FASTCALL(save_v86_state(struct kernel_vm86_regs * regs));
+struct pt_regs * FASTCALL(save_v86_state(struct kernel_vm86_regs * regs));
struct pt_regs * save_v86_state(struct kernel_vm86_regs * regs)
{
struct tss_struct *tss;
Index: arch/s390/kernel/signal.c
===================================================================
RCS file: /cvs/Repository/linux/arch/s390/kernel/signal.c,v
retrieving revision 1.4
diff -u -u -r1.4 signal.c
--- arch/s390/kernel/signal.c 2001/10/24 23:58:45 1.4
+++ arch/s390/kernel/signal.c 2002/02/28 22:11:44
@@ -47,7 +47,7 @@
struct ucontext uc;
} rt_sigframe;

-asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
+int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));

int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
{
Index: arch/s390x/kernel/signal.c
===================================================================
RCS file: /cvs/Repository/linux/arch/s390x/kernel/signal.c,v
retrieving revision 1.4
diff -u -u -r1.4 signal.c
--- arch/s390x/kernel/signal.c 2001/10/24 23:58:47 1.4
+++ arch/s390x/kernel/signal.c 2002/02/28 22:11:44
@@ -47,7 +47,7 @@
struct ucontext uc;
} rt_sigframe;

-asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
+int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));

int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
{

Pavel

-- 
(about SSSCA) "I don't say this lightly.  However, I really think that the U.S.
no longer is classifiable as a democracy, but rather as a plutocracy." --hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/