[DTrace-devel] [PATCH 28/47] Make provider name handling in providers more consistent

Kris Van Hees kris.van.hees at oracle.com
Sun May 3 20:17:45 PDT 2020


Providers used a mix of string constants and provname to pass the
provider name in a function call or to name the dt_provimp_t.  Now
prvname (formerly provname) is used anywhere the provider name is
being used.

Other constant elements of probe descriptions (modname and funname for
the dtrace provider) are now also string constants assigned to
variables.

Since provider creation used an assignment within an if-statement and
all these statements were being changed to use prvname, this patch also
separates out the assignment to prv and the if-statement.

Orabug: 31220516
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_prov_dtrace.c  | 15 ++++++++++-----
 libdtrace/dt_prov_fbt.c     | 13 +++++++------
 libdtrace/dt_prov_sdt.c     | 11 ++++++-----
 libdtrace/dt_prov_syscall.c | 11 ++++++-----
 libdtrace/dt_provider.h     |  2 +-
 5 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/libdtrace/dt_prov_dtrace.c b/libdtrace/dt_prov_dtrace.c
index 9c2a076f..f17da3b6 100644
--- a/libdtrace/dt_prov_dtrace.c
+++ b/libdtrace/dt_prov_dtrace.c
@@ -14,6 +14,10 @@
 #include "dt_provider.h"
 #include "dt_probe.h"
 
