+/*
+ * Represents single record in __DATA,__sdt section.
+ */
+typedef struct dtrace_sdt_def {
+ uintptr_t dsd_addr; /* probe site location */
+ const char *dsd_prov; /* provider's name */
+ const char *dsd_name; /* probe's name */
+} __attribute__((__packed__)) dtrace_sdt_def_t;
+
+/*
+ * Creates a copy of name and unescapes '-' characters.
+ */
+static char *
+sdt_strdup_name(const char *name)
+{
+ size_t len = strlen(name) + 1;
+ size_t i, j;
+ char *nname = kmem_alloc(len, KM_SLEEP);
+
+ for (i = 0, j = 0; name[j] != '\0'; i++) {
+ if (name[j] == '_' && name[j + 1] == '_') {
+ nname[i] = '-';
+ j += 2;
+ } else {
+ nname[i] = name[j++];
+ }
+ }
+
+ nname[i] = '\0';
+ return nname;
+}
+