[DTrace-devel] [PATCH] Fix %r0 register leak

Kris Van Hees kris.van.hees at oracle.com
Sat Dec 11 05:55:29 UTC 2021


The dt_cg_load_var() function was not properly freeing the %r0 register
for by-ref loads.  This caused a spill/fill pair to be generated for the
dt_cg_check_notnull() invocation.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_cg.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 46aaba65..296fcd42 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -2086,6 +2086,7 @@ dt_cg_load_var(dt_node_t *dst, dt_irlist_t *dlp, dt_regset_t *drp)
 
 		if (dst->dn_flags & DT_NF_REF) {
 			emit(dlp,  BPF_MOV_REG(dst->dn_reg, BPF_REG_0));
+			dt_regset_free(drp, BPF_REG_0);
 			dt_cg_check_notnull(dlp, drp, dst->dn_reg);
 		} else {
 			size_t	size = dt_node_type_size(dst);
-- 
2.34.1




More information about the DTrace-devel mailing list