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.