summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2005-03-24 22:47:51 +0000
committerEric Christopher <echristo@apple.com>2005-03-24 22:47:51 +0000
commit177eefabe4af6d0dded063a3b2690ce0b8379d51 (patch)
tree5e730e006d3d6fbf0a6df2b2d19f2fa56fa67854
parent26b718e68cb166a8903104d463f66be132d19536 (diff)
downloadgdb-177eefabe4af6d0dded063a3b2690ce0b8379d51.tar.gz
2005-03-24 Eric Christopher <echristo@redhat.com>
* elfxx-mips.c: Revert previous patch. 2005-03-24 Eric Christopher <echristo@redhat.com> * ld-mips-elf/rel32-n32.d: Revert changes. * ld-mips-elf/rel32-o32.d: Ditto. * ld-mips-elf/rel64.d: Ditto.
-rw-r--r--bfd/ChangeLog4
-rw-r--r--bfd/elfxx-mips.c40
2 files changed, 24 insertions, 20 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7d83b6de38e..c6cf9a058d9 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-24 Eric Christopher <echristo@redhat.com>
+
+ * elfxx-mips.c: Revert previous patch.
+
2005-03-24 Nick Clifton <nickc@redhat.com>
* targets.c (_bfd_target_vector): Only include the
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 951d1a72f30..a4baea95138 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -478,11 +478,6 @@ static bfd *reldyn_sorting_bfd;
#define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
(NEWABI_P (abfd) ? ".MIPS.options" : ".options")
-/* Whether the section is readonly. */
-#define MIPS_ELF_READONLY_SECTION(sec) \
- ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \
- == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
-
/* The name of the stub section. */
#define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
@@ -4010,10 +4005,6 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
&value,
input_section))
return bfd_reloc_undefined;
-
- /* If we've written this we need to set DF_TEXTREL here. */
- if (MIPS_ELF_READONLY_SECTION (input_section))
- info->flags |= DF_TEXTREL;
}
else
{
@@ -6110,21 +6101,33 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (sreloc == NULL)
return FALSE;
}
-
+#define MIPS_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
if (info->shared)
- /* When creating a shared object, we must copy these
- reloc types into the output file as R_MIPS_REL32
- relocs. We make room for this reloc in the
- .rel.dyn reloc section. */
- mips_elf_allocate_dynamic_relocations (dynobj, 1);
+ {
+ /* When creating a shared object, we must copy these
+ reloc types into the output file as R_MIPS_REL32
+ relocs. We make room for this reloc in the
+ .rel.dyn reloc section. */
+ mips_elf_allocate_dynamic_relocations (dynobj, 1);
+ if ((sec->flags & MIPS_READONLY_SECTION)
+ == MIPS_READONLY_SECTION)
+ /* We tell the dynamic linker that there are
+ relocations against the text segment. */
+ info->flags |= DF_TEXTREL;
+ }
else
{
struct mips_elf_link_hash_entry *hmips;
-
+
/* We only need to copy this reloc if the symbol is
defined in a dynamic object. */
hmips = (struct mips_elf_link_hash_entry *) h;
++hmips->possibly_dynamic_relocs;
+ if ((sec->flags & MIPS_READONLY_SECTION)
+ == MIPS_READONLY_SECTION)
+ /* We need it to tell the dynamic linker if there
+ are relocations against the text segment. */
+ hmips->readonly_reloc = TRUE;
}
/* Even though we don't directly need a GOT entry for
@@ -6420,12 +6423,9 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
&& (h->root.type == bfd_link_hash_defweak
|| !h->def_regular))
{
- asection *sec;
- sec = mips_elf_rel_dyn_section (dynobj, FALSE);
mips_elf_allocate_dynamic_relocations (dynobj,
hmips->possibly_dynamic_relocs);
-
- if (MIPS_ELF_READONLY_SECTION (sec))
+ if (hmips->readonly_reloc)
/* We tell the dynamic linker that there are relocations
against the text segment. */
info->flags |= DF_TEXTREL;