Print this page
12259 CTF shouldn't assume enum size
        
*** 8,18 ****
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2019, Joyent, Inc.
   */
  
  /*
   * Dump information about CTF containers.
   */
--- 8,18 ----
   * source.  A copy of the CDDL is also available via the Internet at
   * http://www.illumos.org/license/CDDL.
   */
  
  /*
!  * Copyright 2020 Joyent, Inc.
   */
  
  /*
   * Dump information about CTF containers.
   */
*** 611,621 ****
--- 611,630 ----
                          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,813 ****
--- 812,829 ----
                  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.