Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sparc: add '32' suffix to reg_window, sigcontext, __siginfo_t

Renaming a few types to contain a 32 suffix makes the
type names compatible with sparc64 and thus makes sharing
between the two a lot easier.

Note: None of these definitions are expected part of the
stable ABI towards userspace.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sam Ravnborg and committed by
David S. Miller
4d7b92ad ece93487

+38 -41
+1 -1
arch/sparc/include/asm/processor_32.h
··· 99 99 "st\t%%g0, [%0 + %3 + 0x3c]" 100 100 : /* no outputs */ 101 101 : "r" (regs), 102 - "r" (sp - sizeof(struct reg_window)), 102 + "r" (sp - sizeof(struct reg_window32)), 103 103 "r" (zero), 104 104 "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])) 105 105 : "memory");
+1 -1
arch/sparc/include/asm/ptrace_32.h
··· 41 41 #define UREG_RETPC UREG_I7 42 42 43 43 /* A register window */ 44 - struct reg_window { 44 + struct reg_window32 { 45 45 unsigned long locals[8]; 46 46 unsigned long ins[8]; 47 47 };
+3 -6
arch/sparc/include/asm/sigcontext_32.h
··· 9 9 #define __SUNOS_MAXWIN 31 10 10 11 11 /* This is what SunOS does, so shall I. */ 12 - struct sigcontext { 12 + struct sigcontext32 { 13 13 int sigc_onstack; /* state to restore */ 14 14 int sigc_mask; /* sigmask to restore */ 15 15 int sigc_sp; /* stack pointer */ ··· 28 28 char *sigc_spbuf[__SUNOS_MAXWIN]; 29 29 30 30 /* Windows to restore after signal */ 31 - struct { 32 - unsigned long locals[8]; 33 - unsigned long ins[8]; 34 - } sigc_wbuf[__SUNOS_MAXWIN]; 31 + struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN]; 35 32 }; 36 33 37 34 typedef struct { ··· 40 43 unsigned long u_regs[16]; /* globals and ins */ 41 44 } si_regs; 42 45 int si_mask; 43 - } __siginfo_t; 46 + } __siginfo32_t; 44 47 45 48 typedef struct { 46 49 unsigned long si_float_regs [32];
+1 -1
arch/sparc/include/asm/thread_info_32.h
··· 45 45 /* A place to store user windows and stack pointers 46 46 * when the stack needs inspection. 47 47 */ 48 - struct reg_window reg_window[NSWINS]; /* align for ldd! */ 48 + struct reg_window32 reg_window[NSWINS]; /* align for ldd! */ 49 49 unsigned long rwbuf_stkptrs[NSWINS]; 50 50 unsigned long w_saved; 51 51
+6 -6
arch/sparc/kernel/kgdb_32.c
··· 14 14 15 15 void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) 16 16 { 17 - struct reg_window *win; 17 + struct reg_window32 *win; 18 18 int i; 19 19 20 20 gdb_regs[GDB_G0] = 0; 21 21 for (i = 0; i < 15; i++) 22 22 gdb_regs[GDB_G1 + i] = regs->u_regs[UREG_G1 + i]; 23 23 24 - win = (struct reg_window *) regs->u_regs[UREG_FP]; 24 + win = (struct reg_window32 *) regs->u_regs[UREG_FP]; 25 25 for (i = 0; i < 8; i++) 26 26 gdb_regs[GDB_L0 + i] = win->locals[i]; 27 27 for (i = 0; i < 8; i++) ··· 43 43 void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) 44 44 { 45 45 struct thread_info *t = task_thread_info(p); 46 - struct reg_window *win; 46 + struct reg_window32 *win; 47 47 int i; 48 48 49 49 for (i = GDB_G0; i < GDB_G6; i++) ··· 55 55 gdb_regs[GDB_SP] = t->ksp; 56 56 gdb_regs[GDB_O7] = 0; 57 57 58 - win = (struct reg_window *) t->ksp; 58 + win = (struct reg_window32 *) t->ksp; 59 59 for (i = 0; i < 8; i++) 60 60 gdb_regs[GDB_L0 + i] = win->locals[i]; 61 61 for (i = 0; i < 8; i++) ··· 77 77 78 78 void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) 79 79 { 80 - struct reg_window *win; 80 + struct reg_window32 *win; 81 81 int i; 82 82 83 83 for (i = 0; i < 15; i++) ··· 96 96 regs->npc = gdb_regs[GDB_NPC]; 97 97 regs->y = gdb_regs[GDB_Y]; 98 98 99 - win = (struct reg_window *) regs->u_regs[UREG_FP]; 99 + win = (struct reg_window32 *) regs->u_regs[UREG_FP]; 100 100 for (i = 0; i < 8; i++) 101 101 win->locals[i] = gdb_regs[GDB_L0 + i]; 102 102 for (i = 0; i < 8; i++)
+4 -4
arch/sparc/kernel/muldiv.c
··· 60 60 } 61 61 62 62 #define fetch_reg(reg, regs) ({ \ 63 - struct reg_window __user *win; \ 63 + struct reg_window32 __user *win; \ 64 64 register unsigned long ret; \ 65 65 \ 66 66 if (!(reg)) ret = 0; \ ··· 68 68 ret = regs->u_regs[(reg)]; \ 69 69 } else { \ 70 70 /* Ho hum, the slightly complicated case. */ \ 71 - win = (struct reg_window __user *)regs->u_regs[UREG_FP];\ 71 + win = (struct reg_window32 __user *)regs->u_regs[UREG_FP];\ 72 72 if (get_user (ret, &win->locals[(reg) - 16])) return -1;\ 73 73 } \ 74 74 ret; \ ··· 77 77 static inline int 78 78 store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs) 79 79 { 80 - struct reg_window __user *win; 80 + struct reg_window32 __user *win; 81 81 82 82 if (!reg) 83 83 return 0; ··· 86 86 return 0; 87 87 } else { 88 88 /* need to use put_user() in this case: */ 89 - win = (struct reg_window __user *) regs->u_regs[UREG_FP]; 89 + win = (struct reg_window32 __user *) regs->u_regs[UREG_FP]; 90 90 return (put_user(result, &win->locals[reg - 16])); 91 91 } 92 92 }
+8 -8
arch/sparc/kernel/process_32.c
··· 180 180 181 181 void __show_backtrace(unsigned long fp) 182 182 { 183 - struct reg_window *rw; 183 + struct reg_window32 *rw; 184 184 unsigned long flags; 185 185 int cpu = smp_processor_id(); 186 186 187 187 spin_lock_irqsave(&sparc_backtrace_lock, flags); 188 188 189 - rw = (struct reg_window *)fp; 189 + rw = (struct reg_window32 *)fp; 190 190 while(rw && (((unsigned long) rw) >= PAGE_OFFSET) && 191 191 !(((unsigned long) rw) & 0x7)) { 192 192 printk("CPU[%d]: ARGS[%08lx,%08lx,%08lx,%08lx,%08lx,%08lx] " ··· 196 196 rw->ins[6], 197 197 rw->ins[7]); 198 198 printk("%pS\n", (void *) rw->ins[7]); 199 - rw = (struct reg_window *) rw->ins[6]; 199 + rw = (struct reg_window32 *) rw->ins[6]; 200 200 } 201 201 spin_unlock_irqrestore(&sparc_backtrace_lock, flags); 202 202 } ··· 258 258 259 259 void show_regs(struct pt_regs *r) 260 260 { 261 - struct reg_window *rw = (struct reg_window *) r->u_regs[14]; 261 + struct reg_window32 *rw = (struct reg_window32 *) r->u_regs[14]; 262 262 263 263 printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", 264 264 r->psr, r->pc, r->npc, r->y, print_tainted()); ··· 287 287 { 288 288 unsigned long pc, fp; 289 289 unsigned long task_base; 290 - struct reg_window *rw; 290 + struct reg_window32 *rw; 291 291 int count = 0; 292 292 293 293 if (tsk != NULL) ··· 301 301 if (fp < (task_base + sizeof(struct thread_info)) || 302 302 fp >= (task_base + (PAGE_SIZE << 1))) 303 303 break; 304 - rw = (struct reg_window *) fp; 304 + rw = (struct reg_window32 *) fp; 305 305 pc = rw->ins[7]; 306 306 printk("[%08lx : ", pc); 307 307 printk("%pS ] ", (void *) pc); ··· 679 679 unsigned long pc, fp, bias = 0; 680 680 unsigned long task_base = (unsigned long) task; 681 681 unsigned long ret = 0; 682 - struct reg_window *rw; 682 + struct reg_window32 *rw; 683 683 int count = 0; 684 684 685 685 if (!task || task == current || ··· 692 692 if (fp < (task_base + sizeof(struct thread_info)) || 693 693 fp >= (task_base + (2 * PAGE_SIZE))) 694 694 break; 695 - rw = (struct reg_window *) fp; 695 + rw = (struct reg_window32 *) fp; 696 696 pc = rw->ins[7]; 697 697 if (!in_sched_functions(pc)) { 698 698 ret = pc;
+3 -3
arch/sparc/kernel/signal_32.c
··· 34 34 35 35 struct signal_frame { 36 36 struct sparc_stackf ss; 37 - __siginfo_t info; 37 + __siginfo32_t info; 38 38 __siginfo_fpu_t __user *fpu_save; 39 39 unsigned long insns[2] __attribute__ ((aligned (8))); 40 40 unsigned int extramask[_NSIG_WORDS - 1]; ··· 351 351 err |= __copy_to_user(sf->extramask, &oldset->sig[1], 352 352 (_NSIG_WORDS - 1) * sizeof(unsigned int)); 353 353 err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], 354 - sizeof(struct reg_window)); 354 + sizeof(struct reg_window32)); 355 355 if (err) 356 356 goto sigsegv; 357 357 ··· 433 433 err |= __put_user(current->sas_ss_size, &sf->stack.ss_size); 434 434 435 435 err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], 436 - sizeof(struct reg_window)); 436 + sizeof(struct reg_window32)); 437 437 438 438 err |= copy_siginfo_to_user(&sf->info, info); 439 439
+2 -2
arch/sparc/kernel/traps_32.c
··· 67 67 __RESTORE; __RESTORE; __RESTORE; __RESTORE; 68 68 69 69 { 70 - struct reg_window *rw = (struct reg_window *)regs->u_regs[UREG_FP]; 70 + struct reg_window32 *rw = (struct reg_window32 *)regs->u_regs[UREG_FP]; 71 71 72 72 /* Stop the back trace when we hit userland or we 73 73 * find some badly aligned kernel stack. Set an upper ··· 79 79 !(((unsigned long) rw) & 0x7)) { 80 80 printk("Caller[%08lx]: %pS\n", rw->ins[7], 81 81 (void *) rw->ins[7]); 82 - rw = (struct reg_window *)rw->ins[6]; 82 + rw = (struct reg_window32 *)rw->ins[6]; 83 83 } 84 84 } 85 85 printk("Instruction DUMP:");
+6 -6
arch/sparc/kernel/unaligned_32.c
··· 97 97 98 98 static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) 99 99 { 100 - struct reg_window *win; 100 + struct reg_window32 *win; 101 101 102 102 if(reg < 16) 103 103 return (!reg ? 0 : regs->u_regs[reg]); 104 104 105 105 /* Ho hum, the slightly complicated case. */ 106 - win = (struct reg_window *) regs->u_regs[UREG_FP]; 106 + win = (struct reg_window32 *) regs->u_regs[UREG_FP]; 107 107 return win->locals[reg - 16]; /* yes, I know what this does... */ 108 108 } 109 109 110 110 static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs) 111 111 { 112 - struct reg_window __user *win; 112 + struct reg_window32 __user *win; 113 113 unsigned long ret; 114 114 115 115 if (reg < 16) 116 116 return (!reg ? 0 : regs->u_regs[reg]); 117 117 118 118 /* Ho hum, the slightly complicated case. */ 119 - win = (struct reg_window __user *) regs->u_regs[UREG_FP]; 119 + win = (struct reg_window32 __user *) regs->u_regs[UREG_FP]; 120 120 121 121 if ((unsigned long)win & 3) 122 122 return -1; ··· 129 129 130 130 static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) 131 131 { 132 - struct reg_window *win; 132 + struct reg_window32 *win; 133 133 134 134 if(reg < 16) 135 135 return &regs->u_regs[reg]; 136 - win = (struct reg_window *) regs->u_regs[UREG_FP]; 136 + win = (struct reg_window32 *) regs->u_regs[UREG_FP]; 137 137 return &win->locals[reg - 16]; 138 138 } 139 139
+3 -3
arch/sparc/kernel/windows.c
··· 42 42 43 43 for(i = first_win; i < last_win; i++) { 44 44 tp->rwbuf_stkptrs[i] = tp->rwbuf_stkptrs[i+1]; 45 - memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window)); 45 + memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window32)); 46 46 } 47 47 } 48 48 ··· 70 70 71 71 /* Ok, let it rip. */ 72 72 if (copy_to_user((char __user *) sp, &tp->reg_window[window], 73 - sizeof(struct reg_window))) 73 + sizeof(struct reg_window32))) 74 74 continue; 75 75 76 76 shift_window_buffer(window, tp->w_saved - 1, tp); ··· 119 119 120 120 if ((sp & 7) || 121 121 copy_to_user((char __user *) sp, &tp->reg_window[window], 122 - sizeof(struct reg_window))) 122 + sizeof(struct reg_window32))) 123 123 do_exit(SIGILL); 124 124 } 125 125 tp->w_saved = 0;