[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