[DTrace-devel] [PATCH 02/15 v2] Provide a more consistent implementation of the trace() action

Kris Van Hees kris.van.hees at oracle.com
Fri May 29 10:59:20 PDT 2020


The trace(n) action in DTrace v1 does not provide a consistent way
for displaying numeric data.  Due to the fact that information about
the value is lost (whether it is a signed value), the consumer was
always interpreting the value as a signed value.  However, due to
what seems like a bug, values with an integer datatype of less than
64 bits were being interpreted as 32-bit values.  Therefore;

                                  (quiet)   (non-quiet)
	(int8_t)-1	prints as 255       " 255"
	(int16_t)-1	prints as 65535     " 65535"
	(int32_t)-1	prints as -1        "       -1"
	(int64_t)-1	prints as -1        "               -1"

        (uint8_t)0xff   prints as 255       " 255"
        (uint16_t)0xffff
                        prints as 65535     " 65535"
        (uint32_t)0xffffffff
	                prints as -1        "       -1"
        (uint32_t)0x7fffffff
	                prints as 2147483647
                                            " 2147483647"
        (uint64_t)0xffffffffffffffff
                        prints as -1        "               -1"
        (uint64_t)0x7fffffffffffffff
                        prints as 9223372036854775807
                                            " 9223372036854775807"

The output statements fail to specify the correct number of decimal
characters in the output for 32-bit and 64-bit values.

This patch provides a consistent implementation by passing a flag
into the record to indicate whether the value is signed.  The output
uses a custom formatting string based on the datatype width and sign
of the value.

With the new implementation:
                                  (quiet)   (non-quiet)
        (int8_t)-1      prints as -1        "  -1"
        (int16_t)-1     prints as -1        "    -1"
        (int32_t)-1     prints as -1        "         -1"
        (int64_t)-1     prints as -1        "                   -1"

        (uint8_t)0xff   prints as 255       " 255"
        (uint16_t)0xffff
                        prints as 65535     " 65535"
        (uint32_t)0xffffffff
                        prints as 4294967295
                                            " 4294967295"
        (uint64_t)0xffffffffffffffff
                        prints as 18446744073709551615
                                            " 18446744073709551615"

This patch also adds unit tests for the various numeric value sizes,
and a variety of error conditions.

