| Index: bfd/elf32-microblaze.c
|
| diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
|
| index b180dc4308cd9b312ae04a9f65f72504576979f4..27b569e83941b8256b6f332cb07a8f2f44f53131 100644
|
| --- a/bfd/elf32-microblaze.c
|
| +++ b/bfd/elf32-microblaze.c
|
| @@ -1,6 +1,6 @@
|
| /* Xilinx MicroBlaze-specific support for 32-bit ELF
|
|
|
| - Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
|
| + Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
|
|
| This file is part of BFD, the Binary File Descriptor library.
|
|
|
| @@ -22,8 +22,8 @@
|
|
|
| int dbg = 0;
|
|
|
| -#include "bfd.h"
|
| #include "sysdep.h"
|
| +#include "bfd.h"
|
| #include "bfdlink.h"
|
| #include "libbfd.h"
|
| #include "elf-bfd.h"
|
| @@ -839,7 +839,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
|
| /* Only relocate if the symbol is defined. */
|
| if (sec)
|
| {
|
| - name = bfd_get_section_name (abfd, sec);
|
| + name = bfd_get_section_name (sec->owner, sec);
|
|
|
| if (strcmp (name, ".sdata2") == 0
|
| || strcmp (name, ".sbss2") == 0)
|
| @@ -868,7 +868,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
|
| bfd_get_filename (input_bfd),
|
| sym_name,
|
| microblaze_elf_howto_table[(int) r_type]->name,
|
| - bfd_get_section_name (abfd, sec));
|
| + bfd_get_section_name (sec->owner, sec));
|
| /*bfd_set_error (bfd_error_bad_value); ??? why? */
|
| ret = FALSE;
|
| continue;
|
| @@ -884,7 +884,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
|
| /* Only relocate if the symbol is defined. */
|
| if (sec)
|
| {
|
| - name = bfd_get_section_name (abfd, sec);
|
| + name = bfd_get_section_name (sec->owner, sec);
|
|
|
| if (strcmp (name, ".sdata") == 0
|
| || strcmp (name, ".sbss") == 0)
|
| @@ -913,7 +913,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
|
| bfd_get_filename (input_bfd),
|
| sym_name,
|
| microblaze_elf_howto_table[(int) r_type]->name,
|
| - bfd_get_section_name (abfd, sec));
|
| + bfd_get_section_name (sec->owner, sec));
|
| /*bfd_set_error (bfd_error_bad_value); ??? why? */
|
| ret = FALSE;
|
| continue;
|
| @@ -1875,12 +1875,13 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
|
| if (htab == NULL)
|
| return FALSE;
|
|
|
| - htab->sgot = bfd_get_section_by_name (dynobj, ".got");
|
| - htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
|
| + htab->sgot = bfd_get_linker_section (dynobj, ".got");
|
| + htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
|
| if (!htab->sgot || !htab->sgotplt)
|
| return FALSE;
|
|
|
| - htab->srelgot = bfd_make_section (dynobj, ".rela.got");
|
| + if ((htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got")) == NULL)
|
| + htab->srelgot = bfd_make_section_anyway (dynobj, ".rela.got");
|
| if (htab->srelgot == NULL
|
| || ! bfd_set_section_flags (dynobj, htab->srelgot, SEC_ALLOC
|
| | SEC_LOAD
|
| @@ -2079,18 +2080,19 @@ microblaze_elf_check_relocs (bfd * abfd,
|
| htab->elf.dynobj = abfd;
|
| dynobj = htab->elf.dynobj;
|
|
|
| - sreloc = bfd_get_section_by_name (dynobj, name);
|
| + sreloc = bfd_get_linker_section (dynobj, name);
|
| if (sreloc == NULL)
|
| {
|
| flagword flags;
|
|
|
| - sreloc = bfd_make_section (dynobj, name);
|
| flags = (SEC_HAS_CONTENTS | SEC_READONLY
|
| | SEC_IN_MEMORY | SEC_LINKER_CREATED);
|
| if ((sec->flags & SEC_ALLOC) != 0)
|
| flags |= SEC_ALLOC | SEC_LOAD;
|
| + sreloc = bfd_make_section_anyway_with_flags (dynobj,
|
| + name,
|
| + flags);
|
| if (sreloc == NULL
|
| - || ! bfd_set_section_flags (dynobj, sreloc, flags)
|
| || ! bfd_set_section_alignment (dynobj, sreloc, 2))
|
| return FALSE;
|
| }
|
| @@ -2166,11 +2168,11 @@ microblaze_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
|
| if (!_bfd_elf_create_dynamic_sections (dynobj, info))
|
| return FALSE;
|
|
|
| - htab->splt = bfd_get_section_by_name (dynobj, ".plt");
|
| - htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
|
| - htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
|
| + htab->splt = bfd_get_linker_section (dynobj, ".plt");
|
| + htab->srelplt = bfd_get_linker_section (dynobj, ".rela.plt");
|
| + htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
|
| if (!info->shared)
|
| - htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
|
| + htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
|
|
|
| if (!htab->splt || !htab->srelplt || !htab->sdynbss
|
| || (!info->shared && !htab->srelbss))
|
| @@ -2867,8 +2869,7 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd,
|
|
|
| BFD_ASSERT (h->dynindx != -1);
|
|
|
| - s = bfd_get_section_by_name (h->root.u.def.section->owner,
|
| - ".rela.bss");
|
| + s = bfd_get_linker_section (htab->elf.dynobj, ".rela.bss");
|
| BFD_ASSERT (s != NULL);
|
|
|
| rela.r_offset = (h->root.u.def.value
|
| @@ -2906,14 +2907,14 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
|
|
|
| dynobj = htab->elf.dynobj;
|
|
|
| - sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
|
| + sdyn = bfd_get_linker_section (dynobj, ".dynamic");
|
|
|
| if (htab->elf.dynamic_sections_created)
|
| {
|
| asection *splt;
|
| Elf32_External_Dyn *dyncon, *dynconend;
|
|
|
| - splt = bfd_get_section_by_name (dynobj, ".plt");
|
| + splt = bfd_get_linker_section (dynobj, ".plt");
|
| BFD_ASSERT (splt != NULL && sdyn != NULL);
|
|
|
| dyncon = (Elf32_External_Dyn *) sdyn->contents;
|
| @@ -2968,7 +2969,7 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
|
|
|
| /* Set the first entry in the global offset table to the address of
|
| the dynamic section. */
|
| - sgot = bfd_get_section_by_name (dynobj, ".got.plt");
|
| + sgot = bfd_get_linker_section (dynobj, ".got.plt");
|
| if (sgot && sgot->size > 0)
|
| {
|
| if (sdyn == NULL)
|
| @@ -3004,7 +3005,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
|
| {
|
| /* Common symbols less than or equal to -G nn bytes are automatically
|
| put into .sbss. */
|
| - *secp = bfd_make_section_anyway (abfd, ".sbss");
|
| + *secp = bfd_make_section_old_way (abfd, ".sbss");
|
| if (*secp == NULL
|
| || ! bfd_set_section_flags (abfd, *secp, SEC_IS_COMMON))
|
| return FALSE;
|
|
|