summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Cahalan <acahalan@gmail.com>2006-12-07 04:14:06 +0300
committerAndi Kleen <andi@basil.nowhere.org>2006-12-07 04:14:06 +0300
commit8e3de538eec95b57a5b86038988451c38ba83f7e (patch)
tree620f12813f32f2ba13d2170c7884bfa0d6a1b245
parentb026872601976f666bae77b609dc490d1834bf77 (diff)
downloadlinux-8e3de538eec95b57a5b86038988451c38ba83f7e.tar.xz
[PATCH] x86-64: Support -mregparm arguments for signals with SA_SIGINFO in compat mode
The recent change to make x86_64 support i386 binaries compiled with -mregparm=3 only covered signal handlers without SA_SIGINFO. (the 3-arg "real-time" ones) To be compatible with i386, both types should be supported. Signed-off-by: Albert Cahalan <acahalan@gmail.com> Signed-off-by: Andi Kleen <ak@suse.de>
-rw-r--r--arch/x86_64/ia32/ia32_signal.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86_64/ia32/ia32_signal.c b/arch/x86_64/ia32/ia32_signal.c
index 0e0a266d976f..ff499ef2a1ba 100644
--- a/arch/x86_64/ia32/ia32_signal.c
+++ b/arch/x86_64/ia32/ia32_signal.c
@@ -584,6 +584,11 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
regs->rdx = (unsigned long) &frame->info;
regs->rcx = (unsigned long) &frame->uc;
+ /* Make -mregparm=3 work */
+ regs->rax = sig;
+ regs->rdx = (unsigned long) &frame->info;
+ regs->rcx = (unsigned long) &frame->uc;
+
asm volatile("movl %0,%%ds" :: "r" (__USER32_DS));
asm volatile("movl %0,%%es" :: "r" (__USER32_DS));