[DTrace-devel] [PATCH 2/2] Make stack trace use dctx->mem to store stack trace data
Eugene Loh
eugene.loh at oracle.com
Mon Aug 30 11:17:12 PDT 2021
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
(subject to any renaming like dctx->mem to dctx->scr that might
propagate from the preceding patch)
On 8/27/21 8:53 PM, Kris Van Hees wrote:
> The stack trace implementation was using an offset into the dctx->buf
> memory space to store the stack trace data. Now that we have a generic
> scratch memory area that can be referenced as dctx->mem, the stack
> trace implementation has been adjusted to make use of that.
>
> This patch also contains a tiny fix to the tst.stack_fbt.x script to
> use /bin/bash because it depends on bash specific features.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> bpf/get_bvar.c | 3 +--
> libdtrace/dt_bpf.h | 5 ++---
> libdtrace/dt_cc.c | 3 ---
> libdtrace/dt_dlibs.c | 1 -
> test/unittest/stack/tst.stack_fbt.x | 2 +-
> 5 files changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/bpf/get_bvar.c b/bpf/get_bvar.c
> index 26b8737e..ddada70e 100644
> --- a/bpf/get_bvar.c
> +++ b/bpf/get_bvar.c
> @@ -25,7 +25,6 @@ extern struct bpf_map_def probes;
> extern struct bpf_map_def state;
>
> extern uint64_t STBSZ;
> -extern uint64_t STKOFF;
> extern uint64_t STKSIZ;
> extern uint64_t BOOTTM;
>
> @@ -60,7 +59,7 @@ noinline uint64_t dt_get_bvar(dt_dctx_t *dctx, uint32_t id)
> case DIF_VAR_USTACKDEPTH: {
> uint32_t bufsiz = (uint32_t) (uint64_t) (&STKSIZ);
> uint64_t flags = 0 & BPF_F_SKIP_FIELD_MASK;
> - char *buf = ((char *) dctx->buf) + ((uint64_t) &STKOFF);
> + char *buf = dctx->mem;
> uint64_t stacksize;
>
> if (id == DIF_VAR_USTACKDEPTH)
> diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
> index 68e4aa07..2882520f 100644
> --- a/libdtrace/dt_bpf.h
> +++ b/libdtrace/dt_bpf.h
> @@ -24,9 +24,8 @@ extern "C" {
> #define DT_CONST_ARGC 4
> #define DT_CONST_STBSZ 5
> #define DT_CONST_STRSZ 6
> -#define DT_CONST_STKOFF 7
> -#define DT_CONST_STKSIZ 8
> -#define DT_CONST_BOOTTM 9
> +#define DT_CONST_STKSIZ 7
> +#define DT_CONST_BOOTTM 8
>
> extern int perf_event_open(struct perf_event_attr *attr, pid_t pid, int cpu,
> int group_fd, unsigned long flags);
> diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
> index f69c750d..97c7d5e2 100644
> --- a/libdtrace/dt_cc.c
> +++ b/libdtrace/dt_cc.c
> @@ -2352,9 +2352,6 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
> nrp->dofr_data =
> dtp->dt_options[DTRACEOPT_STRSIZE];
> continue;
> - case DT_CONST_STKOFF:
> - nrp->dofr_data = roundup(dtp->dt_maxreclen, 8);
> - continue;
> case DT_CONST_STKSIZ:
> nrp->dofr_data = sizeof(uint64_t)
> * dtp->dt_options[DTRACEOPT_MAXFRAMES];
> diff --git a/libdtrace/dt_dlibs.c b/libdtrace/dt_dlibs.c
> index 5980768b..04becfa6 100644
> --- a/libdtrace/dt_dlibs.c
> +++ b/libdtrace/dt_dlibs.c
> @@ -78,7 +78,6 @@ static const dt_ident_t dt_bpf_symbols[] = {
> DT_BPF_SYMBOL_ID(ARGC, DT_IDENT_SCALAR, DT_CONST_ARGC),
> DT_BPF_SYMBOL_ID(STBSZ, DT_IDENT_SCALAR, DT_CONST_STBSZ),
> DT_BPF_SYMBOL_ID(STRSZ, DT_IDENT_SCALAR, DT_CONST_STRSZ),
> - DT_BPF_SYMBOL_ID(STKOFF, DT_IDENT_SCALAR, DT_CONST_STKOFF),
> DT_BPF_SYMBOL_ID(STKSIZ, DT_IDENT_SCALAR, DT_CONST_STKSIZ),
> DT_BPF_SYMBOL_ID(BOOTTM, DT_IDENT_SCALAR, DT_CONST_BOOTTM),
> /* End-of-list marker */
> diff --git a/test/unittest/stack/tst.stack_fbt.x b/test/unittest/stack/tst.stack_fbt.x
> index e3c12e6a..0bbc4706 100755
> --- a/test/unittest/stack/tst.stack_fbt.x
> +++ b/test/unittest/stack/tst.stack_fbt.x
> @@ -1,4 +1,4 @@
> -#!/bin/sh
> +#!/bin/bash
>
> read MAJOR MINOR <<< `uname -r | awk -F. '{print $1, $2}'`
>
More information about the DTrace-devel
mailing list