diff options
Diffstat (limited to 'arch/x86/ia32/ia32_aout.c')
| -rw-r--r-- | arch/x86/ia32/ia32_aout.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index a0e1dbe67dc1..127ec3f07214 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c | |||
| @@ -85,8 +85,10 @@ static void dump_thread32(struct pt_regs *regs, struct user32 *dump) | |||
| 85 | dump->regs.ax = regs->ax; | 85 | dump->regs.ax = regs->ax; | 
| 86 | dump->regs.ds = current->thread.ds; | 86 | dump->regs.ds = current->thread.ds; | 
| 87 | dump->regs.es = current->thread.es; | 87 | dump->regs.es = current->thread.es; | 
| 88 | asm("movl %%fs,%0" : "=r" (fs)); dump->regs.fs = fs; | 88 | savesegment(fs, fs); | 
| 89 | asm("movl %%gs,%0" : "=r" (gs)); dump->regs.gs = gs; | 89 | dump->regs.fs = fs; | 
| 90 | savesegment(gs, gs); | ||
| 91 | dump->regs.gs = gs; | ||
| 90 | dump->regs.orig_ax = regs->orig_ax; | 92 | dump->regs.orig_ax = regs->orig_ax; | 
| 91 | dump->regs.ip = regs->ip; | 93 | dump->regs.ip = regs->ip; | 
| 92 | dump->regs.cs = regs->cs; | 94 | dump->regs.cs = regs->cs; | 
| @@ -430,8 +432,9 @@ beyond_if: | |||
| 430 | current->mm->start_stack = | 432 | current->mm->start_stack = | 
| 431 | (unsigned long)create_aout_tables((char __user *)bprm->p, bprm); | 433 | (unsigned long)create_aout_tables((char __user *)bprm->p, bprm); | 
| 432 | /* start thread */ | 434 | /* start thread */ | 
| 433 | asm volatile("movl %0,%%fs" :: "r" (0)); \ | 435 | loadsegment(fs, 0); | 
| 434 | asm volatile("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS)); | 436 | loadsegment(ds, __USER32_DS); | 
| 437 | loadsegment(es, __USER32_DS); | ||
| 435 | load_gs_index(0); | 438 | load_gs_index(0); | 
| 436 | (regs)->ip = ex.a_entry; | 439 | (regs)->ip = ex.a_entry; | 
| 437 | (regs)->sp = current->mm->start_stack; | 440 | (regs)->sp = current->mm->start_stack; | 
