aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/kernel/process_64.c1
-rw-r--r--arch/sparc/kernel/sys_sparc_32.c1
-rw-r--r--arch/sparc/kernel/traps_32.c10
-rw-r--r--arch/sparc/kernel/traps_64.c14
-rw-r--r--arch/sparc/kernel/unaligned_32.c1
-rw-r--r--arch/sparc/mm/fault_32.c1
-rw-r--r--arch/sparc/mm/fault_64.c1
7 files changed, 29 insertions, 0 deletions
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 454a8af28f13..2219e55206b4 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -520,6 +520,7 @@ static void stack_unaligned(unsigned long sp)
520{ 520{
521 siginfo_t info; 521 siginfo_t info;
522 522
523 clear_siginfo(&info);
523 info.si_signo = SIGBUS; 524 info.si_signo = SIGBUS;
524 info.si_errno = 0; 525 info.si_errno = 0;
525 info.si_code = BUS_ADRALN; 526 info.si_code = BUS_ADRALN;
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c
index e8c3cb6b6d08..00f6353fe435 100644
--- a/arch/sparc/kernel/sys_sparc_32.c
+++ b/arch/sparc/kernel/sys_sparc_32.c
@@ -152,6 +152,7 @@ sparc_breakpoint (struct pt_regs *regs)
152#ifdef DEBUG_SPARC_BREAKPOINT 152#ifdef DEBUG_SPARC_BREAKPOINT
153 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc); 153 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc);
154#endif 154#endif
155 clear_siginfo(&info);
155 info.si_signo = SIGTRAP; 156 info.si_signo = SIGTRAP;
156 info.si_errno = 0; 157 info.si_errno = 0;
157 info.si_code = TRAP_BRKPT; 158 info.si_code = TRAP_BRKPT;
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
index 33cd35bf3dc8..03e522274b8b 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -104,6 +104,7 @@ void do_hw_interrupt(struct pt_regs *regs, unsigned long type)
104 if(regs->psr & PSR_PS) 104 if(regs->psr & PSR_PS)
105 die_if_kernel("Kernel bad trap", regs); 105 die_if_kernel("Kernel bad trap", regs);
106 106
107 clear_siginfo(&info);
107 info.si_signo = SIGILL; 108 info.si_signo = SIGILL;
108 info.si_errno = 0; 109 info.si_errno = 0;
109 info.si_code = ILL_ILLTRP; 110 info.si_code = ILL_ILLTRP;
@@ -124,6 +125,7 @@ void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned lon
124 regs->pc, *(unsigned long *)regs->pc); 125 regs->pc, *(unsigned long *)regs->pc);
125#endif 126#endif
126 127
128 clear_siginfo(&info);
127 info.si_signo = SIGILL; 129 info.si_signo = SIGILL;
128 info.si_errno = 0; 130 info.si_errno = 0;
129 info.si_code = ILL_ILLOPC; 131 info.si_code = ILL_ILLOPC;
@@ -139,6 +141,7 @@ void do_priv_instruction(struct pt_regs *regs, unsigned long pc, unsigned long n
139 141
140 if(psr & PSR_PS) 142 if(psr & PSR_PS)
141 die_if_kernel("Penguin instruction from Penguin mode??!?!", regs); 143 die_if_kernel("Penguin instruction from Penguin mode??!?!", regs);
144 clear_siginfo(&info);
142 info.si_signo = SIGILL; 145 info.si_signo = SIGILL;
143 info.si_errno = 0; 146 info.si_errno = 0;
144 info.si_code = ILL_PRVOPC; 147 info.si_code = ILL_PRVOPC;
@@ -165,6 +168,7 @@ void do_memaccess_unaligned(struct pt_regs *regs, unsigned long pc, unsigned lon
165 instruction_dump ((unsigned long *) regs->pc); 168 instruction_dump ((unsigned long *) regs->pc);
166 printk ("do_MNA!\n"); 169 printk ("do_MNA!\n");
167#endif 170#endif
171 clear_siginfo(&info);
168 info.si_signo = SIGBUS; 172 info.si_signo = SIGBUS;
169 info.si_errno = 0; 173 info.si_errno = 0;
170 info.si_code = BUS_ADRALN; 174 info.si_code = BUS_ADRALN;
@@ -303,6 +307,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc,
303 } 307 }
304 308
305 fsr = fpt->thread.fsr; 309 fsr = fpt->thread.fsr;
310 clear_siginfo(&info);
306 info.si_signo = SIGFPE; 311 info.si_signo = SIGFPE;
307 info.si_errno = 0; 312 info.si_errno = 0;
308 info.si_addr = (void __user *)pc; 313 info.si_addr = (void __user *)pc;
@@ -336,6 +341,7 @@ void handle_tag_overflow(struct pt_regs *regs, unsigned long pc, unsigned long n
336 341
337 if(psr & PSR_PS) 342 if(psr & PSR_PS)
338 die_if_kernel("Penguin overflow trap from kernel mode", regs); 343 die_if_kernel("Penguin overflow trap from kernel mode", regs);
344 clear_siginfo(&info);
339 info.si_signo = SIGEMT; 345 info.si_signo = SIGEMT;
340 info.si_errno = 0; 346 info.si_errno = 0;
341 info.si_code = EMT_TAGOVF; 347 info.si_code = EMT_TAGOVF;
@@ -365,6 +371,7 @@ void handle_reg_access(struct pt_regs *regs, unsigned long pc, unsigned long npc
365 printk("Register Access Exception at PC %08lx NPC %08lx PSR %08lx\n", 371 printk("Register Access Exception at PC %08lx NPC %08lx PSR %08lx\n",
366 pc, npc, psr); 372 pc, npc, psr);
367#endif 373#endif
374 clear_siginfo(&info);
368 info.si_signo = SIGBUS; 375 info.si_signo = SIGBUS;
369 info.si_errno = 0; 376 info.si_errno = 0;
370 info.si_code = BUS_OBJERR; 377 info.si_code = BUS_OBJERR;
@@ -378,6 +385,7 @@ void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long np
378{ 385{
379 siginfo_t info; 386 siginfo_t info;
380 387
388 clear_siginfo(&info);
381 info.si_signo = SIGILL; 389 info.si_signo = SIGILL;
382 info.si_errno = 0; 390 info.si_errno = 0;
383 info.si_code = ILL_COPROC; 391 info.si_code = ILL_COPROC;
@@ -395,6 +403,7 @@ void handle_cp_exception(struct pt_regs *regs, unsigned long pc, unsigned long n
395 printk("Co-Processor Exception at PC %08lx NPC %08lx PSR %08lx\n", 403 printk("Co-Processor Exception at PC %08lx NPC %08lx PSR %08lx\n",
396 pc, npc, psr); 404 pc, npc, psr);
397#endif 405#endif
406 clear_siginfo(&info);
398 info.si_signo = SIGILL; 407 info.si_signo = SIGILL;
399 info.si_errno = 0; 408 info.si_errno = 0;
400 info.si_code = ILL_COPROC; 409 info.si_code = ILL_COPROC;
@@ -408,6 +417,7 @@ void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, unsigned long npc
408{ 417{
409 siginfo_t info; 418 siginfo_t info;
410 419
420 clear_siginfo(&info);
411 info.si_signo = SIGFPE; 421 info.si_signo = SIGFPE;
412 info.si_errno = 0; 422 info.si_errno = 0;
413 info.si_code = FPE_INTDIV; 423 info.si_code = FPE_INTDIV;
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
index e81072ac52c3..b485b49b87a8 100644
--- a/arch/sparc/kernel/traps_64.c
+++ b/arch/sparc/kernel/traps_64.c
@@ -107,6 +107,7 @@ void bad_trap(struct pt_regs *regs, long lvl)
107 regs->tpc &= 0xffffffff; 107 regs->tpc &= 0xffffffff;
108 regs->tnpc &= 0xffffffff; 108 regs->tnpc &= 0xffffffff;
109 } 109 }
110 clear_siginfo(&info);
110 info.si_signo = SIGILL; 111 info.si_signo = SIGILL;
111 info.si_errno = 0; 112 info.si_errno = 0;
112 info.si_code = ILL_ILLTRP; 113 info.si_code = ILL_ILLTRP;
@@ -206,6 +207,7 @@ void spitfire_insn_access_exception(struct pt_regs *regs, unsigned long sfsr, un
206 regs->tpc &= 0xffffffff; 207 regs->tpc &= 0xffffffff;
207 regs->tnpc &= 0xffffffff; 208 regs->tnpc &= 0xffffffff;
208 } 209 }
210 clear_siginfo(&info);
209 info.si_signo = SIGSEGV; 211 info.si_signo = SIGSEGV;
210 info.si_errno = 0; 212 info.si_errno = 0;
211 info.si_code = SEGV_MAPERR; 213 info.si_code = SEGV_MAPERR;
@@ -247,6 +249,7 @@ void sun4v_insn_access_exception(struct pt_regs *regs, unsigned long addr, unsig
247 regs->tpc &= 0xffffffff; 249 regs->tpc &= 0xffffffff;
248 regs->tnpc &= 0xffffffff; 250 regs->tnpc &= 0xffffffff;
249 } 251 }
252 clear_siginfo(&info);
250 info.si_signo = SIGSEGV; 253 info.si_signo = SIGSEGV;
251 info.si_errno = 0; 254 info.si_errno = 0;
252 info.si_code = SEGV_MAPERR; 255 info.si_code = SEGV_MAPERR;
@@ -338,6 +341,7 @@ void spitfire_data_access_exception(struct pt_regs *regs, unsigned long sfsr, un
338 if (is_no_fault_exception(regs)) 341 if (is_no_fault_exception(regs))
339 return; 342 return;
340 343
344 clear_siginfo(&info);
341 info.si_signo = SIGSEGV; 345 info.si_signo = SIGSEGV;
342 info.si_errno = 0; 346 info.si_errno = 0;
343 info.si_code = SEGV_MAPERR; 347 info.si_code = SEGV_MAPERR;
@@ -595,6 +599,7 @@ static void spitfire_ue_log(unsigned long afsr, unsigned long afar, unsigned lon
595 regs->tpc &= 0xffffffff; 599 regs->tpc &= 0xffffffff;
596 regs->tnpc &= 0xffffffff; 600 regs->tnpc &= 0xffffffff;
597 } 601 }
602 clear_siginfo(&info);
598 info.si_signo = SIGBUS; 603 info.si_signo = SIGBUS;
599 info.si_errno = 0; 604 info.si_errno = 0;
600 info.si_code = BUS_OBJERR; 605 info.si_code = BUS_OBJERR;
@@ -2211,6 +2216,7 @@ bool sun4v_nonresum_error_user_handled(struct pt_regs *regs,
2211 addr += PAGE_SIZE; 2216 addr += PAGE_SIZE;
2212 } 2217 }
2213 } 2218 }
2219 clear_siginfo(&info);
2214 info.si_signo = SIGKILL; 2220 info.si_signo = SIGKILL;
2215 info.si_errno = 0; 2221 info.si_errno = 0;
2216 info.si_trapno = 0; 2222 info.si_trapno = 0;
@@ -2221,6 +2227,7 @@ bool sun4v_nonresum_error_user_handled(struct pt_regs *regs,
2221 if (attrs & SUN4V_ERR_ATTRS_PIO) { 2227 if (attrs & SUN4V_ERR_ATTRS_PIO) {
2222 siginfo_t info; 2228 siginfo_t info;
2223 2229
2230 clear_siginfo(&info);
2224 info.si_signo = SIGBUS; 2231 info.si_signo = SIGBUS;
2225 info.si_code = BUS_ADRERR; 2232 info.si_code = BUS_ADRERR;
2226 info.si_addr = (void __user *)sun4v_get_vaddr(regs); 2233 info.si_addr = (void __user *)sun4v_get_vaddr(regs);
@@ -2368,6 +2375,7 @@ static void do_fpe_common(struct pt_regs *regs)
2368 regs->tpc &= 0xffffffff; 2375 regs->tpc &= 0xffffffff;
2369 regs->tnpc &= 0xffffffff; 2376 regs->tnpc &= 0xffffffff;
2370 } 2377 }
2378 clear_siginfo(&info);
2371 info.si_signo = SIGFPE; 2379 info.si_signo = SIGFPE;
2372 info.si_errno = 0; 2380 info.si_errno = 0;
2373 info.si_addr = (void __user *)regs->tpc; 2381 info.si_addr = (void __user *)regs->tpc;
@@ -2440,6 +2448,7 @@ void do_tof(struct pt_regs *regs)
2440 regs->tpc &= 0xffffffff; 2448 regs->tpc &= 0xffffffff;
2441 regs->tnpc &= 0xffffffff; 2449 regs->tnpc &= 0xffffffff;
2442 } 2450 }
2451 clear_siginfo(&info);
2443 info.si_signo = SIGEMT; 2452 info.si_signo = SIGEMT;
2444 info.si_errno = 0; 2453 info.si_errno = 0;
2445 info.si_code = EMT_TAGOVF; 2454 info.si_code = EMT_TAGOVF;
@@ -2465,6 +2474,7 @@ void do_div0(struct pt_regs *regs)
2465 regs->tpc &= 0xffffffff; 2474 regs->tpc &= 0xffffffff;
2466 regs->tnpc &= 0xffffffff; 2475 regs->tnpc &= 0xffffffff;
2467 } 2476 }
2477 clear_siginfo(&info);
2468 info.si_signo = SIGFPE; 2478 info.si_signo = SIGFPE;
2469 info.si_errno = 0; 2479 info.si_errno = 0;
2470 info.si_code = FPE_INTDIV; 2480 info.si_code = FPE_INTDIV;
@@ -2666,6 +2676,7 @@ void do_illegal_instruction(struct pt_regs *regs)
2666 } 2676 }
2667 } 2677 }
2668 } 2678 }
2679 clear_siginfo(&info);
2669 info.si_signo = SIGILL; 2680 info.si_signo = SIGILL;
2670 info.si_errno = 0; 2681 info.si_errno = 0;
2671 info.si_code = ILL_ILLOPC; 2682 info.si_code = ILL_ILLOPC;
@@ -2692,6 +2703,7 @@ void mem_address_unaligned(struct pt_regs *regs, unsigned long sfar, unsigned lo
2692 if (is_no_fault_exception(regs)) 2703 if (is_no_fault_exception(regs))
2693 return; 2704 return;
2694 2705
2706 clear_siginfo(&info);
2695 info.si_signo = SIGBUS; 2707 info.si_signo = SIGBUS;
2696 info.si_errno = 0; 2708 info.si_errno = 0;
2697 info.si_code = BUS_ADRALN; 2709 info.si_code = BUS_ADRALN;
@@ -2717,6 +2729,7 @@ void sun4v_do_mna(struct pt_regs *regs, unsigned long addr, unsigned long type_c
2717 if (is_no_fault_exception(regs)) 2729 if (is_no_fault_exception(regs))
2718 return; 2730 return;
2719 2731
2732 clear_siginfo(&info);
2720 info.si_signo = SIGBUS; 2733 info.si_signo = SIGBUS;
2721 info.si_errno = 0; 2734 info.si_errno = 0;
2722 info.si_code = BUS_ADRALN; 2735 info.si_code = BUS_ADRALN;
@@ -2785,6 +2798,7 @@ void do_privop(struct pt_regs *regs)
2785 regs->tpc &= 0xffffffff; 2798 regs->tpc &= 0xffffffff;
2786 regs->tnpc &= 0xffffffff; 2799 regs->tnpc &= 0xffffffff;
2787 } 2800 }
2801 clear_siginfo(&info);
2788 info.si_signo = SIGILL; 2802 info.si_signo = SIGILL;
2789 info.si_errno = 0; 2803 info.si_errno = 0;
2790 info.si_code = ILL_PRVOPC; 2804 info.si_code = ILL_PRVOPC;
diff --git a/arch/sparc/kernel/unaligned_32.c b/arch/sparc/kernel/unaligned_32.c
index 7642d7e4f0d9..0e4cf7217413 100644
--- a/arch/sparc/kernel/unaligned_32.c
+++ b/arch/sparc/kernel/unaligned_32.c
@@ -313,6 +313,7 @@ static void user_mna_trap_fault(struct pt_regs *regs, unsigned int insn)
313{ 313{
314 siginfo_t info; 314 siginfo_t info;
315 315
316 clear_siginfo(&info);
316 info.si_signo = SIGBUS; 317 info.si_signo = SIGBUS;
317 info.si_errno = 0; 318 info.si_errno = 0;
318 info.si_code = BUS_ADRALN; 319 info.si_code = BUS_ADRALN;
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
index a8103a84b4ac..2deb586665b9 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -129,6 +129,7 @@ static void __do_fault_siginfo(int code, int sig, struct pt_regs *regs,
129{ 129{
130 siginfo_t info; 130 siginfo_t info;
131 131
132 clear_siginfo(&info);
132 info.si_signo = sig; 133 info.si_signo = sig;
133 info.si_code = code; 134 info.si_code = code;
134 info.si_errno = 0; 135 info.si_errno = 0;
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 41363f46797b..46ccff95d10e 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -172,6 +172,7 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs,
172 unsigned long addr; 172 unsigned long addr;
173 siginfo_t info; 173 siginfo_t info;
174 174
175 clear_siginfo(&info);
175 info.si_code = code; 176 info.si_code = code;
176 info.si_signo = sig; 177 info.si_signo = sig;
177 info.si_errno = 0; 178 info.si_errno = 0;