aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-s390.c41
-rw-r--r--bfd/elf64-s390.c49
3 files changed, 10 insertions, 86 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 15cfb1c..afd3dec 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2001-11-14 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * elf32-s390.c (elf_s390_relocate_section): Use the "unresolved_reloc"
+ scheme to get rid of an ugly complicated test.
+ * elf64-s390.c (elf_s390_relocate_section): Likewise.
+
2001-11-14 Andreas Jaeger <aj@suse.de>
* cpu-i386.c (bfd_x86_64_arch_intel_syntax,bfd_x86_64_arch): Use
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index aeb9805..2153a4c 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -1679,44 +1679,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type == bfd_link_hash_defweak)
{
sec = h->root.u.def.section;
- if (r_type == R_390_GOTPC
- || ((r_type == R_390_PLT16DBL
- || r_type == R_390_PLT32)
- && htab->splt != NULL
- && h->plt.offset != (bfd_vma) -1)
- || ((r_type == R_390_GOT12
- || r_type == R_390_GOT16
- || r_type == R_390_GOT32)
- && elf_hash_table (info)->dynamic_sections_created
- && (! info->shared
- || (! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0))
- || (info->shared
- && ((! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0)
- && (r_type == R_390_8
- || r_type == R_390_16
- || r_type == R_390_32
- || r_type == R_390_PC16
- || r_type == R_390_PC16DBL
- || r_type == R_390_PC32)
- && ((input_section->flags & SEC_ALLOC) != 0
- /* DWARF will emit R_390_32 relocations in its
- sections against symbols defined externally
- in shared libraries. We can't do anything
- with them here. */
- || ((input_section->flags & SEC_DEBUGGING) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
- {
- /* In these cases, we don't need the relocation
- value. We check specially because in some
- obscure cases sec->output_section will be NULL. */
- relocation = 0;
- }
- else if (sec->output_section == NULL)
+ if (sec->output_section == NULL)
{
/* Set a flag that will be cleared later if we find a
relocation value for this symbol. output_section
@@ -1963,7 +1926,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
{
relocate = false;
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
+ outrel.r_addend = rel->r_addend;
}
else
{
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index e0a18cd..f4c1075 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -1658,52 +1658,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type == bfd_link_hash_defweak)
{
sec = h->root.u.def.section;
- if (r_type == R_390_GOTPC
- || r_type == R_390_GOTPCDBL
- || ((r_type == R_390_PLT16DBL
- || r_type == R_390_PLT32
- || r_type == R_390_PLT32DBL
- || r_type == R_390_PLT64)
- && htab->splt != NULL
- && h->plt.offset != (bfd_vma) -1)
- || ((r_type == R_390_GOT12
- || r_type == R_390_GOT16
- || r_type == R_390_GOT32
- || r_type == R_390_GOT64
- || r_type == R_390_GOTENT)
- && elf_hash_table (info)->dynamic_sections_created
- && (! info->shared
- || (! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0))
- || (info->shared
- && ((! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0)
- && (r_type == R_390_8
- || r_type == R_390_16
- || r_type == R_390_32
- || r_type == R_390_64
- || r_type == R_390_PC16
- || r_type == R_390_PC16DBL
- || r_type == R_390_PC32
- || r_type == R_390_PC32DBL
- || r_type == R_390_PC64)
- && ((input_section->flags & SEC_ALLOC) != 0
- /* DWARF will emit R_390_32 relocations in its
- sections against symbols defined externally
- in shared libraries. We can't do anything
- with them here. */
- || ((input_section->flags & SEC_DEBUGGING) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
- {
- /* In these cases, we don't need the relocation
- value. We check specially because in some
- obscure cases sec->output_section will be NULL. */
- relocation = 0;
- }
- else if (sec->output_section == NULL)
+ if (sec->output_section == NULL)
{
/* Set a flag that will be cleared later if we find a
relocation value for this symbol. output_section
@@ -1973,7 +1928,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
{
relocate = false;
outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
+ outrel.r_addend = rel->r_addend;
}
else
{