Author: jhibbits
Date: Mon Aug 19 05:10:46 2013
New Revision: 254509
URL: http://svnweb.freebsd.org/changeset/base/254509

Log:
  Fix some ppc64 dtrace bugs, and enable systrace_freebsd32 for ppc64.

Modified:
  head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S
  head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c
  head/sys/modules/dtrace/Makefile

Modified: head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S
==============================================================================
--- head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S       Mon Aug 19 04:56:03 
2013        (r254508)
+++ head/sys/cddl/dev/dtrace/powerpc/dtrace_asm.S       Mon Aug 19 05:10:46 
2013        (r254509)
@@ -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)

Modified: head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c
==============================================================================
--- head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c       Mon Aug 19 04:56:03 
2013        (r254508)
+++ head/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c       Mon Aug 19 05:10:46 
2013        (r254509)
@@ -80,7 +80,11 @@ dtrace_getpcstack(pc_t *pcstack, int pcs
                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;

Modified: head/sys/modules/dtrace/Makefile
==============================================================================
--- head/sys/modules/dtrace/Makefile    Mon Aug 19 04:56:03 2013        
(r254508)
+++ head/sys/modules/dtrace/Makefile    Mon Aug 19 05:10:46 2013        
(r254509)
@@ -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
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to