Orabug: 31407534
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_cg.c                             | 123 ++++++++++++------
 libdtrace/dt_consume.c                        |  64 ++++++++-
 .../trace/err.D_PROTO_LEN.missing_arg.d       |  20 +++
 .../trace/err.D_PROTO_LEN.missing_arg.r       |   2 +
 .../trace/err.D_PROTO_LEN.too_many_args.d     |  20 +++
 .../trace/err.D_PROTO_LEN.too_many_args.r     |   2 +
 test/unittest/actions/trace/err.D_TRACE_DYN.d |  22 ++++
 test/unittest/actions/trace/err.D_TRACE_DYN.r |   2 +
 .../unittest/actions/trace/err.D_TRACE_VOID.d |  20 +++
 .../unittest/actions/trace/err.D_TRACE_VOID.r |   2 +
 test/unittest/actions/trace/tst.expr.d        |  21 +++
 test/unittest/actions/trace/tst.expr.r        |   1 +
 .../actions/trace/tst.int16_t-quiet.d         |  21 +++
 .../actions/trace/tst.int16_t-quiet.r         |   1 +
 test/unittest/actions/trace/tst.int16_t.d     |  19 +++
 test/unittest/actions/trace/tst.int16_t.r     |   5 +
 .../actions/trace/tst.int32_t-quiet.d         |  21 +++
 .../actions/trace/tst.int32_t-quiet.r         |   1 +
 test/unittest/actions/trace/tst.int32_t.d     |  19 +++
 test/unittest/actions/trace/tst.int32_t.r     |   5 +
 .../actions/trace/tst.int64_t-quiet.d         |  21 +++
 .../actions/trace/tst.int64_t-quiet.r         |   1 +
 test/unittest/actions/trace/tst.int64_t.d     |  19 +++
 test/unittest/actions/trace/tst.int64_t.r     |   5 +
 .../unittest/actions/trace/tst.int8_t-quiet.d |  21 +++
 .../unittest/actions/trace/tst.int8_t-quiet.r |   1 +
 test/unittest/actions/trace/tst.int8_t.d      |  19 +++
 test/unittest/actions/trace/tst.int8_t.r      |   5 +
 test/unittest/actions/trace/tst.str.d         |  21 +++
 test/unittest/actions/trace/tst.str.r         |   1 +
 .../actions/trace/tst.uint16_t-quiet.d        |  21 +++
 .../actions/trace/tst.uint16_t-quiet.r        |   1 +
 test/unittest/actions/trace/tst.uint16_t.d    |  19 +++
 test/unittest/actions/trace/tst.uint16_t.r    |   5 +
 .../actions/trace/tst.uint32_t-quiet.d        |  21 +++
 .../actions/trace/tst.uint32_t-quiet.r        |   1 +
 test/unittest/actions/trace/tst.uint32_t.d    |  19 +++
 test/unittest/actions/trace/tst.uint32_t.r    |   5 +
 .../actions/trace/tst.uint64_t-quiet.d        |  21 +++
 .../actions/trace/tst.uint64_t-quiet.r        |   1 +
 test/unittest/actions/trace/tst.uint64_t.d    |  19 +++
 test/unittest/actions/trace/tst.uint64_t.r    |   5 +
 .../actions/trace/tst.uint8_t-quiet.d         |  21 +++
 .../actions/trace/tst.uint8_t-quiet.r         |   1 +
 test/unittest/actions/trace/tst.uint8_t.d     |  19 +++
 test/unittest/actions/trace/tst.uint8_t.r     |   5 +
 test/unittest/codegen/tst.post_inc_gvar_val.r |   2 +-
 test/unittest/codegen/tst.post_inc_lvar_val.r |   2 +-
 test/unittest/codegen/tst.post_inc_tvar_val.r |   2 +-
 test/unittest/codegen/tst.pre_inc_gvar_val.r  |   2 +-
 test/unittest/codegen/tst.pre_inc_lvar_val.r  |   2 +-
 test/unittest/codegen/tst.pre_inc_tvar_val.r  |   2 +-
 .../codegen/tst.reg_spilling.bug31187562-2.r  |   2 +-
 .../codegen/tst.reg_spilling.bug31187562.r    |   2 +-
 54 files changed, 652 insertions(+), 53 deletions(-)
 create mode 100644 test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.d
 create mode 100644 test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.r
 create mode 100644 test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.d
 create mode 100644 test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.r
 create mode 100644 test/unittest/actions/trace/err.D_TRACE_DYN.d
 create mode 100644 test/unittest/actions/trace/err.D_TRACE_DYN.r
 create mode 100644 test/unittest/actions/trace/err.D_TRACE_VOID.d
 create mode 100644 test/unittest/actions/trace/err.D_TRACE_VOID.r
 create mode 100644 test/unittest/actions/trace/tst.expr.d
 create mode 100644 test/unittest/actions/trace/tst.expr.r
 create mode 100644 test/unittest/actions/trace/tst.int16_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.int16_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.int16_t.d
 create mode 100644 test/unittest/actions/trace/tst.int16_t.r
 create mode 100644 test/unittest/actions/trace/tst.int32_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.int32_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.int32_t.d
 create mode 100644 test/unittest/actions/trace/tst.int32_t.r
 create mode 100644 test/unittest/actions/trace/tst.int64_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.int64_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.int64_t.d
 create mode 100644 test/unittest/actions/trace/tst.int64_t.r
 create mode 100644 test/unittest/actions/trace/tst.int8_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.int8_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.int8_t.d
 create mode 100644 test/unittest/actions/trace/tst.int8_t.r
 create mode 100644 test/unittest/actions/trace/tst.str.d
 create mode 100644 test/unittest/actions/trace/tst.str.r
 create mode 100644 test/unittest/actions/trace/tst.uint16_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.uint16_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.uint16_t.d
 create mode 100644 test/unittest/actions/trace/tst.uint16_t.r
 create mode 100644 test/unittest/actions/trace/tst.uint32_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.uint32_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.uint32_t.d
 create mode 100644 test/unittest/actions/trace/tst.uint32_t.r
 create mode 100644 test/unittest/actions/trace/tst.uint64_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.uint64_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.uint64_t.d
 create mode 100644 test/unittest/actions/trace/tst.uint64_t.r
 create mode 100644 test/unittest/actions/trace/tst.uint8_t-quiet.d
 create mode 100644 test/unittest/actions/trace/tst.uint8_t-quiet.r
 create mode 100644 test/unittest/actions/trace/tst.uint8_t.d
 create mode 100644 test/unittest/actions/trace/tst.uint8_t.r

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 1fe79e97..d916ee68 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -242,6 +242,73 @@ dt_cg_spill_load(int reg)
 	dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
 }
 
