"st\t%%g0, [%0 + %3 + 0x3c]"
                             : /* no outputs */
                             : "r" (regs),
-                              "r" (sp - sizeof(struct reg_window)),
+                              "r" (sp - sizeof(struct reg_window32)),
                               "r" (zero),
                               "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))
                             : "memory");
 
 #define UREG_RETPC     UREG_I7
 
 /* A register window */
-struct reg_window {
+struct reg_window32 {
        unsigned long locals[8];
        unsigned long ins[8];
 };
 
 #define __SUNOS_MAXWIN   31
 
 /* This is what SunOS does, so shall I. */
-struct sigcontext {
+struct sigcontext32 {
        int sigc_onstack;      /* state to restore */
        int sigc_mask;         /* sigmask to restore */
        int sigc_sp;           /* stack pointer */
        char *sigc_spbuf[__SUNOS_MAXWIN];
 
        /* Windows to restore after signal */
-       struct {
-               unsigned long   locals[8];
-               unsigned long   ins[8];
-       } sigc_wbuf[__SUNOS_MAXWIN];
+       struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN];
 };
 
 typedef struct {
                unsigned long u_regs[16]; /* globals and ins */
        }               si_regs;
        int             si_mask;
-} __siginfo_t;
+} __siginfo32_t;
 
 typedef struct {
        unsigned   long si_float_regs [32];
 
        /* A place to store user windows and stack pointers
         * when the stack needs inspection.
         */
-       struct reg_window       reg_window[NSWINS];     /* align for ldd! */
+       struct reg_window32     reg_window[NSWINS];     /* align for ldd! */
        unsigned long           rwbuf_stkptrs[NSWINS];
        unsigned long           w_saved;
 
 
 
 void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
 {
-       struct reg_window *win;
+       struct reg_window32 *win;
        int i;
 
        gdb_regs[GDB_G0] = 0;
        for (i = 0; i < 15; i++)
                gdb_regs[GDB_G1 + i] = regs->u_regs[UREG_G1 + i];
 
-       win = (struct reg_window *) regs->u_regs[UREG_FP];
+       win = (struct reg_window32 *) regs->u_regs[UREG_FP];
        for (i = 0; i < 8; i++)
                gdb_regs[GDB_L0 + i] = win->locals[i];
        for (i = 0; i < 8; i++)
 void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
 {
        struct thread_info *t = task_thread_info(p);
-       struct reg_window *win;
+       struct reg_window32 *win;
        int i;
 
        for (i = GDB_G0; i < GDB_G6; i++)
        gdb_regs[GDB_SP] = t->ksp;
        gdb_regs[GDB_O7] = 0;
 
-       win = (struct reg_window *) t->ksp;
+       win = (struct reg_window32 *) t->ksp;
        for (i = 0; i < 8; i++)
                gdb_regs[GDB_L0 + i] = win->locals[i];
        for (i = 0; i < 8; i++)
 
 void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs)
 {
-       struct reg_window *win;
+       struct reg_window32 *win;
        int i;
 
        for (i = 0; i < 15; i++)
        regs->npc = gdb_regs[GDB_NPC];
        regs->y = gdb_regs[GDB_Y];
 
-       win = (struct reg_window *) regs->u_regs[UREG_FP];
+       win = (struct reg_window32 *) regs->u_regs[UREG_FP];
        for (i = 0; i < 8; i++)
                win->locals[i] = gdb_regs[GDB_L0 + i];
        for (i = 0; i < 8; i++)
 
 }
 
 #define fetch_reg(reg, regs) ({                                                \
-       struct reg_window __user *win;                                  \
+       struct reg_window32 __user *win;                                        \
        register unsigned long ret;                                     \
                                                                        \
        if (!(reg)) ret = 0;                                            \
                ret = regs->u_regs[(reg)];                              \
        } else {                                                        \
                /* Ho hum, the slightly complicated case. */            \
-               win = (struct reg_window __user *)regs->u_regs[UREG_FP];\
+               win = (struct reg_window32 __user *)regs->u_regs[UREG_FP];\
                if (get_user (ret, &win->locals[(reg) - 16])) return -1;\
        }                                                               \
        ret;                                                            \
 static inline int
 store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs)
 {
-       struct reg_window __user *win;
+       struct reg_window32 __user *win;
 
        if (!reg)
                return 0;
                return 0;
        } else {
                /* need to use put_user() in this case: */
-               win = (struct reg_window __user *) regs->u_regs[UREG_FP];
+               win = (struct reg_window32 __user *) regs->u_regs[UREG_FP];
                return (put_user(result, &win->locals[reg - 16]));
        }
 }
 
 
 void __show_backtrace(unsigned long fp)
 {
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        unsigned long flags;
        int cpu = smp_processor_id();
 
        spin_lock_irqsave(&sparc_backtrace_lock, flags);
 
-       rw = (struct reg_window *)fp;
+       rw = (struct reg_window32 *)fp;
         while(rw && (((unsigned long) rw) >= PAGE_OFFSET) &&
             !(((unsigned long) rw) & 0x7)) {
                printk("CPU[%d]: ARGS[%08lx,%08lx,%08lx,%08lx,%08lx,%08lx] "
                       rw->ins[6],
                       rw->ins[7]);
                printk("%pS\n", (void *) rw->ins[7]);
-               rw = (struct reg_window *) rw->ins[6];
+               rw = (struct reg_window32 *) rw->ins[6];
        }
        spin_unlock_irqrestore(&sparc_backtrace_lock, flags);
 }
 
 void show_regs(struct pt_regs *r)
 {
-       struct reg_window *rw = (struct reg_window *) r->u_regs[14];
+       struct reg_window32 *rw = (struct reg_window32 *) r->u_regs[14];
 
         printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx    %s\n",
               r->psr, r->pc, r->npc, r->y, print_tainted());
 {
        unsigned long pc, fp;
        unsigned long task_base;
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        int count = 0;
 
        if (tsk != NULL)
                if (fp < (task_base + sizeof(struct thread_info)) ||
                    fp >= (task_base + (PAGE_SIZE << 1)))
                        break;
-               rw = (struct reg_window *) fp;
+               rw = (struct reg_window32 *) fp;
                pc = rw->ins[7];
                printk("[%08lx : ", pc);
                printk("%pS ] ", (void *) pc);
        unsigned long pc, fp, bias = 0;
        unsigned long task_base = (unsigned long) task;
         unsigned long ret = 0;
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        int count = 0;
 
        if (!task || task == current ||
                if (fp < (task_base + sizeof(struct thread_info)) ||
                    fp >= (task_base + (2 * PAGE_SIZE)))
                        break;
-               rw = (struct reg_window *) fp;
+               rw = (struct reg_window32 *) fp;
                pc = rw->ins[7];
                if (!in_sched_functions(pc)) {
                        ret = pc;
 
 
 struct signal_frame {
        struct sparc_stackf     ss;
-       __siginfo_t             info;
+       __siginfo32_t           info;
        __siginfo_fpu_t __user  *fpu_save;
        unsigned long           insns[2] __attribute__ ((aligned (8)));
        unsigned int            extramask[_NSIG_WORDS - 1];
        err |= __copy_to_user(sf->extramask, &oldset->sig[1],
                              (_NSIG_WORDS - 1) * sizeof(unsigned int));
        err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
-                             sizeof(struct reg_window));
+                             sizeof(struct reg_window32));
        if (err)
                goto sigsegv;
        
        err |= __put_user(current->sas_ss_size, &sf->stack.ss_size);
        
        err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
-                             sizeof(struct reg_window));       
+                             sizeof(struct reg_window32));
 
        err |= copy_siginfo_to_user(&sf->info, info);
 
 
        __RESTORE; __RESTORE; __RESTORE; __RESTORE;
 
        {
-               struct reg_window *rw = (struct reg_window *)regs->u_regs[UREG_FP];
+               struct reg_window32 *rw = (struct reg_window32 *)regs->u_regs[UREG_FP];
 
                /* Stop the back trace when we hit userland or we
                 * find some badly aligned kernel stack. Set an upper
                      !(((unsigned long) rw) & 0x7)) {
                        printk("Caller[%08lx]: %pS\n", rw->ins[7],
                               (void *) rw->ins[7]);
-                       rw = (struct reg_window *)rw->ins[6];
+                       rw = (struct reg_window32 *)rw->ins[6];
                }
        }
        printk("Instruction DUMP:");
 
 
 static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs)
 {
-       struct reg_window *win;
+       struct reg_window32 *win;
 
        if(reg < 16)
                return (!reg ? 0 : regs->u_regs[reg]);
 
        /* Ho hum, the slightly complicated case. */
-       win = (struct reg_window *) regs->u_regs[UREG_FP];
+       win = (struct reg_window32 *) regs->u_regs[UREG_FP];
        return win->locals[reg - 16]; /* yes, I know what this does... */
 }
 
 static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs)
 {
-       struct reg_window __user *win;
+       struct reg_window32 __user *win;
        unsigned long ret;
 
        if (reg < 16)
                return (!reg ? 0 : regs->u_regs[reg]);
 
        /* Ho hum, the slightly complicated case. */
-       win = (struct reg_window __user *) regs->u_regs[UREG_FP];
+       win = (struct reg_window32 __user *) regs->u_regs[UREG_FP];
 
        if ((unsigned long)win & 3)
                return -1;
 
 static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs)
 {
-       struct reg_window *win;
+       struct reg_window32 *win;
 
        if(reg < 16)
                return ®s->u_regs[reg];
-       win = (struct reg_window *) regs->u_regs[UREG_FP];
+       win = (struct reg_window32 *) regs->u_regs[UREG_FP];
        return &win->locals[reg - 16];
 }
 
 
 
        for(i = first_win; i < last_win; i++) {
                tp->rwbuf_stkptrs[i] = tp->rwbuf_stkptrs[i+1];
-               memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window));
+               memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window32));
        }
 }
 
 
                /* Ok, let it rip. */
                if (copy_to_user((char __user *) sp, &tp->reg_window[window],
-                                sizeof(struct reg_window)))
+                                sizeof(struct reg_window32)))
                        continue;
 
                shift_window_buffer(window, tp->w_saved - 1, tp);
 
                if ((sp & 7) ||
                    copy_to_user((char __user *) sp, &tp->reg_window[window],
-                                sizeof(struct reg_window)))
+                                sizeof(struct reg_window32)))
                        do_exit(SIGILL);
        }
        tp->w_saved = 0;