[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