void dump_thread(struct pt_regs * regs, struct user * dump)
 {
        int i;
+       u16 gs;
 
 /* changed the size calculations - should hopefully work better. lbt */
        dump->magic = CMAGIC;
        if (dump->start_stack < TASK_SIZE)
                dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
 
-       dump->regs.ebx = regs->bx;
-       dump->regs.ecx = regs->cx;
-       dump->regs.edx = regs->dx;
-       dump->regs.esi = regs->si;
-       dump->regs.edi = regs->di;
-       dump->regs.ebp = regs->bp;
-       dump->regs.eax = regs->ax;
-       dump->regs.ds = regs->ds;
-       dump->regs.es = regs->es;
-       dump->regs.fs = regs->fs;
-       savesegment(gs,dump->regs.gs);
-       dump->regs.orig_eax = regs->orig_ax;
-       dump->regs.eip = regs->ip;
-       dump->regs.cs = regs->cs;
-       dump->regs.eflags = regs->flags;
-       dump->regs.esp = regs->sp;
-       dump->regs.ss = regs->ss;
+       dump->regs.bx = regs->bx;
+       dump->regs.cx = regs->cx;
+       dump->regs.dx = regs->dx;
+       dump->regs.si = regs->si;
+       dump->regs.di = regs->di;
+       dump->regs.bp = regs->bp;
+       dump->regs.ax = regs->ax;
+       dump->regs.ds = (u16)regs->ds;
+       dump->regs.es = (u16)regs->es;
+       dump->regs.fs = (u16)regs->fs;
+       savesegment(gs,gs);
+       dump->regs.orig_ax = regs->orig_ax;
+       dump->regs.ip = regs->ip;
+       dump->regs.cs = (u16)regs->cs;
+       dump->regs.flags = regs->flags;
+       dump->regs.sp = regs->sp;
+       dump->regs.ss = (u16)regs->ss;
 
        dump->u_fpvalid = dump_fpu (regs, &dump->i387);
 }
 
                        if (child->thread.gs != value)
                                return do_arch_prctl(child, ARCH_SET_GS, value);
                        return 0;
-               case offsetof(struct user_regs_struct, eflags):
+               case offsetof(struct user_regs_struct,flags):
                        value &= FLAG_MASK;
                        /*
                         * If the user value contains TF, mark that
                        if (child->thread.gsindex != GS_TLS_SEL)
                                return 0;
                        return get_desc_base(&child->thread.tls_array[GS_TLS]);
-               case offsetof(struct user_regs_struct, eflags):
+               case offsetof(struct user_regs_struct, flags):
                        /*
                         * If the debugger set TF, hide it from the readout.
                         */
 
  * doesn't use the extra segment registers)
  */
 struct user_regs_struct {
-       long ebx, ecx, edx, esi, edi, ebp, eax;
-       unsigned short ds, __ds, es, __es;
-       unsigned short fs, __fs, gs, __gs;
-       long orig_eax, eip;
-       unsigned short cs, __cs;
-       long eflags, esp;
-       unsigned short ss, __ss;
+       unsigned long   bx;
+       unsigned long   cx;
+       unsigned long   dx;
+       unsigned long   si;
+       unsigned long   di;
+       unsigned long   bp;
+       unsigned long   ax;
+       unsigned long   ds;
+       unsigned long   es;
+       unsigned long   fs;
+       unsigned long   gs;
+       unsigned long   orig_ax;
+       unsigned long   ip;
+       unsigned long   cs;
+       unsigned long   flags;
+       unsigned long   sp;
+       unsigned long   ss;
 };
 
 /* When the kernel dumps core, it starts by dumping the user struct -
 
  * and both the standard and SIMD floating point data can be accessed via
  * the new ptrace requests.  In either case, changes to the FPU environment
  * will be reflected in the task's state as expected.
- * 
+ *
  * x86-64 support by Andi Kleen.
  */
 
 /* This matches the 64bit FXSAVE format as defined by AMD. It is the same
    as the 32bit format defined by Intel, except that the selector:offset pairs for
-   data and eip are replaced with flat 64bit pointers. */ 
+   data and eip are replaced with flat 64bit pointers. */
 struct user_i387_struct {
        unsigned short  cwd;
        unsigned short  swd;
  * Segment register layout in coredumps.
  */
 struct user_regs_struct {
-       unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
-       unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
-       unsigned long rip,cs,eflags;
-       unsigned long rsp,ss;
-       unsigned long fs_base, gs_base;
-       unsigned long ds,es,fs,gs; 
-}; 
+       unsigned long   r15;
+       unsigned long   r14;
+       unsigned long   r13;
+       unsigned long   r12;
+       unsigned long   bp;
+       unsigned long   bx;
+       unsigned long   r11;
+       unsigned long   r10;
+       unsigned long   r9;
+       unsigned long   r8;
+       unsigned long   ax;
+       unsigned long   cx;
+       unsigned long   dx;
+       unsigned long   si;
+       unsigned long   di;
+       unsigned long   orig_ax;
+       unsigned long   ip;
+       unsigned long   cs;
+       unsigned long   flags;
+       unsigned long   sp;
+       unsigned long   ss;
+       unsigned long   fs_base;
+       unsigned long   gs_base;
+       unsigned long   ds;
+       unsigned long   es;
+       unsigned long   fs;
+       unsigned long   gs;
+};
 
 /* When the kernel dumps core, it starts by dumping the user struct -
    this will be used by gdb to figure out where the data and stack segments
                                   This is actually the bottom of the stack,
                                   the top of the stack is always found in the
                                   esp register.  */
-  long int signal;                     /* Signal that caused the core dump. */
+  long int signal;             /* Signal that caused the core dump. */
   int reserved;                        /* No longer used */
   int pad1;
   struct user_pt_regs * u_ar0; /* Used by gdb to help find the values for */