This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [patches] X86-64 shared linking fix
- To: patches at x86-64 dot org, binutils at sources dot redhat dot com
- Subject: Re: [patches] X86-64 shared linking fix
- From: Bo Thorsen <bo at sonofthor dot dk>
- Date: Wed, 20 Jun 2001 16:42:39 +0100
- Organization: SuSE Labs
- References: <0106201552370F.01423@idefix>
This is a slight rearrangement and optimization of the code around the patch
I just sent. The logic hasn't changed. Please apply this instead of the
previous one.
2001-06-20 Bo Thorsen <bo@suse.co.uk>
* elf64-x86-64.c (elf64_x86_64_relocate_section): Fix linking of
shared libraries.
Index: elf64-x86-64.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-x86-64.c,v
retrieving revision 1.20
diff -u -r1.20 elf64-x86-64.c
--- elf64-x86-64.c 2001/06/19 13:30:40 1.20
+++ elf64-x86-64.c 2001/06/20 15:42:02
@@ -1442,7 +1442,9 @@
case R_X86_64_PC8:
case R_X86_64_PC16:
case R_X86_64_PC32:
- if (h == NULL)
+ if (h == NULL || h->dynindx == -1 ||
+ (info->symbolic
+ && h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
break;
/* Fall through. */
case R_X86_64_8:
@@ -1451,15 +1453,7 @@
case R_X86_64_64:
/* FIXME: The ABI says the linker should make sure the value is
the same when it's zeroextended to 64 bit. */
- if (info->shared
- && (input_section->flags & SEC_ALLOC) != 0
- && ((r_type != R_X86_64_PC8
- && r_type != R_X86_64_PC16
- && r_type != R_X86_64_PC32)
- || (! info->symbolic
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0)))
-
+ if (info->shared && (input_section->flags & SEC_ALLOC) != 0)
{
Elf_Internal_Rela outrel;
boolean skip, relocate;
Bo.
--
Bo Thorsen | 28 Merton Road
Free software developer | Slough, SL1 1QW
SuSE Labs | England