]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
libctf: move ctf_elf*_to_link_sym to ctf-link.c
authorNick Alcock <nick.alcock@oracle.com>
Mon, 13 Jan 2025 11:31:56 +0000 (11:31 +0000)
committerNick Alcock <nick.alcock@oracle.com>
Fri, 28 Feb 2025 15:13:17 +0000 (15:13 +0000)
Everything in ctf-util.c is in some way associated with data
structures in general in some way, except for the ctf_*_to_link_sym
functions, which are straight translators between the Elf*_Sym
type and the ctf_link_sym_t type used by ctf-link.c.

Move them into ctf-link.c where they belong.

libctf/ctf-link.c
libctf/ctf-util.c

index 6a24344acdbc746f922f13751b31378f914dea46..cbc74f921e2bb9a3ee59fa70b5e8c785aa80df38 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <ctf-impl.h>
 #include <string.h>
+#include "ctf-endian.h"
 
 #if defined (PIC)
 #pragma weak ctf_open
@@ -1821,6 +1822,91 @@ ctf_link_shuffle_syms (ctf_dict_t *fp)
   return -err;
 }
 
+/* Convert a 32-bit ELF symbol to a ctf_link_sym_t.  */
+
+ctf_link_sym_t *
+ctf_elf32_to_link_sym (ctf_dict_t *fp, ctf_link_sym_t *dst, const Elf32_Sym *src,
+                      uint32_t symidx)
+{
+  Elf32_Sym tmp;
+  int needs_flipping = 0;
+
+#ifdef WORDS_BIGENDIAN
+  if (fp->ctf_symsect_little_endian)
+    needs_flipping = 1;
+#else
+  if (!fp->ctf_symsect_little_endian)
+    needs_flipping = 1;
+#endif
+
+  memcpy (&tmp, src, sizeof (Elf32_Sym));
+  if (needs_flipping)
+    {
+      swap_thing (tmp.st_name);
+      swap_thing (tmp.st_size);
+      swap_thing (tmp.st_shndx);
+      swap_thing (tmp.st_value);
+    }
+  /* The name must be in the external string table.  */
+  if (tmp.st_name < fp->ctf_str[CTF_STRTAB_1].cts_len)
+    dst->st_name = (const char *) fp->ctf_str[CTF_STRTAB_1].cts_strs + tmp.st_name;
+  else
+    dst->st_name = _CTF_NULLSTR;
+  dst->st_nameidx_set = 0;
+  dst->st_symidx = symidx;
+  dst->st_shndx = tmp.st_shndx;
+  dst->st_type = ELF32_ST_TYPE (tmp.st_info);
+  dst->st_value = tmp.st_value;
+
+  return dst;
+}
+
+/* Convert a 64-bit ELF symbol to a ctf_link_sym_t.  */
+
+ctf_link_sym_t *
+ctf_elf64_to_link_sym (ctf_dict_t *fp, ctf_link_sym_t *dst, const Elf64_Sym *src,
+                      uint32_t symidx)
+{
+  Elf64_Sym tmp;
+  int needs_flipping = 0;
+
+#ifdef WORDS_BIGENDIAN
+  if (fp->ctf_symsect_little_endian)
+    needs_flipping = 1;
+#else
+  if (!fp->ctf_symsect_little_endian)
+    needs_flipping = 1;
+#endif
+
+  memcpy (&tmp, src, sizeof (Elf64_Sym));
+  if (needs_flipping)
+    {
+      swap_thing (tmp.st_name);
+      swap_thing (tmp.st_size);
+      swap_thing (tmp.st_shndx);
+      swap_thing (tmp.st_value);
+    }
+
+  /* The name must be in the external string table.  */
+  if (tmp.st_name < fp->ctf_str[CTF_STRTAB_1].cts_len)
+    dst->st_name = (const char *) fp->ctf_str[CTF_STRTAB_1].cts_strs + tmp.st_name;
+  else
+    dst->st_name = _CTF_NULLSTR;
+  dst->st_nameidx_set = 0;
+  dst->st_symidx = symidx;
+  dst->st_shndx = tmp.st_shndx;
+  dst->st_type = ELF32_ST_TYPE (tmp.st_info);
+
+  /* We only care if the value is zero, so avoid nonzeroes turning into
+     zeroes.  */
+  if (_libctf_unlikely_ (tmp.st_value != 0 && ((uint32_t) tmp.st_value == 0)))
+    dst->st_value = 1;
+  else
+    dst->st_value = (uint32_t) tmp.st_value;
+
+  return dst;
+}
+
 typedef struct ctf_name_list_accum_cb_arg
 {
   char **names;
index 9dad4b93c05380ff398c52299f5293fbc71b31cb..d4b668565a1f7a5179478baeca283941f606bd1c 100644 (file)
@@ -1,4 +1,4 @@
-/* Miscellaneous utilities.
+/* Simple data structure utilities and helpers.
    Copyright (C) 2019-2025 Free Software Foundation, Inc.
 
    This file is part of libctf.
@@ -109,91 +109,6 @@ ctf_list_splice (ctf_list_t *lp, ctf_list_t *append)
   append->l_prev = NULL;
 }
 
-/* Convert a 32-bit ELF symbol to a ctf_link_sym_t.  */
-
-ctf_link_sym_t *
-ctf_elf32_to_link_sym (ctf_dict_t *fp, ctf_link_sym_t *dst, const Elf32_Sym *src,
-                      uint32_t symidx)
-{
-  Elf32_Sym tmp;
-  int needs_flipping = 0;
-
-#ifdef WORDS_BIGENDIAN
-  if (fp->ctf_symsect_little_endian)
-    needs_flipping = 1;
-#else
-  if (!fp->ctf_symsect_little_endian)
-    needs_flipping = 1;
-#endif
-
-  memcpy (&tmp, src, sizeof (Elf32_Sym));
-  if (needs_flipping)
-    {
-      swap_thing (tmp.st_name);
-      swap_thing (tmp.st_size);
-      swap_thing (tmp.st_shndx);
-      swap_thing (tmp.st_value);
-    }
-  /* The name must be in the external string table.  */
-  if (tmp.st_name < fp->ctf_str[CTF_STRTAB_1].cts_len)
-    dst->st_name = (const char *) fp->ctf_str[CTF_STRTAB_1].cts_strs + tmp.st_name;
-  else
-    dst->st_name = _CTF_NULLSTR;
-  dst->st_nameidx_set = 0;
-  dst->st_symidx = symidx;
-  dst->st_shndx = tmp.st_shndx;
-  dst->st_type = ELF32_ST_TYPE (tmp.st_info);
-  dst->st_value = tmp.st_value;
-
-  return dst;
-}
-
-/* Convert a 64-bit ELF symbol to a ctf_link_sym_t.  */
-
-ctf_link_sym_t *
-ctf_elf64_to_link_sym (ctf_dict_t *fp, ctf_link_sym_t *dst, const Elf64_Sym *src,
-                      uint32_t symidx)
-{
-  Elf64_Sym tmp;
-  int needs_flipping = 0;
-
-#ifdef WORDS_BIGENDIAN
-  if (fp->ctf_symsect_little_endian)
-    needs_flipping = 1;
-#else
-  if (!fp->ctf_symsect_little_endian)
-    needs_flipping = 1;
-#endif
-
-  memcpy (&tmp, src, sizeof (Elf64_Sym));
-  if (needs_flipping)
-    {
-      swap_thing (tmp.st_name);
-      swap_thing (tmp.st_size);
-      swap_thing (tmp.st_shndx);
-      swap_thing (tmp.st_value);
-    }
-
-  /* The name must be in the external string table.  */
-  if (tmp.st_name < fp->ctf_str[CTF_STRTAB_1].cts_len)
-    dst->st_name = (const char *) fp->ctf_str[CTF_STRTAB_1].cts_strs + tmp.st_name;
-  else
-    dst->st_name = _CTF_NULLSTR;
-  dst->st_nameidx_set = 0;
-  dst->st_symidx = symidx;
-  dst->st_shndx = tmp.st_shndx;
-  dst->st_type = ELF32_ST_TYPE (tmp.st_info);
-
-  /* We only care if the value is zero, so avoid nonzeroes turning into
-     zeroes.  */
-  if (_libctf_unlikely_ (tmp.st_value != 0 && ((uint32_t) tmp.st_value == 0)))
-    dst->st_value = 1;
-  else
-    dst->st_value = (uint32_t) tmp.st_value;
-
-  return dst;
-}
-
 /* A string appender working on dynamic strings.  Returns NULL on OOM.  */
 
 char *