Module Name:    src
Committed By:   martin
Date:           Mon Oct 14 16:58:20 UTC 2024

Modified Files:
        src/external/cddl/osnet/dev/dtrace/amd64 [netbsd-10]: dtrace_asm.S
            dtrace_subr.c
        src/external/cddl/osnet/dev/dtrace/i386 [netbsd-10]: dtrace_asm.S
            dtrace_subr.c

Log Message:
Apply patch, requested by chs in ticket #975:

        external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S       (apply patch)
        external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c      (apply patch)
        external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S        (apply patch)
        external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c       (apply patch)

dtrace: add support for SMAP.

This is the equivalvent of

        external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S       1.9
        external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S        1.8
        sys/arch/amd64/amd64/cpufunc.S                          1.67
        sys/arch/i386/i386/cpufunc.S                            1.51

adapted to the netbsd-10 branch.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.8.12.1 \
    src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S
cvs rdiff -u -r1.15 -r1.15.6.1 \
    src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c
cvs rdiff -u -r1.7 -r1.7.12.1 \
    src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S
cvs rdiff -u -r1.14 -r1.14.2.1 \
    src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S
diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.8 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.8.12.1
--- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S:1.8	Mon May 28 21:05:03 2018
+++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_asm.S	Mon Oct 14 16:58:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dtrace_asm.S,v 1.8 2018/05/28 21:05:03 chs Exp $	*/
+/*	$NetBSD: dtrace_asm.S,v 1.8.12.1 2024/10/14 16:58:20 martin Exp $	*/
 
 /*
  * CDDL HEADER START
@@ -39,6 +39,11 @@
 
 #include "assym.h"
 
+#define DTRACE_SMAP_DISABLE			\
+	call	dtrace_smap_disable
+#define DTRACE_SMAP_ENABLE			\
+	call	dtrace_smap_enable
+
 #define INTR_POP				\
 	MEXITCOUNT;				\
 	movq	TF_RDI(%rsp),%rdi;		\
@@ -217,8 +222,10 @@ dtrace_copy(uintptr_t src, uintptr_t des
 
 	xchgq	%rdi, %rsi		/* make %rsi source, %rdi dest */
 	movq	%rdx, %rcx		/* load count */
+	DTRACE_SMAP_DISABLE
 	repz				/* repeat for count ... */
 	smovb				/*   move from %ds:rsi to %ed:rdi */
+	DTRACE_SMAP_ENABLE
 	leave
 	ret
 	END(dtrace_copy)
@@ -231,6 +238,7 @@ dtrace_copystr(uintptr_t uaddr, uintptr_
 	ENTRY(dtrace_copystr)
 	pushq	%rbp
 	movq	%rsp, %rbp
+	DTRACE_SMAP_DISABLE
 
 0:
 	movb	(%rdi), %al		/* load from source */
@@ -248,6 +256,7 @@ dtrace_copystr(uintptr_t uaddr, uintptr_
 	cmpq	$0, %rdx
 	jne	0b
 2:
+	DTRACE_SMAP_ENABLE
 	leave
 	ret
 
@@ -258,7 +267,9 @@ uintptr_t
 dtrace_fulword(void *addr)
 */
 	ENTRY(dtrace_fulword)
+	DTRACE_SMAP_DISABLE
 	movq	(%rdi), %rax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fulword)
 
@@ -268,7 +279,9 @@ dtrace_fuword8_nocheck(void *addr)
 */
 	ENTRY(dtrace_fuword8_nocheck)
 	xorq	%rax, %rax
+	DTRACE_SMAP_DISABLE
 	movb	(%rdi), %al
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword8_nocheck)
 
@@ -278,7 +291,9 @@ dtrace_fuword16_nocheck(void *addr)
 */
 	ENTRY(dtrace_fuword16_nocheck)
 	xorq	%rax, %rax
+	DTRACE_SMAP_DISABLE
 	movw	(%rdi), %ax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword16_nocheck)
 
