[DTrace-devel] [PATCH] Avoid checkng for NULL pointers multiple times

Eugene Loh eugene.loh at oracle.com
Mon Dec 13 18:52:25 UTC 2021


s/checkng/checking/ in the subject line.

On 12/13/21 12:51 AM, Kris Van Hees via DTrace-devel wrote:
> The dt_cg_load_var() function was also creting two labels that were
> only actually used in one branch.  In addition, Eugene Loh pointed
> out that a MOV instruction could be saved as well.
s/creting/creating/

And perhaps "In addition" or else "as well" but maybe not both.
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> @@ -2569,8 +2566,14 @@ dt_cg_arithmetic_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
>   		dt_cg_ptrsize(dnp, dlp, drp, BPF_MUL, dnp->dn_left->dn_reg);
>   
>   	dt_cg_node(dnp->dn_right, dlp, drp);
> -	if (is_ptr_op && lp_is_ptr)
> -		dt_cg_ptrsize(dnp, dlp, drp, BPF_MUL, dnp->dn_right->dn_reg);
> +	if (is_ptr_op) {
> +		if (lp_is_ptr) {
> +			dt_cg_ptrsize(dnp, dlp, drp, BPF_MUL,
> +				      dnp->dn_right->dn_reg);
> +			dt_cg_check_notnull(dlp, drp, dnp->dn_left->dn_reg);
> +		} else
> +			dt_cg_check_notnull(dlp, drp, dnp->dn_right->dn_reg);
> +	}
>   
>   	if ((op == BPF_MOD || op == BPF_DIV) &&
>   	    (dnp->dn_flags & DT_NF_SIGNED)) {
# dtrace -n 'BEGIN { x = y = 0; trace(x+y); exit(0) }'
dtrace: description 'BEGIN ' matched 1 probe
dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): invalid 
address (0x0) in action #1

???

I think the problem is that we have is_ptr_op.  So we could have 
lp_is_ptr or rp_is_ptr but not both.  But we could have neither!

Maybe you need to turn the "else" into "else if (rp_is_ptr)"?



More information about the DTrace-devel mailing list