+static int
+dt_cg_store_val(dt_pcb_t *pcb, dt_node_t *dnp, dtrace_actkind_t kind, int arg)
+{
+	dtrace_diftype_t	vtype;
+	struct bpf_insn		instr;
+	dt_irlist_t		*dlp = &pcb->pcb_ir;
+	uint_t			off;
+
+	dt_cg_node(dnp, &pcb->pcb_ir, pcb->pcb_regs);
+	dt_node_diftype(pcb->pcb_hdl, dnp, &vtype);
+
+	if (dt_node_is_scalar(dnp) || dt_node_is_float(dnp)) {
+		int	sz = 8;
+
+		off = dt_rec_add(pcb->pcb_hdl, dt_cg_fill_gap, kind,
+				 vtype.dtdt_size, vtype.dtdt_size, NULL,
+				 arg);
+
+		switch (vtype.dtdt_size) {
+		case sizeof(uint64_t):
+			sz = BPF_DW;
+			break;
+		case sizeof(uint32_t):
+			sz = BPF_W;
+			break;
+		case sizeof(uint16_t):
+			sz = BPF_H;
+			break;
+		case sizeof(uint8_t):
+			sz = BPF_B;
+			break;
+		}
+
+		instr = BPF_STORE(sz, BPF_REG_9, off, dnp->dn_reg);
+		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
+		dt_regset_free(pcb->pcb_regs, dnp->dn_reg);
+
+		return 0;
+#if 0
+	} else if (dt_node_is_string(dnp->dn_args)) {
+		size_t sz = dt_node_type_size(dnp->dn_args);
+
+		/*
+		 * Strings are stored as a 64-bit size followed by a character
+		 * array.  Given that all entries in the output buffer are
+		 * aligned at 64-bit boundaries, this guarantees that the
+		 * character array is also aligned at a 64-bit boundary.
+		 * We will pad the string to a multiple of 8 bytes as well.
+		 *
+		 * We store the size as two 32-bit values, lower 4 bytes first,
+		 * then the higher 4 bytes.
+		 */
+		sz = P2ROUNDUP(sz, sizeof(uint64_t));
+		instr = BPF_STORE_IMM(BPF_W, BPF_REG_9, off,
+				      sz & ((1UL << 32)-1));
+		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
+		instr = BPF_STORE_IMM(BPF_W, BPF_REG_9, off + 4, sz >> 32);
+		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
+		dt_regset_free(pcb->pcb_regs, dnp->dn_args->dn_reg);
+
+		return sz + sizeof(uint64_t);
+#endif
+	}
+
+	return -1;
+}
+
 static void
 dt_cg_act_breakpoint(dt_pcb_t *pcb, dt_node_t *dnp, dtrace_actkind_t kind)
 {
@@ -506,61 +573,31 @@ dt_cg_act_system(dt_pcb_t *pcb, dt_node_t *dnp, dtrace_actkind_t kind)
 static void
 dt_cg_act_trace(dt_pcb_t *pcb, dt_node_t *dnp, dtrace_actkind_t kind)
 {
-	struct bpf_insn	instr;
-	dt_irlist_t	*dlp = &pcb->pcb_ir;
 	char		n[DT_TYPE_NAMELEN];
-	uint_t		off;
+	dt_node_t	*arg = dnp->dn_args;
+	int		type = 0;
 
-	if (dt_node_is_void(dnp->dn_args)) {
-		dnerror(dnp->dn_args, D_TRACE_VOID,
+	if (dt_node_is_void(arg)) {
+		dnerror(arg, D_TRACE_VOID,
 			"trace( ) may not be applied to a void expression\n");
 	}
 
-	if (dt_node_is_dynamic(dnp->dn_args)) {
-		dnerror(dnp->dn_args, D_TRACE_DYN,
+	if (dt_node_is_dynamic(arg)) {
+		dnerror(arg, D_TRACE_DYN,
 			"trace( ) may not be applied to a dynamic "
 			"expression\n");
 	}
 
-	dt_cg_node(dnp->dn_args, &pcb->pcb_ir, pcb->pcb_regs);
-
-	if (dt_node_is_scalar(dnp->dn_args)) {
-		off = dt_rec_add(pcb->pcb_hdl, dt_cg_fill_gap,
-				 DTRACEACT_DIFEXPR, sizeof(uint64_t),
-				 sizeof(uint64_t), NULL, DT_ACT_TRACE);
+	if (arg->dn_flags & DT_NF_REF)
+		type = DT_NF_REF;
+	else if (arg->dn_flags & DT_NF_SIGNED)
+		type = DT_NF_SIGNED;
 
-		instr = BPF_STORE(BPF_DW, BPF_REG_9, off, dnp->dn_args->dn_reg);
-		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
-		dt_regset_free(pcb->pcb_regs, dnp->dn_args->dn_reg);
-#if 0
-	} else if (dt_node_is_string(dnp->dn_args)) {
-		size_t sz = dt_node_type_size(dnp->dn_args);
-
-		/*
-		 * Strings are stored as a 64-bit size followed by a character
-		 * array.  Given that all entries in the output buffer are
-		 * aligned at 64-bit boundaries, this guarantees that the
-		 * character array is also aligned at a 64-bit boundary.
-		 * We will pad the string to a multiple of 8 bytes as well.
-		 *
-		 * We store the size as two 32-bit values, lower 4 bytes first,
-		 * then the higher 4 bytes.
-		 */
-		sz = P2ROUNDUP(sz, sizeof(uint64_t));
-		instr = BPF_STORE_IMM(BPF_W, BPF_REG_9, off,
-				      sz & ((1UL << 32)-1));
-		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
-		instr = BPF_STORE_IMM(BPF_W, BPF_REG_9, off + 4, sz >> 32);
-		dt_irlist_append(dlp, dt_cg_node_alloc(DT_LBL_NONE, instr));
-		dt_regset_free(pcb->pcb_regs, dnp->dn_args->dn_reg);
-
-		return sz + sizeof(uint64_t);
-#endif
-	} else
-		dnerror(dnp->dn_args, D_PROTO_ARG,
+	if (dt_cg_store_val(pcb, arg, DTRACEACT_DIFEXPR, type) == -1)
+		dnerror(arg, D_PROTO_ARG,
 			"trace( ) argument #1 is incompatible with prototype:\n"
 			"\tprototype: scalar or string\n\t argument: %s\n",
-			dt_node_type_name(dnp->dn_args, n, sizeof (n)));
+			dt_node_type_name(arg, n, sizeof(n)));
 }
 
 static void
diff --git a/libdtrace/dt_consume.c b/libdtrace/dt_consume.c
index cabef503..6c15b4a5 100644
--- a/libdtrace/dt_consume.c
+++ b/libdtrace/dt_consume.c
@@ -2254,6 +2254,66 @@ nextepid:
 	return (dt_handle_cpudrop(dtp, cpu, DTRACEDROP_PRINCIPAL, drops));
 }
 #else
+static int
+dt_print_trace(dtrace_hdl_t *dtp, FILE *fp, dtrace_recdesc_t *rec,
+	       caddr_t data, int quiet)
+{
+	/*
+	 * String or any other non-numeric data items are printed as a byte
+	 * stream.
+	 */
+	if (rec->dtrd_arg == DT_NF_REF)
+		return dt_print_bytes(dtp, fp, data, rec->dtrd_size, 33,
+				      quiet);
+
+	/*
+	 * Differentiate between signed and unsigned numeric values.
+	 *
+	 * Note:
+	 * This is an enhancement of the functionality present in DTrace v1,
+	 * where values were anything smaller than a 64-bit value was used as a
+	 * 32-bit value.  As such, (int8_t)-1 and (int16_t)-1 would be printed
+	 * as 255 and 65535, but (int32_t)-1 and (int64_t) would be printed as
+	 * -1.
+	 */
+	if (rec->dtrd_arg == DT_NF_SIGNED) {
+		switch (rec->dtrd_size) {
+		case sizeof(int64_t):
+			return dt_printf(dtp, fp, quiet ? "%ld" : " %19ld",
+				      *(int64_t *)data);
+		case sizeof(int32_t):
+			return dt_printf(dtp, fp, quiet ? "%d" : " %10d",
+					 *(int32_t *)data);
+		case sizeof(int16_t):
+			return dt_printf(dtp, fp, quiet ? "%hd" : " %5hd",
+					 *(int16_t *)data);
+		case sizeof(int8_t):
+			return dt_printf(dtp, fp, quiet ? "%hhd" : " %3hhd",
+					 *(int8_t *)data);
+		}
+	} else {
+		switch (rec->dtrd_size) {
+		case sizeof(uint64_t):
+			return dt_printf(dtp, fp, quiet ? "%lu" : " %20lu",
+					 *(uint64_t *)data);
+		case sizeof(uint32_t):
+			return dt_printf(dtp, fp, quiet ? "%u" : " %10u",
+					 *(uint32_t *)data);
+		case sizeof(uint16_t):
+			return dt_printf(dtp, fp, quiet ? "%hu" : " %5hu",
+					 *(uint16_t *)data);
+		case sizeof(uint8_t):
+			return dt_printf(dtp, fp, quiet ? "%hhu" : " %3hhu",
+					 *(uint8_t *)data);
+		}
+	}
+
+	/*
+	 * We should never get here, but if we do... print bytes.
+	 */
+	return dt_print_bytes(dtp, fp, data, rec->dtrd_size, 33, quiet);
+}
+
 static dtrace_workstatus_t
 dt_consume_one(dtrace_hdl_t *dtp, FILE *fp, int cpu, char *buf,
 	       dtrace_probedata_t *pdat, dtrace_consume_probe_f *efunc,
@@ -2354,8 +2414,8 @@ dt_consume_one(dtrace_hdl_t *dtp, FILE *fp, int cpu, char *buf,
 			if (rval != DTRACE_CONSUME_THIS)
 				return dt_set_errno(dtp, EDT_BADRVAL);
 
-			n = dt_printf(dtp, fp, quiet ? "%lld" : " %16lld",
-				      *(int64_t *)pdat->dtpda_data);
+			n = dt_print_trace(dtp, fp, rec, pdat->dtpda_data,
+					   quiet);
 
 			if (n < 0)
 				return -1;
diff --git a/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.d b/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.d
new file mode 100644
index 00000000..3e6c5f82
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.d
@@ -0,0 +1,20 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action takes exactly one argument.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace();
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.r b/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.r
new file mode 100644
index 00000000..ee9df09e
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.r
@@ -0,0 +1,2 @@
+-- @@stderr --
+dtrace: failed to compile script test/unittest/actions/trace/err.D_PROTO_LEN.missing_arg.d: [D_PROTO_LEN] line 18: trace( ) prototype mismatch: 0 args passed, 1 expected
diff --git a/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.d b/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.d
new file mode 100644
index 00000000..ec2d705d
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.d
@@ -0,0 +1,20 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action takes exactly one argument.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace(1, 2);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.r b/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.r
new file mode 100644
index 00000000..9eab4b67
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.r
@@ -0,0 +1,2 @@
+-- @@stderr --
+dtrace: failed to compile script test/unittest/actions/trace/err.D_PROTO_LEN.too_many_args.d: [D_PROTO_LEN] line 18: trace( ) prototype mismatch: 2 args passed, 1 expected
diff --git a/test/unittest/actions/trace/err.D_TRACE_DYN.d b/test/unittest/actions/trace/err.D_TRACE_DYN.d
new file mode 100644
index 00000000..60a3fdc7
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_TRACE_DYN.d
@@ -0,0 +1,22 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+/* @@xfail: dtv2 */
+
+/*
+ * ASSERTION: The trace() action does not accept a dynamic expression as value.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	@a = count();
+	trace(@a);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/err.D_TRACE_DYN.r b/test/unittest/actions/trace/err.D_TRACE_DYN.r
new file mode 100644
index 00000000..b655c9b9
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_TRACE_DYN.r
@@ -0,0 +1,2 @@
+-- @@stderr --
+dtrace: failed to compile script test/unittest/actions/trace/err.D_TRACE_DYN.d: [D_TRACE_DYN] line 20: trace( ) may not be applied to a dynamic expression
diff --git a/test/unittest/actions/trace/err.D_TRACE_VOID.d b/test/unittest/actions/trace/err.D_TRACE_VOID.d
new file mode 100644
index 00000000..59f71d0f
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_TRACE_VOID.d
@@ -0,0 +1,20 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action does not accept void as a value.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace(trace(1));
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/err.D_TRACE_VOID.r b/test/unittest/actions/trace/err.D_TRACE_VOID.r
new file mode 100644
index 00000000..932daeaa
--- /dev/null
+++ b/test/unittest/actions/trace/err.D_TRACE_VOID.r
@@ -0,0 +1,2 @@
+-- @@stderr --
+dtrace: failed to compile script test/unittest/actions/trace/err.D_TRACE_VOID.d: [D_TRACE_VOID] line 18: trace( ) may not be applied to a void expression
diff --git a/test/unittest/actions/trace/tst.expr.d b/test/unittest/actions/trace/tst.expr.d
new file mode 100644
index 00000000..1dcc501b
--- /dev/null
+++ b/test/unittest/actions/trace/tst.expr.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action accepts an integer expression.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	x = 1;
+	trace(++x);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.expr.r b/test/unittest/actions/trace/tst.expr.r
new file mode 100644
index 00000000..0cfbf088
--- /dev/null
+++ b/test/unittest/actions/trace/tst.expr.r
@@ -0,0 +1 @@
+2
diff --git a/test/unittest/actions/trace/tst.int16_t-quiet.d b/test/unittest/actions/trace/tst.int16_t-quiet.d
new file mode 100644
index 00000000..554310f3
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int16_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 16-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((int16_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int16_t-quiet.r b/test/unittest/actions/trace/tst.int16_t-quiet.r
new file mode 100644
index 00000000..3a2e3f49
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int16_t-quiet.r
@@ -0,0 +1 @@
+-1
diff --git a/test/unittest/actions/trace/tst.int16_t.d b/test/unittest/actions/trace/tst.int16_t.d
new file mode 100644
index 00000000..72cfb571
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int16_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 16-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((int16_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int16_t.r b/test/unittest/actions/trace/tst.int16_t.r
new file mode 100644
index 00000000..2a0e21cb
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int16_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN     -1
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.int16_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.int32_t-quiet.d b/test/unittest/actions/trace/tst.int32_t-quiet.d
new file mode 100644
index 00000000..1e5ac8a3
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int32_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 32-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((int32_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int32_t-quiet.r b/test/unittest/actions/trace/tst.int32_t-quiet.r
new file mode 100644
index 00000000..3a2e3f49
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int32_t-quiet.r
@@ -0,0 +1 @@
+-1
diff --git a/test/unittest/actions/trace/tst.int32_t.d b/test/unittest/actions/trace/tst.int32_t.d
new file mode 100644
index 00000000..e29b74ef
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int32_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 32-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((int32_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int32_t.r b/test/unittest/actions/trace/tst.int32_t.r
new file mode 100644
index 00000000..60fd1dd4
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int32_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN          -1
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.int32_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.int64_t-quiet.d b/test/unittest/actions/trace/tst.int64_t-quiet.d
new file mode 100644
index 00000000..4c41d05b
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int64_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 64-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((int64_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int64_t-quiet.r b/test/unittest/actions/trace/tst.int64_t-quiet.r
new file mode 100644
index 00000000..3a2e3f49
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int64_t-quiet.r
@@ -0,0 +1 @@
+-1
diff --git a/test/unittest/actions/trace/tst.int64_t.d b/test/unittest/actions/trace/tst.int64_t.d
new file mode 100644
index 00000000..5ce54fb6
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int64_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 64-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((int64_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int64_t.r b/test/unittest/actions/trace/tst.int64_t.r
new file mode 100644
index 00000000..ed54f7a7
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int64_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN                   -1
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.int64_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.int8_t-quiet.d b/test/unittest/actions/trace/tst.int8_t-quiet.d
new file mode 100644
index 00000000..c2e87b87
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int8_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 8-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((int8_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int8_t-quiet.r b/test/unittest/actions/trace/tst.int8_t-quiet.r
new file mode 100644
index 00000000..3a2e3f49
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int8_t-quiet.r
@@ -0,0 +1 @@
+-1
diff --git a/test/unittest/actions/trace/tst.int8_t.d b/test/unittest/actions/trace/tst.int8_t.d
new file mode 100644
index 00000000..9700118f
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int8_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a signed 8-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((int8_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.int8_t.r b/test/unittest/actions/trace/tst.int8_t.r
new file mode 100644
index 00000000..46952f41
--- /dev/null
+++ b/test/unittest/actions/trace/tst.int8_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN   -1
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.int8_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.str.d b/test/unittest/actions/trace/tst.str.d
new file mode 100644
index 00000000..af38cbc7
--- /dev/null
+++ b/test/unittest/actions/trace/tst.str.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+/* @@xfail: dtv2 */
+
+/*
+ * ASSERTION: The trace() action accepts a string argument.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace("a");
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.str.r b/test/unittest/actions/trace/tst.str.r
new file mode 100644
index 00000000..78981922
--- /dev/null
+++ b/test/unittest/actions/trace/tst.str.r
@@ -0,0 +1 @@
+a
diff --git a/test/unittest/actions/trace/tst.uint16_t-quiet.d b/test/unittest/actions/trace/tst.uint16_t-quiet.d
new file mode 100644
index 00000000..383fe4f1
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint16_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 16-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((uint16_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint16_t-quiet.r b/test/unittest/actions/trace/tst.uint16_t-quiet.r
new file mode 100644
index 00000000..7a53b356
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint16_t-quiet.r
@@ -0,0 +1 @@
+65535
diff --git a/test/unittest/actions/trace/tst.uint16_t.d b/test/unittest/actions/trace/tst.uint16_t.d
new file mode 100644
index 00000000..b299f48c
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint16_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 16-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((uint16_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint16_t.r b/test/unittest/actions/trace/tst.uint16_t.r
new file mode 100644
index 00000000..34aed4ce
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint16_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN  65535
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.uint16_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.uint32_t-quiet.d b/test/unittest/actions/trace/tst.uint32_t-quiet.d
new file mode 100644
index 00000000..33aa8bdc
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint32_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 32-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((uint32_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint32_t-quiet.r b/test/unittest/actions/trace/tst.uint32_t-quiet.r
new file mode 100644
index 00000000..4f6ff861
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint32_t-quiet.r
@@ -0,0 +1 @@
+4294967295
diff --git a/test/unittest/actions/trace/tst.uint32_t.d b/test/unittest/actions/trace/tst.uint32_t.d
new file mode 100644
index 00000000..6e7dffa5
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint32_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 32-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((uint32_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint32_t.r b/test/unittest/actions/trace/tst.uint32_t.r
new file mode 100644
index 00000000..92d2e403
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint32_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN  4294967295
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.uint32_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.uint64_t-quiet.d b/test/unittest/actions/trace/tst.uint64_t-quiet.d
new file mode 100644
index 00000000..2ac71931
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint64_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 64-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((uint64_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint64_t-quiet.r b/test/unittest/actions/trace/tst.uint64_t-quiet.r
new file mode 100644
index 00000000..93221a29
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint64_t-quiet.r
@@ -0,0 +1 @@
+18446744073709551615
diff --git a/test/unittest/actions/trace/tst.uint64_t.d b/test/unittest/actions/trace/tst.uint64_t.d
new file mode 100644
index 00000000..3d3a204f
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint64_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 64-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((uint64_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint64_t.r b/test/unittest/actions/trace/tst.uint64_t.r
new file mode 100644
index 00000000..d89e29d1
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint64_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN  18446744073709551615
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.uint64_t.d' matched 1 probe
diff --git a/test/unittest/actions/trace/tst.uint8_t-quiet.d b/test/unittest/actions/trace/tst.uint8_t-quiet.d
new file mode 100644
index 00000000..0f5108ec
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint8_t-quiet.d
@@ -0,0 +1,21 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 8-bit value correctly in
+ *            quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	trace((uint8_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint8_t-quiet.r b/test/unittest/actions/trace/tst.uint8_t-quiet.r
new file mode 100644
index 00000000..ace9d036
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint8_t-quiet.r
@@ -0,0 +1 @@
+255
diff --git a/test/unittest/actions/trace/tst.uint8_t.d b/test/unittest/actions/trace/tst.uint8_t.d
new file mode 100644
index 00000000..4c9bf269
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint8_t.d
@@ -0,0 +1,19 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * ASSERTION: The trace() action prints a unsigned 8-bit value correctly in
+ *            non-quiet mode.
+ *
+ * SECTION: Actions and Subroutines/trace()
+ */
+
+BEGIN
+{
+	trace((uint8_t)-1);
+	exit(0);
+}
diff --git a/test/unittest/actions/trace/tst.uint8_t.r b/test/unittest/actions/trace/tst.uint8_t.r
new file mode 100644
index 00000000..fbd8d4a7
--- /dev/null
+++ b/test/unittest/actions/trace/tst.uint8_t.r
@@ -0,0 +1,5 @@
+                   FUNCTION:NAME
+                          :BEGIN  255
+
+-- @@stderr --
+dtrace: script 'test/unittest/actions/trace/tst.uint8_t.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.post_inc_gvar_val.r b/test/unittest/codegen/tst.post_inc_gvar_val.r
index dbd0b8da..e6af6ae9 100644
--- a/test/unittest/codegen/tst.post_inc_gvar_val.r
+++ b/test/unittest/codegen/tst.post_inc_gvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 0
+                          :BEGIN                    0
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.post_inc_gvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.post_inc_lvar_val.r b/test/unittest/codegen/tst.post_inc_lvar_val.r
index e6e33861..70eb9da6 100644
--- a/test/unittest/codegen/tst.post_inc_lvar_val.r
+++ b/test/unittest/codegen/tst.post_inc_lvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 0
+                          :BEGIN                    0
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.post_inc_lvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.post_inc_tvar_val.r b/test/unittest/codegen/tst.post_inc_tvar_val.r
index 2d19b737..da3bc51b 100644
--- a/test/unittest/codegen/tst.post_inc_tvar_val.r
+++ b/test/unittest/codegen/tst.post_inc_tvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 0
+                          :BEGIN                    0
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.post_inc_tvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.pre_inc_gvar_val.r b/test/unittest/codegen/tst.pre_inc_gvar_val.r
index 9625b369..243c7089 100644
--- a/test/unittest/codegen/tst.pre_inc_gvar_val.r
+++ b/test/unittest/codegen/tst.pre_inc_gvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 1
+                          :BEGIN                    1
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.pre_inc_gvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.pre_inc_lvar_val.r b/test/unittest/codegen/tst.pre_inc_lvar_val.r
index 1bca8c90..e6166076 100644
--- a/test/unittest/codegen/tst.pre_inc_lvar_val.r
+++ b/test/unittest/codegen/tst.pre_inc_lvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 1
+                          :BEGIN                    1
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.pre_inc_lvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.pre_inc_tvar_val.r b/test/unittest/codegen/tst.pre_inc_tvar_val.r
index d03ec6a2..74ceeb52 100644
--- a/test/unittest/codegen/tst.pre_inc_tvar_val.r
+++ b/test/unittest/codegen/tst.pre_inc_tvar_val.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN                 1
+                          :BEGIN                    1
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.pre_inc_tvar_val.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.reg_spilling.bug31187562-2.r b/test/unittest/codegen/tst.reg_spilling.bug31187562-2.r
index 02577a15..8d559a6f 100644
--- a/test/unittest/codegen/tst.reg_spilling.bug31187562-2.r
+++ b/test/unittest/codegen/tst.reg_spilling.bug31187562-2.r
@@ -1,5 +1,5 @@
                     FUNCTION:NAME
-                          :BEGIN          87654321         87654322         87654323        123456789        123456789        123456789
+                          :BEGIN    87654321   87654322   87654323  123456789  123456789  123456789
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.reg_spilling.bug31187562-2.d' matched 1 probe
diff --git a/test/unittest/codegen/tst.reg_spilling.bug31187562.r b/test/unittest/codegen/tst.reg_spilling.bug31187562.r
index 78254e1e..355ff2be 100644
--- a/test/unittest/codegen/tst.reg_spilling.bug31187562.r
+++ b/test/unittest/codegen/tst.reg_spilling.bug31187562.r
@@ -1,5 +1,5 @@
                    FUNCTION:NAME
-                          :BEGIN              1234
+                          :BEGIN        1234
 
 -- @@stderr --
 dtrace: script 'test/unittest/codegen/tst.reg_spilling.bug31187562.d' matched 1 probe
-- 
2.26.0




More information about the DTrace-devel mailing list