summaryrefslogtreecommitdiff
path: root/usr/src/cmd/devfsadm/dtrace_link.c
diff options
context:
space:
mode:
authordp <none@none>2005-12-19 16:36:49 -0800
committerdp <none@none>2005-12-19 16:36:49 -0800
commitfb405578b5e7360530e7eccd2c9d3d4df2858d07 (patch)
tree09be08ae9c67dcb89565f00e69820301b3535f21 /usr/src/cmd/devfsadm/dtrace_link.c
parenta74fca12a5f9c15bc00e60e74ef5fbfdb2c21336 (diff)
downloadillumos-joyent-fb405578b5e7360530e7eccd2c9d3d4df2858d07.tar.gz
6356708 libdtrace should interrogate providers, open devices via /dev.
Diffstat (limited to 'usr/src/cmd/devfsadm/dtrace_link.c')
-rw-r--r--usr/src/cmd/devfsadm/dtrace_link.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/usr/src/cmd/devfsadm/dtrace_link.c b/usr/src/cmd/devfsadm/dtrace_link.c
index 09b4bed536..5dcc2c8208 100644
--- a/usr/src/cmd/devfsadm/dtrace_link.c
+++ b/usr/src/cmd/devfsadm/dtrace_link.c
@@ -28,14 +28,27 @@
#include <devfsadm.h>
#include <strings.h>
+#include <stdio.h>
#include <sys/dtrace.h>
static int dtrace(di_minor_t minor, di_node_t node);
+static int dtrace_provider(di_minor_t minor, di_node_t node);
static devfsadm_create_t dtrace_create_cbt[] = {
{ "pseudo", "ddi_pseudo", "dtrace",
- TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace
- }
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace },
+ { "pseudo", "ddi_pseudo", "fasttrap",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
+ { "pseudo", "ddi_pseudo", "fbt",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
+ { "pseudo", "ddi_pseudo", "lockstat",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
+ { "pseudo", "ddi_pseudo", "profile",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
+ { "pseudo", "ddi_pseudo", "sdt",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
+ { "pseudo", "ddi_pseudo", "systrace",
+ TYPE_EXACT | DRV_EXACT, ILEVEL_0, dtrace_provider },
};
DEVFSADM_CREATE_INIT_V0(dtrace_create_cbt);
@@ -44,11 +57,22 @@ static int
dtrace(di_minor_t minor, di_node_t node)
{
char *mname = di_minor_name(minor);
+ char path[MAXPATHLEN];
- if (strcmp(DTRACEMNR_HELPER, mname) == 0) {
- (void) devfsadm_mklink("dtrace/" DTRACEMNR_HELPER,
- node, minor, 0);
- }
+ (void) snprintf(path, sizeof (path), "dtrace/%s", mname);
+ (void) devfsadm_mklink(path, node, minor, 0);
+
+ return (DEVFSADM_CONTINUE);
+}
+
+static int
+dtrace_provider(di_minor_t minor, di_node_t node)
+{
+ char *mname = di_minor_name(minor);
+ char path[MAXPATHLEN];
+
+ (void) snprintf(path, sizeof (path), "dtrace/provider/%s", mname);
+ (void) devfsadm_mklink(path, node, minor, 0);
return (DEVFSADM_CONTINUE);
}