@@ -288,7 +303,9 @@ dtrace_fuword32_nocheck(void *addr)
 */
 	ENTRY(dtrace_fuword32_nocheck)
 	xorq	%rax, %rax
+	DTRACE_SMAP_DISABLE
 	movl	(%rdi), %eax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword32_nocheck)
 
@@ -297,7 +314,9 @@ uint64_t
 dtrace_fuword64_nocheck(void *addr)
 */
 	ENTRY(dtrace_fuword64_nocheck)
+	DTRACE_SMAP_DISABLE
 	movq	(%rdi), %rax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword64_nocheck)
 

Index: src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c
diff -u src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.15 src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.15.6.1
--- src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c:1.15	Tue Apr  6 12:48:59 2021
+++ src/external/cddl/osnet/dev/dtrace/amd64/dtrace_subr.c	Mon Oct 14 16:58:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dtrace_subr.c,v 1.15 2021/04/06 12:48:59 simonb Exp $	*/
+/*	$NetBSD: dtrace_subr.c,v 1.15.6.1 2024/10/14 16:58:20 martin Exp $	*/
 
 /*
  * CDDL HEADER START
@@ -47,6 +47,7 @@
 #include <machine/frame.h>
 #include <machine/cpu_counter.h>
 #include <machine/cpufunc.h>
+#include <machine/cpuvar.h>
 
 int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
 
@@ -60,6 +61,9 @@ dtrace_invop_hdlr_t *dtrace_invop_hdlr;
 void dtrace_gethrtime_init(void *);
 void dtrace_getnanotime(struct timespec *);
 
+void dtrace_smap_disable(void);
+void dtrace_smap_enable(void);
+
 int
 dtrace_invop(uintptr_t addr, struct trapframe *frame, uintptr_t eax)
 {
@@ -455,3 +459,21 @@ dtrace_trap(struct trapframe *frame, u_i
 	/* Handle the trap in the usual way. */
 	return (0);
 }
+
+void
+dtrace_smap_disable(void)
+{
+
+	if (cpu_feature[5] & CPUID_SEF_SMAP) {
+		__asm volatile("stac");
+	}
+}
+
+void
+dtrace_smap_enable(void)
+{
+
+	if (cpu_feature[5] & CPUID_SEF_SMAP) {
+		__asm volatile ("clac");
+	}
+}

Index: src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S
diff -u src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S:1.7 src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S:1.7.12.1
--- src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S:1.7	Mon May 28 21:05:03 2018
+++ src/external/cddl/osnet/dev/dtrace/i386/dtrace_asm.S	Mon Oct 14 16:58:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dtrace_asm.S,v 1.7 2018/05/28 21:05:03 chs Exp $	*/
+/*	$NetBSD: dtrace_asm.S,v 1.7.12.1 2024/10/14 16:58:20 martin Exp $	*/
 
 /*
  * CDDL HEADER START
@@ -38,6 +38,11 @@
 #include <machine/frameasm.h>
 #include <machine/trap.h>
 
+#define DTRACE_SMAP_DISABLE			\
+	call	dtrace_smap_disable
+#define DTRACE_SMAP_ENABLE			\
+	call	dtrace_smap_enable
+
 #define INTR_POP		\
 	addl	$16, %esp;	\
 	popl	%edi;		\
@@ -225,8 +230,10 @@ void dtrace_copy(uintptr_t src, uintptr_
 	movl	8(%ebp), %esi		/* Load source address */
 	movl	12(%ebp), %edi		/* Load destination address */
 	movl	16(%ebp), %ecx		/* Load count */
+	DTRACE_SMAP_DISABLE
 	repz				/* Repeat for count... */
 	smovb				/*   move from %ds:si to %es:di */
+	DTRACE_SMAP_ENABLE
 
 	popl	%edi
 	popl	%esi
