[DTrace-devel] [PATCH 13/19] Get rid of relocatable EPID, dt_nextepid, and dt_ddesc[]
Eugene Loh
eugene.loh at oracle.com
Tue Sep 3 17:49:24 UTC 2024
Patch withdrawn. It's been squashed into v2 03/19.
On 8/29/24 01:25, eugene.loh at oracle.com wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> We no longer have to assign an EPID value during relocation. So we
> no longer need dt_nextepid, dt_maxprobe, dt_ddesc[], dt_epid_add(),
> or dt_epid_destroy() or to track an EPID during linking.
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> ---
> libdtrace/dt_bpf.h | 47 +++++++++++++++++-----------------
> libdtrace/dt_cc.c | 20 +++++----------
> libdtrace/dt_dlibs.c | 1 -
> libdtrace/dt_impl.h | 5 ----
> libdtrace/dt_map.c | 61 --------------------------------------------
> libdtrace/dt_open.c | 3 ---
> 6 files changed, 29 insertions(+), 108 deletions(-)
>
> diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
> index 5b2df264..5981eb0e 100644
> --- a/libdtrace/dt_bpf.h
> +++ b/libdtrace/dt_bpf.h
> @@ -32,30 +32,29 @@ extern "C" {
> (dtp)->dt_bpffeatures |= (feat); \
> } while (0)
>
> -#define DT_CONST_EPID 1
> -#define DT_CONST_PRID 2
> -#define DT_CONST_CLID 3
> -#define DT_CONST_ARGC 4
> -#define DT_CONST_STBSZ 5
> -#define DT_CONST_STRSZ 6
> -#define DT_CONST_STKSIZ 7
> -#define DT_CONST_BOOTTM 8
> -#define DT_CONST_NSPEC 9
> -#define DT_CONST_NCPUS 10
> -#define DT_CONST_PC 11
> -#define DT_CONST_TUPSZ 12
> -#define DT_CONST_TASK_PID 13
> -#define DT_CONST_TASK_TGID 14
> -#define DT_CONST_TASK_REAL_PARENT 15
> -#define DT_CONST_TASK_COMM 16
> -#define DT_CONST_MUTEX_OWNER 17
> -#define DT_CONST_RWLOCK_CNTS 18
> -#define DT_CONST_DCTX_RODATA 19
> -#define DT_CONST_RODATA_OFF 20
> -#define DT_CONST_RODATA_SIZE 21
> -#define DT_CONST_ZERO_OFF 22
> -#define DT_CONST_STACK_OFF 23
> -#define DT_CONST_STACK_SKIP 24
> +#define DT_CONST_PRID 1
> +#define DT_CONST_CLID 2
> +#define DT_CONST_ARGC 3
> +#define DT_CONST_STBSZ 4
> +#define DT_CONST_STRSZ 5
> +#define DT_CONST_STKSIZ 6
> +#define DT_CONST_BOOTTM 7
> +#define DT_CONST_NSPEC 8
> +#define DT_CONST_NCPUS 9
> +#define DT_CONST_PC 10
> +#define DT_CONST_TUPSZ 11
> +#define DT_CONST_TASK_PID 12
> +#define DT_CONST_TASK_TGID 13
> +#define DT_CONST_TASK_REAL_PARENT 14
> +#define DT_CONST_TASK_COMM 15
> +#define DT_CONST_MUTEX_OWNER 16
> +#define DT_CONST_RWLOCK_CNTS 17
> +#define DT_CONST_DCTX_RODATA 18
> +#define DT_CONST_RODATA_OFF 19
> +#define DT_CONST_RODATA_SIZE 20
> +#define DT_CONST_ZERO_OFF 21
> +#define DT_CONST_STACK_OFF 22
> +#define DT_CONST_STACK_SKIP 23
>
> #define DT_BPF_LOG_SIZE_DEFAULT (UINT32_MAX >> 8)
> #define DT_BPF_LOG_SIZE_SMALL 4096
> diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
> index 2510db86..b801c87a 100644
> --- a/libdtrace/dt_cc.c
> +++ b/libdtrace/dt_cc.c
> @@ -949,7 +949,7 @@ static int get_boottime() {
> static int
> dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> dt_ident_t *idp, const dtrace_difo_t *sdp, uint_t *pcp,
> - uint_t *rcp, uint_t *vcp, dtrace_epid_t epid, uint_t clid)
> + uint_t *rcp, uint_t *vcp, uint_t clid)
> {
> uint_t pc = *pcp;
> uint_t rc = *rcp;
> @@ -1030,7 +1030,6 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> for (; len != 0; len--, rp++, nrp++) {
> const char *name = dt_difo_getstr(sdp, rp->dofr_name);
> dtrace_difo_t *rdp;
> - dtrace_epid_t nepid;
> int ipc;
>
> idp = dt_dlib_get_sym(dtp, name);
> @@ -1045,9 +1044,6 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> }
>
> switch (idp->di_id) {
> - case DT_CONST_EPID:
> - nrp->dofr_data = epid;
> - continue;
> case DT_CONST_PRID:
> nrp->dofr_data = prp->desc->id;
> continue;
> @@ -1212,13 +1208,10 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> rdp = dt_dlib_get_func_difo(dtp, idp);
> if (rdp == NULL)
> return -1;
> - if (rdp->dtdo_ddesc != NULL) {
> - nepid = dt_epid_add(dtp, rdp->dtdo_ddesc);
> - clid++;
> - } else
> - nepid = 0;
> + if (rdp->dtdo_ddesc != NULL)
> + clid++; /* FIXME: dump this? */
> ipc = dt_link_construct(dtp, prp, dp, idp, rdp, pcp,
> - rcp, vcp, nepid, clid);
> + rcp, vcp, clid);
> if (ipc == -1)
> return -1;
>
> @@ -1259,7 +1252,7 @@ dt_link_resolve(dtrace_hdl_t *dtp, dtrace_difo_t *dp)
> continue;
>
> /*
> - * We are only relocating constants (EPID and ARGC) and call
> + * We are only relocating constants and call
> * instructions to functions that have been linked in.
> */
> switch (idp->di_kind) {
> @@ -1332,8 +1325,7 @@ dt_link(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> */
> insc = relc = varc = 0;
>
> - rc = dt_link_construct(dtp, prp, fdp, idp, dp, &insc, &relc, &varc, 0,
> - 0);
> + rc = dt_link_construct(dtp, prp, fdp, idp, dp, &insc, &relc, &varc, 0);
> dt_dlib_reset(dtp, B_FALSE);
> if (rc == -1)
> goto fail;
> diff --git a/libdtrace/dt_dlibs.c b/libdtrace/dt_dlibs.c
> index 060cf28b..140ac9a6 100644
> --- a/libdtrace/dt_dlibs.c
> +++ b/libdtrace/dt_dlibs.c
> @@ -74,7 +74,6 @@ static const dt_ident_t dt_bpf_symbols[] = {
> DT_BPF_SYMBOL(tuples, DT_IDENT_PTR),
>
> /* BPF internal identifiers */
> - DT_BPF_SYMBOL_ID(EPID, DT_IDENT_SCALAR, DT_CONST_EPID),
> DT_BPF_SYMBOL_ID(PRID, DT_IDENT_SCALAR, DT_CONST_PRID),
> DT_BPF_SYMBOL_ID(CLID, DT_IDENT_SCALAR, DT_CONST_CLID),
> DT_BPF_SYMBOL_ID(ARGC, DT_IDENT_SCALAR, DT_CONST_ARGC),
> diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
> index 2378235c..3fa2b9d7 100644
> --- a/libdtrace/dt_impl.h
> +++ b/libdtrace/dt_impl.h
> @@ -343,9 +343,6 @@ struct dtrace_hdl {
> ctf_id_t dt_type_symaddr; /* cached CTF identifier for _symaddr type */
> ctf_id_t dt_type_usymaddr; /* cached CTF ident. for _usymaddr type */
> ctf_id_t dt_type_void; /* cached CTF identifier for void type */
> - dtrace_epid_t dt_nextepid; /* next enabled probe ID to assign */
> - size_t dt_maxprobe; /* max enabled probe ID */
> - dtrace_datadesc_t **dt_ddesc; /* probe data descriptions */
> size_t dt_maxagg; /* max aggregation ID */
> dtrace_aggdesc_t **dt_adesc; /* aggregation descriptions */
> struct dt_aggregate *dt_aggregate; /* aggregate */
> @@ -779,9 +776,7 @@ extern dtrace_datadesc_t *dt_datadesc_hold(dtrace_datadesc_t *ddp);
> extern void dt_datadesc_release(dtrace_hdl_t *, dtrace_datadesc_t *);
> extern dtrace_datadesc_t *dt_datadesc_create(dtrace_hdl_t *);
> extern int dt_datadesc_finalize(dtrace_hdl_t *, dtrace_datadesc_t *);
> -extern dtrace_epid_t dt_epid_add(dtrace_hdl_t *, dtrace_datadesc_t *);
> extern int dt_epid_lookup(dtrace_hdl_t *, dtrace_epid_t, dtrace_datadesc_t **);
> -extern void dt_epid_destroy(dtrace_hdl_t *);
> typedef void (*dt_cg_gap_f)(dt_pcb_t *, int);
> 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);
> diff --git a/libdtrace/dt_map.c b/libdtrace/dt_map.c
> index 9011da5d..26f101e4 100644
> --- a/libdtrace/dt_map.c
> +++ b/libdtrace/dt_map.c
> @@ -85,46 +85,6 @@ dt_datadesc_finalize(dtrace_hdl_t *dtp, dtrace_datadesc_t *ddp)
> return 0;
> }
>
> -/*
> - * Associate a probe data description and probe description with an enabled
> - * probe ID. This means that the given ID refers to the program matching the
> - * probe data description being attached to the probe that matches the probe
> - * description.
> - */
> -dtrace_epid_t
> -dt_epid_add(dtrace_hdl_t *dtp, dtrace_datadesc_t *ddp)
> -{
> - dtrace_id_t max = dtp->dt_maxprobe;
> - dtrace_epid_t epid;
> -
> - epid = dtp->dt_nextepid++;
> - if (epid >= max || dtp->dt_ddesc == NULL) {
> - dtrace_id_t nmax = max ? (max << 1) : 2;
> - dtrace_datadesc_t **nddesc;
> -
> - nddesc = dt_calloc(dtp, nmax, sizeof(void *));
> - if (nddesc == NULL)
> - return dt_set_errno(dtp, EDT_NOMEM);
> -
> - if (dtp->dt_ddesc != NULL) {
> - size_t osize = max * sizeof(void *);
> -
> - memcpy(nddesc, dtp->dt_ddesc, osize);
> - dt_free(dtp, dtp->dt_ddesc);
> - }
> -
> - dtp->dt_ddesc = nddesc;
> - dtp->dt_maxprobe = nmax;
> - }
> -
> - if (dtp->dt_ddesc[epid] != NULL)
> - return epid;
> -
> - dtp->dt_ddesc[epid] = dt_datadesc_hold(ddp);
> -
> - return epid;
> -}
> -
> int
> dt_epid_lookup(dtrace_hdl_t *dtp, dtrace_epid_t epid, dtrace_datadesc_t **ddp)
> {
> @@ -140,27 +100,6 @@ dt_epid_lookup(dtrace_hdl_t *dtp, dtrace_epid_t epid, dtrace_datadesc_t **ddp)
> return (*ddp == NULL) ? -1 : 0;
> }
>
> -void
> -dt_epid_destroy(dtrace_hdl_t *dtp)
> -{
> - size_t i;
> -
> - assert((dtp->dt_ddesc != NULL && dtp->dt_maxprobe > 0) ||
> - (dtp->dt_ddesc == NULL && dtp->dt_maxprobe == 0));
> -
> - for (i = 0; i < dtp->dt_maxprobe; i++) {
> - if (dtp->dt_ddesc[i] == NULL)
> - continue;
> -
> - dt_datadesc_release(dtp, dtp->dt_ddesc[i]);
> - }
> -
> - free(dtp->dt_ddesc);
> - dtp->dt_ddesc = NULL;
> - dtp->dt_nextepid = 0;
> - dtp->dt_maxprobe = 0;
> -}
> -
> uint32_t
> dt_rec_add(dtrace_hdl_t *dtp, dt_cg_gap_f gapf, dtrace_actkind_t kind,
> uint32_t size, uint16_t alignment, dt_pfargv_t *pfp, uint64_t arg)
> diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c
> index 8ae6cdfa..848141dd 100644
> --- a/libdtrace/dt_open.c
> +++ b/libdtrace/dt_open.c
> @@ -739,8 +739,6 @@ dt_vopen(int version, int flags, int *errp,
> dt_proc_hash_create(dtp);
> dt_proc_signal_init(dtp);
> dtp->dt_proc_fd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);
> - dtp->dt_nextepid = 1;
> - dtp->dt_maxprobe = 0;
> if (dt_aggregate_init(dtp) == -1)
> return set_open_errno(dtp, errp, dtrace_errno(dtp));
> dtp->dt_vmax = DT_VERS_LATEST;
> @@ -1303,7 +1301,6 @@ dtrace_close(dtrace_hdl_t *dtp)
> if (dtp->dt_poll_fd != -1)
> close(dtp->dt_poll_fd);
>
> - dt_epid_destroy(dtp);
> dt_aggid_destroy(dtp);
> dt_buffered_destroy(dtp);
> dt_aggregate_destroy(dtp);
More information about the DTrace-devel
mailing list