diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-08-19 16:04:19 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-20 06:33:03 -0400 |
commit | b6edbb1e045a7116d5571544dae25c6c37c94a48 (patch) | |
tree | bf4db26545f553880f72cacfe6545c5324841f85 /arch/x86/ia32/ia32_signal.c | |
parent | c171f465b7281f2d3b03e9145ec763d6a8bab176 (diff) |
x86_64: use save/loadsegment in ia32 compat
Use savesegment and loadsegment consistently in ia32 compat code.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/ia32/ia32_signal.c')
-rw-r--r-- | arch/x86/ia32/ia32_signal.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c index 20af4c79579a..f1a2ac777faf 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c | |||
@@ -206,7 +206,7 @@ struct rt_sigframe | |||
206 | { unsigned int cur; \ | 206 | { unsigned int cur; \ |
207 | unsigned short pre; \ | 207 | unsigned short pre; \ |
208 | err |= __get_user(pre, &sc->seg); \ | 208 | err |= __get_user(pre, &sc->seg); \ |
209 | asm volatile("movl %%" #seg ",%0" : "=r" (cur)); \ | 209 | savesegment(seg, cur); \ |
210 | pre |= mask; \ | 210 | pre |= mask; \ |
211 | if (pre != cur) loadsegment(seg, pre); } | 211 | if (pre != cur) loadsegment(seg, pre); } |
212 | 212 | ||
@@ -235,7 +235,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs, | |||
235 | */ | 235 | */ |
236 | err |= __get_user(gs, &sc->gs); | 236 | err |= __get_user(gs, &sc->gs); |
237 | gs |= 3; | 237 | gs |= 3; |
238 | asm("movl %%gs,%0" : "=r" (oldgs)); | 238 | savesegment(gs, oldgs); |
239 | if (gs != oldgs) | 239 | if (gs != oldgs) |
240 | load_gs_index(gs); | 240 | load_gs_index(gs); |
241 | 241 | ||
@@ -355,14 +355,13 @@ static int ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc, | |||
355 | { | 355 | { |
356 | int tmp, err = 0; | 356 | int tmp, err = 0; |
357 | 357 | ||
358 | tmp = 0; | 358 | savesegment(gs, tmp); |
359 | __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp)); | ||
360 | err |= __put_user(tmp, (unsigned int __user *)&sc->gs); | 359 | err |= __put_user(tmp, (unsigned int __user *)&sc->gs); |
361 | __asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp)); | 360 | savesegment(fs, tmp); |
362 | err |= __put_user(tmp, (unsigned int __user *)&sc->fs); | 361 | err |= __put_user(tmp, (unsigned int __user *)&sc->fs); |
363 | __asm__("movl %%ds,%0" : "=r"(tmp): "0"(tmp)); | 362 | savesegment(ds, tmp); |
364 | err |= __put_user(tmp, (unsigned int __user *)&sc->ds); | 363 | err |= __put_user(tmp, (unsigned int __user *)&sc->ds); |
365 | __asm__("movl %%es,%0" : "=r"(tmp): "0"(tmp)); | 364 | savesegment(es, tmp); |
366 | err |= __put_user(tmp, (unsigned int __user *)&sc->es); | 365 | err |= __put_user(tmp, (unsigned int __user *)&sc->es); |
367 | 366 | ||
368 | err |= __put_user((u32)regs->di, &sc->di); | 367 | err |= __put_user((u32)regs->di, &sc->di); |
@@ -498,8 +497,8 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka, | |||
498 | regs->dx = 0; | 497 | regs->dx = 0; |
499 | regs->cx = 0; | 498 | regs->cx = 0; |
500 | 499 | ||
501 | asm volatile("movl %0,%%ds" :: "r" (__USER32_DS)); | 500 | loadsegment(ds, __USER32_DS); |
502 | asm volatile("movl %0,%%es" :: "r" (__USER32_DS)); | 501 | loadsegment(es, __USER32_DS); |
503 | 502 | ||
504 | regs->cs = __USER32_CS; | 503 | regs->cs = __USER32_CS; |
505 | regs->ss = __USER32_DS; | 504 | regs->ss = __USER32_DS; |
@@ -591,8 +590,8 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
591 | regs->dx = (unsigned long) &frame->info; | 590 | regs->dx = (unsigned long) &frame->info; |
592 | regs->cx = (unsigned long) &frame->uc; | 591 | regs->cx = (unsigned long) &frame->uc; |
593 | 592 | ||
594 | asm volatile("movl %0,%%ds" :: "r" (__USER32_DS)); | 593 | loadsegment(ds, __USER32_DS); |
595 | asm volatile("movl %0,%%es" :: "r" (__USER32_DS)); | 594 | loadsegment(es, __USER32_DS); |
596 | 595 | ||
597 | regs->cs = __USER32_CS; | 596 | regs->cs = __USER32_CS; |
598 | regs->ss = __USER32_DS; | 597 | regs->ss = __USER32_DS; |