Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153110704
D1207.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D1207.id.diff
View Options
Index: sys/powerpc/aim/machdep.c
===================================================================
--- sys/powerpc/aim/machdep.c
+++ sys/powerpc/aim/machdep.c
@@ -757,6 +757,10 @@
|| frame->exc == EXC_BPT
|| frame->exc == EXC_DSI)) {
int type = frame->exc;
+
+ /* Ignore DTrace traps. */
+ if (*(uint32_t *)frame->srr0 == EXC_DTRACE)
+ return (0);
if (type == EXC_PGM && (frame->srr1 & 0x20000)) {
type = T_BREAKPOINT;
}
Index: sys/powerpc/aim/trap.c
===================================================================
--- sys/powerpc/aim/trap.c
+++ sys/powerpc/aim/trap.c
@@ -258,7 +258,8 @@
if (frame->srr1 & EXC_PGM_TRAP) {
#ifdef KDTRACE_HOOKS
inst = fuword32((const void *)frame->srr0);
- if (inst == 0x0FFFDDDD && dtrace_pid_probe_ptr != NULL) {
+ if (inst == 0x0FFFDDDD &&
+ dtrace_pid_probe_ptr != NULL) {
struct reg regs;
fill_regs(td, ®s);
(*dtrace_pid_probe_ptr)(®s);
@@ -301,7 +302,7 @@
#ifdef KDTRACE_HOOKS
case EXC_PGM:
if (frame->srr1 & EXC_PGM_TRAP) {
- if (*(uint32_t *)frame->srr0 == 0x7c810808) {
+ if (*(uint32_t *)frame->srr0 == EXC_DTRACE) {
if (dtrace_invop_jump_addr != NULL) {
dtrace_invop_jump_addr(frame);
return;
Index: sys/powerpc/aim/trap_subr32.S
===================================================================
--- sys/powerpc/aim/trap_subr32.S
+++ sys/powerpc/aim/trap_subr32.S
@@ -890,8 +890,7 @@
mfcr %r29 /* save CR in r29 */
mfsrr1 %r1
mtcr %r1
- bf 17,2f /* branch if privileged */
-1:
+ bf 17,1f /* branch if privileged */
/* Unprivileged case */
mtcr %r29 /* put the condition register back */
mfsprg2 %r29 /* ... and r29 */
@@ -900,19 +899,7 @@
li %r1, 0 /* How to get the vector from LR */
bla generictrap /* and we look like a generic trap */
-2:
-#ifdef KDTRACE_HOOKS
- /* Privileged, so drop to KDB */
- mfsrr0 %r1
- mtsprg3 %r3
- lwz %r1,0(%r1)
- /* Check if it's a DTrace trap. */
- li %r3,0x0808
- addis %r3,%r3,0x7c81
- cmplw %cr0,%r3,%r1
- mfsprg3 %r3
- beq %cr0,1b
-#endif
+1:
/* Privileged, so drop to KDB */
GET_CPUINFO(%r1)
stw %r28,(PC_DBSAVE+CPUSAVE_R28)(%r1) /* free r28 */
Index: sys/powerpc/aim/trap_subr64.S
===================================================================
--- sys/powerpc/aim/trap_subr64.S
+++ sys/powerpc/aim/trap_subr64.S
@@ -799,9 +799,8 @@
mfcr %r29 /* save CR in r29 */
mfsrr1 %r1
mtcr %r1
- bf 17,2f /* branch if privileged */
+ bf 17,1f /* branch if privileged */
-1:
/* Unprivileged case */
mtcr %r29 /* put the condition register back */
mfsprg2 %r29 /* ... and r29 */
@@ -810,19 +809,7 @@
li %r1, 0 /* How to get the vector from LR */
bla generictrap /* and we look like a generic trap */
-2:
-#ifdef KDTRACE_HOOKS
- /* Privileged, so drop to KDB */
- mfsrr0 %r1
- mtsprg3 %r3
- lwz %r1,0(%r1)
- /* Check if it's a DTrace trap. */
- li %r3,0x0808
- addis %r3,%r3,0x7c81
- cmplw %cr0,%r3,%r1
- mfsprg3 %r3
- beq %cr0,1b
-#endif
+1:
GET_CPUINFO(%r1)
std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r1) /* free r27 */
std %r28,(PC_DBSAVE+CPUSAVE_R28)(%r1) /* free r28 */
Index: sys/powerpc/include/trap.h
===================================================================
--- sys/powerpc/include/trap.h
+++ sys/powerpc/include/trap.h
@@ -120,6 +120,9 @@
#define EXC_PGM_PRIV (1UL << 18)
#define EXC_PGM_TRAP (1UL << 17)
+/* DTrace trap opcode. */
+#define EXC_DTRACE 0x7c810808
+
#ifndef LOCORE
struct trapframe;
struct pcb;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 20, 5:45 AM (6 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31759840
Default Alt Text
D1207.id.diff (3 KB)
Attached To
Mode
D1207: Add support for dtrace:fbt on modules for PowerPC
Attached
Detach File
Event Timeline
Log In to Comment