[DTrace-devel] [PATCH 2/4] Report clause function name in disassembly listing if known
Eugene Loh
eugene.loh at oracle.com
Sun Jan 24 14:29:41 PST 2021
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
On 1/22/21 5:04 PM, Kris Van Hees wrote:
> 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 *);
More information about the DTrace-devel
mailing list