svn commit: r271212 - stable/10/sys/powerpc/aim
Justin Hibbits
jhibbits at FreeBSD.org
Sat Sep 6 22:37:48 UTC 2014
Author: jhibbits
Date: Sat Sep 6 22:37:47 2014
New Revision: 271212
URL: http://svnweb.freebsd.org/changeset/base/271212
Log:
MFC r269701:
Set the si_code appropriately for exception-caused signals.
LLDB checks the si_code, and aborts if a code isn't known.
Approved by: re (gjb)
Relnotes: yes
Modified:
stable/10/sys/powerpc/aim/trap.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/powerpc/aim/trap.c
==============================================================================
--- stable/10/sys/powerpc/aim/trap.c Sat Sep 6 22:17:54 2014 (r271211)
+++ stable/10/sys/powerpc/aim/trap.c Sat Sep 6 22:37:47 2014 (r271212)
@@ -197,6 +197,7 @@ trap(struct trapframe *frame)
case EXC_TRC:
frame->srr1 &= ~PSL_SE;
sig = SIGTRAP;
+ ucode = TRAP_TRACE;
break;
#ifdef __powerpc64__
@@ -204,13 +205,17 @@ trap(struct trapframe *frame)
case EXC_DSE:
if (handle_user_slb_spill(&p->p_vmspace->vm_pmap,
(type == EXC_ISE) ? frame->srr0 :
- frame->cpu.aim.dar) != 0)
+ frame->cpu.aim.dar) != 0) {
sig = SIGSEGV;
+ ucode = SEGV_MAPERR;
+ }
break;
#endif
case EXC_DSI:
case EXC_ISI:
sig = trap_pfault(frame, 1);
+ if (sig == SIGSEGV)
+ ucode = SEGV_MAPERR;
break;
case EXC_SC:
@@ -245,8 +250,10 @@ trap(struct trapframe *frame)
break;
case EXC_ALI:
- if (fix_unaligned(td, frame) != 0)
+ if (fix_unaligned(td, frame) != 0) {
sig = SIGBUS;
+ ucode = BUS_ADRALN;
+ }
else
frame->srr0 += 4;
break;
@@ -264,8 +271,16 @@ trap(struct trapframe *frame)
}
#endif
sig = SIGTRAP;
+ ucode = TRAP_BRKPT;
} else {
sig = ppc_instr_emulate(frame, td->td_pcb);
+ if (sig == SIGILL) {
+ if (frame->srr1 & EXC_PGM_PRIV)
+ ucode = ILL_PRVOPC;
+ else if (frame->srr1 & EXC_PGM_ILLEGAL)
+ ucode = ILL_ILLOPC;
+ } else if (sig == SIGFPE)
+ ucode = FPE_FLTINV; /* Punt for now, invalid operation. */
}
break;
@@ -276,6 +291,7 @@ trap(struct trapframe *frame)
* but it at least prevents the kernel from dying.
*/
sig = SIGBUS;
+ ucode = BUS_OBJERR;
break;
default:
More information about the svn-src-all
mailing list