[DTrace-devel] [PATCH 2/4] Report clause function name in disassembly listing if known

Kris Van Hees kris.van.hees at oracle.com
Fri Jan 22 14:04:32 PST 2021


Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_cc.c   | 4 ++--
 libdtrace/dt_dis.c  | 8 ++++++--
 libdtrace/dt_impl.h | 3 ++-
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
index 691c31f2..0ee1c381 100644
--- a/libdtrace/dt_cc.c
+++ b/libdtrace/dt_cc.c
@@ -2620,7 +2620,7 @@ dt_program_construct(dtrace_hdl_t *dtp, dt_probe_t *prp, uint_t cflags)
 		return NULL;
 
 	if (cflags & DTRACE_C_DIFV && DT_DISASM(dtp, 2))
-		dt_dis_difo(dp, stderr);
+		dt_dis_difo(dp, stderr, NULL);
 
 	if (dt_link(dtp, prp, dp) != 0) {
 		dt_difo_free(dtp, dp);
@@ -2628,7 +2628,7 @@ dt_program_construct(dtrace_hdl_t *dtp, dt_probe_t *prp, uint_t cflags)
 	}
 
 	if (cflags & DTRACE_C_DIFV && DT_DISASM(dtp, 3))
-		dt_dis_difo(dp, stderr);
+		dt_dis_difo(dp, stderr, NULL);
 
 	return dp;
 }
diff --git a/libdtrace/dt_dis.c b/libdtrace/dt_dis.c
index 3db8acd5..9c7ef35e 100644
--- a/libdtrace/dt_dis.c
+++ b/libdtrace/dt_dis.c
@@ -469,7 +469,7 @@ dt_dis_rtab(const char *rtag, const dtrace_difo_t *dp, FILE *fp,
 }
 
 void
-dt_dis_difo(const dtrace_difo_t *dp, FILE *fp)
+dt_dis_difo(const dtrace_difo_t *dp, FILE *fp, const dt_ident_t *idp)
 {
 	static const struct opent {
 		const char *op_name;
@@ -618,6 +618,9 @@ dt_dis_difo(const dtrace_difo_t *dp, FILE *fp)
 	fprintf(fp, "%-3s %-5s %-20s    %s\n",
 	    "INS", "OFF", "OPCODE", "INSTRUCTION");
 
+	if (idp != NULL)
+		fprintf(fp, "<%s>:\n", idp->di_name);
+
 	for (i = 0; i < dp->dtdo_len; i++) {
 		const struct bpf_insn	*instr = &dp->dtdo_buf[i];
 		uint8_t			opcode = instr->code;
@@ -754,7 +757,8 @@ dt_dis_stmts(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, dtrace_stmtdesc_t *sdp,
 		d->last_ecb = sdp->dtsd_ecbdesc;
 	}
 
-	dt_dis_difo(dt_dlib_get_func_difo(dtp, sdp->dtsd_clause), d->fp);
+	dt_dis_difo(dt_dlib_get_func_difo(dtp, sdp->dtsd_clause), d->fp,
+		    sdp->dtsd_clause);
 
 	return 0;
 }
diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
index bc996929..e1aab88d 100644
--- a/libdtrace/dt_impl.h
+++ b/libdtrace/dt_impl.h
@@ -729,7 +729,8 @@ extern void dt_pragma(dt_node_t *);
 extern int dt_reduce(dtrace_hdl_t *, dt_version_t);
 extern dtrace_difo_t *dt_as(dt_pcb_t *);
 extern void dt_dis_program(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, FILE *fp);
-extern void dt_dis_difo(const dtrace_difo_t *dp, FILE *fp);
+extern void dt_dis_difo(const dtrace_difo_t *dp, FILE *fp,
+			const dt_ident_t *idp);
 
 extern int dt_aggregate_go(dtrace_hdl_t *);
 extern int dt_aggregate_init(dtrace_hdl_t *);
-- 
2.28.0




More information about the DTrace-devel mailing list