[DTrace-devel] [PATCH v2 2/3] Delay setting %r1 to reduce reg overwrite
Kris Van Hees
kvanhees at kvh-deb-bpf.us.oracle.com
Tue Jan 23 16:51:18 UTC 2024
On Sun, Jan 21, 2024 at 01:35:33AM -0500, eugene.loh at oracle.com wrote:
>
> Register management is currently a little risky. In this case,
> we set %r1 first even though theoretically that could overwrite
> some value. We might as well delay setting %r1 since its value
> depends on no other registers.
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_cg.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index ec963b43..dad5ab58 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -5249,7 +5249,6 @@ dt_cg_subr_arg_to_tstring(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
> if (dt_regset_xalloc_args(drp) == -1)
> longjmp(yypcb->pcb_jmpbuf, EDT_NOREG);
>
> - dt_cg_access_dctx(BPF_REG_1, dlp, drp, -1);
> emit(dlp, BPF_MOV_REG(BPF_REG_2, arg->dn_reg));
> dt_regset_free(drp, arg->dn_reg);
> if (dt_node_is_string(arg))
> @@ -5267,6 +5266,8 @@ dt_cg_subr_arg_to_tstring(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
> else if (isreg5 == DT_ISIMM)
> emit(dlp, BPF_MOV_IMM(BPF_REG_5, val5));
>
> + dt_cg_access_dctx(BPF_REG_1, dlp, drp, -1);
> +
> idp = dt_dlib_get_func(yypcb->pcb_hdl, fname);
> assert(idp != NULL);
> dt_regset_xalloc(drp, BPF_REG_0);
> --
> 2.18.4
>
>
More information about the DTrace-devel
mailing list