[DTrace-devel] [PATCH v2 32/38] Widen the EPID to include the PRID
Kris Van Hees
kris.van.hees at oracle.com
Mon Jul 22 21:09:37 UTC 2024
On Sat, Jul 20, 2024 at 07:26:44PM -0400, Eugene Loh wrote:
> On 7/19/24 23:58, Kris Van Hees wrote:
>
> > On Thu, Jun 27, 2024 at 10:03:13PM -0400, eugene.loh--- via DTrace-devel wrote:
> > > From: Eugene Loh <eugene.loh at oracle.com>
> > >
> > > Each output record has a EPID associated with it, allowing the consumer
> > > to get both a data description and a PRID (so it can report PRID and
> > > probe function and name). We want to support uprobes that trigger for
> > > multiple PRIDs, however, basically breaking this scheme.
> > So, the EPID is (before this patch) an index into a list of ddescs and pdescs,
> > effectively associating an id (EPID) with a { ddesc, pdesc } pair. It is also
> > a unique id for a clause as it is used for a particular pdesc. When you have
> > multiple probes that match a given pdesc for a given clause, the EPID still
> > identifies the correct ddesc, but obviously the pdesc data won't be quite what
> > you expect since that is PRID dependent.
> >
> > Which is indeed why we need extra information, as you outline below...
> > > So, expand the EPID to 64 bits, half for the old-style EPID (based on
> > > static information about the D programs) and half for the PRID (discovered
> > > at run time).
> > Of course, this is only really needed for select providers (e.g. USDT) whereas
> > for all other cases, the single EPID suffices on its own. Therefore, I would
> > expect that we do not place the PRID in the upper 32 buts of the EPID *unless*
> > it is needed to override the "template" PRID that is associated with the basic
> > EPID (lower 32 bits). Doing things that way things will look more familiar
> > anyway for users who expect to typically see EPIDs in low values, and it also
> > keeps the code design where (in general) the EPID identifies the ddesc and the
> > pdesc.
> >
> > It means we have some code that needs to deal with the exception case, but I
> > don't see that as a problem becacuse most of the time it won't be used.
> >
> > In that sense, we could look at the USDT-type case as an exceptional case. So,
> > it would need special code in dt_get_bvar() to put the PRID in the top 32 bits
> > of the EPID when it needs to return the value for epid. Which means it needs
> > to know when to do so. That could perhaps be done using some flag in the
> > mstate or something. Similarly, the prologue of the clause could put the PRID
> > in those top 32 bits when the clause is called for a case that needs it (which
> > perhaps again could be indicated in the mstate)?
> >
> > In fact, if that works, then such a flag in the mstate can also be used to
> > dynamically generate the provider name (probeprov bvar) rather than needing to
> > add it to the strtab as a string. That might solve some additional issues or
> > complexities that are seen in other patches where the strtab is getting updated
> > at runtime to add more strings.
> >
> > Why would a scheme like this not work? I.e. why do we need to add the PRID in
> > the top 32 bits of a 64-bit EPID for *all* cases when only USDT needs it?
>
> I don't think we're forced into the choice presented by this patch. Other
> solutions are possible. I just don't see the value is having two solutions,
> one for non-USDT/non-pid and one for USDT/pid. (You say something will be
> more familiar to users, but... what exactly is more familiar? Users know
> what EPID 23 is?) (You talk about dynamically generating the provname
> bvar. That's a cool/interesting idea, but it seems to me to be independent
> of what we're talking about here.) Some things can be streamlined if we
> just settle on one way of capturing epid->prid info for the consumer.
> Instead of two solutions -- both "prid in high epid bits" as well as
> "pdesc[epid]" mapping -- we can throw the pdesc away.
>
> tl/dr. We could maintain two mechanisms for doing this stuff. I just don't
> see what the value is in maintaining two mechanisms for solving one problem.
When I originally suggested widening the EPID, I envisioned only doing it for
the cases thata need it, i.e. keep the EPID and its semantics the same for all
probes, but adding in an 'override' PRID that represents that the 'native' EPID
is being used for a probe that is created based on the probe that the 'native'
EPID refers to. So, such USDT probes would be an exception.
I understand you prefer to make the widened EPID generic and make it apply to
all cases. While that goes against the original design, I can see how we can
redesign things to use such a mechanism, but then we essentially do away with
what an EPID actually is. That is OK. But that implies greater changes are
needed to make this approach a clean design. I.e. we no longer have an EPID
that refers to a ( pdesc, ddesc ) pair.
In your current implementation you replace the EPID -> pdesc association with
a direct use of the PRID that uniquely identifies the probe (which is in all
technicality different from referring to a pdesc but in practice it is the
same thing here because the pdesc that used to get associated with the EPID
was for a single particular probe). But you keep the EPID as an index into
the dt_ddescs. That is unnecessary and without the direct reference of the
EPID to the pdesc, the entire meaning of the EPID (Enabled Probe ID) becomes
meaningless as far as the internal implementation of DTrace is concerned.
With the approach you took, we really do not need EPIDs anymore and they should
become an artifact of the consumer (mostly for backwards compatibility) and for
that they can be assembled when needed (epid bvar and as a value passed to the
consumer in dtrace_probedata_t).
Instead, we care about the PRID that uniquely identifies the probe we are
storing data for, and the ddesc that is associated with the clause that is
generating the data. That ddesc is uniquely associated with the clause that it
gets constructed for, so if all clauses have a unique id, then that is quite
sufficient to also determine the ddesc for that clause. And incidentally, we
have such an id already because we generate one when we generate the identifier
name for the clause (essentially a function name).
Therefore, it seems to me that a cleaner design would be to keep an array of
clauses (or perhaps statements, so that it can be used as retained statements
for wildcard matching on pdesc), indexed by clause id, and to store that clause
id in the output buffer.
So, instead of storing EPID (even a widened EPID), we would store two values:
PRID and a clause ID (unique across the dtrace session - not to be confused by
the clause id that we use in error probe arguments - that is a clause counter
*within* a particular program). The PRID identifies the probe and the clause
ID identifies the ddesc.
And for the two cases where an epid value is needed, it can be constructed as
(PRID << 32) | clause-id.
By the way, the clause id within a program that we currently use will probably
need to be replaced with more useful error location data like filename and
line number. But in the meantime we might as well use the global clause id
instead, because the in-program clause id was never really useful anyway. But
using the actual clause id can be useful because it can be related to the
clause identifier as reported in disassembler output.
implementing because using the clause number
> > > The EPID seen by compile-time files like dt_cc.c or dt_map.c are still
> > > the old-style EPIDs (even if now 64-bit) since they have no knowledge
> > > of the run-time PRIDs.
> > >
> > > Further, we do not need to expand:
> > > - the mstate (since it already had the PRID anyhow)
> > > - the output buffer (since it already had an unused 4-byte pad)
> > >
> > > The combination of EPID and PRID is for the built-in variable epid as
> > > well as what the consumer reads.
> > >
> > > Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> > > ---
> > > bpf/get_bvar.c | 6 ++-
> > > bpf/probe_error.c | 2 +-
> > > include/dtrace/universal.h | 2 +-
> > > libdtrace/dt_bpf.c | 2 -
> > > libdtrace/dt_cg.c | 43 +++++++++++--------
> > > libdtrace/dt_consume.c | 28 ++++++++----
> > > libdtrace/dt_dctx.h | 12 ++++--
> > > libdtrace/dt_handle.c | 9 ++--
> > > libdtrace/dt_map.c | 3 ++
> > > libdtrace/dt_open.c | 2 +-
> > > test/demo/dtrace/error.r | 2 +-
> > > test/stress/buffering/tst.resize3-manual.r | 2 +-
> > > test/stress/buffering/tst.resize3.r | 2 +-
> > > test/unittest/actions/setopt/tst.badopt.r | 14 +++---
> > > .../arrays/tst.declared-bounds.runtime_out.r | 2 +-
> > > test/unittest/codegen/err.deref_0.r | 2 +-
> > > test/unittest/codegen/err.deref_1.r | 2 +-
> > > test/unittest/codegen/err.deref_i0.r | 2 +-
> > > test/unittest/codegen/err.deref_i1.r | 2 +-
> > > .../unittest/codegen/err.deref_string-assoc.r | 2 +-
> > > test/unittest/codegen/err.deref_string-gvar.r | 2 +-
> > > test/unittest/codegen/err.deref_string-lvar.r | 2 +-
> > > test/unittest/codegen/err.deref_string-tvar.r | 2 +-
> > > .../codegen/err.str_NULL_plus_offset-assoc.r | 2 +-
> > > .../codegen/err.str_NULL_plus_offset-lvar.r | 2 +-
> > > .../codegen/err.str_NULL_plus_offset-tvar.r | 2 +-
> > > .../codegen/err.str_NULL_plus_offset.r | 2 +-
> > > test/unittest/disasm/tst.vartab-bvar.r | 2 +-
> > > .../tst.DTRACEFLT_BADADDR.null_ptr_field.r | 2 +-
> > > test/unittest/error/tst.DTRACEFLT_BADADDR.r | 4 +-
> > > .../error/tst.DTRACEFLT_DIVZERO.div.r | 2 +-
> > > .../error/tst.DTRACEFLT_DIVZERO.mod.r | 2 +-
> > > test/unittest/error/tst.DTRACEFLT_UNKNOWN.r | 4 +-
> > > .../error/tst.clause_scope-begin-ended.r | 2 +-
> > > test/unittest/error/tst.clause_scope-begin.r | 2 +-
> > > .../error/tst.clause_scope-regular.r.p | 12 +++++-
> > > test/unittest/error/tst.error.r | 2 +-
> > > test/unittest/error/tst.errorend.r | 2 +-
> > > .../alloca/err.alloca-bcopy-before-beyond.r | 2 +-
> > > .../alloca/err.alloca-bcopy-before-bottom.r | 2 +-
> > > .../alloca/err.alloca-bcopy-beyond-top.r | 2 +-
> > > .../alloca/err.alloca-bcopy-crossing-bottom.r | 2 +-
> > > .../alloca/err.alloca-bcopy-crossing-top.r | 2 +-
> > > .../alloca/err.alloca-crossing-clauses.r | 2 +-
> > > .../alloca/err.alloca-load-before-bottom.r | 2 +-
> > > .../funcs/alloca/err.alloca-load-beyond-top.r | 2 +-
> > > .../alloca/err.alloca-load-crossing-bottom.r | 2 +-
> > > .../alloca/err.alloca-null-deref-lvalue.r | 2 +-
> > > .../funcs/alloca/err.alloca-null-deref.r | 2 +-
> > > .../err.alloca-scratch-exceeding-bcopy.r | 2 +-
> > > .../alloca/err.alloca-store-before-bottom.r | 2 +-
> > > .../alloca/err.alloca-store-beyond-top.r | 2 +-
> > > .../alloca/err.alloca-store-crossing-bottom.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy1.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy4.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy5.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy6.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy7.r | 2 +-
> > > test/unittest/funcs/bcopy/err.badbcopy8.r | 2 +-
> > > test/unittest/funcs/copyin/err.badaddr.r | 2 +-
> > > test/unittest/funcs/copyin/err.null_arg1.r | 2 +-
> > > test/unittest/funcs/copyinstr/err.badaddr.r | 2 +-
> > > test/unittest/funcs/copyinstr/err.null_arg1.r | 2 +-
> > > test/unittest/funcs/copyinto/err.badaddr.r | 2 +-
> > > test/unittest/funcs/copyinto/err.badsize.r | 2 +-
> > > test/unittest/funcs/copyinto/err.null_arg1.r | 2 +-
> > > test/unittest/funcs/err.badalloca.r.p | 12 +++++-
> > > test/unittest/funcs/err.link_ntopbadaddr.r | 2 +-
> > > test/unittest/funcs/err.link_ntopbadarg.r | 2 +-
> > > .../inet_ntoa6/err.inet_ntoa6.arg1_null.r | 2 +-
> > > .../err.inet_ntoa6.arg1_null_const.r | 2 +-
> > > test/unittest/funcs/strlen/tst.null.r | 2 +-
> > > test/unittest/funcs/strtok/tst.strtok_null.r | 2 +-
> > > .../funcs/strtok/tst.strtok_nulldel.r | 2 +-
> > > .../funcs/strtok/tst.strtok_nullstr.r | 2 +-
> > > .../funcs/strtok/tst.strtok_nullstr2.r | 2 +-
> > > .../funcs/substr/err.substr_null_arg1.r | 2 +-
> > > test/unittest/pointers/err.AllocaOverrun.r | 2 +-
> > > test/unittest/pointers/err.BadAlign.r | 2 +-
> > > test/unittest/pointers/err.InvalidAddress2.r | 2 +-
> > > test/unittest/pointers/err.InvalidAddress4.r | 2 +-
> > > .../speculation/err.CommitWithInvalid.r | 2 +-
> > > .../speculation/err.DiscardWithInvalid.r | 2 +-
> > > .../speculation/tst.SpecSizeVariations.r | 22 ----------
> > > .../speculation/tst.SpecSizeVariations.sh | 2 +-
> > > test/unittest/speculation/tst.negcommit.r | 2 +-
> > > 86 files changed, 169 insertions(+), 148 deletions(-)
> > >
> > > diff --git a/bpf/get_bvar.c b/bpf/get_bvar.c
> > > index a0c04f3a..5673c94b 100644
> > > --- a/bpf/get_bvar.c
> > > +++ b/bpf/get_bvar.c
> > > @@ -48,8 +48,10 @@ noinline uint64_t dt_get_bvar(const dt_dctx_t *dctx, uint32_t id, uint32_t idx)
> > > mst->tstamp = bpf_ktime_get_ns();
> > > return mst->tstamp;
> > > - case DIF_VAR_EPID:
> > > - return mst->epid;
> > > + case DIF_VAR_EPID: {
> > > + uint64_t val = mst->prid;
> > > + return (val << 32) | mst->epid;
> > > + }
> > > case DIF_VAR_ID:
> > > return mst->prid;
> > > case DIF_VAR_ARG0: case DIF_VAR_ARG1: case DIF_VAR_ARG2:
> > > diff --git a/bpf/probe_error.c b/bpf/probe_error.c
> > > index a6616c2f..c8b21d7c 100644
> > > --- a/bpf/probe_error.c
> > > +++ b/bpf/probe_error.c
> > > @@ -31,7 +31,7 @@ noinline void dt_probe_error(const dt_dctx_t *dctx, uint64_t pc, uint64_t fault,
> > > int oldprid = mst->prid;
> > > mst->argv[0] = 0;
> > > - mst->argv[1] = mst->epid;
> > > + mst->argv[1] = (((uint64_t)mst->prid) << 32) | mst->epid;
> > > mst->argv[2] = mst->clid;
> > > mst->argv[3] = pc;
> > > mst->argv[4] = fault;
> > > diff --git a/include/dtrace/universal.h b/include/dtrace/universal.h
> > > index d6562489..655ea772 100644
> > > --- a/include/dtrace/universal.h
> > > +++ b/include/dtrace/universal.h
> > > @@ -37,7 +37,7 @@ typedef uint16_t dtrace_actkind_t; /* action kind */
> > > typedef uint32_t dtrace_aggid_t; /* aggregation identifier */
> > > typedef uint32_t dtrace_cacheid_t; /* predicate cache identifier */
> > > -typedef uint32_t dtrace_epid_t; /* enabled probe identifier */
> > > +typedef uint64_t dtrace_epid_t; /* enabled probe identifier */
> > > typedef uint32_t dtrace_optid_t; /* option identifier */
> > > typedef uint32_t dtrace_specid_t; /* speculation identifier */
> > > diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> > > index 71c6a446..428cb407 100644
> > > --- a/libdtrace/dt_bpf.c
> > > +++ b/libdtrace/dt_bpf.c
> > > @@ -778,7 +778,6 @@ gmap_create_cpuinfo(dtrace_hdl_t *dtp)
> > > * The size of the memory region is the sum of:
> > > * - size of the DTrace machine state, rounded up to the nearest
> > > * multiple of 8
> > > - * - 8 bytes padding for trace buffer alignment purposes
> > > * - maximum trace buffer record size, rounded up to the nearest
> > > * multiple of 8
> > > * - size of dctx->mem (see dt_dctx.h)
> > > @@ -787,7 +786,6 @@ static int
> > > gmap_create_mem(dtrace_hdl_t *dtp)
> > > {
> > > size_t sz = roundup(sizeof(dt_mstate_t), 8) +
> > > - 8 +
> > > roundup(dtp->dt_maxreclen, 8) +
> > > DMEM_SIZE(dtp);
> > > diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> > > index 2fb2d0d8..d27a8cb2 100644
> > > --- a/libdtrace/dt_cg.c
> > > +++ b/libdtrace/dt_cg.c
> > > @@ -275,15 +275,9 @@ dt_cg_tramp_prologue_act(dt_pcb_t *pcb, dt_activity_t act)
> > > * buf = rc + roundup(sizeof(dt_mstate_t), 8);
> > > * // add %r0, roundup(
> > > * sizeof(dt_mstate_t), 8)
> > > - * *((uint64_t *)&buf[0]) = 0;
> > > - * // stdw [%r0 + 0], 0
> > > - * buf += 8; // add %r0, 8
> > > - * // (%r0 = pointer to buffer space)
> > > * dctx.buf = buf; // stdw [%r9 + DCTX_BUF], %r0
> > > */
> > > emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, roundup(sizeof(dt_mstate_t), 8)));
> > > - emit(dlp, BPF_STORE_IMM(BPF_DW, BPF_REG_0, 0, 0));
> > > - emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8));
> > > emit(dlp, BPF_STORE(BPF_DW, BPF_REG_9, DCTX_BUF, BPF_REG_0));
> > > /*
> > > @@ -1094,8 +1088,6 @@ dt_cg_prologue(dt_pcb_t *pcb, dt_node_t *pred)
> > > * dctx->mst->specsize = 0;// stdw [%r0 + DMST_SPECSIZE], 0
> > > * dctx->mst->epid = EPID; // stw [%r0 + DMST_EPID], EPID
> > > * dctx->mst->clid = CLID; // stw [%r0 + DMST_CLID], CLID
> > > - * *((uint32_t *)&buf[DBUF_EPID]) = EPID;
> > > - * // stw [%r9 + DBUF_EPID], EPID
> > > */
> > > emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_0, BPF_REG_0, DCTX_MST));
> > > emit(dlp, BPF_STORE_IMM(BPF_DW, BPF_REG_0, DMST_FAULT, 0));
> > > @@ -1103,7 +1095,13 @@ dt_cg_prologue(dt_pcb_t *pcb, dt_node_t *pred)
> > > emit(dlp, BPF_STORE_IMM(BPF_DW, BPF_REG_0, DMST_SPECSIZE, 0));
> > > emite(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_0, DMST_EPID, -1), epid);
> > > emite(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_0, DMST_CLID, -1), clid);
> > > - emite(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_9, DBUF_EPID, -1), epid);
> > > +
> > > + /*
> > > + * Zero out the leading 4 bytes of the buffer.
> > > + * *((uint32_t *)&buf[DBUF_PAD]) = 0;
> > > + * // stw [%r9 + DBUF_PAD], 0
> > > + */
> > > + emit(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_9, DBUF_PAD, 0));
> > > /*
> > > * Set the speculation ID field to zero to indicate no active
> > > @@ -1113,6 +1111,18 @@ dt_cg_prologue(dt_pcb_t *pcb, dt_node_t *pred)
> > > */
> > > emit(dlp, BPF_STORE_IMM(BPF_W, BPF_REG_9, DBUF_SPECID, 0));
> > > + /*
> > > + * *((uint64_t *)&buf[DBUF_EPID]) = (dctx->mst->prid << 32) | EPID;
> > > + * // ld %r1, [%r0 + DMST_PRID]
> > > + * // lsh %r1, 32
> > > + * // or %r1, epid
> > > + * // stdw [%r9 + DBUF_EPID], %r1
> > > + */
> > > + emit (dlp, BPF_LOAD(BPF_W, BPF_REG_1, BPF_REG_0, DMST_PRID));
> > > + emit (dlp, BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 32));
> > > + emite(dlp, BPF_ALU64_IMM(BPF_OR, BPF_REG_1, -1), epid);
> > > + emit (dlp, BPF_STORE(BPF_DW, BPF_REG_9, DBUF_EPID, BPF_REG_1));
> > > +
> > > /*
> > > * If there is a predicate:
> > > *
> > > @@ -1131,10 +1141,9 @@ dt_cg_prologue(dt_pcb_t *pcb, dt_node_t *pred)
> > > TRACE_REGSET("Prologue: End ");
> > > /*
> > > - * Account for 32-bit EPID (at offset 0) and 32-bit speculation ID (at
> > > - * offset 4).
> > > + * Set the offset for the beginning of trace data.
> > > */
> > > - pcb->pcb_bufoff += 2 * sizeof(uint32_t);
> > > + pcb->pcb_bufoff = DBUF_DATA;
> > > }
> > > /*
> > > @@ -1169,15 +1178,15 @@ dt_cg_epilogue(dt_pcb_t *pcb)
> > > /*
> > > * rc = bpf_perf_event_output(dctx->ctx, &buffers,
> > > * BPF_F_CURRENT_CPU,
> > > - * buf - 4, bufoff + 4);
> > > + * buf + 4, bufoff - 4);
> > > * // lddw %r1, [%fp + DT_STK_DCTX]
> > > * // lddw %r1, [%r1 + DCTX_CTX]
> > > * // lddw %r2, &buffers
> > > * // lddw %r3, BPF_F_CURRENT_CPU
> > > * // mov %r4, %r9
> > > - * // add %r4, -4
> > > + * // add %r4, 4
> > > * // mov %r5, pcb->pcb_bufoff
> > > - * // add %r5, 4
> > > + * // add %r5, -4
> > > * // call bpf_perf_event_output
> > > */
> > > emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_1, BPF_REG_FP, DT_STK_DCTX));
> > > @@ -1185,9 +1194,9 @@ dt_cg_epilogue(dt_pcb_t *pcb)
> > > dt_cg_xsetx(dlp, buffers, DT_LBL_NONE, BPF_REG_2, buffers->di_id);
> > > dt_cg_xsetx(dlp, NULL, DT_LBL_NONE, BPF_REG_3, BPF_F_CURRENT_CPU);
> > > emit(dlp, BPF_MOV_REG(BPF_REG_4, BPF_REG_9));
> > > - emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, -4));
> > > + emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4));
> > > emit(dlp, BPF_MOV_IMM(BPF_REG_5, pcb->pcb_bufoff));
> > > - emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 4));
> > > + emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, -4));
> > > emit(dlp, BPF_CALL_HELPER(BPF_FUNC_perf_event_output));
> > > /*
> > > diff --git a/libdtrace/dt_consume.c b/libdtrace/dt_consume.c
> > > index 7dfec72f..adbd2c7f 100644
> > > --- a/libdtrace/dt_consume.c
> > > +++ b/libdtrace/dt_consume.c
> > > @@ -14,9 +14,11 @@
> > > #include <ctype.h>
> > > #include <alloca.h>
> > > #include <dt_impl.h>
> > > +#include <dt_dctx.h>
> > > #include <dt_module.h>
> > > #include <dt_pcap.h>
> > > #include <dt_peb.h>
> > > +#include <dt_probe.h>
> > > #include <dt_state.h>
> > > #include <dt_string.h>
> > > #include <libproc.h>
> > > @@ -478,7 +480,7 @@ dt_flowindent(dtrace_hdl_t *dtp, dtrace_probedata_t *data, dtrace_epid_t last)
> > > */
> > > if (flow == DTRACEFLOW_ENTRY) {
> > > if (last != DTRACE_EPIDNONE && id != last &&
> > > - pd->id == dtp->dt_pdesc[last]->id)
> > > + pd->id == dtp->dt_probes[last >> 32]->desc->id)
> > > flow = DTRACEFLOW_NONE;
> > > }
> > > @@ -2202,19 +2204,23 @@ dt_consume_one_probe(dtrace_hdl_t *dtp, FILE *fp, char *data, uint32_t size,
> > > int peekflags, dtrace_epid_t *last, int committing,
> > > void *arg)
> > > {
> > > + int specid;
> > > dtrace_epid_t epid;
> > > + uint32_t prid;
> > > dtrace_datadesc_t *epd;
> > > dt_spec_buf_t tmpl;
> > > dt_spec_buf_t *dtsb;
> > > - int specid;
> > > int i;
> > > int rval;
> > > dtrace_workstatus_t ret;
> > > int commit_discard_seen, only_commit_discards;
> > > int data_recording = 1;
> > > - epid = ((uint32_t *)data)[0];
> > > - specid = ((uint32_t *)data)[1];
> > > + specid = *((uint32_t *)(data + DBUF_SPECID));
> > > + epid = *((uint64_t *)(data + DBUF_EPID));
> > > + prid = epid >> 32;
> > > + if (prid > dtp->dt_probe_id)
> > > + return dt_set_errno(dtp, EDT_BADEPID);
> > > /*
> > > * Fill in the epid and address of the epid in the buffer. We need to
> > > @@ -2227,6 +2233,7 @@ dt_consume_one_probe(dtrace_hdl_t *dtp, FILE *fp, char *data, uint32_t size,
> > > &pdat->dtpda_pdesc);
> > > if (rval != 0)
> > > return dt_set_errno(dtp, EDT_BADEPID);
> > > + pdat->dtpda_pdesc = (dtrace_probedesc_t *)dtp->dt_probes[prid]->desc;
> > > epd = pdat->dtpda_ddesc;
> > > if (epd->dtdd_uarg != DT_ECB_DEFAULT) {
> > > @@ -2661,9 +2668,8 @@ dt_consume_one(dtrace_hdl_t *dtp, FILE *fp, char *buf,
> > > * struct {
> > > * struct perf_event_header header;
> > > * uint32_t size;
> > > - * uint32_t pad;
> > > - * uint32_t epid;
> > > * uint32_t specid;
> > > + * dtrace_epid_t epid;
> > > * uint64_t data[n];
> > > * }
> > > * and 'data' points to the 'size' member at this point.
> > > @@ -2673,13 +2679,17 @@ dt_consume_one(dtrace_hdl_t *dtp, FILE *fp, char *buf,
> > > return dt_set_errno(dtp, EDT_DSIZE);
> > > size = *(uint32_t *)data;
> > > - data += sizeof(size);
> > > ptr += sizeof(size) + size;
> > > if (ptr != buf + hdr->size)
> > > return dt_set_errno(dtp, EDT_DSIZE);
> > > - data += sizeof(uint32_t); /* skip padding */
> > > - size -= sizeof(uint32_t);
> > > + /*
> > > + * The "size" measures from specid to the end. But our buffer
> > > + * offsets are relative to &size itself, to preserve 8-byte
> > > + * alignment. So, we leave data pointing at size, and we increase
> > > + * size by 4 bytes.
> > > + */
> > > + size += 4;
> > > return dt_consume_one_probe(dtp, fp, data, size, pdat, efunc,
> > > rfunc, flow, quiet, peekflags,
> > > diff --git a/libdtrace/dt_dctx.h b/libdtrace/dt_dctx.h
> > > index 1422ad24..6d38b0c2 100644
> > > --- a/libdtrace/dt_dctx.h
> > > +++ b/libdtrace/dt_dctx.h
> > > @@ -82,16 +82,20 @@ typedef struct dt_dctx {
> > > * The dctx->buf pointer references a block of memory that contains:
> > > *
> > > * +----------------+
> > > - * 0 -> | EPID |
> > > + * 0 -> | pad |
> > > * +----------------+
> > > - * 4 -> | Speculation ID |
> > > + * 4 -> | Speculation ID |
> > > * +----------------+
> > > - * | Trace Data |
> > > + * 8 -> | EPID |
> > > + * +----------------+
> > > + * 16 -> | Trace Data |
> > > * | ... |
> > > * +----------------+
> > > */
> > > -#define DBUF_EPID 0
> > > +#define DBUF_PAD 0
> > > #define DBUF_SPECID 4
> > > +#define DBUF_EPID 8
> > > +#define DBUF_DATA 16
> > > /*
> > > * The dctx->mem pointer references a block of memory that contains:
> > > diff --git a/libdtrace/dt_handle.c b/libdtrace/dt_handle.c
> > > index 4c9b9413..b1ba5f9f 100644
> > > --- a/libdtrace/dt_handle.c
> > > +++ b/libdtrace/dt_handle.c
> > > @@ -14,6 +14,7 @@
> > > #include <alloca.h>
> > > #include <dt_impl.h>
> > > +#include <dt_probe.h>
> > > #include <dt_program.h>
> > > static const char _dt_errprog[] =
> > > @@ -147,11 +148,11 @@ dt_handle_err(dtrace_hdl_t *dtp, dtrace_probedata_t *data)
> > > * This is an error. We have the following items here: EPID,
> > > * faulting action, BPF pc, fault code and faulting address.
> > > */
> > > - epid = (uint32_t)DT_REC(uint64_t, 0);
> > > + epid = DT_REC(uint64_t, 0);
> > > if (dt_epid_lookup(dtp, epid, &errdd, &errpd) != 0)
> > > return dt_set_errno(dtp, EDT_BADERROR);
> > > -
> > > + errpd = (dtrace_probedesc_t *)dtp->dt_probes[epid>>32]->desc;
> > > err.dteda_ddesc = errdd;
> > > err.dteda_pdesc = errpd;
> > > err.dteda_cpu = data->dtpda_cpu;
> > > @@ -195,7 +196,7 @@ no_addr:
> > > details[0] = 0;
> > > }
> > > - snprintf(str, len, "error on enabled probe ID %u (ID %u: %s:%s:%s:%s): "
> > > + snprintf(str, len, "error on enabled probe ID %lu (ID %u: %s:%s:%s:%s): "
> > > "%s%s in %s%s",
> > > epid, errpd->id, errpd->prv, errpd->mod, errpd->fun,
> > > errpd->prb, dtrace_faultstr(dtp, err.dteda_fault), details,
> > > @@ -256,7 +257,7 @@ dt_handle_liberr(dtrace_hdl_t *dtp, const dtrace_probedata_t *data,
> > > str = alloca(len);
> > > snprintf(str, len,
> > > - "error on enabled probe ID %u (ID %u: %s:%s:%s:%s): %s",
> > > + "error on enabled probe ID %lu (ID %u: %s:%s:%s:%s): %s",
> > > data->dtpda_epid, errpd->id, errpd->prv, errpd->mod,
> > > errpd->fun, errpd->prb, faultstr);
> > > diff --git a/libdtrace/dt_map.c b/libdtrace/dt_map.c
> > > index c685274d..fe6194a7 100644
> > > --- a/libdtrace/dt_map.c
> > > +++ b/libdtrace/dt_map.c
> > > @@ -137,6 +137,9 @@ int
> > > dt_epid_lookup(dtrace_hdl_t *dtp, dtrace_epid_t epid, dtrace_datadesc_t **ddp,
> > > dtrace_probedesc_t **pdp)
> > > {
> > > + /* Remove the PRID portion of the EPID. */
> > > + epid &= 0xffffffff;
> > > +
> > > if (epid >= dtp->dt_maxprobe ||
> > > dtp->dt_ddesc[epid] == NULL || dtp->dt_pdesc[epid] == NULL)
> > > return -1;
> > > diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c
> > > index 5c922488..0550379f 100644
> > > --- a/libdtrace/dt_open.c
> > > +++ b/libdtrace/dt_open.c
> > > @@ -169,7 +169,7 @@ static const dt_ident_t _dtrace_globals[] = {
> > > { "discard", DT_IDENT_ACTFUNC, 0, DT_ACT_DISCARD, DT_ATTR_STABCMN, DT_VERS_1_0,
> > > &dt_idops_func, "void(int)" },
> > > { "epid", DT_IDENT_SCALAR, 0, DIF_VAR_EPID, DT_ATTR_STABCMN, DT_VERS_1_0,
> > > - &dt_idops_type, "uint_t" },
> > > + &dt_idops_type, "uint64_t" },
> > > { "errno", DT_IDENT_SCALAR, 0, DIF_VAR_ERRNO, DT_ATTR_STABCMN, DT_VERS_1_0,
> > > &dt_idops_type, "int" },
> > > { "execname", DT_IDENT_SCALAR, 0, DIF_VAR_EXECNAME,
> > > diff --git a/test/demo/dtrace/error.r b/test/demo/dtrace/error.r
> > > index d3904f47..2504e793 100644
> > > --- a/test/demo/dtrace/error.r
> > > +++ b/test/demo/dtrace/error.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/demo/dtrace/error.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/stress/buffering/tst.resize3-manual.r b/test/stress/buffering/tst.resize3-manual.r
> > > index 43b647c7..25819f15 100644
> > > --- a/test/stress/buffering/tst.resize3-manual.r
> > > +++ b/test/stress/buffering/tst.resize3-manual.r
> > > @@ -1,5 +1,5 @@
> > > FUNCTION:NAME
> > > - :BEGIN 3
> > > + :BEGIN 4294967299
> > > :BEGIN
> > > -- @@stderr --
> > > diff --git a/test/stress/buffering/tst.resize3.r b/test/stress/buffering/tst.resize3.r
> > > index 9c471158..5e6afe81 100644
> > > --- a/test/stress/buffering/tst.resize3.r
> > > +++ b/test/stress/buffering/tst.resize3.r
> > > @@ -1,5 +1,5 @@
> > > FUNCTION:NAME
> > > - :BEGIN 3
> > > + :BEGIN 4294967299
> > > :BEGIN
> > > -- @@stderr --
> > > diff --git a/test/unittest/actions/setopt/tst.badopt.r b/test/unittest/actions/setopt/tst.badopt.r
> > > index 29e39fd4..b1c6d148 100644
> > > --- a/test/unittest/actions/setopt/tst.badopt.r
> > > +++ b/test/unittest/actions/setopt/tst.badopt.r
> > > @@ -1,16 +1,16 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "Nixon" to "1": Invalid option name
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "Nixon" to "1": Invalid option name
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "Harding" to "1": Invalid option name
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "Harding" to "1": Invalid option name
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "Hoover" to "1": Invalid option name
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "Hoover" to "1": Invalid option name
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "Bush" to "1": Invalid option name
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "Bush" to "1": Invalid option name
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "quiet" to "um, no": Invalid value for specified option
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "quiet" to "um, no": Invalid value for specified option
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "aggrate" to "0.5hz": Invalid value for specified option
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "aggrate" to "0.5hz": Invalid value for specified option
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): couldn't set option "bufsize" to "1m": Operation illegal when tracing is active
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): couldn't set option "bufsize" to "1m": Operation illegal when tracing is active
> > > diff --git a/test/unittest/arrays/tst.declared-bounds.runtime_out.r b/test/unittest/arrays/tst.declared-bounds.runtime_out.r
> > > index 4917528d..fa6e3b73 100644
> > > --- a/test/unittest/arrays/tst.declared-bounds.runtime_out.r
> > > +++ b/test/unittest/arrays/tst.declared-bounds.runtime_out.r
> > > @@ -1,3 +1,3 @@
> > > expected run-time error
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): index out of bounds (8) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): index out of bounds (8) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_0.r b/test/unittest/codegen/err.deref_0.r
> > > index 07c1dc52..ef71d557 100644
> > > --- a/test/unittest/codegen/err.deref_0.r
> > > +++ b/test/unittest/codegen/err.deref_0.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address (0) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address (0) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_1.r b/test/unittest/codegen/err.deref_1.r
> > > index a2ca8ac4..11bf0b20 100644
> > > --- a/test/unittest/codegen/err.deref_1.r
> > > +++ b/test/unittest/codegen/err.deref_1.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address (1) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address (1) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_i0.r b/test/unittest/codegen/err.deref_i0.r
> > > index 07c1dc52..ef71d557 100644
> > > --- a/test/unittest/codegen/err.deref_i0.r
> > > +++ b/test/unittest/codegen/err.deref_i0.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address (0) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address (0) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_i1.r b/test/unittest/codegen/err.deref_i1.r
> > > index a2ca8ac4..11bf0b20 100644
> > > --- a/test/unittest/codegen/err.deref_i1.r
> > > +++ b/test/unittest/codegen/err.deref_i1.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address (1) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address (1) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_string-assoc.r b/test/unittest/codegen/err.deref_string-assoc.r
> > > index 08277992..b047a341 100644
> > > --- a/test/unittest/codegen/err.deref_string-assoc.r
> > > +++ b/test/unittest/codegen/err.deref_string-assoc.r
> > > @@ -1,3 +1,3 @@
> > > 66
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_string-gvar.r b/test/unittest/codegen/err.deref_string-gvar.r
> > > index 08277992..b047a341 100644
> > > --- a/test/unittest/codegen/err.deref_string-gvar.r
> > > +++ b/test/unittest/codegen/err.deref_string-gvar.r
> > > @@ -1,3 +1,3 @@
> > > 66
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_string-lvar.r b/test/unittest/codegen/err.deref_string-lvar.r
> > > index 08277992..b047a341 100644
> > > --- a/test/unittest/codegen/err.deref_string-lvar.r
> > > +++ b/test/unittest/codegen/err.deref_string-lvar.r
> > > @@ -1,3 +1,3 @@
> > > 66
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.deref_string-tvar.r b/test/unittest/codegen/err.deref_string-tvar.r
> > > index 08277992..b047a341 100644
> > > --- a/test/unittest/codegen/err.deref_string-tvar.r
> > > +++ b/test/unittest/codegen/err.deref_string-tvar.r
> > > @@ -1,3 +1,3 @@
> > > 66
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address (1) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.str_NULL_plus_offset-assoc.r b/test/unittest/codegen/err.str_NULL_plus_offset-assoc.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/codegen/err.str_NULL_plus_offset-assoc.r
> > > +++ b/test/unittest/codegen/err.str_NULL_plus_offset-assoc.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.str_NULL_plus_offset-lvar.r b/test/unittest/codegen/err.str_NULL_plus_offset-lvar.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/codegen/err.str_NULL_plus_offset-lvar.r
> > > +++ b/test/unittest/codegen/err.str_NULL_plus_offset-lvar.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.str_NULL_plus_offset-tvar.r b/test/unittest/codegen/err.str_NULL_plus_offset-tvar.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/codegen/err.str_NULL_plus_offset-tvar.r
> > > +++ b/test/unittest/codegen/err.str_NULL_plus_offset-tvar.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/codegen/err.str_NULL_plus_offset.r b/test/unittest/codegen/err.str_NULL_plus_offset.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/codegen/err.str_NULL_plus_offset.r
> > > +++ b/test/unittest/codegen/err.str_NULL_plus_offset.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/disasm/tst.vartab-bvar.r b/test/unittest/disasm/tst.vartab-bvar.r
> > > index 06d7c52b..53e5f618 100644
> > > --- a/test/unittest/disasm/tst.vartab-bvar.r
> > > +++ b/test/unittest/disasm/tst.vartab-bvar.r
> > > @@ -4,7 +4,7 @@ curthread scl glb r D type (pointer) (size 8)
> > > timestamp scl glb r D type (integer) (size 8)
> > > vtimestamp scl glb r D type (integer) (size 8)
> > > ipl scl glb r D type (integer) (size 4)
> > > -epid scl glb r D type (integer) (size 4)
> > > +epid scl glb r D type (integer) (size 8)
> > > id scl glb r D type (integer) (size 4)
> > > arg0 scl glb r D type (integer) (size 8)
> > > arg1 scl glb r D type (integer) (size 8)
> > > diff --git a/test/unittest/error/tst.DTRACEFLT_BADADDR.null_ptr_field.r b/test/unittest/error/tst.DTRACEFLT_BADADDR.null_ptr_field.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/error/tst.DTRACEFLT_BADADDR.null_ptr_field.r
> > > +++ b/test/unittest/error/tst.DTRACEFLT_BADADDR.null_ptr_field.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.DTRACEFLT_BADADDR.r b/test/unittest/error/tst.DTRACEFLT_BADADDR.r
> > > index b9f5f43c..5556955d 100644
> > > --- a/test/unittest/error/tst.DTRACEFLT_BADADDR.r
> > > +++ b/test/unittest/error/tst.DTRACEFLT_BADADDR.r
> > > @@ -1,6 +1,6 @@
> > > -The arguments are 3 1 1 0
> > > +The arguments are 4294967299 1 1 0
> > > The value of arg4 should be 1
> > > The value of arg5 should be 0
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.DTRACEFLT_DIVZERO.div.r b/test/unittest/error/tst.DTRACEFLT_DIVZERO.div.r
> > > index e6d6afa2..80cd485b 100644
> > > --- a/test/unittest/error/tst.DTRACEFLT_DIVZERO.div.r
> > > +++ b/test/unittest/error/tst.DTRACEFLT_DIVZERO.div.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): divide-by-zero in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): divide-by-zero in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.DTRACEFLT_DIVZERO.mod.r b/test/unittest/error/tst.DTRACEFLT_DIVZERO.mod.r
> > > index e6d6afa2..80cd485b 100644
> > > --- a/test/unittest/error/tst.DTRACEFLT_DIVZERO.mod.r
> > > +++ b/test/unittest/error/tst.DTRACEFLT_DIVZERO.mod.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): divide-by-zero in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): divide-by-zero in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.DTRACEFLT_UNKNOWN.r b/test/unittest/error/tst.DTRACEFLT_UNKNOWN.r
> > > index 1e4fdd64..31752a9e 100644
> > > --- a/test/unittest/error/tst.DTRACEFLT_UNKNOWN.r
> > > +++ b/test/unittest/error/tst.DTRACEFLT_UNKNOWN.r
> > > @@ -1,5 +1,5 @@
> > > -The arguments are 3 1 PC 1 64
> > > +The arguments are 4294967299 1 PC 1 64
> > > The value of arg4 = 0
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.clause_scope-begin-ended.r b/test/unittest/error/tst.clause_scope-begin-ended.r
> > > index 8d57382e..7c88b227 100644
> > > --- a/test/unittest/error/tst.clause_scope-begin-ended.r
> > > +++ b/test/unittest/error/tst.clause_scope-begin-ended.r
> > > @@ -2,4 +2,4 @@ Error fired
> > > Clause executed
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.clause_scope-begin.r b/test/unittest/error/tst.clause_scope-begin.r
> > > index 8d57382e..7c88b227 100644
> > > --- a/test/unittest/error/tst.clause_scope-begin.r
> > > +++ b/test/unittest/error/tst.clause_scope-begin.r
> > > @@ -2,4 +2,4 @@ Error fired
> > > Clause executed
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.clause_scope-regular.r.p b/test/unittest/error/tst.clause_scope-regular.r.p
> > > index 7659601b..8117b8ab 100755
> > > --- a/test/unittest/error/tst.clause_scope-regular.r.p
> > > +++ b/test/unittest/error/tst.clause_scope-regular.r.p
> > > @@ -1,3 +1,11 @@
> > > -#!/bin/sed -f
> > > +#!/usr/bin/awk -f
> > > +
> > > # This report has a variable probe ID in it.
> > > -s/ID [0-9][0-9]*: profile/ID nnn: profile/
> > > +/^dtrace: error on enabled probe ID / {
> > > + $7 = and($7, 0xffffffff); # mask out the high 32 bits (variable prid)
> > > +}
> > > +
> > > +{
> > > + sub("ID [0-9][0-9]*: profile", "ID nnn: profile");
> > > + print;
> > > +}
> > > diff --git a/test/unittest/error/tst.error.r b/test/unittest/error/tst.error.r
> > > index 0d29bcc8..82c6da2d 100644
> > > --- a/test/unittest/error/tst.error.r
> > > +++ b/test/unittest/error/tst.error.r
> > > @@ -1,4 +1,4 @@
> > > Error fired
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/error/tst.errorend.r b/test/unittest/error/tst.errorend.r
> > > index 73abf697..17cbee17 100644
> > > --- a/test/unittest/error/tst.errorend.r
> > > +++ b/test/unittest/error/tst.errorend.r
> > > @@ -2,4 +2,4 @@ Error fired
> > > End fired after exit
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-bcopy-before-beyond.r b/test/unittest/funcs/alloca/err.alloca-bcopy-before-beyond.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-bcopy-before-beyond.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-bcopy-before-beyond.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-bcopy-before-bottom.r b/test/unittest/funcs/alloca/err.alloca-bcopy-before-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-bcopy-before-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-bcopy-before-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-bcopy-beyond-top.r b/test/unittest/funcs/alloca/err.alloca-bcopy-beyond-top.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-bcopy-beyond-top.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-bcopy-beyond-top.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-bottom.r b/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-top.r b/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-top.r
> > > index 4257f567..9638fa5b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-top.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-bcopy-crossing-top.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-crossing-clauses.r b/test/unittest/funcs/alloca/err.alloca-crossing-clauses.r
> > > index f5ff855d..35cf68b1 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-crossing-clauses.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-crossing-clauses.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-load-before-bottom.r b/test/unittest/funcs/alloca/err.alloca-load-before-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-load-before-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-load-before-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-load-beyond-top.r b/test/unittest/funcs/alloca/err.alloca-load-beyond-top.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-load-beyond-top.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-load-beyond-top.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-load-crossing-bottom.r b/test/unittest/funcs/alloca/err.alloca-load-crossing-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-load-crossing-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-load-crossing-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-null-deref-lvalue.r b/test/unittest/funcs/alloca/err.alloca-null-deref-lvalue.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-null-deref-lvalue.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-null-deref-lvalue.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-null-deref.r b/test/unittest/funcs/alloca/err.alloca-null-deref.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-null-deref.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-null-deref.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-scratch-exceeding-bcopy.r b/test/unittest/funcs/alloca/err.alloca-scratch-exceeding-bcopy.r
> > > index 4257f567..9638fa5b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-scratch-exceeding-bcopy.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-scratch-exceeding-bcopy.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-store-before-bottom.r b/test/unittest/funcs/alloca/err.alloca-store-before-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-store-before-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-store-before-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-store-beyond-top.r b/test/unittest/funcs/alloca/err.alloca-store-beyond-top.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-store-beyond-top.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-store-beyond-top.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/alloca/err.alloca-store-crossing-bottom.r b/test/unittest/funcs/alloca/err.alloca-store-crossing-bottom.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/alloca/err.alloca-store-crossing-bottom.r
> > > +++ b/test/unittest/funcs/alloca/err.alloca-store-crossing-bottom.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy1.r b/test/unittest/funcs/bcopy/err.badbcopy1.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy1.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy1.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy4.r b/test/unittest/funcs/bcopy/err.badbcopy4.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy4.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy4.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy5.r b/test/unittest/funcs/bcopy/err.badbcopy5.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy5.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy5.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy6.r b/test/unittest/funcs/bcopy/err.badbcopy6.r
> > > index 4257f567..9638fa5b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy6.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy6.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy7.r b/test/unittest/funcs/bcopy/err.badbcopy7.r
> > > index 4257f567..9638fa5b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy7.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy7.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/bcopy/err.badbcopy8.r b/test/unittest/funcs/bcopy/err.badbcopy8.r
> > > index 4257f567..9638fa5b 100644
> > > --- a/test/unittest/funcs/bcopy/err.badbcopy8.r
> > > +++ b/test/unittest/funcs/bcopy/err.badbcopy8.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyin/err.badaddr.r b/test/unittest/funcs/copyin/err.badaddr.r
> > > index ba4a4695..dadaa45b 100644
> > > --- a/test/unittest/funcs/copyin/err.badaddr.r
> > > +++ b/test/unittest/funcs/copyin/err.badaddr.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyin/err.badaddr.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyin/err.null_arg1.r b/test/unittest/funcs/copyin/err.null_arg1.r
> > > index a806d107..c0739a4d 100644
> > > --- a/test/unittest/funcs/copyin/err.null_arg1.r
> > > +++ b/test/unittest/funcs/copyin/err.null_arg1.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyin/err.null_arg1.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyinstr/err.badaddr.r b/test/unittest/funcs/copyinstr/err.badaddr.r
> > > index 0f566d6e..76861803 100644
> > > --- a/test/unittest/funcs/copyinstr/err.badaddr.r
> > > +++ b/test/unittest/funcs/copyinstr/err.badaddr.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyinstr/err.badaddr.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyinstr/err.null_arg1.r b/test/unittest/funcs/copyinstr/err.null_arg1.r
> > > index cdd7c22c..074882e0 100644
> > > --- a/test/unittest/funcs/copyinstr/err.null_arg1.r
> > > +++ b/test/unittest/funcs/copyinstr/err.null_arg1.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyinstr/err.null_arg1.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyinto/err.badaddr.r b/test/unittest/funcs/copyinto/err.badaddr.r
> > > index 11861e1f..9c2e65c2 100644
> > > --- a/test/unittest/funcs/copyinto/err.badaddr.r
> > > +++ b/test/unittest/funcs/copyinto/err.badaddr.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyinto/err.badaddr.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyinto/err.badsize.r b/test/unittest/funcs/copyinto/err.badsize.r
> > > index ec4b062e..7e99c307 100644
> > > --- a/test/unittest/funcs/copyinto/err.badsize.r
> > > +++ b/test/unittest/funcs/copyinto/err.badsize.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyinto/err.badsize.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid size ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/copyinto/err.null_arg1.r b/test/unittest/funcs/copyinto/err.null_arg1.r
> > > index f568ee5c..7c1fa9e0 100644
> > > --- a/test/unittest/funcs/copyinto/err.null_arg1.r
> > > +++ b/test/unittest/funcs/copyinto/err.null_arg1.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/copyinto/err.null_arg1.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/err.badalloca.r.p b/test/unittest/funcs/err.badalloca.r.p
> > > index d7a88a39..15f99035 100755
> > > --- a/test/unittest/funcs/err.badalloca.r.p
> > > +++ b/test/unittest/funcs/err.badalloca.r.p
> > > @@ -1,3 +1,11 @@
> > > -#!/bin/sed -f
> > > +#!/usr/bin/awk -f
> > > -s/(ID [0-9]*/(ID NNN/g
> > > +# This report has a variable probe ID in it.
> > > +/^dtrace: error on enabled probe ID / {
> > > + $7 = and($7, 0xffffffff); # mask out the high 32 bits (variable prid)
> > > +}
> > > +
> > > +{
> > > + sub("ID [0-9]*: profile", "ID NNN: profile");
> > > + print;
> > > +}
> > > diff --git a/test/unittest/funcs/err.link_ntopbadaddr.r b/test/unittest/funcs/err.link_ntopbadaddr.r
> > > index b798b5e0..f0973529 100644
> > > --- a/test/unittest/funcs/err.link_ntopbadaddr.r
> > > +++ b/test/unittest/funcs/err.link_ntopbadaddr.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/err.link_ntopbadarg.r b/test/unittest/funcs/err.link_ntopbadarg.r
> > > index e386a67c..3c677e9f 100644
> > > --- a/test/unittest/funcs/err.link_ntopbadarg.r
> > > +++ b/test/unittest/funcs/err.link_ntopbadarg.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): illegal operation in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): illegal operation in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null.r b/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null.r
> > > +++ b/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null_const.r b/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null_const.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null_const.r
> > > +++ b/test/unittest/funcs/inet_ntoa6/err.inet_ntoa6.arg1_null_const.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/strlen/tst.null.r b/test/unittest/funcs/strlen/tst.null.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/strlen/tst.null.r
> > > +++ b/test/unittest/funcs/strlen/tst.null.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/strtok/tst.strtok_null.r b/test/unittest/funcs/strtok/tst.strtok_null.r
> > > index 03226aa1..4c51c5e9 100644
> > > --- a/test/unittest/funcs/strtok/tst.strtok_null.r
> > > +++ b/test/unittest/funcs/strtok/tst.strtok_null.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/strtok/tst.strtok_null.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/strtok/tst.strtok_nulldel.r b/test/unittest/funcs/strtok/tst.strtok_nulldel.r
> > > index 70f8e4e2..2ab9938d 100644
> > > --- a/test/unittest/funcs/strtok/tst.strtok_nulldel.r
> > > +++ b/test/unittest/funcs/strtok/tst.strtok_nulldel.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/strtok/tst.strtok_nulldel.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/strtok/tst.strtok_nullstr.r b/test/unittest/funcs/strtok/tst.strtok_nullstr.r
> > > index a57b2469..be5ffe14 100644
> > > --- a/test/unittest/funcs/strtok/tst.strtok_nullstr.r
> > > +++ b/test/unittest/funcs/strtok/tst.strtok_nullstr.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/strtok/tst.strtok_nullstr.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/strtok/tst.strtok_nullstr2.r b/test/unittest/funcs/strtok/tst.strtok_nullstr2.r
> > > index d7df3aca..6c6fe35a 100644
> > > --- a/test/unittest/funcs/strtok/tst.strtok_nullstr2.r
> > > +++ b/test/unittest/funcs/strtok/tst.strtok_nullstr2.r
> > > @@ -4,4 +4,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/funcs/strtok/tst.strtok_nullstr2.d' matched 4 probes
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/funcs/substr/err.substr_null_arg1.r b/test/unittest/funcs/substr/err.substr_null_arg1.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/funcs/substr/err.substr_null_arg1.r
> > > +++ b/test/unittest/funcs/substr/err.substr_null_arg1.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/pointers/err.AllocaOverrun.r b/test/unittest/pointers/err.AllocaOverrun.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/pointers/err.AllocaOverrun.r
> > > +++ b/test/unittest/pointers/err.AllocaOverrun.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/pointers/err.BadAlign.r b/test/unittest/pointers/err.BadAlign.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/pointers/err.BadAlign.r
> > > +++ b/test/unittest/pointers/err.BadAlign.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/pointers/err.InvalidAddress2.r b/test/unittest/pointers/err.InvalidAddress2.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/pointers/err.InvalidAddress2.r
> > > +++ b/test/unittest/pointers/err.InvalidAddress2.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/pointers/err.InvalidAddress4.r b/test/unittest/pointers/err.InvalidAddress4.r
> > > index 187543b6..64a3861b 100644
> > > --- a/test/unittest/pointers/err.InvalidAddress4.r
> > > +++ b/test/unittest/pointers/err.InvalidAddress4.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 3 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967299 (ID 1: dtrace:::BEGIN): invalid address ({ptr}) in action #1 at BPF pc NNN
> > > diff --git a/test/unittest/speculation/err.CommitWithInvalid.r b/test/unittest/speculation/err.CommitWithInvalid.r
> > > index fc072417..e8a71c29 100644
> > > --- a/test/unittest/speculation/err.CommitWithInvalid.r
> > > +++ b/test/unittest/speculation/err.CommitWithInvalid.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): illegal operation in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): illegal operation in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/speculation/err.DiscardWithInvalid.r b/test/unittest/speculation/err.DiscardWithInvalid.r
> > > index fc072417..e8a71c29 100644
> > > --- a/test/unittest/speculation/err.DiscardWithInvalid.r
> > > +++ b/test/unittest/speculation/err.DiscardWithInvalid.r
> > > @@ -1,3 +1,3 @@
> > > -- @@stderr --
> > > -dtrace: error on enabled probe ID 4 (ID 1: dtrace:::BEGIN): illegal operation in action #2 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967300 (ID 1: dtrace:::BEGIN): illegal operation in action #2 at BPF pc NNN
> > > diff --git a/test/unittest/speculation/tst.SpecSizeVariations.r b/test/unittest/speculation/tst.SpecSizeVariations.r
> > > index 51f0596c..2748b307 100644
> > > --- a/test/unittest/speculation/tst.SpecSizeVariations.r
> > > +++ b/test/unittest/speculation/tst.SpecSizeVariations.r
> > > @@ -11,26 +11,6 @@ Speculative buffer ID: 1
> > > 123456706
> > > counts: 1 1
> > > -Speculative buffer ID: 1
> > > -123456700
> > > -123456701
> > > -123456702
> > > -123456703
> > > -123456704
> > > -123456705
> > > -123456706
> > > -counts: 1 1
> > > -
> > > -Speculative buffer ID: 1
> > > -123456700
> > > -123456701
> > > -123456702
> > > -123456703
> > > -123456704
> > > -123456705
> > > -123456706
> > > -counts: 2 1
> > > -
> > > Speculative buffer ID: 1
> > > 123456700
> > > 123456701
> > > @@ -64,5 +44,3 @@ counts: 2 1
> > > dtrace: 2 speculative drops
> > > dtrace: 1 speculative drop
> > > dtrace: 1 speculative drop
> > > -dtrace: 1 speculative drop
> > > -dtrace: 1 speculative drop
> > > diff --git a/test/unittest/speculation/tst.SpecSizeVariations.sh b/test/unittest/speculation/tst.SpecSizeVariations.sh
> > > index 75e527d9..79995b59 100755
> > > --- a/test/unittest/speculation/tst.SpecSizeVariations.sh
> > > +++ b/test/unittest/speculation/tst.SpecSizeVariations.sh
> > > @@ -9,7 +9,7 @@
> > > dtrace=$1
> > > -for x in 63 64 79 80 143 144; do
> > > +for x in 71 72 159 160; do
> > > $dtrace $dt_flags -xspecsize=$x -qn '
> > > BEGIN
> > > {
> > > diff --git a/test/unittest/speculation/tst.negcommit.r b/test/unittest/speculation/tst.negcommit.r
> > > index 69f246a0..29a3a538 100644
> > > --- a/test/unittest/speculation/tst.negcommit.r
> > > +++ b/test/unittest/speculation/tst.negcommit.r
> > > @@ -3,4 +3,4 @@
> > > -- @@stderr --
> > > dtrace: script 'test/unittest/speculation/tst.negcommit.d' matched 2 probes
> > > -dtrace: error on enabled probe ID 2 (ID 1: dtrace:::BEGIN): illegal operation in action #1 at BPF pc NNN
> > > +dtrace: error on enabled probe ID 4294967298 (ID 1: dtrace:::BEGIN): illegal operation in action #1 at BPF pc NNN
> > > --
> > > 2.43.5
> > >
> > >
> > > _______________________________________________
> > > DTrace-devel mailing list
> > > DTrace-devel at oss.oracle.com
> > > https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list