]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
bfd_copy_private_symbol_data
authorAlan Modra <amodra@gmail.com>
Fri, 21 Nov 2025 22:43:26 +0000 (09:13 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 21 Nov 2025 22:43:26 +0000 (09:13 +1030)
Allow copy_private_symbol_data to replace osym if a target desires.
Change isym similarly for symmetry.  The idea is to make it possible
to give the asymbol an output target specific extension.  Some
targets, eg. som, use such an extension when outputting symbols,
behaving badly if the input object is not som.  There are no
functional changes in this patch; It just changes the signatures.

bfd/
* elf-bfd.h (_bfd_elf_copy_private_symbol_data): Replace
asymbol* params with asymbol**.
* elf.c (_bfd_elf_copy_private_symbol_data): Likewise.
* libbfd-in.h (_bfd_bool_bfd_asymbol_bfd_asymbol_true): Likewise.
* libbfd.c (_bfd_bool_bfd_asymbol_bfd_asymbol_true): Likewise.
* mach-o.c (bfd_mach_o_bfd_copy_private_symbol_data): Likewise.
* mach-o.h (bfd_mach_o_bfd_copy_private_symbol_data): Likewise.
* plugin.c (bfd_plugin_bfd_copy_private_symbol_data): Likewise.
* som.c (som_bfd_copy_private_symbol_data): Likewise.
* targets.c (bfd_target <_bfd_copy_private_symbol_data>): Likewise.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
binutils/
* objcopy.c (copy_object): Adjust bfd_copy_private_symbol_data call.
gas/
* symbols.c symbol_clone): Adjust bfd_copy_private_symbol_data call.

13 files changed:
bfd/bfd-in2.h
bfd/elf-bfd.h
bfd/elf.c
bfd/libbfd-in.h
bfd/libbfd.c
bfd/libbfd.h
bfd/mach-o.c
bfd/mach-o.h
bfd/plugin.c
bfd/som.c
bfd/targets.c
binutils/objcopy.c
gas/symbols.c

index 645c884bdb8cfead53927ac3c6b751bb9db63b13..6c05c21a0da395113df69c9a988673d7b4a3e03d 100644 (file)
@@ -7665,8 +7665,8 @@ typedef struct bfd_target
                                          struct bfd_link_info *);
   /* Called to copy BFD private symbol data from one symbol
      to another.  */
-  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
-                                        bfd *, asymbol *);
+  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol **,
+                                        bfd *, asymbol **);
   /* Called to copy BFD private header data from one object file
      to another.  */
   bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
index 418b4e91b8b6b3df5be8d1a1f53886b869717d0b..73c5a5a0ec635aa24468516eb6c52517d5767cba 100644 (file)
@@ -2406,7 +2406,7 @@ extern bool _bfd_elf_fixup_group_sections
 extern bool _bfd_elf_copy_private_header_data
   (bfd *, bfd *) ATTRIBUTE_HIDDEN;
 extern bool _bfd_elf_copy_private_symbol_data
-  (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
 extern bool _bfd_elf_copy_private_section_data
   (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
   ATTRIBUTE_HIDDEN;
index fff7e83fd3487176ad63ef36272eab3b4dc1b671..d51552e2a2da45fe6244e90234df7bd542801a1d 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -8685,15 +8685,15 @@ _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
 
 bool
 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
-                                  asymbol *isymarg,
+                                  asymbol **isymarg,
                                   bfd *obfd ATTRIBUTE_UNUSED,
-                                  asymbol *osymarg)
+                                  asymbol **osymarg)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
     return true;
 
