Print this page
12259 CTF shouldn't assume enum size

@@ -8,11 +8,11 @@
  * source.  A copy of the CDDL is also available via the Internet at
  * http://www.illumos.org/license/CDDL.
  */
 
 /*
- * Copyright 2019, Joyent, Inc.
+ * Copyright 2020 Joyent, Inc.
  */
 
 /*
  * Dump information about CTF containers.
  */

@@ -611,11 +611,20 @@
                         g_stats.cs_unionsz += size;
                         g_stats.cs_uszmax = MAX(count, g_stats.cs_uszmax);
                 }
                 break;
         case CTF_K_ENUM:
+                size = ctf_type_size(g_fp, id);
+
+                /* Only the oddest enums are worth reporting on size. */
+                if (size != CTF_ERR && size != sizeof (int)) {
+                        ctfdump_printf(CTFDUMP_TYPES, "%s (%zd bytes)\n",
+                            name, size);
+                } else {
                 ctfdump_printf(CTFDUMP_TYPES, "%s\n", name);
+                }
+
                 count = 0;
                 if (ctf_enum_iter(g_fp, id, ctfdump_enum_cb, &count) != 0)
                         ctfdump_fatal("failed to iterate enumerators of %s: "
                             "%s\n", name, ctf_errmsg(ctf_errno(g_fp)));
                 g_stats.cs_nemembs += count;

@@ -803,11 +812,18 @@
                 if (ctf_enum_iter(g_fp, id, ctfsrc_enum_cb, NULL) != 0) {
                         ctfdump_fatal("failed to iterate enumerators of %s: "
                             "%s\n", name, ctf_errmsg(ctf_errno(g_fp)));
                 }
 
+                size = ctf_type_size(g_fp, id);
+
+                /* Only the oddest enums are worth reporting on size. */
+                if (size != CTF_ERR && size != sizeof (int)) {
+                        printf("} /* 0x%x bytes */;\n\n", size);
+                } else {
                 printf("};\n\n");
+                }
                 break;
         case CTF_K_TYPEDEF:
                 /*
                  * If this fails, it's probably because the referent type is in
                  * a parent container that was not supplied via -p.