diff options
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/kernel/process_64.c | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc_32.c | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/traps_32.c | 10 | ||||
-rw-r--r-- | arch/sparc/kernel/traps_64.c | 14 | ||||
-rw-r--r-- | arch/sparc/kernel/unaligned_32.c | 1 | ||||
-rw-r--r-- | arch/sparc/mm/fault_32.c | 1 | ||||
-rw-r--r-- | arch/sparc/mm/fault_64.c | 1 |
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; |