Module Name:    src
Committed By:   hannken
Date:           Wed Jul 24 16:57:45 UTC 2019

Modified Files:
        src/external/cddl/osnet/dist/lib/libdtrace/common: dt_open.c

Log Message:
Handle automatic module loading on device open more like FreeBSD does.

Where FreeBSD uses a module "dtraceall" that depends on all dtrace
modules we now load the basic set "dtrace sdt fbt syscall" on open.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 \
    src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.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/dist/lib/libdtrace/common/dt_open.c
diff -u src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.15 src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.16
--- src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c:1.15	Sun Jul 21 15:38:06 2019
+++ src/external/cddl/osnet/dist/lib/libdtrace/common/dt_open.c	Wed Jul 24 16:57:45 2019
@@ -1140,19 +1140,36 @@ dt_vopen(int version, int flags, int *er
 	 */
 	dt_provmod_open(&provmod, &df);
 
-#ifdef __NetBSD__
+#if defined(__NetBSD__)
 	modctl_load_t cmdargs;
+	const char * const mod_list[] = {
+		"dtrace",
+		"dtrace_sdt",
+		"dtrace_fbt",
+		"dtrace_syscall"
+	};
+
+	dtfd = -1;
+	err = 0;
+	for (i = 0; i < __arraycount(mod_list); i++) {
+		cmdargs.ml_filename = mod_list[i];
+		cmdargs.ml_flags = MODCTL_NO_PROP;
+		cmdargs.ml_props = NULL;
+		cmdargs.ml_propslen = 0;
 
-	cmdargs.ml_filename = "dtrace";
-	cmdargs.ml_flags = MODCTL_NO_PROP;
-	cmdargs.ml_props = NULL;
-	cmdargs.ml_propslen = 0;
-
-	(void)modctl(MODCTL_LOAD, &cmdargs);
+		if (modctl(MODCTL_LOAD, &cmdargs) < 0 && errno != EEXIST) {
+			err = errno;
+			break;
+		}
+	}
+	if (err == 0) {
+		dtfd = open("/dev/dtrace/dtrace", O_RDWR);
+		err = errno; /* save errno from opening dtfd */
+	}
 #endif
+#if defined(__FreeBSD__)
 	dtfd = open("/dev/dtrace/dtrace", O_RDWR);
 	err = errno; /* save errno from opening dtfd */
-#if defined(__FreeBSD__)
 	/*
 	 * Automatically load the 'dtraceall' module if we couldn't open the
 	 * char device.

Reply via email to