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

Eugene Loh eugene.loh at oracle.com
Wed Sep 1 12:34:14 PDT 2021


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>

On 9/1/21 2:41 PM, Kris Van Hees wrote:
> 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;



More information about the DTrace-devel mailing list