diff options
Diffstat (limited to 'arch/um/sys-i386/signal.c')
-rw-r--r-- | arch/um/sys-i386/signal.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/arch/um/sys-i386/signal.c b/arch/um/sys-i386/signal.c index 42ecf8e8ad08..1cbf95f6858a 100644 --- a/arch/um/sys-i386/signal.c +++ b/arch/um/sys-i386/signal.c | |||
@@ -18,6 +18,28 @@ | |||
18 | 18 | ||
19 | #include "skas.h" | 19 | #include "skas.h" |
20 | 20 | ||
21 | void copy_sc(union uml_pt_regs *regs, void *from) | ||
22 | { | ||
23 | struct sigcontext *sc = from; | ||
24 | |||
25 | REGS_GS(regs->skas.regs) = sc->gs; | ||
26 | REGS_FS(regs->skas.regs) = sc->fs; | ||
27 | REGS_ES(regs->skas.regs) = sc->es; | ||
28 | REGS_DS(regs->skas.regs) = sc->ds; | ||
29 | REGS_EDI(regs->skas.regs) = sc->edi; | ||
30 | REGS_ESI(regs->skas.regs) = sc->esi; | ||
31 | REGS_EBP(regs->skas.regs) = sc->ebp; | ||
32 | REGS_SP(regs->skas.regs) = sc->esp; | ||
33 | REGS_EBX(regs->skas.regs) = sc->ebx; | ||
34 | REGS_EDX(regs->skas.regs) = sc->edx; | ||
35 | REGS_ECX(regs->skas.regs) = sc->ecx; | ||
36 | REGS_EAX(regs->skas.regs) = sc->eax; | ||
37 | REGS_IP(regs->skas.regs) = sc->eip; | ||
38 | REGS_CS(regs->skas.regs) = sc->cs; | ||
39 | REGS_EFLAGS(regs->skas.regs) = sc->eflags; | ||
40 | REGS_SS(regs->skas.regs) = sc->ss; | ||
41 | } | ||
42 | |||
21 | static int copy_sc_from_user_skas(struct pt_regs *regs, | 43 | static int copy_sc_from_user_skas(struct pt_regs *regs, |
22 | struct sigcontext __user *from) | 44 | struct sigcontext __user *from) |
23 | { | 45 | { |
@@ -30,25 +52,10 @@ static int copy_sc_from_user_skas(struct pt_regs *regs, | |||
30 | if(err) | 52 | if(err) |
31 | return err; | 53 | return err; |
32 | 54 | ||
33 | REGS_GS(regs->regs.skas.regs) = sc.gs; | 55 | copy_sc(®s->regs, &sc); |
34 | REGS_FS(regs->regs.skas.regs) = sc.fs; | ||
35 | REGS_ES(regs->regs.skas.regs) = sc.es; | ||
36 | REGS_DS(regs->regs.skas.regs) = sc.ds; | ||
37 | REGS_EDI(regs->regs.skas.regs) = sc.edi; | ||
38 | REGS_ESI(regs->regs.skas.regs) = sc.esi; | ||
39 | REGS_EBP(regs->regs.skas.regs) = sc.ebp; | ||
40 | REGS_SP(regs->regs.skas.regs) = sc.esp; | ||
41 | REGS_EBX(regs->regs.skas.regs) = sc.ebx; | ||
42 | REGS_EDX(regs->regs.skas.regs) = sc.edx; | ||
43 | REGS_ECX(regs->regs.skas.regs) = sc.ecx; | ||
44 | REGS_EAX(regs->regs.skas.regs) = sc.eax; | ||
45 | REGS_IP(regs->regs.skas.regs) = sc.eip; | ||
46 | REGS_CS(regs->regs.skas.regs) = sc.cs; | ||
47 | REGS_EFLAGS(regs->regs.skas.regs) = sc.eflags; | ||
48 | REGS_SS(regs->regs.skas.regs) = sc.ss; | ||
49 | 56 | ||
50 | err = restore_fp_registers(userspace_pid[0], fpregs); | 57 | err = restore_fp_registers(userspace_pid[0], fpregs); |
51 | if(err < 0){ | 58 | if(err < 0) { |
52 | printk("copy_sc_from_user_skas - PTRACE_SETFPREGS failed, " | 59 | printk("copy_sc_from_user_skas - PTRACE_SETFPREGS failed, " |
53 | "errno = %d\n", -err); | 60 | "errno = %d\n", -err); |
54 | return err; | 61 | return err; |