]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
libctf: create: fix vlen / vbytes confusion
authorNick Alcock <nick.alcock@oracle.com>
Thu, 6 Feb 2025 13:02:50 +0000 (13:02 +0000)
committerNick Alcock <nick.alcock@oracle.com>
Thu, 30 Oct 2025 14:21:48 +0000 (14:21 +0000)
The initial_vlen parameter to ctf_add_generic is misnamed: it's not the
initial vlen (the initial number of members of a struct, etc), but rather
the initial size of the vlen region.  We have a term for that, vbytes: use
it.

Amazingly this doesn't seem to have caused any bugs to creep in.

libctf/ctf-create.c
libctf/ctf-impl.h

index ac27cbf05c7cdfd1475f3c344abab13af48d8c55..7af96b972f3e44a3c7095d31dd3c26d2fdf8d2ff 100644 (file)
@@ -417,7 +417,7 @@ ctf_rollback (ctf_dict_t *fp, ctf_snapshot_id_t id)
    fashion in the dtd_data's info word.  */
 static ctf_id_t
 ctf_add_generic (ctf_dict_t *fp, uint32_t flag, const char *name, int kind,
-                size_t vlen, ctf_dtdef_t **rp)
+                size_t vbytes, ctf_dtdef_t **rp)
 {
   ctf_dtdef_t *dtd;
   ctf_id_t type;
@@ -454,10 +454,10 @@ ctf_add_generic (ctf_dict_t *fp, uint32_t flag, const char *name, int kind,
   if ((dtd = calloc (1, sizeof (ctf_dtdef_t))) == NULL)
     return (ctf_set_typed_errno (fp, EAGAIN));
 
-  dtd->dtd_vlen_alloc = vlen;
-  if (vlen > 0)
+  dtd->dtd_vlen_alloc = vbytes;
+  if (vbytes > 0)
     {
-      if ((dtd->dtd_vlen = calloc (1, vlen)) == NULL)
+      if ((dtd->dtd_vlen = calloc (1, vbytes)) == NULL)
        goto oom;
     }
   else
@@ -735,7 +735,7 @@ ctf_add_function (ctf_dict_t *fp, uint32_t flag,
   uint32_t vlen;
   uint32_t *vdat;
   ctf_dict_t *tmp = fp;
-  size_t initial_vlen;
+  size_t initial_vbytes;
   size_t i;
 
   if (ctc == NULL || (ctc->ctc_flags & ~CTF_FUNC_VARARG) != 0
@@ -757,9 +757,9 @@ ctf_add_function (ctf_dict_t *fp, uint32_t flag,
      Not reflected in vlen: we don't want to copy anything into it, and
      it's in addition to (e.g.) the trailing 0 indicating varargs.  */
 
-  initial_vlen = (sizeof (uint32_t) * (vlen + (vlen & 1)));
+  initial_vbytes = (sizeof (uint32_t) * (vlen + (vlen & 1)));
   if ((type = ctf_add_generic (fp, flag, NULL, CTF_K_FUNCTION,
-                              initial_vlen, &dtd)) == CTF_ERR)
+                              initial_vbytes, &dtd)) == CTF_ERR)
     return CTF_ERR;                            /* errno is set for us.  */
 
   vdat = (uint32_t *) dtd->dtd_vlen;
@@ -787,7 +787,7 @@ ctf_add_struct_sized (ctf_dict_t *fp, uint32_t flag, const char *name,
 {
   ctf_dtdef_t *dtd;
   ctf_id_t type = 0;
-  size_t initial_vlen = sizeof (ctf_lmember_t) * INITIAL_VLEN;
+  size_t initial_vbytes = sizeof (ctf_lmember_t) * INITIAL_VLEN;
 
   if (fp->ctf_flags & LCTF_NO_STR)
     return (ctf_set_errno (fp, ECTF_NOPARENT));
@@ -803,15 +803,15 @@ ctf_add_struct_sized (ctf_dict_t *fp, uint32_t flag, const char *name,
   if (type != 0 && ctf_type_kind (fp, type) == CTF_K_FORWARD)
     dtd = ctf_dtd_lookup (fp, type);
   else if ((type = ctf_add_generic (fp, flag, name, CTF_K_STRUCT,
-                                   initial_vlen, &dtd)) == CTF_ERR)
+                                   initial_vbytes, &dtd)) == CTF_ERR)
     return CTF_ERR;            /* errno is set for us.  */
 
   /* Forwards won't have any vlen yet.  */
   if (dtd->dtd_vlen_alloc == 0)
     {
-      if ((dtd->dtd_vlen = calloc (1, initial_vlen)) == NULL)
+      if ((dtd->dtd_vlen = calloc (1, initial_vbytes)) == NULL)
        return (ctf_set_typed_errno (fp, ENOMEM));
-      dtd->dtd_vlen_alloc = initial_vlen;
+      dtd->dtd_vlen_alloc = initial_vbytes;
     }
 
   dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_STRUCT, flag, 0);
@@ -834,7 +834,7 @@ ctf_add_union_sized (ctf_dict_t *fp, uint32_t flag, const char *name,
 {
   ctf_dtdef_t *dtd;
   ctf_id_t type = 0;
-  size_t initial_vlen = sizeof (ctf_lmember_t) * INITIAL_VLEN;
+  size_t initial_vbytes = sizeof (ctf_lmember_t) * INITIAL_VLEN;
 
   if (fp->ctf_flags & LCTF_NO_STR)
     return (ctf_set_errno (fp, ECTF_NOPARENT));
@@ -850,15 +850,15 @@ ctf_add_union_sized (ctf_dict_t *fp, uint32_t flag, const char *name,
   if (type != 0 && ctf_type_kind (fp, type) == CTF_K_FORWARD)
     dtd = ctf_dtd_lookup (fp, type);
   else if ((type = ctf_add_generic (fp, flag, name, CTF_K_UNION,
-                                   initial_vlen, &dtd)) == CTF_ERR)
+                                   initial_vbytes, &dtd)) == CTF_ERR)
     return CTF_ERR;            /* errno is set for us.  */
 
   /* Forwards won't have any vlen yet.  */
   if (dtd->dtd_vlen_alloc == 0)
     {
-      if ((dtd->dtd_vlen = calloc (1, initial_vlen)) == NULL)
+      if ((dtd->dtd_vlen = calloc (1, initial_vbytes)) == NULL)
        return (ctf_set_typed_errno (fp, ENOMEM));
-      dtd->dtd_vlen_alloc = initial_vlen;
+      dtd->dtd_vlen_alloc = initial_vbytes;
     }
 
   dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_UNION, flag, 0);