-  elf_symbol_type *isym = elf_symbol_from (isymarg);
-  elf_symbol_type *osym = elf_symbol_from (osymarg);
+  elf_symbol_type *isym = elf_symbol_from (*isymarg);
+  elf_symbol_type *osym = elf_symbol_from (*osymarg);
   if (isym != NULL
       && isym->internal_elf_sym.st_shndx != 0
       && osym != NULL
index 93e49b8b3d5d9e307fae7cde0d9a5d4bcffb8604..254597a2271999cd3f8475584fbb8dd54950ff87 100644 (file)
@@ -179,7 +179,7 @@ extern bool _bfd_bool_bfd_uint_true
 extern bool _bfd_bool_bfd_asection_bfd_asection_true
   (bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
 extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
-  (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
 extern bool _bfd_bool_bfd_ptr_true
   (bfd *, void *) ATTRIBUTE_HIDDEN;
 extern void *_bfd_ptr_bfd_null_error
index cb9862c399df9bd911320e1420f78c62664417c9..49e5b1775002409a39bf1e7a677cc6ff54e35065 100644 (file)
@@ -113,9 +113,9 @@ _bfd_bool_bfd_asection_bfd_asection_true (bfd *ibfd ATTRIBUTE_UNUSED,
 
 bool
 _bfd_bool_bfd_asymbol_bfd_asymbol_true (bfd *ibfd ATTRIBUTE_UNUSED,
-                                       asymbol *isym ATTRIBUTE_UNUSED,
+                                       asymbol **isym ATTRIBUTE_UNUSED,
                                        bfd *obfd ATTRIBUTE_UNUSED,
-                                       asymbol *osym ATTRIBUTE_UNUSED)
+                                       asymbol **osym ATTRIBUTE_UNUSED)
 {
   return true;
 }
index 3e522dd4ab4578c64fc8bd215d605b2109808717..2ae9b368c97c95c1667b04e1edf78df8c1c9d1b9 100644 (file)
@@ -185,7 +185,7 @@ extern bool _bfd_bool_bfd_uint_true
 extern bool _bfd_bool_bfd_asection_bfd_asection_true
   (bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
 extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
-  (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+  (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
 extern bool _bfd_bool_bfd_ptr_true
   (bfd *, void *) ATTRIBUTE_HIDDEN;
 extern void *_bfd_ptr_bfd_null_error
index e184ba7b5df423f96b073dbdf00dabb592c41db9..c05a1c20728eeaca55f8efecfe3eb6c831652ad1 100644 (file)
@@ -562,15 +562,15 @@ bfd_mach_o_append_command (bfd *abfd, bfd_mach_o_load_command *cmd)
 
 bool
 bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd,
-                                        asymbol *isymbol,
+                                        asymbol **isymbol,
                                         bfd *obfd ATTRIBUTE_UNUSED,
-                                        asymbol *osymbol)
+                                        asymbol **osymbol)
 {
   if (ibfd->xvec->flavour != bfd_target_mach_o_flavour)
     return true;
 
-  bfd_mach_o_asymbol *os = (bfd_mach_o_asymbol *) osymbol;
-  bfd_mach_o_asymbol *is = (bfd_mach_o_asymbol *) isymbol;
+  bfd_mach_o_asymbol *os = (bfd_mach_o_asymbol *) *osymbol;
+  bfd_mach_o_asymbol *is = (bfd_mach_o_asymbol *) *isymbol;
   os->n_type = is->n_type;
   os->n_sect = is->n_sect;
   os->n_desc = is->n_desc;
index 1cda07226e5c806763f2793c0cc89b2c7f99a432..3f2a7c1d3fd7a830cb78bd7a53d21a6c39ca8266 100644 (file)
@@ -688,8 +688,8 @@ int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type,
                               bfd_mach_o_load_command **);
 bool bfd_mach_o_new_section_hook (bfd *, asection *);
 bool bfd_mach_o_write_contents (bfd *);
-bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
-                                             bfd *, asymbol *);
+bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol **,
+                                             bfd *, asymbol **);
 bool bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
                                               bfd *, asection *,
                                               struct bfd_link_info *);
index 45f17fee25ad301dd7e3e86480d99d1632b368fc..c0421307b8197c83dc9b74ccee76e72cba5014f8 100644 (file)
@@ -796,9 +796,9 @@ bfd_plugin_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
 
 static bool
 bfd_plugin_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
-                                        asymbol *isymbol ATTRIBUTE_UNUSED,
+                                        asymbol **isymbol ATTRIBUTE_UNUSED,
                                         bfd *obfd ATTRIBUTE_UNUSED,
-                                        asymbol *osymbol ATTRIBUTE_UNUSED)
+                                        asymbol **osymbol ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
   return true;
index 3d1cd0e828c775e353180f7e53666611fc24b69f..adc9c55bd17dbd7d425f2577c0919ebc8873db97 100644 (file)
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -5345,9 +5345,9 @@ som_new_section_hook (bfd *abfd, asection *newsect)
 
 static bool
 som_bfd_copy_private_symbol_data (bfd *ibfd,
-                                 asymbol *isymbol,
+                                 asymbol **isymbol,
                                  bfd *obfd ATTRIBUTE_UNUSED,
-                                 asymbol *osymbol)
+                                 asymbol **osymbol)
 {
   /* One day we may try to grok other private data.  */
   if (ibfd->xvec->flavour != bfd_target_som_flavour)
@@ -5355,8 +5355,8 @@ som_bfd_copy_private_symbol_data (bfd *ibfd,
 
   /* The only private information we need to copy is the argument relocation
      bits.  */
-  struct som_symbol *input_symbol = (struct som_symbol *) isymbol;
-  struct som_symbol *output_symbol = (struct som_symbol *) osymbol;
+  struct som_symbol *input_symbol = (struct som_symbol *) *isymbol;
+  struct som_symbol *output_symbol = (struct som_symbol *) *osymbol;
   output_symbol->tc_data.ap.hppa_arg_reloc =
     input_symbol->tc_data.ap.hppa_arg_reloc;
 
index 89557a060e8c7b6f6511f0faac2363ec1b592fbe..4ac70921c35376cdeeb802a46b690e4dd68fca02 100644 (file)
@@ -308,8 +308,8 @@ BFD_JUMP_TABLE macros.
 .                                         struct bfd_link_info *);
 .  {* Called to copy BFD private symbol data from one symbol
 .     to another.  *}
-.  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
-.                                        bfd *, asymbol *);
+.  bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol **,
+.                                        bfd *, asymbol **);
 .  {* Called to copy BFD private header data from one object file
 .     to another.  *}
 .  bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
index 4e1db46faaaad34f399a1f22e5d4b01b03249687..782fd469165e994fe8c9d7d24d284ee45ebb2837 100644 (file)
@@ -3392,7 +3392,7 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
     }
 
   for (long s = 0; s < symcount; s++)
-    if (!bfd_copy_private_symbol_data (ibfd, osympp[s], obfd, osympp[s]))
+    if (!bfd_copy_private_symbol_data (ibfd, osympp + s, obfd, osympp + s))
       goto fail;
 
   if (dhandle != NULL)
index 275d056cd4284a58c381d9e73bdcbfbc6da8c585..e6f7826abd0223b4f0f8b5590d399a4a5e928f92 100644 (file)
@@ -791,8 +791,8 @@ symbol_clone (symbolS *orgsymP, int replace)
   bsymnew->name = bsymorg->name;
   bsymnew->flags = bsymorg->flags & ~BSF_SECTION_SYM;
   bsymnew->section = bsymorg->section;
-  bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), bsymorg,
-                               bfd_asymbol_bfd (bsymnew), bsymnew);
+  bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), &orgsymP->bsym,
+                               bfd_asymbol_bfd (bsymnew), &newsymP->bsym);
 
 #ifdef obj_symbol_clone_hook
   obj_symbol_clone_hook (newsymP, orgsymP);