summaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2005-07-05 13:25:56 +0000
committerPaul Brook <paul@codesourcery.com>2005-07-05 13:25:56 +0000
commitc440d9ad3435a7fdb935f9b27212153a3e63b9f1 (patch)
treeada18b574c58dbbc8b81f4593b02cb3a9db715f4 /ld/emultempl
parent5df7f07b355bffbe26c9ac50afc44a81de80cd62 (diff)
downloadbinutils-redhat-c440d9ad3435a7fdb935f9b27212153a3e63b9f1.tar.gz
2005-05-07 Paul Brook <paul@codesourcery.com>
bfd/ * config.bfd: Add separate case for ppc-vxworks. * configure: Regenerate. * configure.in: Include elf-vxworks.lo on ppc targets. * elf-vxworks.c (elf_vxworks_final_write_processing): Handle .rela.plt.unloaded. * elf32-ppc.c: Add VxWorks target vec. Include elf-vxworks.h. (PLT_ENTRY_SIZE, PLT_INITIAL_ENTRY_SIZE, PLT_SLOT_SIZE): Remove. (VXWORKS_PLT_ENTRY_SIZE, ppc_elf_vxworks_plt_entry, ppc_elf_vxworks_pic_plt_entry, VXWORKS_PLT_INITIAL_ENTRY_SIZE, ppc_elf_vxworks_plt0_entry, ppc_elf_vxworks_pic_plt0_entry, VXWORKS_PLT_NON_JMP_SLOT_RELOCS, VXWORKS_PLTRESOLVE_RELOCS, VXWORKS_PLTRESOLVE_RELOCS_SHLIB): New. (ppc_elf_link_hash_table): Add srelplt2, sgotplt, hgot, hplt, is_vxworks, plt_entry_size, plt_slot_size, plt_initial_entry_size. (ppc_elf_link_hash_table_create): Initialize hadtab plt fields. (ppc_elf_create_got): Create .got.plt for VxWorks. (ppc_elf_create_dynamic_sections): Create unloaded plt relocation section for VxWorks. (ppc_elf_select_plt_layout): Handle VxWorks plt format. (allocate_got): VxWorks does not need a got header. (allocate_dynrelocs): Handle VxWorks plt format. (ppc_elf_size_dynamic_sections): Save _G_O_T_ and _P_L_T_ symbols for VxWorks. Handle VxWorks plt/got. (ppc_elf_finish_dynamic_sections): Fill in VxWorks plt. (ppc_elf_vxworks_special_sections): New. (ppc_elf_vxworks_link_hash_table_create, ppc_elf_vxworks_add_symbol_hook, elf_i386_vxworks_link_output_symbol_hook, ppc_elf_vxworks_final_write_processing): New functions. * targets.c (bfd_elf32_powerpc_vxworks_vec): Declare. (_bfd_target_vector): Use it. gas/ * config/tc-ppc.c (ppc_target_format): Add VxWorks. gas/testsuite/ * gas/ppc/altivec.d: Match all powerpc target vecs. * gas/ppc/booke.d: Ditto. * gas/ppc/e500.d: Ditto. ld/ * Makefile.am (ALL_EMULATIONS): Add eelf32ppcvxworks.o. (eelf32ppcvxworks.o): Add dependencies. * Makefile.in: Regenerate. * configure.tgt: Add entry for powerpc-vxworks. * emulparams/elf32-ppc.c: Mention elf32ppcvxworks.sh in comment. * emulparams/elf32ppcvxworks.sh: New file. * emultempl/ppc32elf.em (bfd_elf32_powerpc_vxworks_vec): Declare. (is_ppc_elf32_vec): New function. (ppc_after_open, ppc_before_allocation, gld${EMULATION_NAME}_after_allocation): Use it.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/ppc32elf.em19
1 files changed, 12 insertions, 7 deletions
diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em
index 7b180bb37c..9a64da26c8 100644
--- a/ld/emultempl/ppc32elf.em
+++ b/ld/emultempl/ppc32elf.em
@@ -28,6 +28,15 @@ cat >>e${EMULATION_NAME}.c <<EOF
extern const bfd_target bfd_elf32_powerpc_vec;
extern const bfd_target bfd_elf32_powerpcle_vec;
+extern const bfd_target bfd_elf32_powerpc_vxworks_vec;
+
+static inline int
+is_ppc_elf32_vec(const bfd_target * vec)
+{
+ return (vec == &bfd_elf32_powerpc_vec
+ || vec == &bfd_elf32_powerpc_vxworks_vec
+ || vec == &bfd_elf32_powerpcle_vec);
+}
/* Whether to run tls optimization. */
static int notlsopt = 0;
@@ -39,8 +48,7 @@ static int old_got = 0;
static void
ppc_after_open (void)
{
- if (link_info.hash->creator == &bfd_elf32_powerpc_vec
- || link_info.hash->creator == &bfd_elf32_powerpcle_vec)
+ if (is_ppc_elf32_vec (link_info.hash->creator))
{
int new_plt;
int keep_new;
@@ -95,8 +103,7 @@ ppc_after_open (void)
static void
ppc_before_allocation (void)
{
- if (link_info.hash->creator == &bfd_elf32_powerpc_vec
- || link_info.hash->creator == &bfd_elf32_powerpcle_vec)
+ if (is_ppc_elf32_vec (link_info.hash->creator))
{
if (ppc_elf_tls_setup (output_bfd, &link_info) && !notlsopt)
{
@@ -113,9 +120,7 @@ ppc_before_allocation (void)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
- if ((link_info.hash->creator == &bfd_elf32_powerpc_vec
- || link_info.hash->creator == &bfd_elf32_powerpcle_vec)
- && !link_info.relocatable)
+ if (is_ppc_elf32_vec (link_info.hash->creator))
{
if (!ppc_elf_set_sdata_syms (output_bfd, &link_info))
einfo ("%X%P: cannot set sdata syms %E\n");