[DTrace-devel] [PATCH 03/20] Do not print an offset for builtin variables

Kris Van Hees kris.van.hees at oracle.com
Tue Jun 1 22:47:42 PDT 2021


Builtin variables are global variables but their value is not stored
in the gvars BPF map.  Therefore, their offset is always -1 which is
displayed as ffffffff.  That value is too wide for the OFFSET field
in the variable list in the disassembly listing.  Since the offset
value is not meaningful in this case, it is no longer printed.

Offsets are now also printed in decimal rather than hexadecimal to be
consistent with other offset values in disassembly listings.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_dis.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/libdtrace/dt_dis.c b/libdtrace/dt_dis.c
index a8c4e1ca..fdd10dc3 100644
--- a/libdtrace/dt_dis.c
+++ b/libdtrace/dt_dis.c
@@ -716,7 +716,11 @@ dt_dis_difo(const dtrace_difo_t *dp, FILE *fp, const dt_ident_t *idp,
 
 	for (i = 0; i < dp->dtdo_varlen; i++) {
 		dtrace_difv_t *v = &dp->dtdo_vartab[i];
-		char kind[4], scope[4], range[12], flags[16] = { 0 };
+		char offset[11] = { 0 }, flags[16] = { 0 };
+		char kind[4], scope[4], range[12];
+
+		if (v->dtdv_offset != -1)
+			snprintf(offset, sizeof(offset), "%u", v->dtdv_offset);
 
 		switch (v->dtdv_kind) {
 		case DIFV_KIND_AGGREGATE:
@@ -759,9 +763,9 @@ dt_dis_difo(const dtrace_difo_t *dp, FILE *fp, const dt_ident_t *idp,
 		if (v->dtdv_flags & DIFV_F_MOD)
 			strcat(flags, "/w");
 
-		fprintf(fp, "%-16s %-4x %-6x %-3s %-3s %-11s %-4s %s\n",
+		fprintf(fp, "%-16s %-4x %-6s %-3s %-3s %-11s %-4s %s\n",
 			&dp->dtdo_strtab[v->dtdv_name], v->dtdv_id,
-			v->dtdv_offset, kind, scope, range, flags + 1,
+			offset, kind, scope, range, flags + 1,
 			dt_dis_typestr(&v->dtdv_type, type, sizeof(type)));
 	}
 
-- 
2.31.1




More information about the DTrace-devel mailing list