aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Hibbits <jhibbits@FreeBSD.org>2013-08-19 05:10:46 +0000
committerJustin Hibbits <jhibbits@FreeBSD.org>2013-08-19 05:10:46 +0000
commitcc117e2773f92c1988ac83f86b7f568f79bb7889 (patch)
treea2b9c87ea0adc2a06d1d3aa6a6607f43cdabc510
parent25180adf0ddeb0bc72e0f123c059cf6e4f0d05c7 (diff)
Notes
-rw-r--r--sys/cddl/dev/dtrace/powerpc/dtrace_asm.S11
-rw-r--r--sys/cddl/dev/dtrace/powerpc/dtrace_isa.c4
-rw-r--r--sys/modules/dtrace/Makefile2
3 files changed, 16 insertions, 1 deletions
diff --git a/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S b/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S
index 810517f4af16..79079e5e9c17 100644
--- a/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S
+++ b/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S
@@ -50,6 +50,7 @@
void dtrace_membar_producer(void)
*/
ASENTRY_NOPROF(dtrace_membar_producer)
+ sync
blr
END(dtrace_membar_producer)
@@ -57,6 +58,7 @@ END(dtrace_membar_producer)
void dtrace_membar_consumer(void)
*/
ASENTRY_NOPROF(dtrace_membar_consumer)
+ isync
blr
END(dtrace_membar_consumer)
@@ -97,12 +99,21 @@ void *
dtrace_casptr(void *target, void *cmp, void *new)
*/
ASENTRY_NOPROF(dtrace_casptr)
+#ifdef __powerpc64__
+1:
+ ldarx %r0,0,%r3
+ cmpd %r4,%r0
+ bne 2f
+ stdcx. %r5,0,%r3
+ bne 1b
+#else
1:
lwarx %r0,0,%r3
cmpw %r4,%r0
bne 2f
stwcx. %r5,0,%r3
bne 1b
+#endif
2: mr %r3,%r0
blr
END(dtrace_casptr)
diff --git a/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c b/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c
index a68ee657f005..3793adf631c5 100644
--- a/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c
+++ b/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c
@@ -80,7 +80,11 @@ dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
if (!INKERNEL((long) sp))
break;
+#ifdef __powerpc64__
+ callpc = *(uintptr_t *)(sp + RETURN_OFFSET64);
+#else
callpc = *(uintptr_t *)(sp + RETURN_OFFSET);
+#endif
if (!INKERNEL(callpc))
break;
diff --git a/sys/modules/dtrace/Makefile b/sys/modules/dtrace/Makefile
index f1f1f1eaed84..2fa7ecd4eae1 100644
--- a/sys/modules/dtrace/Makefile
+++ b/sys/modules/dtrace/Makefile
@@ -22,7 +22,7 @@ SUBDIR+= fasttrap fbt systrace_linux32
.if ${MACHINE_CPUARCH} == "powerpc"
SUBDIR+= fbt
.endif
-.if ${MACHINE_CPUARCH} == "amd64"
+.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_ARCH} == "powerpc64"
SUBDIR+= systrace_freebsd32
.endif