summaryrefslogtreecommitdiff
path: root/bfd/elf32-spu.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2010-09-16 10:36:00 +0000
committerAlan Modra <amodra@gmail.com>2010-09-16 10:36:00 +0000
commit29c702418fa8599fb3cc630593e529426cda3024 (patch)
tree7ec91c40ef0269c50394a76a0cde9abaa80bc04e /bfd/elf32-spu.c
parent40703ddd07cdd4f164523f836bf1248fb64a5111 (diff)
downloadbinutils-29c702418fa8599fb3cc630593e529426cda3024.tar.gz
binutils-29c702418fa8599fb3cc630593e529426cda3024.tar.bz2
binutils-29c702418fa8599fb3cc630593e529426cda3024.zip
* elf32-spu.c (spu_elf_size_sections): Omit fixups for non-alloc
sections. (spu_elf_create_sections): Mark .fixup with SEC_LINKER_CREATED and set dynobj. (spu_elf_finish_dynamic_sections): New function. (elf_backend_finish_dynamic_sections): Define.
Diffstat (limited to 'bfd/elf32-spu.c')
-rw-r--r--bfd/elf32-spu.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
index 8615e468ef3..b1ea43c5297 100644
--- a/bfd/elf32-spu.c
+++ b/bfd/elf32-spu.c
@@ -602,9 +602,12 @@ spu_elf_create_sections (struct bfd_link_info *info)
{
asection *s;
flagword flags;
- ibfd = info->input_bfds;
- flags = SEC_LOAD | SEC_ALLOC | SEC_READONLY | SEC_HAS_CONTENTS
- | SEC_IN_MEMORY;
+
+ if (htab->elf.dynobj == NULL)
+ htab->elf.dynobj = ibfd;
+ ibfd = htab->elf.dynobj;
+ flags = (SEC_LOAD | SEC_ALLOC | SEC_READONLY | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY | SEC_LINKER_CREATED);
s = bfd_make_section_anyway_with_flags (ibfd, ".fixup", flags);
if (s == NULL || !bfd_set_section_alignment (ibfd, s, 2))
return FALSE;
@@ -5096,6 +5099,13 @@ spu_elf_relocate_section (bfd *output_bfd,
return ret;
}
+static bfd_boolean
+spu_elf_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
/* Adjust _SPUEAR_ syms to point at their overlay stubs. */
static int
@@ -5402,7 +5412,8 @@ spu_elf_size_sections (bfd * output_bfd, struct bfd_link_info *info)
/* If there aren't any relocs, then there's nothing more
to do. */
- if ((isec->flags & SEC_RELOC) == 0
+ if ((isec->flags & SEC_ALLOC) == 0
+ || (isec->flags & SEC_RELOC) == 0
|| isec->reloc_count == 0)
continue;
@@ -5457,6 +5468,7 @@ spu_elf_size_sections (bfd * output_bfd, struct bfd_link_info *info)
#define elf_info_to_howto spu_elf_info_to_howto
#define elf_backend_count_relocs spu_elf_count_relocs
#define elf_backend_relocate_section spu_elf_relocate_section
+#define elf_backend_finish_dynamic_sections spu_elf_finish_dynamic_sections
#define elf_backend_symbol_processing spu_elf_backend_symbol_processing
#define elf_backend_link_output_symbol_hook spu_elf_output_symbol_hook
#define elf_backend_object_p spu_elf_object_p