Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Sep 2019 15:08:17 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r352627 - in head/sys/cddl/dev/dtrace: amd64 i386
Message-ID:  <201909231508.x8NF8Hb6073174@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Mon Sep 23 15:08:17 2019
New Revision: 352627
URL: https://svnweb.freebsd.org/changeset/base/352627

Log:
  Implement x86 dtrace_invop_(un)init() in C.
  
  There is no reason for these routines to be written in assembly.  In
  the ports of DTrace to other platforms, they are already written in C.
  No functional change intended.
  
  MFC after:	1 week
  Sponsored by:	Netflix

Modified:
  head/sys/cddl/dev/dtrace/amd64/dtrace_asm.S
  head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
  head/sys/cddl/dev/dtrace/i386/dtrace_asm.S
  head/sys/cddl/dev/dtrace/i386/dtrace_subr.c

Modified: head/sys/cddl/dev/dtrace/amd64/dtrace_asm.S
==============================================================================
--- head/sys/cddl/dev/dtrace/amd64/dtrace_asm.S	Mon Sep 23 14:34:23 2019	(r352626)
+++ head/sys/cddl/dev/dtrace/amd64/dtrace_asm.S	Mon Sep 23 15:08:17 2019	(r352627)
@@ -150,22 +150,6 @@ bp_ret:
 	END(dtrace_invop_start)
 
 /*
-void dtrace_invop_init(void)
-*/
-	ENTRY(dtrace_invop_init)
-	movq	$dtrace_invop_start, dtrace_invop_jump_addr(%rip)
-	ret
-	END(dtrace_invop_init)
-
-/*
-void dtrace_invop_uninit(void)
-*/
-	ENTRY(dtrace_invop_uninit)
-	movq	$0, dtrace_invop_jump_addr(%rip)
-	ret
-	END(dtrace_invop_uninit)
-
-/*
 greg_t dtrace_getfp(void)
 */
 	ENTRY(dtrace_getfp)

Modified: head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
==============================================================================
--- head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c	Mon Sep 23 14:34:23 2019	(r352626)
+++ head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c	Mon Sep 23 15:08:17 2019	(r352627)
@@ -48,8 +48,12 @@
 #include <vm/pmap.h>
 
 extern void dtrace_getnanotime(struct timespec *tsp);
+extern int (*dtrace_invop_jump_addr)(struct trapframe *);
 
-int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
+int	dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
+int	dtrace_invop_start(struct trapframe *frame);
+void	dtrace_invop_init(void);
+void	dtrace_invop_uninit(void);
 
 typedef struct dtrace_invop_hdlr {
 	int (*dtih_func)(uintptr_t, struct trapframe *, uintptr_t);
@@ -107,6 +111,20 @@ dtrace_invop_remove(int (*func)(uintptr_t, struct trap
 	}
 
 	kmem_free(hdlr, 0);
+}
+
+void
+dtrace_invop_init(void)
+{
+
+	dtrace_invop_jump_addr = dtrace_invop_start;
+}
+
+void
+dtrace_invop_uninit(void)
+{
+
+	dtrace_invop_jump_addr = NULL;
 }
 
 /*ARGSUSED*/

Modified: head/sys/cddl/dev/dtrace/i386/dtrace_asm.S
==============================================================================
--- head/sys/cddl/dev/dtrace/i386/dtrace_asm.S	Mon Sep 23 14:34:23 2019	(r352626)
+++ head/sys/cddl/dev/dtrace/i386/dtrace_asm.S	Mon Sep 23 15:08:17 2019	(r352627)
@@ -135,22 +135,6 @@ invop_nop:
 	END(dtrace_invop_start)
 
 /*
-void dtrace_invop_init(void)
-*/
-	ENTRY(dtrace_invop_init)
-	movl	$dtrace_invop_start, dtrace_invop_jump_addr
-	ret
-	END(dtrace_invop_init)
-
-/*
-void dtrace_invop_uninit(void)
-*/
-	ENTRY(dtrace_invop_uninit)
-	movl	$0, dtrace_invop_jump_addr
-	ret
-	END(dtrace_invop_uninit)
-
-/*
 greg_t dtrace_getfp(void)
 */
 

Modified: head/sys/cddl/dev/dtrace/i386/dtrace_subr.c
==============================================================================
--- head/sys/cddl/dev/dtrace/i386/dtrace_subr.c	Mon Sep 23 14:34:23 2019	(r352626)
+++ head/sys/cddl/dev/dtrace/i386/dtrace_subr.c	Mon Sep 23 15:08:17 2019	(r352627)
@@ -51,8 +51,12 @@
 extern uintptr_t 	kernelbase;
 
 extern void dtrace_getnanotime(struct timespec *tsp);
+extern int (*dtrace_invop_jump_addr)(struct trapframe *);
 
-int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
+int	dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
+int	dtrace_invop_start(struct trapframe *frame);
+void	dtrace_invop_init(void);
+void	dtrace_invop_uninit(void);
 
 typedef struct dtrace_invop_hdlr {
 	int (*dtih_func)(uintptr_t, struct trapframe *, uintptr_t);
@@ -110,6 +114,20 @@ dtrace_invop_remove(int (*func)(uintptr_t, struct trap
 	}
 
 	kmem_free(hdlr, 0);
+}
+
+void
+dtrace_invop_init(void)
+{
+
+	dtrace_invop_jump_addr = dtrace_invop_start;
+}
+
+void
+dtrace_invop_uninit(void)
+{
+
+	dtrace_invop_jump_addr = NULL;
 }
 
 void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909231508.x8NF8Hb6073174>