[DTrace-devel] [PATCH v2 05/10] Fix type alignment handling for enums

Kris Van Hees kris.van.hees at oracle.com
Wed Sep 1 11:41:04 PDT 2021


The type alignment handling code used to determine the alignment size
for a given datatype was treating enums as if they were integers, but
that is incorrect.  It should (just like integers and pointers) have
its alignment set to match its size, but it should avoid the explicit
void-checking that is done for integers.

Without this patch, libdtrace linked with newer versions of libctf
will see a test failure in unittest/sizeof/tst.SizeofDataTypes.d for
datatype 'new_enum'.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_parser.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libdtrace/dt_parser.c b/libdtrace/dt_parser.c
index e9dcff98..bac895a2 100644
--- a/libdtrace/dt_parser.c
+++ b/libdtrace/dt_parser.c
@@ -1630,7 +1630,6 @@ dt_node_decl(void)
 			size = ctf_type_size(dtt.dtt_ctfp, dtt.dtt_type);
 
 			switch (kind) {
-			case CTF_K_ENUM:
 			case CTF_K_INTEGER:
 				if (ctf_type_encoding(dtt.dtt_ctfp, type,
 						      &cte) == 0 &&
@@ -1639,6 +1638,7 @@ dt_node_decl(void)
 						"cannot have void object: %s\n",
 						dsp->ds_ident);
 				/*FALLTHRU*/
+			case CTF_K_ENUM:
 			case CTF_K_POINTER:
 				alignment = size;
 				break;
-- 
2.33.0




More information about the DTrace-devel mailing list