[DTrace-devel] [PATCH 02/14] Replace not-NULL test with more general runtime test

eugene.loh at oracle.com eugene.loh at oracle.com
Tue May 2 03:47:10 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

When we dereference a pointer, it should generally be safe to
dereference D (including alloca) pointers, even if a more robust
mechanism is needed to guard against dereferencing unsafe pointers
in the more general case.  We do, however, check whether a pointer
is NULL.

There are times, however, when even a D pointer cannot safely be
dereferenced.  This will especially be true once NULL string pointers
will be supported.

So drop the NULL-pointer check and implement dereferencing with a
more general scalar load.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c                   | 6 +-----
 test/unittest/pointers/tst.basic2.d | 3 +--
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 483603ef..c1fd46c0 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -5884,7 +5884,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 			uint_t	op;
 			ssize_t	size;
 
-			dt_cg_check_notnull(dlp, drp, dnp->dn_reg);
 			op = dt_cg_ldsize(dnp, ctfp, dnp->dn_type, &size);
 
 			/*
@@ -5899,10 +5898,7 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 						 dnp->dn_reg);
 			}
 
-			if (dnp->dn_child->dn_flags & (DT_NF_ALLOCA | DT_NF_DPTR))
-				emit(dlp, BPF_LOAD(op, dnp->dn_reg, dnp->dn_reg, 0));
-			else
-				dt_cg_load_scalar(dnp, op, size, dlp, drp);
+			dt_cg_load_scalar(dnp, op, size, dlp, drp);
 		}
 		break;
 
diff --git a/test/unittest/pointers/tst.basic2.d b/test/unittest/pointers/tst.basic2.d
index 559fd93b..c17f9251 100644
--- a/test/unittest/pointers/tst.basic2.d
+++ b/test/unittest/pointers/tst.basic2.d
@@ -1,10 +1,9 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2023, 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: Pointers can be stored in associative arrays.
-- 
2.18.4




More information about the DTrace-devel mailing list