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.