+static const char		prvname[] = "dtrace";
+static const char		modname[] = "";
+static const char		funname[] = "";
+
 static const dtrace_pattr_t	pattr = {
 { DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
@@ -28,14 +32,15 @@ static int populate(dtrace_hdl_t *dtp)
 	int		n = 0;
 
 
-	if (!(prv = dt_provider_create(dtp, "dtrace", &dt_dtrace, &pattr)))
+	prv = dt_provider_create(dtp, prvname, &dt_dtrace, &pattr);
+	if (prv == NULL)
 		return 0;
 
-	if (dt_probe_insert(dtp, prv, "dtrace", "", "", "BEGIN"))
+	if (dt_probe_insert(dtp, prv, prvname, modname, funname, "BEGIN"))
 		n++;
-	if (dt_probe_insert(dtp, prv, "dtrace", "", "", "END"))
+	if (dt_probe_insert(dtp, prv, prvname, modname, funname, "END"))
 		n++;
-	if (dt_probe_insert(dtp, prv, "dtrace", "", "", "ERROR"))
+	if (dt_probe_insert(dtp, prv, prvname, modname, funname, "ERROR"))
 		n++;
 
 	return n;
@@ -201,7 +206,7 @@ static void trampoline(dt_pcb_t *pcb, int haspred)
 }
 
 dt_provimpl_t	dt_dtrace = {
-	.name		= "dtrace",
+	.name		= prvname,
 	.prog_type	= BPF_PROG_TYPE_KPROBE,
 	.populate	= &populate,
 	.trampoline	= &trampoline,
diff --git a/libdtrace/dt_prov_fbt.c b/libdtrace/dt_prov_fbt.c
index f63d4a79..f42219d7 100644
--- a/libdtrace/dt_prov_fbt.c
+++ b/libdtrace/dt_prov_fbt.c
@@ -37,7 +37,7 @@
 #include "dt_probe.h"
 #include "dt_pt_regs.h"
 
-static const char		provname[] = "fbt";
+static const char		prvname[] = "fbt";
 static const char		modname[] = "vmlinux";
 
 #define KPROBE_EVENTS		TRACEFS "kprobe_events"
@@ -68,7 +68,8 @@ static int populate(dtrace_hdl_t *dtp)
 	dtrace_syminfo_t	sip;
 	dtrace_probedesc_t	pd;
 
-	if (!(prv = dt_provider_create(dtp, "fbt", &dt_fbt, &pattr)))
+	prv = dt_provider_create(dtp, prvname, &dt_fbt, &pattr);
+	if (prv == NULL)
 		return 0;
 
 	f = fopen(PROBE_LIST, "r");
@@ -127,16 +128,16 @@ static int populate(dtrace_hdl_t *dtp)
 		 * duplicate probes for these.
 		 */
 		pd.id = DTRACE_IDNONE;
-		pd.prv = provname;
+		pd.prv = prvname;
 		pd.mod = mod;
 		pd.fun = buf;
 		pd.prb = "entry";
 		if (dt_probe_lookup(dtp, &pd) != NULL)
 			continue;
 
-		if (dt_probe_insert(dtp, prv, provname, mod, buf, "entry"))
+		if (dt_probe_insert(dtp, prv, prvname, mod, buf, "entry"))
 			n++;
-		if (dt_probe_insert(dtp, prv, provname, mod, buf, "return"))
+		if (dt_probe_insert(dtp, prv, prvname, mod, buf, "return"))
 			n++;
 	}
 
@@ -364,7 +365,7 @@ out:
 }
 
 dt_provimpl_t	dt_fbt = {
-	.name		= "fbt",
+	.name		= prvname,
 	.prog_type	= BPF_PROG_TYPE_KPROBE,
 	.populate	= &populate,
 	.trampoline	= &trampoline,
diff --git a/libdtrace/dt_prov_sdt.c b/libdtrace/dt_prov_sdt.c
index ad76d9f5..64edc839 100644
--- a/libdtrace/dt_prov_sdt.c
+++ b/libdtrace/dt_prov_sdt.c
@@ -31,7 +31,7 @@
 #include "dt_probe.h"
 #include "dt_pt_regs.h"
 
-static const char		provname[] = "sdt";
+static const char		prvname[] = "sdt";
 static const char		modname[] = "vmlinux";
 
 #define PROBE_LIST		TRACEFS "available_events"
@@ -236,7 +236,8 @@ static int populate(dtrace_hdl_t *dtp)
 	char		*p;
 	int		n = 0;
 
-	if (!(prv = dt_provider_create(dtp, "sdt", &dt_sdt, &pattr)))
+	prv = dt_provider_create(dtp, prvname, &dt_sdt, &pattr);
+	if (prv == NULL)
 		return 0;
 
 	f = fopen(PROBE_LIST, "r");
@@ -250,7 +251,7 @@ static int populate(dtrace_hdl_t *dtp)
 
 		p = strchr(buf, ':');
 		if (p == NULL) {
-			if (dt_probe_insert(dtp, prv, provname, modname, "",
+			if (dt_probe_insert(dtp, prv, prvname, modname, "",
 					    buf))
 				n++;
 		} else if (memcmp(buf, KPROBES, sizeof(KPROBES) - 1) == 0) {
@@ -260,7 +261,7 @@ static int populate(dtrace_hdl_t *dtp)
 		} else {
 			*p++ = '\0';
 
-			if (dt_probe_insert(dtp, prv, provname, buf, "", p))
+			if (dt_probe_insert(dtp, prv, prvname, buf, "", p))
 				n++;
 		}
 	}
@@ -422,7 +423,7 @@ static int probe_info(dtrace_hdl_t *dtp, const dt_probe_t *prp,
 }
 
 dt_provimpl_t	dt_sdt = {
-	.name		= "sdt",
+	.name		= prvname,
 	.prog_type	= BPF_PROG_TYPE_TRACEPOINT,
 	.populate	= &populate,
 	.trampoline	= &trampoline,
diff --git a/libdtrace/dt_prov_syscall.c b/libdtrace/dt_prov_syscall.c
index fd5730f3..9f3c75c9 100644
--- a/libdtrace/dt_prov_syscall.c
+++ b/libdtrace/dt_prov_syscall.c
@@ -35,7 +35,7 @@
 #include "dt_probe.h"
 #include "dt_pt_regs.h"
 
-static const char		provname[] = "syscall";
+static const char		prvname[] = "syscall";
 static const char		modname[] = "vmlinux";
 
 #define SYSCALLSFS		EVENTSFS "syscalls/"
@@ -75,7 +75,8 @@ static int populate(dtrace_hdl_t *dtp)
 	char		buf[256];
 	int		n = 0;
 
-	if (!(prv = dt_provider_create(dtp, "syscall", &dt_syscall, &pattr)))
+	prv = dt_provider_create(dtp, prvname, &dt_syscall, &pattr);
+	if (prv == NULL)
 		return 0;
 
 	f = fopen(PROBE_LIST, "r");
@@ -114,12 +115,12 @@ static int populate(dtrace_hdl_t *dtp)
 		 */
 		if (!memcmp(p, ENTRY_PREFIX, sizeof(ENTRY_PREFIX) - 1)) {
 			p += sizeof(ENTRY_PREFIX) - 1;
-			if (dt_probe_insert(dtp, prv, provname, modname, p,
+			if (dt_probe_insert(dtp, prv, prvname, modname, p,
 					    "entry"))
 				n++;
 		} else if (!memcmp(p, EXIT_PREFIX, sizeof(EXIT_PREFIX) - 1)) {
 			p += sizeof(EXIT_PREFIX) - 1;
-			if (dt_probe_insert(dtp, prv, provname, modname, p,
+			if (dt_probe_insert(dtp, prv, prvname, modname, p,
 					    "return"))
 				n++;
 		}
@@ -299,7 +300,7 @@ static int probe_info(dtrace_hdl_t *dtp, const dt_probe_t *prp,
 }
 
 dt_provimpl_t	dt_syscall = {
-	.name		= "syscall",
+	.name		= prvname,
 	.prog_type	= BPF_PROG_TYPE_TRACEPOINT,
 	.populate	= &populate,
 	.trampoline	= &trampoline,
diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index 165852cb..0e4368ab 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -46,7 +46,7 @@ typedef struct dt_argdesc {
 } dt_argdesc_t;
 
 typedef struct dt_provimpl {
-	char *name;				/* provider generic name */
+	const char *name;			/* provider generic name */
 	int prog_type;				/* BPF program type */
 	int (*populate)(dtrace_hdl_t *dtp);	/* register probes */
 	int (*probe_info)(dtrace_hdl_t *dtp,	/* get probe info */
-- 
2.26.0




More information about the DTrace-devel mailing list