trap.c (260667) | trap.c (260670) |
---|---|
1/*- 2 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 3 * Copyright (C) 1995, 1996 TooLs GmbH. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 * $NetBSD: trap.c,v 1.58 2002/03/04 04:07:35 dbj Exp $ 32 */ 33 34#include <sys/cdefs.h> | 1/*- 2 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 3 * Copyright (C) 1995, 1996 TooLs GmbH. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 18 unchanged lines hidden (view full) --- 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 * $NetBSD: trap.c,v 1.58 2002/03/04 04:07:35 dbj Exp $ 32 */ 33 34#include <sys/cdefs.h> |
35__FBSDID("$FreeBSD: stable/10/sys/powerpc/aim/trap.c 260667 2014-01-15 04:16:45Z jhibbits $"); | 35__FBSDID("$FreeBSD: stable/10/sys/powerpc/aim/trap.c 260670 2014-01-15 05:19:37Z jhibbits $"); |
36 37#include "opt_kdtrace.h" 38 39#include <sys/param.h> 40#include <sys/kdb.h> 41#include <sys/proc.h> 42#include <sys/ktr.h> 43#include <sys/lock.h> --- 126 unchanged lines hidden (view full) --- 170 return ("unknown"); 171} 172 173void 174trap(struct trapframe *frame) 175{ 176 struct thread *td; 177 struct proc *p; | 36 37#include "opt_kdtrace.h" 38 39#include <sys/param.h> 40#include <sys/kdb.h> 41#include <sys/proc.h> 42#include <sys/ktr.h> 43#include <sys/lock.h> --- 126 unchanged lines hidden (view full) --- 170 return ("unknown"); 171} 172 173void 174trap(struct trapframe *frame) 175{ 176 struct thread *td; 177 struct proc *p; |
178#ifdef KDTRACE_HOOKS 179 uint32_t inst; 180#endif |
|
178 int sig, type, user; 179 u_int ucode; 180 ksiginfo_t ksi; 181 182 PCPU_INC(cnt.v_trap); 183 184 td = curthread; 185 p = td->td_proc; --- 88 unchanged lines hidden (view full) --- 274 if (fix_unaligned(td, frame) != 0) 275 sig = SIGBUS; 276 else 277 frame->srr0 += 4; 278 break; 279 280 case EXC_PGM: 281 /* Identify the trap reason */ | 181 int sig, type, user; 182 u_int ucode; 183 ksiginfo_t ksi; 184 185 PCPU_INC(cnt.v_trap); 186 187 td = curthread; 188 p = td->td_proc; --- 88 unchanged lines hidden (view full) --- 277 if (fix_unaligned(td, frame) != 0) 278 sig = SIGBUS; 279 else 280 frame->srr0 += 4; 281 break; 282 283 case EXC_PGM: 284 /* Identify the trap reason */ |
282 if (frame->srr1 & EXC_PGM_TRAP) | 285 if (frame->srr1 & EXC_PGM_TRAP) { 286#ifdef KDTRACE_HOOKS 287 inst = fuword32((const void *)frame->srr0); 288 if (inst == 0x0FFFDDDD && dtrace_pid_probe_ptr != NULL) { 289 struct reg regs; 290 fill_regs(td, ®s); 291 (*dtrace_pid_probe_ptr)(®s); 292 break; 293 } 294#endif |
283 sig = SIGTRAP; | 295 sig = SIGTRAP; |
284 else if (ppc_instr_emulate(frame) == 0) | 296 } else if (ppc_instr_emulate(frame) == 0) |
285 frame->srr0 += 4; 286 else 287 sig = SIGILL; 288 break; 289 290 default: 291 trap_fatal(frame); 292 } 293 } else { 294 /* Kernel Mode Traps */ 295 296 KASSERT(cold || td->td_ucred != NULL, 297 ("kernel trap doesn't have ucred")); 298 switch (type) { 299#ifdef KDTRACE_HOOKS 300 case EXC_PGM: 301 if (frame->srr1 & EXC_PGM_TRAP) { | 297 frame->srr0 += 4; 298 else 299 sig = SIGILL; 300 break; 301 302 default: 303 trap_fatal(frame); 304 } 305 } else { 306 /* Kernel Mode Traps */ 307 308 KASSERT(cold || td->td_ucred != NULL, 309 ("kernel trap doesn't have ucred")); 310 switch (type) { 311#ifdef KDTRACE_HOOKS 312 case EXC_PGM: 313 if (frame->srr1 & EXC_PGM_TRAP) { |
302 if (*(uintptr_t *)frame->srr0 == 0x7c810808) { | 314 if (*(uint32_t *)frame->srr0 == 0x7c810808) { |
303 if (dtrace_invop_jump_addr != NULL) { 304 dtrace_invop_jump_addr(frame); 305 return; 306 } 307 } 308 } 309 break; 310#endif --- 498 unchanged lines hidden --- | 315 if (dtrace_invop_jump_addr != NULL) { 316 dtrace_invop_jump_addr(frame); 317 return; 318 } 319 } 320 } 321 break; 322#endif --- 498 unchanged lines hidden --- |