aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--arch/x86/kernel/signal_32.c32
-rw-r--r--arch/x86/kernel/signal_64.c33
2 files changed, 56 insertions, 9 deletions
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c
index 6a05c74b4084..27a5c8174322 100644
--- a/arch/x86/kernel/signal_32.c
+++ b/arch/x86/kernel/signal_32.c
@@ -279,14 +279,20 @@ static int
279setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate, 279setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
280 struct pt_regs *regs, unsigned long mask) 280 struct pt_regs *regs, unsigned long mask)
281{ 281{
282 int tmp, err = 0; 282 int err = 0;
283 283
284 err |= __put_user(regs->fs, (unsigned int __user *)&sc->fs); 284#ifdef CONFIG_X86_32
285 savesegment(gs, tmp); 285 {
286 err |= __put_user(tmp, (unsigned int __user *)&sc->gs); 286 unsigned int tmp;
287 287
288 savesegment(gs, tmp);
289 err |= __put_user(tmp, (unsigned int __user *)&sc->gs);
290 }
291 err |= __put_user(regs->fs, (unsigned int __user *)&sc->fs);
288 err |= __put_user(regs->es, (unsigned int __user *)&sc->es); 292 err |= __put_user(regs->es, (unsigned int __user *)&sc->es);
289 err |= __put_user(regs->ds, (unsigned int __user *)&sc->ds); 293 err |= __put_user(regs->ds, (unsigned int __user *)&sc->ds);
294#endif /* CONFIG_X86_32 */
295
290 err |= __put_user(regs->di, &sc->di); 296 err |= __put_user(regs->di, &sc->di);
291 err |= __put_user(regs->si, &sc->si); 297 err |= __put_user(regs->si, &sc->si);
292 err |= __put_user(regs->bp, &sc->bp); 298 err |= __put_user(regs->bp, &sc->bp);
@@ -295,13 +301,31 @@ setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
295 err |= __put_user(regs->dx, &sc->dx); 301 err |= __put_user(regs->dx, &sc->dx);
296 err |= __put_user(regs->cx, &sc->cx); 302 err |= __put_user(regs->cx, &sc->cx);
297 err |= __put_user(regs->ax, &sc->ax); 303 err |= __put_user(regs->ax, &sc->ax);
304#ifdef CONFIG_X86_64
305 err |= __put_user(regs->r8, &sc->r8);
306 err |= __put_user(regs->r9, &sc->r9);
307 err |= __put_user(regs->r10, &sc->r10);
308 err |= __put_user(regs->r11, &sc->r11);
309 err |= __put_user(regs->r12, &sc->r12);
310 err |= __put_user(regs->r13, &sc->r13);
311 err |= __put_user(regs->r14, &sc->r14);
312 err |= __put_user(regs->r15, &sc->r15);
313#endif /* CONFIG_X86_64 */
314
298 err |= __put_user(current->thread.trap_no, &sc->trapno); 315 err |= __put_user(current->thread.trap_no, &sc->trapno);
299 err |= __put_user(current->thread.error_code, &sc->err); 316 err |= __put_user(current->thread.error_code, &sc->err);
300 err |= __put_user(regs->ip, &sc->ip); 317 err |= __put_user(regs->ip, &sc->ip);
318#ifdef CONFIG_X86_32
301 err |= __put_user(regs->cs, (unsigned int __user *)&sc->cs); 319 err |= __put_user(regs->cs, (unsigned int __user *)&sc->cs);
302 err |= __put_user(regs->flags, &sc->flags); 320 err |= __put_user(regs->flags, &sc->flags);
303 err |= __put_user(regs->sp, &sc->sp_at_signal); 321 err |= __put_user(regs->sp, &sc->sp_at_signal);
304 err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss); 322 err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss);
323#else /* !CONFIG_X86_32 */
324 err |= __put_user(regs->flags, &sc->flags);
325 err |= __put_user(regs->cs, &sc->cs);
326 err |= __put_user(0, &sc->gs);
327 err |= __put_user(0, &sc->fs);
328#endif /* CONFIG_X86_32 */
305 329
306 err |= __put_user(fpstate, &sc->fpstate); 330 err |= __put_user(fpstate, &sc->fpstate);
307 331
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