[DTrace-devel] [PATCH 1/5] Allow dtrace provider's uprobe_spec to use pid other than mine

eugene.loh at oracle.com eugene.loh at oracle.com
Tue Sep 5 04:11:38 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_prov_dtrace.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/libdtrace/dt_prov_dtrace.c b/libdtrace/dt_prov_dtrace.c
index 0c3bb135..a8ea66d6 100644
--- a/libdtrace/dt_prov_dtrace.c
+++ b/libdtrace/dt_prov_dtrace.c
@@ -167,7 +167,7 @@ static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)
 	return 0;
 }
 
-static char *uprobe_spec(const char *prb)
+static char *uprobe_spec(pid_t pid, const char *prb)
 {
 	struct ps_prochandle	*P;
 	int			perr = 0;
@@ -178,8 +178,8 @@ static char *uprobe_spec(const char *prb)
 	if (asprintf(&fun, "%s%s", prb, PROBE_FUNC_SUFFIX) < 0)
 		return NULL;
 
-	/* grab our process */
-	P = Pgrab(getpid(), 2, 0, NULL, &perr);
+	/* grab the process */
+	P = Pgrab(pid, 2, 0, NULL, &perr);
 	if (P == NULL) {
 		free(fun);
 		return NULL;
@@ -187,7 +187,7 @@ static char *uprobe_spec(const char *prb)
 
 	/* look up function and thus addr */
 	if (Pxlookup_by_name(P, -1, PR_OBJ_EVERY, fun, &sym, NULL) == 0)
-		spec = uprobe_spec_by_addr(getpid(), P, sym.st_value, NULL);
+		spec = uprobe_spec_by_addr(pid, P, sym.st_value, NULL);
 
 	free(fun);
 	Prelease(P, PS_RELEASE_NORMAL);
@@ -208,7 +208,7 @@ static int attach(dtrace_hdl_t *dtp, const dt_probe_t *prp, int bpf_fd)
 		int	fd, rc = -1;
 
 		/* get a uprobe specification for this probe */
-		spec = uprobe_spec(prp->desc->prb);
+		spec = uprobe_spec(getpid(), prp->desc->prb);
 		if (spec == NULL)
 			return -ENOENT;
 
-- 
2.18.4




More information about the DTrace-devel mailing list