@@ -248,6 +255,7 @@ void dtrace_copystr(uintptr_t uaddr, uin
 	movl	8(%ebp), %ebx		/* Load source address */
 	movl	12(%ebp), %edx		/* Load destination address */
 	movl	16(%ebp), %ecx		/* Load count */
+	DTRACE_SMAP_DISABLE
 
 0:
 	movb	(%ebx), %al		/* Load from source */
@@ -261,6 +269,7 @@ void dtrace_copystr(uintptr_t uaddr, uin
 	jne	0b
 
 1:
+	DTRACE_SMAP_ENABLE
 	popl	%ebx
 	movl	%ebp, %esp
 	popl	%ebp
@@ -275,7 +284,9 @@ uintptr_t dtrace_fulword(void *addr)
 	ENTRY(dtrace_fulword)
 	movl	4(%esp), %ecx
 	xorl	%eax, %eax
+	DTRACE_SMAP_DISABLE
 	movl	(%ecx), %eax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fulword)
 
@@ -286,7 +297,9 @@ uint8_t dtrace_fuword8_nocheck(void *add
 	ENTRY(dtrace_fuword8_nocheck)
 	movl	4(%esp), %ecx
 	xorl	%eax, %eax
+	DTRACE_SMAP_DISABLE
 	movzbl	(%ecx), %eax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword8_nocheck)
 
@@ -297,7 +310,9 @@ uint16_t dtrace_fuword16_nocheck(void *a
 	ENTRY(dtrace_fuword16_nocheck)
 	movl	4(%esp), %ecx
 	xorl	%eax, %eax
+	DTRACE_SMAP_DISABLE
 	movzwl	(%ecx), %eax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword16_nocheck)
 
@@ -308,7 +323,9 @@ uint32_t dtrace_fuword32_nocheck(void *a
 	ENTRY(dtrace_fuword32_nocheck)
 	movl	4(%esp), %ecx
 	xorl	%eax, %eax
+	DTRACE_SMAP_DISABLE
 	movl	(%ecx), %eax
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword32_nocheck)
 
@@ -320,8 +337,10 @@ uint64_t dtrace_fuword64_nocheck(void *a
 	movl	4(%esp), %ecx
 	xorl	%eax, %eax
 	xorl	%edx, %edx
+	DTRACE_SMAP_DISABLE
 	movl	(%ecx), %eax
 	movl	4(%ecx), %edx
+	DTRACE_SMAP_ENABLE
 	ret
 	END(dtrace_fuword64_nocheck)
 

Index: src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c
diff -u src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c:1.14 src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c:1.14.2.1
--- src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c:1.14	Sun Aug 21 18:58:45 2022
+++ src/external/cddl/osnet/dev/dtrace/i386/dtrace_subr.c	Mon Oct 14 16:58:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: dtrace_subr.c,v 1.14 2022/08/21 18:58:45 riastradh Exp $	*/
+/*	$NetBSD: dtrace_subr.c,v 1.14.2.1 2024/10/14 16:58:20 martin Exp $	*/
 
 /*
  * CDDL HEADER START
@@ -46,6 +46,7 @@
 #include <sys/dtrace_bsd.h>
 #include <machine/cpu.h>
 #include <machine/cpufunc.h>
+#include <machine/cpuvar.h>
 #include <machine/clock.h>
 #include <machine/frame.h>
 #include <uvm/uvm_pglist.h>
@@ -69,6 +70,9 @@ dtrace_invop_hdlr_t *dtrace_invop_hdlr;
 
 void dtrace_gethrtime_init(void *arg);
 
+void dtrace_smap_disable(void);
+void dtrace_smap_enable(void);
+
 int
 dtrace_invop(uintptr_t addr, struct trapframe *frame, uintptr_t eax)
 {
@@ -465,3 +469,21 @@ dtrace_trap(struct trapframe *frame, u_i
 	/* Handle the trap in the usual way. */
 	return (0);
 }
+
+void
+dtrace_smap_disable(void)
+{
+
+	if (cpu_feature[5] & CPUID_SEF_SMAP) {
+		__asm volatile("stac");
+	}
+}
+
+void
+dtrace_smap_enable(void)
+{
+
+	if (cpu_feature[5] & CPUID_SEF_SMAP) {
+		__asm volatile ("clac");
+	}
+}

Reply via email to