@@ -880,7 +880,7 @@ ctf_add_enum (ctf_dict_t *fp, uint32_t flag, const char *name)
 {
   ctf_dtdef_t *dtd;
   ctf_id_t type = 0;
-  size_t initial_vlen = sizeof (ctf_enum_t) * INITIAL_VLEN;
+  size_t initial_vbytes = sizeof (ctf_enum_t) * INITIAL_VLEN;
 
   if (fp->ctf_flags & LCTF_NO_STR)
     return (ctf_set_errno (fp, ECTF_NOPARENT));
@@ -896,15 +896,15 @@ ctf_add_enum (ctf_dict_t *fp, uint32_t flag, const char *name)
   if (type != 0 && ctf_type_kind (fp, type) == CTF_K_FORWARD)
     dtd = ctf_dtd_lookup (fp, type);
   else if ((type = ctf_add_generic (fp, flag, name, CTF_K_ENUM,
-                                   initial_vlen, &dtd)) == CTF_ERR)
+                                   initial_vbytes, &dtd)) == CTF_ERR)
     return CTF_ERR;            /* errno is set for us.  */
 
   /* Forwards won't have any vlen yet.  */
   if (dtd->dtd_vlen_alloc == 0)
     {
-      if ((dtd->dtd_vlen = calloc (1, initial_vlen)) == NULL)
+      if ((dtd->dtd_vlen = calloc (1, initial_vbytes)) == NULL)
        return (ctf_set_typed_errno (fp, ENOMEM));
-      dtd->dtd_vlen_alloc = initial_vlen;
+      dtd->dtd_vlen_alloc = initial_vbytes;
     }
 
   dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_ENUM, flag, 0);
index 69078e34d02ea8824d5bb658c3d1f0f96b335b49..3f2de933e10d2031e14f83b1fca8cdf3f1609179 100644 (file)
@@ -183,7 +183,7 @@ typedef struct ctf_dtdef
   ctf_list_t dtd_list;         /* List forward/back pointers.  */
   ctf_id_t dtd_type;           /* Type identifier for this definition.  */
   ctf_type_t dtd_data;         /* Type node, including name.  */
-  size_t dtd_vlen_alloc;       /* Total vlen space allocated.  */
+  size_t dtd_vlen_alloc;       /* Total vlen space allocated (vbytes).  */
   unsigned char *dtd_vlen;     /* Variable-length data for this type.  */
 } ctf_dtdef_t;