aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/signal_64.c
diff options
context:
space:
mode:
authorHiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>2008-11-07 22:25:36 -0500
committerIngo Molnar <mingo@elte.hu>2008-11-08 04:16:10 -0500
commit15002fa9bf3a79ac9dcafba7ff308586936088b2 (patch)
tree47a93c9ac89a3bdcdbdf5c055033dd0de9d2dd14 /arch/x86/kernel/signal_64.c
parent8735b7d0a2a6246faa406a8cdd1376bd0e689ba3 (diff)
x86: signal: cosmetic unification of setup_sigcontext()
Impact: cleanup Make setup_sigcontext() same. Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/signal_64.c')
-rw-r--r--arch/x86/kernel/signal_64.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
index 3868c2a21793..d2307e41fbdb 100644
--- a/arch/x86/kernel/signal_64.c
+++ b/arch/x86/kernel/signal_64.c
@@ -157,16 +157,23 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
157/* 157/*
158 * Set up a signal frame. 158 * Set up a signal frame.
159 */ 159 */
160 160static int
161static inline int
162setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate, 161setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
163 struct pt_regs *regs, unsigned long mask) 162 struct pt_regs *regs, unsigned long mask)
164{ 163{
165 int err = 0; 164 int err = 0;
166 165
167 err |= __put_user(regs->cs, &sc->cs); 166#ifdef CONFIG_X86_32
168 err |= __put_user(0, &sc->gs); 167 {
169 err |= __put_user(0, &sc->fs); 168 unsigned int tmp;
169
170 savesegment(gs, tmp);
171 err |= __put_user(tmp, (unsigned int __user *)&sc->gs);
172 }
173 err |= __put_user(regs->fs, (unsigned int __user *)&sc->fs);
174 err |= __put_user(regs->es, (unsigned int __user *)&sc->es);
175 err |= __put_user(regs->ds, (unsigned int __user *)&sc->ds);
176#endif /* CONFIG_X86_32 */
170 177
171 err |= __put_user(regs->di, &sc->di); 178 err |= __put_user(regs->di, &sc->di);
172 err |= __put_user(regs->si, &sc->si); 179 err |= __put_user(regs->si, &sc->si);
@@ -176,6 +183,7 @@ setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
176 err |= __put_user(regs->dx, &sc->dx); 183 err |= __put_user(regs->dx, &sc->dx);
177 err |= __put_user(regs->cx, &sc->cx); 184 err |= __put_user(regs->cx, &sc->cx);
178 err |= __put_user(regs->ax, &sc->ax); 185 err |= __put_user(regs->ax, &sc->ax);
186#ifdef CONFIG_X86_64
179 err |= __put_user(regs->r8, &sc->r8); 187 err |= __put_user(regs->r8, &sc->r8);
180 err |= __put_user(regs->r9, &sc->r9); 188 err |= __put_user(regs->r9, &sc->r9);
181 err |= __put_user(regs->r10, &sc->r10); 189 err |= __put_user(regs->r10, &sc->r10);
@@ -184,11 +192,26 @@ setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
184 err |= __put_user(regs->r13, &sc->r13); 192 err |= __put_user(regs->r13, &sc->r13);
185 err |= __put_user(regs->r14, &sc->r14); 193 err |= __put_user(regs->r14, &sc->r14);
186 err |= __put_user(regs->r15, &sc->r15); 194 err |= __put_user(regs->r15, &sc->r15);
195#endif /* CONFIG_X86_64 */
196
187 err |= __put_user(current->thread.trap_no, &sc->trapno); 197 err |= __put_user(current->thread.trap_no, &sc->trapno);
188 err |= __put_user(current->thread.error_code, &sc->err); 198 err |= __put_user(current->thread.error_code, &sc->err);
189 err |= __put_user(regs->ip, &sc->ip); 199 err |= __put_user(regs->ip, &sc->ip);
200#ifdef CONFIG_X86_32
201 err |= __put_user(regs->cs, (unsigned int __user *)&sc->cs);
190 err |= __put_user(regs->flags, &sc->flags); 202 err |= __put_user(regs->flags, &sc->flags);
203 err |= __put_user(regs->sp, &sc->sp_at_signal);
204 err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss);
205#else /* !CONFIG_X86_32 */
206 err |= __put_user(regs->flags, &sc->flags);
207 err |= __put_user(regs->cs, &sc->cs);
208 err |= __put_user(0, &sc->gs);
209 err |= __put_user(0, &sc->fs);
210#endif /* CONFIG_X86_32 */
211
191 err |= __put_user(fpstate, &sc->fpstate); 212 err |= __put_user(fpstate, &sc->fpstate);
213
214 /* non-iBCS2 extensions.. */
192 err |= __put_user(mask, &sc->oldmask); 215 err |= __put_user(mask, &sc->oldmask);
193 err |= __put_user(current->thread.cr2, &sc->cr2); 216 err |= __put_user(current->thread.cr2, &sc->cr2);
194 217