summaryrefslogtreecommitdiff
path: root/bfd/elf-vxworks.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2006-03-02 08:57:00 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2006-03-02 08:57:00 +0000
commit711de32caaff12a33dfcc10c0421388c7550bac0 (patch)
tree4356412f348c7c16a25aff55d8b5af2c9d50011f /bfd/elf-vxworks.c
parent83503a060f6c6afe5b411f0056a8c826b6bb3f5a (diff)
bfd/
* elf32-i386.c (elf_i386_create_dynamic_sections): Use elf_vxworks_create_dynamic_sections. (elf_i386_size_dynamic_sections): Remove VxWorks GOT and PLT symbol handling. * elf32-ppc.c (ppc_elf_create_dynamic_sections): Use elf_vxworks_create_dynamic_sections. (ppc_elf_size_dynamic_sections): Remove VxWorks GOT and PLT symbol handling. * elf-vxworks.c (elf_vxworks_create_dynamic_sections): New function. * elf-vxworks.h (elf_vxworks_create_dynamic_sections): Declare. ld/testsuite/ * ld-i386/ld-i386/vxworks1-lib.nd: New test. * ld-i386/i386.exp: Run it. * ld-powerpc/ld-powerpc/vxworks1-lib.nd: New test. * ld-powerpc/powerc.exp: Run it.
Diffstat (limited to 'bfd/elf-vxworks.c')
-rw-r--r--bfd/elf-vxworks.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c
index 0dca07c583..90e620a905 100644
--- a/bfd/elf-vxworks.c
+++ b/bfd/elf-vxworks.c
@@ -55,6 +55,57 @@ elf_vxworks_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
return TRUE;
}
+/* Perform VxWorks-specific handling of the create_dynamic_sections hook.
+ When creating an executable, set *SRELPLT2_OUT to the .rel(a).plt.unloaded
+ section. */
+
+bfd_boolean
+elf_vxworks_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info,
+ asection **srelplt2_out)
+{
+ struct elf_link_hash_table *htab;
+ const struct elf_backend_data *bed;
+ asection *s;
+
+ htab = elf_hash_table (info);
+ bed = get_elf_backend_data (dynobj);
+
+ if (!info->shared)
+ {
+ s = bfd_make_section_with_flags (dynobj,
+ bed->default_use_rela_p
+ ? ".rela.plt.unloaded"
+ : ".rel.plt.unloaded",
+ SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_READONLY | SEC_LINKER_CREATED);
+ if (s == NULL
+ || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
+ return FALSE;
+
+ *srelplt2_out = s;
+ }
+
+ /* Mark the GOT and PLT symbols as having relocations; they might
+ not, but we won't know for sure until we build the GOT in
+ finish_dynamic_symbol. Also make sure that the GOT symbol
+ is entered into the dynamic symbol table; the loader uses it
+ to initialize __GOTT_BASE__[__GOTT_INDEX__]. */
+ if (htab->hgot)
+ {
+ htab->hgot->indx = -2;
+ htab->hgot->other &= ~ELF_ST_VISIBILITY (-1);
+ htab->hgot->forced_local = 0;
+ if (!bfd_elf_link_record_dynamic_symbol (info, htab->hgot))
+ return FALSE;
+ }
+ if (htab->hplt)
+ {
+ htab->hplt->indx = -2;
+ htab->hplt->type = STT_FUNC;
+ }
+
+ return TRUE;
+}
/* Tweak magic VxWorks symbols as they are written to the output file. */
bfd_boolean