ELF output symbol hooks int vs. bfd_boolean
authorAlan Modra <amodra@gmail.com>
Sun, 28 Mar 2021 23:09:15 +0000 (09:39 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 29 Mar 2021 00:52:21 +0000 (11:22 +1030)
elf_backend_link_output_symbol_hook and elf_link_output_symstrtab may
return 2 when a symbol is to be discarded.  Update places that use
bfd_boolean rather than int for these functions.

* elflink.c (elf_link_output_symstrtab): Make flinfo parameter
a void pointer.
(bfd_elf_final_link): Delete out_sym_func typedef and don't cast
elf_link_output_symstrtab when calling output_arch_syms and
output_arch_local_syms.
* elf-bfd.h (struct elf_backend_data <elf_backend_output_arch_syms,
elf_backend_output_arch_local_syms>): Change return type of func
arg to match elf_link_output_symstrtab.
* elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Correct
return type.
* elf32-nds32.c (nds32_elf_output_symbol_hook): Correct return type.
(nds32_elf_output_arch_syms): Correct func return type.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf-vxworks.h
bfd/elf32-nds32.c
bfd/elflink.c

index 1fbbe3361db73f14046aa6639c5e5b62b12a5c33..5cdb6c87313f0fe2c6681a6b921c65783583dba8 100644 (file)
@@ -1,3 +1,18 @@
+2021-03-29  Alan Modra  <amodra@gmail.com>
+
+       * elflink.c (elf_link_output_symstrtab): Make flinfo parameter
+       a void pointer.
+       (bfd_elf_final_link): Delete out_sym_func typedef and don't cast
+       elf_link_output_symstrtab when calling output_arch_syms and
+       output_arch_local_syms.
+       * elf-bfd.h (struct elf_backend_data <elf_backend_output_arch_syms,
+       elf_backend_output_arch_local_syms>): Change return type of func
+       arg to match elf_link_output_symstrtab.
+       * elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Correct
+       return type.
+       * elf32-nds32.c (nds32_elf_output_symbol_hook): Correct return type.
+       (nds32_elf_output_arch_syms): Correct func return type.
+
 2021-03-29  Alan Modra  <amodra@gmail.com>
 
        * elf-m10200.c (mn10200_elf_relocate_section): Return int.
index 04785a814e897ed310804e7fe07449be12aad9e6..dec6925fd4d94d625c3c31dd63286bc45c0b1aa8 100644 (file)
@@ -1259,16 +1259,16 @@ struct elf_backend_data
      not handled in the hash table.  */
   bfd_boolean (*elf_backend_output_arch_local_syms)
     (bfd *, struct bfd_link_info *, void *,
-     bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
-                     struct elf_link_hash_entry *));
+     int (*) (void *, const char *, Elf_Internal_Sym *, asection *,
+             struct elf_link_hash_entry *));
 
   /* This function, if defined, is called after all symbols are emitted
      into the symtab section.  It allows the backend to emit special
      global symbols not handled in the hash table.  */
   bfd_boolean (*elf_backend_output_arch_syms)
     (bfd *, struct bfd_link_info *, void *,
-     bfd_boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *,
-                     struct elf_link_hash_entry *));
+     int (*) (void *, const char *, Elf_Internal_Sym *, asection *,
+             struct elf_link_hash_entry *));
 
   /* Filter what symbols of the output file to include in the import
      library if one is created.  */
index dbdf1a52e101d6dda895279688ed9c987cac2a60..d0207a7849908d37435c66b09ae6e1be27dfc397 100644 (file)
@@ -22,7 +22,7 @@
 bfd_boolean elf_vxworks_add_symbol_hook
   (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **,
    flagword *, asection **, bfd_vma *);
-bfd_boolean elf_vxworks_link_output_symbol_hook
+int elf_vxworks_link_output_symbol_hook
   (struct bfd_link_info *, const char *name, Elf_Internal_Sym *,
    asection *, struct elf_link_hash_entry *);
 bfd_boolean elf_vxworks_emit_relocs
index 0e63dfb575e7730ca0ac99091e5f9d4f19b7a4df..f6a89a78834a962fb60c332053a42283f799deda 100644 (file)
@@ -4677,7 +4677,7 @@ nds32_elf_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd,
                                  contents + address);
 }
 
-static bfd_boolean
+static int
 nds32_elf_output_symbol_hook (struct bfd_link_info *info,
                              const char *name,
                              Elf_Internal_Sym *elfsym ATTRIBUTE_UNUSED,
@@ -12461,10 +12461,10 @@ static bfd_boolean
 nds32_elf_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
                            struct bfd_link_info *info,
                            void *finfo ATTRIBUTE_UNUSED,
-                           bfd_boolean (*func) (void *, const char *,
-                                                Elf_Internal_Sym *,
-                                                asection *,
-                                                struct elf_link_hash_entry *)
+                           int (*func) (void *, const char *,
+                                        Elf_Internal_Sym *,
+                                        asection *,
+                                        struct elf_link_hash_entry *)
                            ATTRIBUTE_UNUSED)
 {
   FILE *sym_ld_script = NULL;
index c5db406f2b4ba47568c2ec704d9a6cf05660eda3..6be14e7c333751d6ebb7b9e266163b8582bf891e 100644 (file)
@@ -9767,12 +9767,13 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
 /* Add a symbol to the output symbol string table.  */
 
 static int
-elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
+elf_link_output_symstrtab (void *finf,
                           const char *name,
                           Elf_Internal_Sym *elfsym,
                           asection *input_sec,
                           struct elf_link_hash_entry *h)
 {
+  struct elf_final_link_info *flinfo = finf;
   int (*output_symbol_hook)
     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
      struct elf_link_hash_entry *);
@@ -12662,13 +12663,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   if (bed->elf_backend_output_arch_local_syms
       && (info->strip != strip_all || emit_relocs))
     {
-      typedef int (*out_sym_func)
-       (void *, const char *, Elf_Internal_Sym *, asection *,
-        struct elf_link_hash_entry *);
-
       if (! ((*bed->elf_backend_output_arch_local_syms)
-            (abfd, info, &flinfo,
-             (out_sym_func) elf_link_output_symstrtab)))
+            (abfd, info, &flinfo, elf_link_output_symstrtab)))
        {
          ret = FALSE;
          goto return_local_hash_table;
@@ -12796,13 +12792,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   if (bed->elf_backend_output_arch_syms
       && (info->strip != strip_all || emit_relocs))
     {
-      typedef int (*out_sym_func)
-       (void *, const char *, Elf_Internal_Sym *, asection *,
-        struct elf_link_hash_entry *);
-
       if (! ((*bed->elf_backend_output_arch_syms)
-            (abfd, info, &flinfo,
-             (out_sym_func) elf_link_output_symstrtab)))
+            (abfd, info, &flinfo, elf_link_output_symstrtab)))
        {
          ret = FALSE;
          goto return_local_hash_table;