[DTrace-devel] [PATCH 4/9] Add kind and arg arguments to dt_aggid_rec_add()

eugene.loh at oracle.com eugene.loh at oracle.com
Thu Oct 5 21:14:02 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

To support non-void actions -- such as stack() and func() -- as
keys to aggregations, we will want to be able to specify kind and
arg values to dt_aggid_rec_add().

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c   |  4 +++-
 libdtrace/dt_impl.h |  3 ++-
 libdtrace/dt_map.c  | 16 ++++++++--------
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 7b0eb753..cef41e6a 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -7885,6 +7885,8 @@ dt_cg_agg(dt_pcb_t *pcb, dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 		for (knp = dnp->dn_aggtup; knp != NULL; knp = knp->dn_list) {
 			size_t	size;
 			int16_t	alignment;
+			dtrace_actkind_t kind = DTRACEACT_DIFEXPR;
+			uint64_t arg = 0;
 
 			if (dt_node_is_string(knp)) {
 				size = dtp->dt_options[DTRACEOPT_STRSIZE] + 1;
@@ -7897,7 +7899,7 @@ dt_cg_agg(dt_pcb_t *pcb, dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 				alignment = size;
 			}
 
-			dt_aggid_rec_add(dtp, aid->di_id, size, alignment);
+			dt_aggid_rec_add(dtp, aid->di_id, kind, size, alignment, arg);
 		}
 	}
 
diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
index 597081d1..447a19f0 100644
--- a/libdtrace/dt_impl.h
+++ b/libdtrace/dt_impl.h
@@ -839,7 +839,8 @@ extern uint32_t dt_rec_add(dtrace_hdl_t *, dt_cg_gap_f, dtrace_actkind_t,
 			   uint32_t, uint16_t, dt_pfargv_t *, uint64_t);
 extern int dt_aggid_add(dtrace_hdl_t *, const dt_ident_t *);
 extern int dt_aggid_rec_add(dtrace_hdl_t *dtp, dtrace_aggid_t aggid,
-			    uint32_t size, uint16_t alignment);
+			    dtrace_actkind_t kind, uint32_t size, uint16_t alignment,
+			    uint64_t arg);
 extern int dt_aggid_lookup(dtrace_hdl_t *, dtrace_aggid_t, dtrace_aggdesc_t **);
 extern void dt_aggid_destroy(dtrace_hdl_t *);
 
diff --git a/libdtrace/dt_map.c b/libdtrace/dt_map.c
index e0f6d1d8..91f22dc2 100644
--- a/libdtrace/dt_map.c
+++ b/libdtrace/dt_map.c
@@ -336,8 +336,8 @@ dt_aggid_add(dtrace_hdl_t *dtp, const dt_ident_t *aid)
 }
 
 int
-dt_aggid_rec_add(dtrace_hdl_t *dtp, dtrace_aggid_t aggid, uint32_t size,
-		 uint16_t alignment)
+dt_aggid_rec_add(dtrace_hdl_t *dtp, dtrace_aggid_t aggid, dtrace_actkind_t kind,
+		 uint32_t size, uint16_t alignment, uint64_t arg)
 {
 	dtrace_aggdesc_t	*agg;
 	dtrace_recdesc_t	*rec;
@@ -355,12 +355,12 @@ dt_aggid_rec_add(dtrace_hdl_t *dtp, dtrace_aggid_t aggid, uint32_t size,
 	rec = &agg->dtagd_krecs[agg->dtagd_keyidx++];
 	off = (agg->dtagd_ksize + (alignment - 1)) & ~(alignment - 1);
 
-        rec->dtrd_action = DTRACEACT_DIFEXPR;
-        rec->dtrd_size = size;
-        rec->dtrd_offset = off;
-        rec->dtrd_alignment = alignment;
-        rec->dtrd_format = NULL;
-        rec->dtrd_arg = 1;
+	rec->dtrd_action = kind;
+	rec->dtrd_size = size;
+	rec->dtrd_offset = off;
+	rec->dtrd_alignment = alignment;
+	rec->dtrd_format = NULL;
+	rec->dtrd_arg = arg;
 
 	agg->dtagd_ksize = off + size;
 
-- 
2.18.4




More information about the DTrace-devel mailing list