aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-03-21 13:23:15 +0000
committerAlan Modra <amodra@gmail.com>2005-03-21 13:23:15 +0000
commitc9a2f3330b420cd61589846c369e20deaf44da27 (patch)
treee7663023b5b1c9c5ffba071dc0dd3b028494ab63 /ld
parent8853c3d3367a798e577c1a986f587291f46e71f1 (diff)
downloadbinutils-c9a2f3330b420cd61589846c369e20deaf44da27.zip
binutils-c9a2f3330b420cd61589846c369e20deaf44da27.tar.gz
binutils-c9a2f3330b420cd61589846c369e20deaf44da27.tar.bz2
bfd/
* elf32-ppc.c (struct elf_linker_section): Remove sym_hash and sym_offset. Add name, bss_name, sym_name, sym_val. (struct ppc_elf_link_hash_table): Remove sdata and sdata2 pointers. Add sdata array of elf_linker_section_t. (ppc_elf_link_hash_table_create): Set name, sym_name, and bss_name. (enum elf_linker_section_enum): Delete. (ppc_elf_create_linker_section): Rewrite. Don't create syms here. (ppc_elf_check_relocs): Delay ppc_elf_create_linker_section until the special sections are needed. Adjust htab->sdata refs. Ensure dynobj is set in sreloc code. (ppc_elf_size_dynamic_sections): Strip sdata sections. (ppc_elf_set_sdata_syms): New function. (elf_finish_pointer_linker_section): Use 0x8000 for sym_offset. (ppc_elf_relocate_section): Adjust references to htab->sdata. Use sym_val instead of sym_hash. * elf32-ppc.h (ppc_elf_set_sdata_syms): Declare. ld/ * emultempl/ppc32elf.em (gld${EMULATION_NAME}_after_allocation): New function. (LDEMUL_AFTER_ALLOCATION): Define.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/ppc32elf.em24
2 files changed, 24 insertions, 6 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 95c97a3..b704d66 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,11 @@
2005-03-21 Alan Modra <amodra@bigpond.net.au>
+ * emultempl/ppc32elf.em (gld${EMULATION_NAME}_after_allocation): New
+ function.
+ (LDEMUL_AFTER_ALLOCATION): Define.
+
+2005-03-21 Alan Modra <amodra@bigpond.net.au>
+
* emultempl/ppc64elf.em (ppc_finish): Rename from
gld${EMULATION_NAME}_finish. Call gld${EMULATION_NAME}_finish.
(LDEMUL_FINISH): Update.
diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em
index 4614593..710160d 100644
--- a/ld/emultempl/ppc32elf.em
+++ b/ld/emultempl/ppc32elf.em
@@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
-# Copyright 2003 Free Software Foundation, Inc.
+# Copyright 2003, 2005 Free Software Foundation, Inc.
#
# This file is part of GLD, the Gnu Linker.
#
@@ -18,7 +18,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
-# This file is sourced from elf32.em, and defines extra powerpc64-elf
+# This file is sourced from elf32.em, and defines extra powerpc32-elf
# specific routines.
#
cat >>e${EMULATION_NAME}.c <<EOF
@@ -26,15 +26,15 @@ cat >>e${EMULATION_NAME}.c <<EOF
#include "libbfd.h"
#include "elf32-ppc.h"
+extern const bfd_target bfd_elf32_powerpc_vec;
+extern const bfd_target bfd_elf32_powerpcle_vec;
+
/* Whether to run tls optimization. */
static int notlsopt = 0;
static void
ppc_before_allocation (void)
{
- extern const bfd_target bfd_elf32_powerpc_vec;
- extern const bfd_target bfd_elf32_powerpcle_vec;
-
if (link_info.hash->creator == &bfd_elf32_powerpc_vec
|| link_info.hash->creator == &bfd_elf32_powerpcle_vec)
{
@@ -50,6 +50,17 @@ ppc_before_allocation (void)
gld${EMULATION_NAME}_before_allocation ();
}
+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)
+ {
+ if (!ppc_elf_set_sdata_syms (output_bfd, &link_info))
+ einfo ("%X%P: cannot set sdata syms %E\n");
+ }
+}
+
EOF
# Define some shell vars to insert bits of code into the standard elf
@@ -75,6 +86,7 @@ PARSE_AND_LIST_ARGS_CASES='
break;
'
-# Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
+# Put these extra ppc32elf routines in ld_${EMULATION_NAME}_emulation
#
LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
+LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation