Deleted Added
full compact
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, &regs);
291 (*dtrace_pid_probe_ptr)(&regs);
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 ---