ELF: Add target_os to elf_link_hash_table/elf_backend_data
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 6 Jun 2020 13:45:23 +0000 (06:45 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 6 Jun 2020 13:45:38 +0000 (06:45 -0700)
Add target_os to elf_backend_data to identify target OS.  Add target_os,
to elf_link_hash_table to identify target OS for linker output.

* elf-bfd.h (elf_target_os): New.
(elf_link_hash_table): Add target_os.
(elf_backend_data): Add target_os.
* elf32-arm.c (elf32_arm_link_hash_table): Remove vxworks_p,
symbian_p and nacl_p.
(create_got_section): Updated.
(elf32_arm_create_dynamic_sections): Likewise.
(arm_type_of_stub): Likewise.
(elf32_arm_create_or_find_stub_sec): Likewise.
(elf32_arm_allocate_plt_entry): Likewise.
(elf32_arm_populate_plt_entry): Likewise.
(elf32_arm_final_link_relocate): Likewise.
(elf32_arm_check_relocs): Likewise.
(allocate_dynrelocs_for_symbol): Likewise.
(elf32_arm_finish_dynamic_symbol): Likewise.
(elf32_arm_finish_dynamic_sections): Likewise.
(elf32_arm_output_plt_map_1): Likewise.
(elf32_arm_output_arch_local_syms): Likewise.
(elf32_arm_add_symbol_hook): Likewise.
(elf32_arm_nacl_link_hash_table_create): Likewise.
(elf32_arm_vxworks_link_hash_table_create): Likewise.
(elf32_arm_symbian_link_hash_table_create): Likewise.
(ELF_TARGET_OS): New.
* elf32-i386.c (elf_i386_arch_bed): Removed.
(elf_backend_arch_data): Likewise.
(elf_i386_solaris_arch_bed): Likewise.
(elf_i386_nacl_arch_bed): Likewise.
(elf_i386_vxworks_arch_bed): Likewise.
(elf_i386_relocate_section): Updated.
(elf_i386_finish_dynamic_sections): Likewise.
(elf_i386_get_synthetic_symtab): Likewise.
(elf_i386_link_setup_gnu_properties): Likewise.
(ELF_TARGET_OS): New.
* elf32-mips.c (ELF_TARGET_OS): New.
* elf32-ppc.c (ppc_elf_link_hash_table): Remove is_vxworks.
(ppc_elf_create_got): Updated.
(ppc_elf_create_dynamic_sections): Likewise.
(ppc_elf_check_relocs): Likewise.
(ppc_elf_adjust_dynamic_symbol): Likewise.
(ppc_elf_size_dynamic_sections): Likewise.
(ppc_elf_relocate_section): Likewise.
(ppc_elf_finish_dynamic_sections): Likewise.
(ppc_elf_vxworks_link_hash_table_create): Likewise.
(ELF_TARGET_OS): New.
* elf32-sh.c (elf_sh_link_hash_table): Remove vxworks_p.
(sh_elf_link_hash_table_create): Updated.
(sh_elf_create_dynamic_sections): Likewise.
(allocate_dynrelocs): Likewise.
(sh_elf_size_dynamic_sections): Likewise.
(sh_elf_relocate_section): Likewise.
(sh_elf_finish_dynamic_symbol): Likewise.
(sh_elf_finish_dynamic_sections): Likewise.
(ELF_TARGET_OS): New.
* elf32-sparc.c (elf32_sparc_vxworks_link_hash_table_create):
Removed.
(bfd_elf32_bfd_link_hash_table_create): Likewise.
(ELF_TARGET_OS): New.
* elf64-x86-64.c (elf_x86_64_arch_bed): Removed.
(elf_x86_64_solaris_arch_bed): Likewise.
(elf_x86_64_nacl_arch_bed): Likewise.
(elf_x86_64_finish_dynamic_sections): Updated.
(elf_x86_64_get_synthetic_symtab): Likewise.
(elf_x86_64_link_setup_gnu_properties): Likewise.
(ELF_TARGET_OS): New.
* elflink.c (_bfd_elf_link_hash_table_init): Initialize
target_o.
* elfxx-mips.c (mips_elf_link_hash_table): Remove is_vxworks.
(MIPS_ELF_REL_DYN_NAME): Updated.
(ELF_MIPS_GP_OFFSET): Likewise.
(mips_elf_create_local_got_entry): Likewise.
(mips_elf_allocate_dynamic_relocations): Likewise.
(mips_elf_count_got_symbols): Likewise.
(is_gott_symbol): Likewise.
(mips_elf_calculate_relocation): Likewise.
(mips_elf_create_dynamic_relocation): Likewise.
(_bfd_mips_elf_check_relocs): Likewise.
(allocate_dynrelocs): Likewise.
(_bfd_mips_elf_adjust_dynamic_symbol): Likewise.
(mips_elf_lay_out_got): Likewise.
(mips_elf_set_plt_sym_value): Likewise.
(_bfd_mips_elf_size_dynamic_sections): Likewise.
(_bfd_mips_elf_finish_dynamic_symbol): Likewise.
(_bfd_mips_elf_finish_dynamic_sections): Likewise.
(_bfd_mips_elf_final_link): Likewise.
(_bfd_mips_init_file_header): Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_create_dynamic_sections):
Likewise.
(allocate_dynrelocs): Likewise.
(_bfd_sparc_elf_size_dynamic_sections): Likewise.
(_bfd_sparc_elf_relocate_section): Likewise.
(_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
(sparc_finish_dyn): Likewise.
(_bfd_sparc_elf_finish_dynamic_sections): Likewise.
* elfxx-target.h (ELF_TARGET_OS): New.
(elfNN_bed): Add ELF_TARGET_OS.
* elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated.
(_bfd_x86_elf_link_hash_table_create): Likewise.
(_bfd_x86_elf_size_dynamic_sections): Likewise.
(_bfd_x86_elf_finish_dynamic_sections): Likewise.
(_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
(_bfd_x86_elf_link_setup_gnu_properties): Likewise.
* elfxx-x86.h (elf_x86_target_os): Removed.
(elf_x86_backend_data): Likewise.
(get_elf_x86_backend_data): Likewise.
(elf_x86_link_hash_table): Remove target_os.

15 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf32-arm.c
bfd/elf32-i386.c
bfd/elf32-mips.c
bfd/elf32-ppc.c
bfd/elf32-sh.c
bfd/elf32-sparc.c
bfd/elf64-x86-64.c
bfd/elflink.c
bfd/elfxx-mips.c
bfd/elfxx-sparc.c
bfd/elfxx-target.h
bfd/elfxx-x86.c
bfd/elfxx-x86.h

index 949bcec74c435ee79ef71d30b5c4f7f6aa07568f..0fb6637a762219726c85f938ae34a9316a6a64fc 100644 (file)
@@ -1,3 +1,111 @@
+2020-06-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf-bfd.h (elf_target_os): New.
+       (elf_link_hash_table): Add target_os.
+       (elf_backend_data): Add target_os.
+       * elf32-arm.c (elf32_arm_link_hash_table): Remove vxworks_p,
+       symbian_p and nacl_p.
+       (create_got_section): Updated.
+       (elf32_arm_create_dynamic_sections): Likewise.
+       (arm_type_of_stub): Likewise.
+       (elf32_arm_create_or_find_stub_sec): Likewise.
+       (elf32_arm_allocate_plt_entry): Likewise.
+       (elf32_arm_populate_plt_entry): Likewise.
+       (elf32_arm_final_link_relocate): Likewise.
+       (elf32_arm_check_relocs): Likewise.
+       (allocate_dynrelocs_for_symbol): Likewise.
+       (elf32_arm_finish_dynamic_symbol): Likewise.
+       (elf32_arm_finish_dynamic_sections): Likewise.
+       (elf32_arm_output_plt_map_1): Likewise.
+       (elf32_arm_output_arch_local_syms): Likewise.
+       (elf32_arm_add_symbol_hook): Likewise.
+       (elf32_arm_nacl_link_hash_table_create): Likewise.
+       (elf32_arm_vxworks_link_hash_table_create): Likewise.
+       (elf32_arm_symbian_link_hash_table_create): Likewise.
+       (ELF_TARGET_OS): New.
+       * elf32-i386.c (elf_i386_arch_bed): Removed.
+       (elf_backend_arch_data): Likewise.
+       (elf_i386_solaris_arch_bed): Likewise.
+       (elf_i386_nacl_arch_bed): Likewise.
+       (elf_i386_vxworks_arch_bed): Likewise.
+       (elf_i386_relocate_section): Updated.
+       (elf_i386_finish_dynamic_sections): Likewise.
+       (elf_i386_get_synthetic_symtab): Likewise.
+       (elf_i386_link_setup_gnu_properties): Likewise.
+       (ELF_TARGET_OS): New.
+       * elf32-mips.c (ELF_TARGET_OS): New.
+       * elf32-ppc.c (ppc_elf_link_hash_table): Remove is_vxworks.
+       (ppc_elf_create_got): Updated.
+       (ppc_elf_create_dynamic_sections): Likewise.
+       (ppc_elf_check_relocs): Likewise.
+       (ppc_elf_adjust_dynamic_symbol): Likewise.
+       (ppc_elf_size_dynamic_sections): Likewise.
+       (ppc_elf_relocate_section): Likewise.
+       (ppc_elf_finish_dynamic_sections): Likewise.
+       (ppc_elf_vxworks_link_hash_table_create): Likewise.
+       (ELF_TARGET_OS): New.
+       * elf32-sh.c (elf_sh_link_hash_table): Remove vxworks_p.
+       (sh_elf_link_hash_table_create): Updated.
+       (sh_elf_create_dynamic_sections): Likewise.
+       (allocate_dynrelocs): Likewise.
+       (sh_elf_size_dynamic_sections): Likewise.
+       (sh_elf_relocate_section): Likewise.
+       (sh_elf_finish_dynamic_symbol): Likewise.
+       (sh_elf_finish_dynamic_sections): Likewise.
+       (ELF_TARGET_OS): New.
+       * elf32-sparc.c (elf32_sparc_vxworks_link_hash_table_create):
+       Removed.
+       (bfd_elf32_bfd_link_hash_table_create): Likewise.
+       (ELF_TARGET_OS): New.
+       * elf64-x86-64.c (elf_x86_64_arch_bed): Removed.
+       (elf_x86_64_solaris_arch_bed): Likewise.
+       (elf_x86_64_nacl_arch_bed): Likewise.
+       (elf_x86_64_finish_dynamic_sections): Updated.
+       (elf_x86_64_get_synthetic_symtab): Likewise.
+       (elf_x86_64_link_setup_gnu_properties): Likewise.
+       (ELF_TARGET_OS): New.
+       * elflink.c (_bfd_elf_link_hash_table_init): Initialize
+       target_o.
+       * elfxx-mips.c (mips_elf_link_hash_table): Remove is_vxworks.
+       (MIPS_ELF_REL_DYN_NAME): Updated.
+       (ELF_MIPS_GP_OFFSET): Likewise.
+       (mips_elf_create_local_got_entry): Likewise.
+       (mips_elf_allocate_dynamic_relocations): Likewise.
+       (mips_elf_count_got_symbols): Likewise.
+       (is_gott_symbol): Likewise.
+       (mips_elf_calculate_relocation): Likewise.
+       (mips_elf_create_dynamic_relocation): Likewise.
+       (_bfd_mips_elf_check_relocs): Likewise.
+       (allocate_dynrelocs): Likewise.
+       (_bfd_mips_elf_adjust_dynamic_symbol): Likewise.
+       (mips_elf_lay_out_got): Likewise.
+       (mips_elf_set_plt_sym_value): Likewise.
+       (_bfd_mips_elf_size_dynamic_sections): Likewise.
+       (_bfd_mips_elf_finish_dynamic_symbol): Likewise.
+       (_bfd_mips_elf_finish_dynamic_sections): Likewise.
+       (_bfd_mips_elf_final_link): Likewise.
+       (_bfd_mips_init_file_header): Likewise.
+       * elfxx-sparc.c (_bfd_sparc_elf_create_dynamic_sections):
+       Likewise.
+       (allocate_dynrelocs): Likewise.
+       (_bfd_sparc_elf_size_dynamic_sections): Likewise.
+       (_bfd_sparc_elf_relocate_section): Likewise.
+       (_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
+       (sparc_finish_dyn): Likewise.
+       (_bfd_sparc_elf_finish_dynamic_sections): Likewise.
+       * elfxx-target.h (ELF_TARGET_OS): New.
+       (elfNN_bed): Add ELF_TARGET_OS.
+       * elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated.
+       (_bfd_x86_elf_link_hash_table_create): Likewise.
+       (_bfd_x86_elf_size_dynamic_sections): Likewise.
+       (_bfd_x86_elf_finish_dynamic_sections): Likewise.
+       (_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
+       (_bfd_x86_elf_link_setup_gnu_properties): Likewise.
+       * elfxx-x86.h (elf_x86_target_os): Removed.
+       (elf_x86_backend_data): Likewise.
+       (get_elf_x86_backend_data): Likewise.
+       (elf_x86_link_hash_table): Remove target_os.
+
 2020-06-06  Alan Modra  <amodra@gmail.com>
 
        * reloc.c: Rename
index fbdd19ba21e35fbbe15da230c3ad5ce7ecb94b6d..3736ba6c7d646d8552676c352b3cae08b54cf667 100644 (file)
@@ -540,6 +540,15 @@ struct bfd_link_needed_list
   const char *name;
 };
 
+enum elf_target_os
+{
+  is_normal,
+  is_symbian,  /* Symbian OS.  */
+  is_solaris,  /* Solaris.  */
+  is_vxworks,  /* VxWorks.  */
+  is_nacl      /* Native Client.  */
+};
+
 /* ELF linker hash table.  */
 
 struct elf_link_hash_table
@@ -641,6 +650,9 @@ struct elf_link_hash_table
   asection *tls_sec;
   bfd_size_type tls_size;  /* Bytes.  */
 
+  /* Target OS for linker output.  */
+  enum elf_target_os target_os;
+
   /* A linked list of dynamic BFD's loaded in the link.  */
   struct elf_link_loaded_list *dyn_loaded;
 
@@ -861,6 +873,9 @@ struct elf_backend_data
      extensions to elf_obj_tdata and elf_link_hash_table structures.  */
   enum elf_target_id target_id;
 
+  /* Target OS.  */
+  enum elf_target_os target_os;
+
   /* The ELF machine code (EM_xxxx) for this backend.  */
   int elf_machine_code;
 
index 8d184b5a094ddd1f85ecb8b506104bfe3a38526b..f2ac094acd6659ec90c148252bf3224361027c1a 100644 (file)
@@ -3360,15 +3360,6 @@ struct elf32_arm_link_hash_table
   /* The number of bytes in the subsequent PLT etries.  */
   bfd_size_type plt_entry_size;
 
-  /* True if the target system is VxWorks.  */
-  int vxworks_p;
-
-  /* True if the target system is Symbian OS.  */
-  int symbian_p;
-
-  /* True if the target system is Native Client.  */
-  int nacl_p;
-
   /* True if the target uses REL relocations.  */
   bfd_boolean use_rel;
 
@@ -3803,7 +3794,7 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
     return FALSE;
 
   /* BPABI objects never have a GOT, or associated sections.  */
-  if (htab->symbian_p)
+  if (htab->root.target_os == is_symbian)
     return TRUE;
 
   if (! _bfd_elf_create_got_section (dynobj, info))
@@ -3960,7 +3951,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  if (htab->vxworks_p)
+  if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
        return FALSE;
@@ -4483,11 +4474,11 @@ arm_type_of_stub (struct bfd_link_info *info,
                ? (r_type == R_ARM_TLS_CALL
                   /* TLS PIC Stub.  */
                   ? arm_stub_long_branch_any_tls_pic
-                  : (globals->nacl_p
+                  : (globals->root.target_os == is_nacl
                      ? arm_stub_long_branch_arm_nacl_pic
                      : arm_stub_long_branch_any_arm_pic))
                /* non-PIC stubs.  */
-               : (globals->nacl_p
+               : (globals->root.target_os == is_nacl
                   ? arm_stub_long_branch_arm_nacl
                   : arm_stub_long_branch_any_any);
            }
@@ -4752,7 +4743,7 @@ elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
        stub_sec_p = &htab->stub_group[link_sec->id].stub_sec;
       stub_sec_prefix = link_sec->name;
       out_sec = link_sec->output_section;
-      align = htab->nacl_p ? 4 : 3;
+      align = htab->root.target_os == is_nacl ? 4 : 3;
     }
 
   if (*stub_sec_p == NULL)
@@ -9524,7 +9515,7 @@ elf32_arm_allocate_plt_entry (struct bfd_link_info *info,
       sgotplt = htab->root.igotplt;
 
       /* NaCl uses a special first entry in .iplt too.  */
-      if (htab->nacl_p && splt->size == 0)
+      if (htab->root.target_os == is_nacl && splt->size == 0)
        splt->size += htab->plt_header_size;
 
       /* Allocate room for an R_ARM_IRELATIVE relocation in .rel.iplt.  */
@@ -9566,7 +9557,7 @@ elf32_arm_allocate_plt_entry (struct bfd_link_info *info,
   root_plt->offset = splt->size;
   splt->size += htab->plt_entry_size;
 
-  if (!htab->symbian_p)
+  if (htab->root.target_os != is_symbian)
     {
       /* We also need to make an entry in the .got.plt section, which
         will be placed in the .got section by the linker script.  */
@@ -9647,7 +9638,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
   BFD_ASSERT (splt != NULL && srel != NULL);
 
   /* Fill in the entry in the procedure linkage table.  */
-  if (htab->symbian_p)
+  if (htab->root.target_os == is_symbian)
     {
       BFD_ASSERT (dynindx >= 0);
       put_arm_insn (htab, output_bfd,
@@ -9704,7 +9695,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
                     + root_plt->offset);
 
       ptr = splt->contents + root_plt->offset;
-      if (htab->vxworks_p && bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
        {
          unsigned int i;
          bfd_vma val;
@@ -9722,7 +9713,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
                put_arm_insn (htab, output_bfd, val, ptr);
            }
        }
-      else if (htab->vxworks_p)
+      else if (htab->root.target_os == is_vxworks)
        {
          unsigned int i;
          bfd_vma val;
@@ -9760,7 +9751,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
          rel.r_addend = 0;
          SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
        }
-      else if (htab->nacl_p)
+      else if (htab->root.target_os == is_nacl)
        {
          /* Calculate the displacement between the PLT slot and the
             common tail that's part of the special initial PLT slot.  */
@@ -10465,7 +10456,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
       return bfd_reloc_ok;
 
     case R_ARM_ABS12:
-      if (!globals->vxworks_p)
+      if (globals->root.target_os != is_vxworks)
        return elf32_arm_abs12_reloc (input_bfd, hit_data, value + addend);
       /* Fall through.  */
 
@@ -10513,7 +10504,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
           || globals->root.is_relocatable_executable
           || globals->fdpic_p)
          && (input_section->flags & SEC_ALLOC)
-         && !(globals->vxworks_p
+         && !(globals->root.target_os == is_vxworks
               && strcmp (input_section->output_section->name,
                          ".tls_vars") == 0)
          && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI)
@@ -10590,7 +10581,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
              /* This symbol is local, or marked to become local.  */
              BFD_ASSERT (r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI
                          || (globals->fdpic_p && !bfd_link_pic(info)));
-             if (globals->symbian_p)
+             if (globals->root.target_os == is_symbian)
                {
                  asection *osec;
 
@@ -15513,7 +15504,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
          case R_ARM_ABS12:
            /* VxWorks uses dynamic R_ARM_ABS12 relocations for
               ldr __GOTT_INDEX__ offsets.  */
-           if (!htab->vxworks_p)
+           if (htab->root.target_os != is_vxworks)
              {
                may_need_local_target_p = TRUE;
                break;
@@ -15666,7 +15657,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
                return FALSE;
 
              /* BPABI objects never have dynamic relocations mapped.  */
-             if (htab->symbian_p)
+             if (htab->root.target_os == is_symbian)
                {
                  flagword flags;
 
@@ -16270,7 +16261,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
          /* VxWorks executables have a second set of relocations for
             each PLT entry.  They go in a separate relocation section,
             which is processed by the kernel loader.  */
-         if (htab->vxworks_p && !bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
            {
              /* There is a relocation for the initial PLT entry:
                 an R_ARM_32 relocation for _GLOBAL_OFFSET_TABLE_.  */
@@ -16314,7 +16305,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
            return FALSE;
        }
 
-      if (!htab->symbian_p)
+      if (htab->root.target_os != is_symbian)
        {
          s = htab->root.sgot;
          h->got.offset = s->size;
@@ -16575,7 +16566,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
            }
        }
 
-      if (htab->vxworks_p)
+      if (htab->root.target_os == is_vxworks)
        {
          struct elf_dyn_relocs **pp;
 
@@ -16729,7 +16720,6 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
       asection *srel;
-      bfd_boolean is_vxworks = htab->vxworks_p;
       unsigned int symndx;
       struct fdpic_local *local_fdpic_cnts;
 
@@ -16751,7 +16741,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                }
-             else if (is_vxworks
+             else if (htab->root.target_os == is_vxworks
                       && strcmp (p->sec->output_section->name,
                                  ".tls_vars") == 0)
                {
@@ -17122,7 +17112,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
          if (!add_dynamic_entry (DT_TEXTREL, 0))
            return FALSE;
        }
-      if (htab->vxworks_p
+      if (htab->root.target_os == is_vxworks
          && !elf_vxworks_add_dynamic_entries (output_bfd, info))
        return FALSE;
     }
@@ -17267,7 +17257,9 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd,
      and for FDPIC, the _GLOBAL_OFFSET_TABLE_ symbol is not absolute:
      it is relative to the ".got" section.  */
   if (h == htab->root.hdynamic
-      || (!htab->fdpic_p && !htab->vxworks_p && h == htab->root.hgot))
+      || (!htab->fdpic_p
+         && htab->root.target_os != is_vxworks
+         && h == htab->root.hgot))
     sym->st_shndx = SHN_ABS;
 
   return TRUE;
@@ -17353,7 +17345,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 
       splt = htab->root.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
-      BFD_ASSERT (htab->symbian_p || sgot != NULL);
+      BFD_ASSERT (htab->root.target_os == is_symbian || sgot != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
@@ -17371,7 +17363,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
              unsigned int type;
 
            default:
-             if (htab->vxworks_p
+             if (htab->root.target_os == is_vxworks
                  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
                bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
@@ -17396,7 +17388,8 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
              goto get_vma_if_bpabi;
 
            case DT_PLTGOT:
-             name = htab->symbian_p ? ".got" : ".got.plt";
+             name = (htab->root.target_os == is_symbian
+                     ? ".got" : ".got.plt");
              goto get_vma;
            case DT_JMPREL:
              name = RELOC_SECTION (htab, ".plt");
@@ -17409,7 +17402,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
                  bfd_set_error (bfd_error_invalid_operation);
                  return FALSE;
                }
-             if (!htab->symbian_p)
+             if (htab->root.target_os != is_symbian)
                dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
              else
                /* In the BPABI, tags in the PT_DYNAMIC section point
@@ -17420,7 +17413,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
              break;
 
            get_vma_if_bpabi:
-             if (htab->symbian_p)
+             if (htab->root.target_os == is_symbian)
                goto get_vma;
              break;
 
@@ -17442,7 +17435,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
                 relocation section, since relocation sections are
                 never allocated under the BPABI.  PLT relocs are also
                 included.  */
-             if (htab->symbian_p)
+             if (htab->root.target_os == is_symbian)
                {
                  unsigned int i;
                  type = ((dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
@@ -17518,7 +17511,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
          got_address = sgot->output_section->vma + sgot->output_offset;
          plt_address = splt->output_section->vma + splt->output_offset;
 
-         if (htab->vxworks_p)
+         if (htab->root.target_os == is_vxworks)
            {
              /* The VxWorks GOT is relocated by the dynamic linker.
                 Therefore, we must emit relocations rather than simply
@@ -17541,7 +17534,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
              SWAP_RELOC_OUT (htab) (output_bfd, &rel,
                                     htab->srelplt2->contents);
            }
-         else if (htab->nacl_p)
+         else if (htab->root.target_os == is_nacl)
            arm_nacl_put_plt0 (htab, output_bfd, splt,
                               got_address + 8 - (plt_address + 16));
          else if (using_thumb_only (htab))
@@ -17622,7 +17615,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 #endif
        }
 
-      if (htab->vxworks_p
+      if (htab->root.target_os == is_vxworks
          && !bfd_link_pic (info)
          && htab->root.splt->size > 0)
        {
@@ -17652,7 +17645,9 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
        }
     }
 
-  if (htab->nacl_p && htab->root.iplt != NULL && htab->root.iplt->size > 0)
+  if (htab->root.target_os == is_nacl
+      && htab->root.iplt != NULL
+      && htab->root.iplt->size > 0)
     /* NaCl uses a special first entry in .iplt too.  */
     arm_nacl_put_plt0 (htab, output_bfd, htab->root.iplt, 0);
 
@@ -17929,14 +17924,14 @@ elf32_arm_output_plt_map_1 (output_arch_syminfo *osi,
                    (osi->info->output_bfd, osi->sec->output_section));
 
   addr = root_plt->offset & -2;
-  if (htab->symbian_p)
+  if (htab->root.target_os == is_symbian)
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
        return FALSE;
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4))
        return FALSE;
     }
-  else if (htab->vxworks_p)
+  else if (htab->root.target_os == is_vxworks)
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
        return FALSE;
@@ -17947,7 +17942,7 @@ elf32_arm_output_plt_map_1 (output_arch_syminfo *osi,
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20))
        return FALSE;
     }
-  else if (htab->nacl_p)
+  else if (htab->root.target_os == is_nacl)
     {
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
        return FALSE;
@@ -18309,7 +18304,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
 
       /* Output mapping symbols for the plt header.  SymbianOS does not have a
         plt header.  */
-      if (htab->vxworks_p)
+      if (htab->root.target_os == is_vxworks)
        {
          /* VxWorks shared libraries have no PLT header.  */
          if (!bfd_link_pic (info))
@@ -18320,7 +18315,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
                return FALSE;
            }
        }
-      else if (htab->nacl_p)
+      else if (htab->root.target_os == is_nacl)
        {
          if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
            return FALSE;
@@ -18334,7 +18329,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
          if (!elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, 16))
            return FALSE;
        }
-      else if (!htab->symbian_p && !htab->fdpic_p)
+      else if (htab->root.target_os != is_symbian && !htab->fdpic_p)
        {
          if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
            return FALSE;
@@ -18344,7 +18339,9 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
 #endif
        }
     }
-  if (htab->nacl_p && htab->root.iplt && htab->root.iplt->size > 0)
+  if (htab->root.target_os == is_nacl
+      && htab->root.iplt
+      && htab->root.iplt->size > 0)
     {
       /* NaCl uses a special first entry in .iplt too.  */
       osi.sec = htab->root.iplt;
@@ -19916,7 +19913,7 @@ elf32_arm_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
   if (elf32_arm_hash_table (info) == NULL)
     return FALSE;
 
-  if (elf32_arm_hash_table (info)->vxworks_p
+  if (elf32_arm_hash_table (info)->root.target_os == is_vxworks
       && !elf_vxworks_add_symbol_hook (abfd, info, sym, namep,
                                       flagsp, secp, valp))
     return FALSE;
@@ -20428,8 +20425,6 @@ elf32_arm_nacl_link_hash_table_create (bfd *abfd)
       struct elf32_arm_link_hash_table *htab
        = (struct elf32_arm_link_hash_table *) ret;
 
-      htab->nacl_p = 1;
-
       htab->plt_header_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt0_entry);
       htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt_entry);
     }
@@ -20484,6 +20479,8 @@ elf32_arm_nacl_plt_sym_val (bfd_vma i, const asection *plt,
 #undef ELF_MINPAGESIZE
 #undef ELF_COMMONPAGESIZE
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS                          is_nacl
 
 #include "elf32-target.h"
 
@@ -20566,6 +20563,8 @@ elf32_arm_fdpic_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 #undef elf_backend_omit_section_dynsym
 #define elf_backend_omit_section_dynsym                elf32_arm_fdpic_omit_section_dynsym
 
+#undef ELF_TARGET_OS
+
 #include "elf32-target.h"
 
 #undef elf_match_priority
@@ -20597,7 +20596,6 @@ elf32_arm_vxworks_link_hash_table_create (bfd *abfd)
       struct elf32_arm_link_hash_table *htab
        = (struct elf32_arm_link_hash_table *) ret;
       htab->use_rel = 0;
-      htab->vxworks_p = 1;
     }
   return ret;
 }
@@ -20629,6 +20627,8 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd)
 #define elf_backend_want_plt_sym       1
 #undef  ELF_MAXPAGESIZE
 #define ELF_MAXPAGESIZE                        0x1000
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS                  is_vxworks
 
 #include "elf32-target.h"
 
@@ -20885,7 +20885,6 @@ elf32_arm_symbian_link_hash_table_create (bfd *abfd)
       htab->plt_header_size = 0;
       /* The PLT entries are each one instruction and one word.  */
       htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry);
-      htab->symbian_p = 1;
       /* Symbian uses armv5t or above, so use_blx is always true.  */
       htab->use_blx = 1;
       htab->root.is_relocatable_executable = 1;
@@ -21016,5 +21015,7 @@ elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt,
 #define elf_backend_dtrel_excludes_plt 0
 #undef  ELF_MAXPAGESIZE
 #define ELF_MAXPAGESIZE                        0x8000
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS                  is_symbian
 
 #include "elf32-target.h"
index f6f669957c3fa5180f61054e829b0b1808b0edba..6f4f7f47186ce5cef8078b44313c1d183755c2d6 100644 (file)
@@ -843,14 +843,6 @@ static const struct elf_x86_non_lazy_plt_layout elf_i386_non_lazy_ibt_plt =
 #define PLTRESOLVE_RELOCS 2
 #define PLT_NON_JUMP_SLOT_RELOCS 2
 
-/* These are the standard parameters.  */
-static const struct elf_x86_backend_data elf_i386_arch_bed =
-  {
-    is_normal                          /* os */
-  };
-
-#define        elf_backend_arch_data   &elf_i386_arch_bed
-
 /* Return TRUE if the TLS access code sequence support transition
    from R_TYPE.  */
 
@@ -2043,7 +2035,7 @@ elf_i386_relocate_section (bfd *output_bfd,
   local_tlsdesc_gotents = elf_x86_local_tlsdesc_gotent (input_bfd);
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->target_os == is_vxworks
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks
                    && bfd_link_pic (info)
                    && !strcmp (input_section->output_section->name,
                                ".tls_vars"));
@@ -3597,7 +3589,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
                      resolved_plt->contents + plt_offset
                      + htab->plt.plt_got_offset);
 
-         if (htab->target_os == is_vxworks)
+         if (htab->elf.target_os == is_vxworks)
            {
              int s, k, reloc_index;
 
@@ -4015,7 +4007,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
                          htab->elf.splt->contents
                          + htab->lazy_plt->plt0_got2_offset);
 
-             if (htab->target_os == is_vxworks)
+             if (htab->elf.target_os == is_vxworks)
                {
                  Elf_Internal_Rela rel;
                  int num_plts = (htab->elf.splt->size
@@ -4156,7 +4148,7 @@ elf_i386_get_synthetic_symtab (bfd *abfd,
   lazy_plt = NULL;
   non_lazy_ibt_plt = NULL;
   lazy_ibt_plt = NULL;
-  switch (get_elf_x86_backend_data (abfd)->target_os)
+  switch (get_elf_backend_data (abfd)->target_os)
     {
     case is_normal:
     case is_solaris:
@@ -4170,6 +4162,8 @@ elf_i386_get_synthetic_symtab (bfd *abfd,
     case is_nacl:
       lazy_plt = &elf_i386_nacl_plt;
       break;
+    default:
+      abort ();
     }
 
   got_addr = 0;
@@ -4316,7 +4310,7 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info)
 {
   struct elf_x86_init_table init_table;
 
-  switch (get_elf_x86_backend_data (info->output_bfd)->target_os)
+  switch (get_elf_backend_data (info->output_bfd)->target_os)
     {
     case is_normal:
     case is_solaris:
@@ -4340,6 +4334,8 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info)
       init_table.lazy_ibt_plt = NULL;
       init_table.non_lazy_ibt_plt = NULL;
       break;
+    default:
+      abort ();
     }
 
   init_table.r_info = elf32_r_info;
@@ -4443,13 +4439,8 @@ elf_i386_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info)
 #undef TARGET_LITTLE_NAME
 #define        TARGET_LITTLE_NAME              "elf32-i386-sol2"
 
-static const struct elf_x86_backend_data elf_i386_solaris_arch_bed =
-  {
-    is_solaris                         /* os */
-  };
-
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data           &elf_i386_solaris_arch_bed
+#undef ELF_TARGET_OS
+#define        ELF_TARGET_OS                   is_solaris
 
 /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE
    objects won't be recognized.  */
@@ -4575,9 +4566,7 @@ elf32_iamcu_elf_object_p (bfd *abfd)
 #undef ELF_MACHINE_CODE
 #define        ELF_MACHINE_CODE                EM_IAMCU
 
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data           &elf_i386_arch_bed
-
+#undef ELF_TARGET_OS
 #undef ELF_OSABI
 
 #undef  elf32_bed
@@ -4704,7 +4693,7 @@ static const bfd_byte elf_i386_nacl_eh_frame_plt[] =
      || PLT_FDE_LENGTH != 36                           \
      || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8 \
      || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12)
-# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!"
+# error "Need PLT_CIE_LENGTH parameters for eh_frame_plt offsets!"
 #endif
     PLT_CIE_LENGTH, 0, 0, 0,           /* CIE length */
     0, 0, 0, 0,                                /* CIE ID */
@@ -4764,11 +4753,6 @@ static const struct elf_x86_lazy_plt_layout elf_i386_nacl_plt =
     sizeof (elf_i386_nacl_eh_frame_plt) /* eh_frame_plt_size */
   };
 
-static const struct elf_x86_backend_data elf_i386_nacl_arch_bed =
-  {
-    is_nacl                            /* os */
-  };
-
 static bfd_boolean
 elf32_i386_nacl_elf_object_p (bfd *abfd)
 {
@@ -4777,8 +4761,8 @@ elf32_i386_nacl_elf_object_p (bfd *abfd)
   return TRUE;
 }
 
-#undef elf_backend_arch_data
-#define elf_backend_arch_data  &elf_i386_nacl_arch_bed
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS          is_nacl
 
 #undef elf_backend_object_p
 #define elf_backend_object_p                   elf32_i386_nacl_elf_object_p
@@ -4809,13 +4793,8 @@ elf32_i386_nacl_elf_object_p (bfd *abfd)
 #undef elf_backend_plt_alignment
 #define elf_backend_plt_alignment      4
 
-static const struct elf_x86_backend_data elf_i386_vxworks_arch_bed =
-  {
-    is_vxworks                         /* os */
-  };
-
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data   &elf_i386_vxworks_arch_bed
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS          is_vxworks
 
 #undef elf_backend_relocs_compatible
 #undef elf_backend_add_symbol_hook
index e3c4f5594ff902cab3e85cfb56e0adef6eb92817..a585e427cc5131dcd61b7d276c1cc4dcef8296d6 100644 (file)
@@ -2670,6 +2670,9 @@ mips_vxworks_final_write_processing (bfd *abfd)
 #define ELF_MAXPAGESIZE                        0x1000
 #define ELF_COMMONPAGESIZE             0x1000
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS                  is_vxworks
+
 #undef elf_backend_want_got_plt
 #define elf_backend_want_got_plt               1
 #undef elf_backend_want_plt_sym
index 995e1a95e23cb5b6cc2e91fdfc7067689c25f896..89c069b3c51f4a1c1f46978ff9af4f5f9e59e4c4 100644 (file)
@@ -2195,9 +2195,6 @@ struct ppc_elf_link_hash_table
   /* The type of PLT we have chosen to use.  */
   enum ppc_elf_plt_type plt_type;
 
-  /* True if the target system is VxWorks.  */
-  unsigned int is_vxworks:1;
-
   /* Whether there exist local gnu indirect function resolvers,
      referenced by dynamic relocations.  */
   unsigned int local_ifunc_resolver:1;
@@ -2335,7 +2332,7 @@ ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   htab = ppc_elf_hash_table (info);
-  if (!htab->is_vxworks)
+  if (htab->elf.target_os != is_vxworks)
     {
       /* The powerpc .got has a blrl instruction in it.  Mark it
         executable.  */
@@ -2495,7 +2492,7 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
        return FALSE;
     }
 
-  if (htab->is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
     return FALSE;
 
@@ -2953,7 +2950,7 @@ ppc_elf_check_relocs (bfd *abfd,
       tls_type = 0;
       r_type = ELF32_R_TYPE (rel->r_info);
       ifunc = NULL;
-      if (h == NULL && !htab->is_vxworks)
+      if (h == NULL && htab->elf.target_os != is_vxworks)
        {
          Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
                                                          abfd, r_symndx);
@@ -2992,7 +2989,7 @@ ppc_elf_check_relocs (bfd *abfd,
            }
        }
 
-      if (!htab->is_vxworks
+      if (htab->elf.target_os != is_vxworks
          && is_branch_reloc (r_type)
          && h != NULL
          && h == tga)
@@ -4798,7 +4795,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
               || (h->non_got_ref
                   && !h->ref_regular_nonweak
                   && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)))
-             && !htab->is_vxworks
+             && htab->elf.target_os != is_vxworks
              && !ppc_elf_hash_entry (h)->has_sda_refs
              && !_bfd_elf_readonly_dynrelocs (h))
            {
@@ -4884,7 +4881,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       executable.  */
   if (ELIMINATE_COPY_RELOCS
       && !ppc_elf_hash_entry (h)->has_sda_refs
-      && !htab->is_vxworks
+      && htab->elf.target_os != is_vxworks
       && !h->def_regular
       && !alias_readonly_dynrelocs (h))
     return TRUE;
@@ -5181,7 +5178,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            }
        }
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
        {
          struct elf_dyn_relocs **pp;
 
@@ -5495,7 +5492,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                }
-             else if (htab->is_vxworks
+             else if (htab->elf.target_os == is_vxworks
                       && strcmp (p->sec->output_section->name,
                                  ".tls_vars") == 0)
                {
@@ -5560,7 +5557,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
        else
          *local_got = (bfd_vma) -1;
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
        continue;
 
       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
@@ -5873,7 +5870,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd,
          if (!add_dynamic_entry (DT_TEXTREL, 0))
            return FALSE;
        }
-      if (htab->is_vxworks
+      if (htab->elf.target_os == is_vxworks
          && !elf_vxworks_add_dynamic_entries (output_bfd, info))
        return FALSE;
    }
@@ -6980,7 +6977,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
   sym_hashes = elf_sym_hashes (input_bfd);
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info)
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks && bfd_link_pic (info)
                    && !strcmp (input_section->output_section->name,
                                ".tls_vars"));
   if (input_section->sec_info_type == SEC_INFO_TYPE_TARGET)
@@ -7512,7 +7509,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
        }
 
       ifunc = NULL;
-      if (!htab->is_vxworks)
+      if (htab->elf.target_os != is_vxworks)
        {
          struct plt_entry *ent;
 
@@ -9884,7 +9881,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
          switch (dyn.d_tag)
            {
            case DT_PLTGOT:
-             if (htab->is_vxworks)
+             if (htab->elf.target_os == is_vxworks)
                s = htab->elf.sgotplt;
              else
                s = htab->elf.splt;
@@ -9916,7 +9913,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
              continue;
 
            default:
-             if (htab->is_vxworks
+             if (htab->elf.target_os == is_vxworks
                  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
                break;
              continue;
@@ -9968,7 +9965,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
     }
 
   /* Fill in the first entry in the VxWorks procedure linkage table.  */
-  if (htab->is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && htab->elf.splt != NULL
       && htab->elf.splt->size != 0
       && htab->elf.splt->output_section != bfd_abs_section_ptr)
@@ -10377,6 +10374,9 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 
 #undef  ELF_OSABI
 
+#undef ELF_TARGET_OS
+#define ELF_TARGET_OS          is_vxworks
+
 /* VxWorks uses the elf default section flags for .plt.  */
 static const struct bfd_elf_special_section *
 ppc_elf_vxworks_get_sec_type_attr (bfd *abfd, asection *sec)
@@ -10402,7 +10402,6 @@ ppc_elf_vxworks_link_hash_table_create (bfd *abfd)
     {
       struct ppc_elf_link_hash_table *htab
        = (struct ppc_elf_link_hash_table *)ret;
-      htab->is_vxworks = 1;
       htab->plt_type = PLT_VXWORKS;
       htab->plt_entry_size = VXWORKS_PLT_ENTRY_SIZE;
       htab->plt_slot_size = VXWORKS_PLT_ENTRY_SIZE;
index dd670466c3b4219f49c1a94a62560d88d4af9d8e..84afe44f4306beb411aa079bb216579dce80bf6b 100644 (file)
@@ -2182,9 +2182,6 @@ struct elf_sh_link_hash_table
   /* The type of PLT to use.  */
   const struct elf_sh_plt_info *plt_info;
 
-  /* True if the target system is VxWorks.  */
-  bfd_boolean vxworks_p;
-
   /* True if the target system uses FDPIC.  */
   bfd_boolean fdpic_p;
 };
@@ -2258,7 +2255,6 @@ sh_elf_link_hash_table_create (bfd *abfd)
       return NULL;
     }
 
-  ret->vxworks_p = vxworks_object_p (abfd);
   ret->fdpic_p = fdpic_object_p (abfd);
 
   return &ret->root.root;
@@ -2467,7 +2463,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
        }
     }
 
-  if (htab->vxworks_p)
+  if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
        return FALSE;
@@ -2688,7 +2684,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
          /* We also need to make an entry in the .rel.plt section.  */
          htab->root.srelplt->size += sizeof (Elf32_External_Rela);
 
-         if (htab->vxworks_p && !bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
            {
              /* VxWorks executables have a second set of relocations
                 for each PLT entry.  They go in a separate relocation
@@ -2847,7 +2843,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            }
        }
 
-      if (htab->vxworks_p)
+      if (htab->root.target_os == is_vxworks)
        {
          struct elf_dyn_relocs **pp;
 
@@ -3006,7 +3002,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                }
-             else if (htab->vxworks_p
+             else if (htab->root.target_os == is_vxworks
                       && strcmp (p->sec->output_section->name,
                                  ".tls_vars") == 0)
                {
@@ -3250,7 +3246,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
                return FALSE;
            }
        }
-      if (htab->vxworks_p
+      if (htab->root.target_os == is_vxworks
          && !elf_vxworks_add_dynamic_entries (output_bfd, info))
        return FALSE;
     }
@@ -3490,7 +3486,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab && htab->vxworks_p && bfd_link_pic (info)
+  is_vxworks_tls = (htab && htab->root.target_os == is_vxworks && bfd_link_pic (info)
                    && !strcmp (input_section->output_section->name,
                                ".tls_vars"));
 
@@ -6080,7 +6076,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
                             (splt->contents
                              + h->plt.offset
                              + plt_info->symbol_fields.got_entry));
-         if (htab->vxworks_p)
+         if (htab->root.target_os == is_vxworks)
            {
              unsigned int reachable_plts, plts_per_4k;
              int distance;
@@ -6161,7 +6157,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
       loc = srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
 
-      if (htab->vxworks_p && !bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
        {
          /* Create the .rela.plt.unloaded relocations for this PLT entry.
             Begin by pointing LOC to the first such relocation.  */
@@ -6284,7 +6280,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
      _GLOBAL_OFFSET_TABLE_ is not absolute: it is relative to the
      ".got" section.  */
   if (h == htab->root.hdynamic
-      || (!htab->vxworks_p && h == htab->root.hgot))
+      || (htab->root.target_os != is_vxworks && h == htab->root.hgot))
     sym->st_shndx = SHN_ABS;
 
   return TRUE;
@@ -6325,7 +6321,7 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
          switch (dyn.d_tag)
            {
            default:
-             if (htab->vxworks_p
+             if (htab->root.target_os == is_vxworks
                  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
                bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
@@ -6372,7 +6368,7 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
                                 (splt->contents
                                  + htab->plt_info->plt0_got_fields[i]));
 
-         if (htab->vxworks_p)
+         if (htab->root.target_os == is_vxworks)
            {
              /* Finalize the .rela.plt.unloaded contents.  */
              Elf_Internal_Rela rel;
@@ -6773,6 +6769,9 @@ sh_elf_encode_eh_address (bfd *abfd,
 #define        ELF_MAXPAGESIZE                 0x1000
 #undef ELF_COMMONPAGESIZE
 
+#undef ELF_TARGET_OS
+#define        ELF_TARGET_OS                   is_vxworks
+
 #include "elf32-target.h"
 
 #endif /* not SH_TARGET_ALREADY_DEFINED */
index 27fc158395ec5c36b61b982dff8a3dfa85288082..4be618cc554d423ea704177cad51a171898fbccf 100644 (file)
@@ -309,25 +309,6 @@ elf32_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSE
 
 #include "elf32-target.h"
 
-/* A wrapper around _bfd_sparc_elf_link_hash_table_create that identifies
-   the target system as VxWorks.  */
-
-static struct bfd_link_hash_table *
-elf32_sparc_vxworks_link_hash_table_create (bfd *abfd)
-{
-  struct bfd_link_hash_table *ret;
-
-  ret = _bfd_sparc_elf_link_hash_table_create (abfd);
-  if (ret)
-    {
-      struct _bfd_sparc_elf_link_hash_table *htab;
-
-      htab = (struct _bfd_sparc_elf_link_hash_table *) ret;
-      htab->is_vxworks = 1;
-    }
-  return ret;
-}
-
 /* A final_write_processing hook that does both the SPARC- and VxWorks-
    specific handling.  */
 
@@ -346,9 +327,8 @@ elf32_sparc_vxworks_final_write_processing (bfd *abfd)
 #undef  ELF_MINPAGESIZE
 #define ELF_MINPAGESIZE        0x1000
 
-#undef bfd_elf32_bfd_link_hash_table_create
-#define bfd_elf32_bfd_link_hash_table_create \
-  elf32_sparc_vxworks_link_hash_table_create
+#undef ELF_TARGET_OS
+#define        ELF_TARGET_OS   is_vxworks
 
 #undef  elf_backend_want_got_plt
 #define elf_backend_want_got_plt               1
index eada0e53ed9e2e5da639224892cb49f1a86b0cb6..6e6c3c38eaa6a7e6eac7e05b641c138a53ca56c4 100644 (file)
@@ -985,12 +985,6 @@ static const struct elf_x86_non_lazy_plt_layout elf_x32_non_lazy_ibt_plt =
     sizeof (elf_x86_64_eh_frame_non_lazy_plt) /* eh_frame_plt_size */
   };
 
-static const struct elf_x86_backend_data elf_x86_64_arch_bed =
-  {
-    is_normal                           /* os */
-  };
-
-#define        elf_backend_arch_data   &elf_x86_64_arch_bed
 
 static bfd_boolean
 elf64_x86_64_elf_object_p (bfd *abfd)
@@ -4797,7 +4791,7 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
   if (relsize <= 0)
     return -1;
 
-  if (get_elf_x86_backend_data (abfd)->target_os != is_nacl)
+  if (get_elf_backend_data (abfd)->target_os != is_nacl)
     {
       lazy_plt = &elf_x86_64_lazy_plt;
       non_lazy_plt = &elf_x86_64_non_lazy_plt;
@@ -5148,7 +5142,7 @@ elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info)
   /* This is unused for x86-64.  */
   init_table.plt0_pad_byte = 0x90;
 
-  if (get_elf_x86_backend_data (info->output_bfd)->target_os != is_nacl)
+  if (get_elf_backend_data (info->output_bfd)->target_os != is_nacl)
     {
       const struct elf_backend_data *bed
        = get_elf_backend_data (info->output_bfd);
@@ -5329,13 +5323,8 @@ elf_x86_64_special_sections[]=
 #undef  TARGET_LITTLE_NAME
 #define TARGET_LITTLE_NAME                 "elf64-x86-64-sol2"
 
-static const struct elf_x86_backend_data elf_x86_64_solaris_arch_bed =
-  {
-    is_solaris                             /* os */
-  };
-
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data               &elf_x86_64_solaris_arch_bed
+#undef ELF_TARGET_OS
+#define        ELF_TARGET_OS                       is_solaris
 
 /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE
    objects won't be recognized.  */
@@ -5465,7 +5454,7 @@ static const bfd_byte elf_x86_64_nacl_eh_frame_plt[] =
      || PLT_FDE_LENGTH != 36                           \
      || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8 \
      || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12)
-# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!"
+# error "Need PLT_CIE_LENGTH parameters for eh_frame_plt offsets!"
 #endif
     PLT_CIE_LENGTH, 0, 0, 0,   /* CIE length */
     0, 0, 0, 0,                        /* CIE ID */
@@ -5525,13 +5514,8 @@ static const struct elf_x86_lazy_plt_layout elf_x86_64_nacl_plt =
     sizeof (elf_x86_64_nacl_eh_frame_plt)    /* eh_frame_plt_size */
   };
 
-static const struct elf_x86_backend_data elf_x86_64_nacl_arch_bed =
-  {
-    is_nacl                                 /* os */
-  };
-
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data   &elf_x86_64_nacl_arch_bed
+#undef ELF_TARGET_OS
+#define        ELF_TARGET_OS                           is_nacl
 
 #undef elf_backend_object_p
 #define elf_backend_object_p                   elf64_x86_64_nacl_elf_object_p
@@ -5635,8 +5619,7 @@ elf64_l1om_elf_object_p (bfd *abfd)
 #define ELF_COMMONPAGESIZE             0x1000
 #undef elf_backend_plt_alignment
 #define elf_backend_plt_alignment      4
-#undef elf_backend_arch_data
-#define        elf_backend_arch_data   &elf_x86_64_arch_bed
+#undef ELF_TARGET_OS
 
 #include "elf64-target.h"
 
index 7e86adec5bdeb9748a142d7c1b779297437cd894..60a3c2216f3f10f26c90ae3cccdb88fe65b74411 100644 (file)
@@ -7804,6 +7804,7 @@ _bfd_elf_link_hash_table_init
 
   table->root.type = bfd_link_elf_hash_table;
   table->hash_table_id = target_id;
+  table->target_os = get_elf_backend_data (abfd)->target_os;
 
   return ret;
 }
index 6c7aaa3c7c3994116a442d37ec6d06f30a45cb2f..160febec94c9e8c988e7f30de6b2d6d0524f96e6 100644 (file)
@@ -462,9 +462,6 @@ struct mips_elf_link_hash_table
   /* True if we are targetting R6 compact branches.  */
   bfd_boolean compact_branches;
 
-  /* True if we're generating code for VxWorks.  */
-  bfd_boolean is_vxworks;
-
   /* True if we already reported the small-data section overflow.  */
   bfd_boolean small_data_overflow_reported;
 
@@ -904,7 +901,8 @@ static bfd *reldyn_sorting_bfd;
 
 /* The name of the dynamic relocation section.  */
 #define MIPS_ELF_REL_DYN_NAME(INFO) \
-  (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
+  (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \
+   ? ".rela.dyn" : ".rel.dyn")
 
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
    from smaller values.  Start with zero, widen, *then* decrement.  */
@@ -919,7 +917,8 @@ static bfd *reldyn_sorting_bfd;
 
 /* The offset of $gp from the beginning of the .got section.  */
 #define ELF_MIPS_GP_OFFSET(INFO) \
-  (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
+  (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \
+   ? 0x0 : 0x7ff0)
 
 /* The maximum size of the GOT for it to be addressable using 16-bit
    offsets from $gp.  */
@@ -3821,7 +3820,7 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
   MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
 
   /* These GOT entries need a dynamic relocation on VxWorks.  */
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     {
       Elf_Internal_Rela outrel;
       asection *s;
@@ -4166,7 +4165,7 @@ mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
   s = mips_elf_rel_dyn_section (info, FALSE);
   BFD_ASSERT (s != NULL);
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
   else
     {
@@ -4552,7 +4551,7 @@ mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
           entry if it was only used for relocations; those relocations
           will be against the null or section symbol instead of H.  */
        h->global_got_area = GGA_NONE;
-      else if (htab->is_vxworks
+      else if (htab->root.target_os == is_vxworks
               && h->got_only_for_calls
               && h->root.plt.plist->mips_offset != MINUS_ONE)
        /* On VxWorks, calls can refer directly to the .got.plt entry;
@@ -5266,7 +5265,7 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 static bfd_boolean
 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
 {
-  return (mips_elf_hash_table (info)->is_vxworks
+  return (mips_elf_hash_table (info)->root.target_os == is_vxworks
          && bfd_link_pic (info)
          && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
              || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
@@ -5904,7 +5903,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
        {
          /* On VxWorks, CALL relocations should refer to the .got.plt
             entry, which is initialized to point at the PLT stub.  */
-         if (htab->is_vxworks
+         if (htab->root.target_os == is_vxworks
              && (call_hi16_reloc_p (r_type)
                  || call_lo16_reloc_p (r_type)
                  || call16_reloc_p (r_type)))
@@ -5924,7 +5923,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
                MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
            }
        }
-      else if (!htab->is_vxworks
+      else if (htab->root.target_os != is_vxworks
               && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
        /* The calculation below does not involve "g".  */
        break;
@@ -6206,7 +6205,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
     case R_MICROMIPS_CALL16:
       /* VxWorks does not have separate local and global semantics for
         R_MIPS*_GOT16; every relocation evaluates to "G".  */
-      if (!htab->is_vxworks && local_p)
+      if (htab->root.target_os != is_vxworks && local_p)
        {
          value = mips_elf_got16_entry (abfd, input_bfd, info,
                                        symbol + addend, !was_local_p);
@@ -6745,7 +6744,8 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
      in the relocation.  */
   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
     {
-      BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
+      BFD_ASSERT (htab->root.target_os == is_vxworks
+                 || h->global_got_area != GGA_NONE);
       indx = h->root.dynindx;
       if (SGI_COMPAT (output_bfd))
        defined_p = h->root.def_regular;
@@ -6804,7 +6804,7 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
   if (defined_p && r_type != R_MIPS_REL32)
     *addendp += symbol;
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     /* VxWorks uses non-relative relocations for this.  */
     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
   else
@@ -6850,7 +6850,7 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
         (sreloc->contents
          + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
     }
-  else if (htab->is_vxworks)
+  else if (htab->root.target_os == is_vxworks)
     {
       /* VxWorks uses RELA rather than REL dynamic relocations.  */
       outrel[0].r_addend = *addendp;
@@ -7973,7 +7973,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 
   /* The psABI requires a read-only .dynamic section, but the VxWorks
      EABI doesn't.  */
-  if (!htab->is_vxworks)
+  if (htab->root.target_os != is_vxworks)
     {
       s = bfd_get_linker_section (abfd, ".dynamic");
       if (s != NULL)
@@ -8121,7 +8121,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   /* Do the usual VxWorks handling.  */
-  if (htab->is_vxworks
+  if (htab->root.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
     return FALSE;
 
@@ -8723,7 +8723,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            elf_hash_table (info)->dynobj = dynobj = abfd;
          if (!mips_elf_create_got_section (dynobj, info))
            return FALSE;
-         if (htab->is_vxworks && !bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks
+             && !bfd_link_pic (info))
            {
              _bfd_error_handler
                /* xgettext:c-format */
@@ -8769,7 +8770,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
             against a read-only section.  */
          if ((bfd_link_pic (info)
               || (h != NULL
-                  && !htab->is_vxworks
+                  && htab->root.target_os != is_vxworks
                   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
                   && !(!info->nocopyreloc
                        && !PIC_OBJECT_P (abfd)
@@ -8811,7 +8812,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
                 relocations related to taking the function's address.
                 This doesn't apply to VxWorks, where CALL relocs refer
                 to a .got.plt entry instead of a normal .got entry.  */
-             if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
+             if (htab->root.target_os != is_vxworks
+                 && (!can_make_dynamic_p || !call_reloc_p))
                ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
            }
 
@@ -8836,7 +8838,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
       else if (call_lo16_reloc_p (r_type)
               || got_lo16_reloc_p (r_type)
               || got_disp_reloc_p (r_type)
-              || (got16_reloc_p (r_type) && htab->is_vxworks))
+              || (got16_reloc_p (r_type)
+                  && htab->root.target_os == is_vxworks))
        {
          /* We may need a local GOT entry for this relocation.  We
             don't count R_MIPS_GOT_PAGE because we can estimate the
@@ -9200,7 +9203,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 
   /* VxWorks executables are handled elsewhere; we only need to
      allocate relocations in shared objects.  */
-  if (htab->is_vxworks && !bfd_link_pic (info))
+  if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
     return TRUE;
 
   /* Ignore indirect symbols.  All relocations against such symbols
@@ -9245,7 +9248,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
             VxWorks does not enforce the same mapping between the GOT
             and the symbol table, so the same requirement does not
             apply there.  */
-         if (!htab->is_vxworks)
+         if (htab->root.target_os != is_vxworks)
            {
              if (hmips->global_got_area > GGA_RELOC_ONLY)
                hmips->global_got_area = GGA_RELOC_ONLY;
@@ -9312,7 +9315,9 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 
      Traditional stubs are only available on SVR4 psABI-based systems;
      VxWorks always uses PLTs instead.  */
-  if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
+  if (htab->root.target_os != is_vxworks
+      && h->needs_plt
+      && !hmips->no_fn_stub)
     {
       if (! elf_hash_table (info)->dynamic_sections_created)
        return TRUE;
@@ -9361,7 +9366,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
             entry is 16 bytes and the PLT0 entry is 32 bytes.
             Encourage better cache usage by aligning.  We do this
             lazily to avoid pessimizing traditional objects.  */
-         if (!htab->is_vxworks
+         if (htab->root.target_os != is_vxworks
              && !bfd_set_section_alignment (htab->root.splt, 5))
            return FALSE;
 
@@ -9373,21 +9378,23 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 
          /* On non-VxWorks targets, the first two entries in .got.plt
             are reserved.  */
-         if (!htab->is_vxworks)
+         if (htab->root.target_os != is_vxworks)
            htab->plt_got_index
              += (get_elf_backend_data (dynobj)->got_header_size
                  / MIPS_ELF_GOT_SIZE (dynobj));
 
          /* On VxWorks, also allocate room for the header's
             .rela.plt.unloaded entries.  */
-         if (htab->is_vxworks && !bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks
+             && !bfd_link_pic (info))
            htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
 
          /* Now work out the sizes of individual PLT entries.  */
-         if (htab->is_vxworks && bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks
+             && bfd_link_pic (info))
            htab->plt_mips_entry_size
              = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
-         else if (htab->is_vxworks)
+         else if (htab->root.target_os == is_vxworks)
            htab->plt_mips_entry_size
              = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
          else if (newabi_p)
@@ -9430,7 +9437,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
         standard entry actually has to be used as the stub ends with a J
         instruction.  */
       if (newabi_p
-         || htab->is_vxworks
+         || htab->root.target_os == is_vxworks
          || hmips->call_stub
          || hmips->call_fp_stub)
        {
@@ -9472,12 +9479,12 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
        hmips->use_plt_entry = TRUE;
 
       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
-      htab->root.srelplt->size += (htab->is_vxworks
+      htab->root.srelplt->size += (htab->root.target_os == is_vxworks
                                   ? MIPS_ELF_RELA_SIZE (dynobj)
                                   : MIPS_ELF_REL_SIZE (dynobj));
 
       /* Make room for the .rela.plt.unloaded relocations.  */
-      if (htab->is_vxworks && !bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && !bfd_link_pic (info))
        htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
 
       /* All relocations against this symbol that could have been made
@@ -9542,7 +9549,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
     }
   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
        srel->size += sizeof (Elf32_External_Rela);
       else
        mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
@@ -9625,7 +9632,7 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
   /* Allocate room for the reserved entries.  VxWorks always reserves
      3 entries; other objects only reserve 2 entries.  */
   BFD_ASSERT (g->assigned_low_gotno == 0);
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     htab->reserved_gotno = 3;
   else
     htab->reserved_gotno = 2;
@@ -9657,7 +9664,7 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
        }
     }
 
-  if (htab->is_vxworks)
+  if (htab->root.target_os == is_vxworks)
     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
        relocations against local symbols evaluate to "G", and the EABI does
        not include R_MIPS_GOT_PAGE.  */
@@ -9682,7 +9689,8 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
   /* VxWorks does not support multiple GOTs.  It initializes $gp to
      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
      dynamic loader.  */
-  if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
+  if (htab->root.target_os != is_vxworks
+      && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
     {
       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
        return FALSE;
@@ -9708,7 +9716,7 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
                  == g->global_gotno + g->local_gotno + g->tls_gotno);
 
       /* Each VxWorks GOT entry needs an explicit relocation.  */
-      if (htab->is_vxworks && bfd_link_pic (info))
+      if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
        g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
 
       /* Allocate room for the TLS relocations.  */
@@ -9890,7 +9898,7 @@ mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
       /* For VxWorks, point at the PLT load stub rather than the lazy
         resolution stub; this stub will become the canonical function
         address.  */
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
        val += 8;
 
       h->root.root.u.def.section = htab->root.splt;
@@ -9955,9 +9963,9 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
          BFD_ASSERT (htab->root.sgotplt->size == 0);
          BFD_ASSERT (htab->root.splt->size == 0);
 
-         if (htab->is_vxworks && bfd_link_pic (info))
+         if (htab->root.target_os == is_vxworks && bfd_link_pic (info))
            size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
-         else if (htab->is_vxworks)
+         else if (htab->root.target_os == is_vxworks)
            size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
          else if (ABI_64_P (output_bfd))
            size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
@@ -10073,7 +10081,8 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
             room for an extra nop to fill the delay slot.  This is
             for CPUs without load interlocking.  */
          if (! LOAD_INTERLOCKS_P (output_bfd)
-             && ! htab->is_vxworks && s->size > 0)
+             && htab->root.target_os != is_vxworks
+             && s->size > 0)
            s->size += 4;
        }
       else if (! CONST_STRNEQ (name, ".init")
@@ -10131,7 +10140,9 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
          && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
        return FALSE;
 
-      if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
+      if (reltext
+         && (SGI_COMPAT (output_bfd)
+             || htab->root.target_os == is_vxworks))
        info->flags |= DF_TEXTREL;
 
       if ((info->flags & DF_TEXTREL) != 0)
@@ -10150,7 +10161,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
        return FALSE;
 
       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
        {
          /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
             use any of the DT_MIPS_* tags.  */
@@ -10230,7 +10241,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
          if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
            return FALSE;
        }
-      if (htab->is_vxworks
+      if (htab->root.target_os == is_vxworks
          && !elf_vxworks_add_dynamic_entries (output_bfd, info))
        return FALSE;
     }
@@ -10872,7 +10883,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
   dynobj = elf_hash_table (info)->dynobj;
   hmips = (struct mips_elf_link_hash_entry *) h;
 
-  BFD_ASSERT (!htab->is_vxworks);
+  BFD_ASSERT (htab->root.target_os != is_vxworks);
 
   if (h->plt.plist != NULL
       && (h->plt.plist->mips_offset != MINUS_ONE
@@ -11808,7 +11819,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
              break;
 
            case DT_RELAENT:
-             BFD_ASSERT (htab->is_vxworks);
+             BFD_ASSERT (htab->root.target_os == is_vxworks);
              dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
              break;
 
@@ -11947,7 +11958,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 
            case DT_PLTREL:
              BFD_ASSERT (htab->use_plts_and_copy_relocs);
-             if (htab->is_vxworks)
+             if (htab->root.target_os == is_vxworks)
                dyn.d_un.d_val = DT_RELA;
              else
                dyn.d_un.d_val = DT_REL;
@@ -11991,7 +12002,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 
            default:
              swap_out_p = FALSE;
-             if (htab->is_vxworks
+             if (htab->root.target_os == is_vxworks
                  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
                swap_out_p = TRUE;
              break;
@@ -12016,7 +12027,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
   if (sgot != NULL && sgot->size > 0
       && !bfd_is_abs_section (sgot->output_section))
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
        {
          /* The first entry of the global offset table points to the
             ".dynamic" section.  The second is initialized by the
@@ -12179,7 +12190,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
        increasing order of r_symndx.  The VxWorks EABI doesn't require
        this, and because the code below handles REL rather than RELA
        relocations, using it for VxWorks would be outright harmful.  */
-    if (!htab->is_vxworks)
+    if (htab->root.target_os != is_vxworks)
       {
        s = mips_elf_rel_dyn_section (info, FALSE);
        if (s != NULL
@@ -12201,7 +12212,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 
   if (htab->root.splt && htab->root.splt->size > 0)
     {
-      if (htab->is_vxworks)
+      if (htab->root.target_os == is_vxworks)
        {
          if (bfd_link_pic (info))
            mips_vxworks_finish_shared_plt (output_bfd, info);
@@ -14303,7 +14314,6 @@ _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
 
       htab = (struct mips_elf_link_hash_table *) ret;
       htab->use_plts_and_copy_relocs = TRUE;
-      htab->is_vxworks = TRUE;
     }
   return ret;
 }
@@ -14682,7 +14692,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
        elf_gp (abfd) = (h->u.def.value
                         + h->u.def.section->output_section->vma
                         + h->u.def.section->output_offset);
-      else if (htab->is_vxworks
+      else if (htab->root.target_os == is_vxworks
               && (h = bfd_link_hash_lookup (info->hash,
                                             "_GLOBAL_OFFSET_TABLE_",
                                             FALSE, FALSE, TRUE))
@@ -16637,7 +16647,9 @@ _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
       BFD_ASSERT (htab != NULL);
     }
 
-  if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks)
+  if (htab != NULL
+      && htab->use_plts_and_copy_relocs
+      && htab->root.target_os != is_vxworks)
     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT;
 
   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
index 5ef29eac28382bcd1937800573ab02814125cd71..eca44c9b5f94256909360979f9d409966069cf4b 100644 (file)
@@ -1216,7 +1216,7 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  if (htab->is_vxworks)
+  if (htab->elf.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
        return FALSE;
@@ -2076,7 +2076,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
              s->size = htab->plt_header_size;
 
              /* Allocate space for the .rela.plt.unloaded relocations.  */
-             if (htab->is_vxworks && !bfd_link_pic (info))
+             if (htab->elf.target_os == is_vxworks
+                 && !bfd_link_pic (info))
                htab->srelplt2->size = sizeof (Elf32_External_Rela) * 2;
            }
 
@@ -2128,7 +2129,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
                htab->elf.irelplt->size += SPARC_ELF_RELA_BYTES (htab);
            }
 
-         if (htab->is_vxworks)
+         if (htab->elf.target_os == is_vxworks)
            {
              /* Allocate space for the .got.plt entry.  */
              htab->elf.sgotplt->size += 4;
@@ -2231,7 +2232,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
            }
        }
 
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
        {
          struct elf_dyn_relocs **pp;
 
@@ -2433,7 +2434,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                }
-             else if (htab->is_vxworks
+             else if (htab->elf.target_os == is_vxworks
                       && strcmp (p->sec->output_section->name,
                                  ".tls_vars") == 0)
                {
@@ -2503,7 +2504,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
   htab_traverse (htab->loc_hash_table, allocate_local_dynrelocs, info);
 
   if (! ABI_64_P (output_bfd)
-      && !htab->is_vxworks
+      && htab->elf.target_os != is_vxworks
       && elf_hash_table (info)->dynamic_sections_created)
     {
       /* Make space for the trailing nop in .plt.  */
@@ -2829,7 +2830,8 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
   sreloc = elf_section_data (input_section)->sreloc;
   /* We have to handle relocations in vxworks .tls_vars sections
      specially, because the dynamic loader is 'weird'.  */
-  is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info)
+  is_vxworks_tls = (htab->elf.target_os == is_vxworks
+                   && bfd_link_pic (info)
                    && !strcmp (input_section->output_section->name,
                                ".tls_vars"));
 
@@ -4272,7 +4274,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
        abort ();
 
       /* Fill in the entry in the .rela.plt section.  */
-      if (htab->is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
        {
          /* Work out the index of this PLT entry.  */
          rela_index = ((h->plt.offset - htab->plt_header_size)
@@ -4474,7 +4476,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
      ".got" section.  Likewise _PROCEDURE_LINKAGE_TABLE_ and ".plt".  */
   if (sym != NULL
       && (h == htab->elf.hdynamic
-         || (!htab->is_vxworks
+         || (htab->elf.target_os != is_vxworks
              && (h == htab->elf.hgot || h == htab->elf.hplt))))
     sym->st_shndx = SHN_ABS;
 
@@ -4508,7 +4510,7 @@ sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 
       bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
 
-      if (htab->is_vxworks && dyn.d_tag == DT_PLTGOT)
+      if (htab->elf.target_os == is_vxworks && dyn.d_tag == DT_PLTGOT)
        {
          /* On VxWorks, DT_PLTGOT should point to the start of the GOT,
             not to the start of the PLT.  */
@@ -4519,7 +4521,7 @@ sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
              bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
            }
        }
-      else if (htab->is_vxworks
+      else if (htab->elf.target_os == is_vxworks
               && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
        bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
       else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER)
@@ -4744,7 +4746,7 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
       /* Initialize the contents of the .plt section.  */
       if (splt->size > 0)
        {
-         if (htab->is_vxworks)
+         if (htab->elf.target_os == is_vxworks)
            {
              if (bfd_link_pic (info))
                sparc_vxworks_finish_shared_plt (output_bfd, info);
@@ -4762,7 +4764,8 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
 
       if (elf_section_data (splt->output_section) != NULL)
        elf_section_data (splt->output_section)->this_hdr.sh_entsize
-         = ((htab->is_vxworks || !ABI_64_P (output_bfd))
+         = ((htab->elf.target_os == is_vxworks
+             || !ABI_64_P (output_bfd))
             ? 0 : htab->plt_entry_size);
     }
 
index b41fcde0cafbdce1be6216f332198f48cf133f31..c2b828b49939aa2bfbad9056e3bce8c67746fef0 100644 (file)
 #define ELF_TARGET_ID  GENERIC_ELF_DATA
 #endif
 
+#ifndef ELF_TARGET_OS
+#define ELF_TARGET_OS  is_normal
+#endif
+
 #ifndef ELF_OSABI
 #define ELF_OSABI ELFOSABI_NONE
 #endif
@@ -799,6 +803,7 @@ static struct elf_backend_data elfNN_bed =
 {
   ELF_ARCH,                    /* arch */
   ELF_TARGET_ID,               /* target_id */
+  ELF_TARGET_OS,               /* target_os */
   ELF_MACHINE_CODE,            /* elf_machine_code */
   ELF_OSABI,                   /* elf_osabi  */
   ELF_MAXPAGESIZE,             /* maxpagesize */
index d796292562b569c599f9a50c80de5a169369a554..6b8e56d7a07a8e60488d45ddb6f3dd1c2ecd549c 100644 (file)
@@ -260,7 +260,7 @@ elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
                }
            }
 
-         if (htab->target_os == is_vxworks && !bfd_link_pic (info))
+         if (htab->elf.target_os == is_vxworks && !bfd_link_pic (info))
            {
              /* VxWorks has a second set of relocations for each PLT entry
                 in executables.  They go in a separate relocation section,
@@ -407,7 +407,7 @@ elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            }
        }
 
-      if (htab->target_os == is_vxworks)
+      if (htab->elf.target_os == is_vxworks)
        {
          struct elf_dyn_relocs **pp;
          for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
@@ -762,7 +762,6 @@ _bfd_x86_elf_link_hash_table_create (bfd *abfd)
          ret->tls_get_addr = "___tls_get_addr";
        }
     }
-  ret->target_os = get_elf_x86_backend_data (abfd)->target_os;
 
   ret->loc_hash_table = htab_try_create (1024,
                                         _bfd_x86_elf_local_htab_hash,
@@ -1045,7 +1044,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                }
-             else if (htab->target_os == is_vxworks
+             else if (htab->elf.target_os == is_vxworks
                       && strcmp (p->sec->output_section->name,
                                  ".tls_vars") == 0)
                {
@@ -1203,7 +1202,8 @@ _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
          htab->elf.sgotplt->size = 0;
          /* Solaris requires to keep _GLOBAL_OFFSET_TABLE_ even if it
             isn't used.  */
-         if (htab->elf.hgot != NULL && htab->target_os != is_solaris)
+         if (htab->elf.hgot != NULL
+             && htab->elf.target_os != is_solaris)
            {
              /* Remove the unused _GLOBAL_OFFSET_TABLE_ from symbol
                 table. */
@@ -1430,7 +1430,7 @@ _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
                return FALSE;
            }
        }
-      if (htab->target_os == is_vxworks
+      if (htab->elf.target_os == is_vxworks
          && !elf_vxworks_add_dynamic_entries (output_bfd, info))
        return FALSE;
     }
@@ -1522,7 +1522,7 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd,
       switch (dyn.d_tag)
        {
        default:
-         if (htab->target_os == is_vxworks
+         if (htab->elf.target_os == is_vxworks
              && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
            break;
          continue;
@@ -1987,7 +1987,7 @@ _bfd_x86_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (ELIMINATE_COPY_RELOCS
       && (bed->target_id == X86_64_ELF_DATA
          || (!eh->gotoff_ref
-             && htab->target_os != is_vxworks)))
+             && htab->elf.target_os != is_vxworks)))
     {
       /* If we don't find any dynamic relocs in read-only sections,
         then we'll be keeping the dynamic relocs and avoiding the copy
@@ -2762,7 +2762,7 @@ _bfd_x86_elf_link_setup_gnu_properties
      still be used with LD_AUDIT or LD_PROFILE if PLT entry is used for
      canonical function address.  */
   htab->plt.has_plt0 = 1;
-  normal_target = htab->target_os == is_normal;
+  normal_target = htab->elf.target_os == is_normal;
 
   if (normal_target)
     {
@@ -2825,7 +2825,7 @@ _bfd_x86_elf_link_setup_gnu_properties
       htab->plt.eh_frame_plt = htab->lazy_plt->eh_frame_plt;
     }
 
-  if (htab->target_os == is_vxworks
+  if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (dynobj, info,
                                               &htab->srelplt2))
     {
index de4e78f443e20771b199f12735ca0227a13572af..7cdc4323abe392935ce4b74572e7e2a0cfedb9ba 100644 (file)
@@ -436,14 +436,6 @@ struct elf_x86_plt_layout
 #define elf_x86_hash_entry(ent) \
   ((struct elf_x86_link_hash_entry *)(ent))
 
-enum elf_x86_target_os
-{
-  is_normal,
-  is_solaris,
-  is_vxworks,
-  is_nacl
-};
-
 /* x86 ELF linker hash table.  */
 
 struct elf_x86_link_hash_table
@@ -531,7 +523,6 @@ struct elf_x86_link_hash_table
   bfd_vma (*r_info) (bfd_vma, bfd_vma);
   bfd_vma (*r_sym) (bfd_vma);
   bfd_boolean (*is_reloc_section) (const char *);
-  enum elf_x86_target_os target_os;
   unsigned int sizeof_reloc;
   unsigned int dt_reloc;
   unsigned int dt_reloc_sz;
@@ -546,18 +537,6 @@ struct elf_x86_link_hash_table
   struct elf_linker_x86_params *params;
 };
 
-/* Architecture-specific backend data for x86.  */
-
-struct elf_x86_backend_data
-{
-  /* Target system.  */
-  enum elf_x86_target_os target_os;
-};
-
-#define get_elf_x86_backend_data(abfd) \
-  ((const struct elf_x86_backend_data *) \
-   get_elf_backend_data (abfd)->arch_data)
-
 struct elf_x86_init_table
 {
   /* The lazy PLT layout.  */