Don't use PLT nor GOT in libc.a [BZ #20750]
Commit Message
On Fri, Nov 25, 2016 at 12:43 AM, Florian Weimer <fweimer@redhat.com> wrote:
> On 11/24/2016 12:58 PM, Allan McRae wrote:
>>
>> Ping. My distribution wants to enable PIE and -z,now by default and
>> this is required for glibc to build.
>
>
> My question has been answered. H.J., could you please check this in?
>
> Thanks,
> Florian
>
This is what I checked in.
Comments
Does this fix bug 20621 or not? (At one point 20621 and 20750 were marked
as duplicates.)
On Mon, Nov 28, 2016 at 10:26 AM, Joseph Myers <joseph@codesourcery.com> wrote:
> Does this fix bug 20621 or not? (At one point 20621 and 20750 were marked
> as duplicates.)
>
Bug 20621 compiles glibc with -fPIC -DPIC. I don't think it is the
supported way to build glibc.
From dddb327ef2da7dfd86aed36b4db6e2fe471ed461 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 4 Nov 2016 10:43:42 -0700
Subject: [PATCH] X86_64: Don't use PLT nor GOT in static archives [BZ #20750]
There is no need to use PLT nor GOT in static archives to branch to a
function, regardless whether static archives is compiled with PIC or
not. When static archives are used to create dynamic executable,
PLT/GOT may be used. The resulting executable still works correctly.
[BZ #20750]
* sysdeps/x86_64/sysdep.h (JUMPTARGET): Check SHARED instead
of PIC.
---
sysdeps/x86_64/sysdep.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
@@ -89,13 +89,14 @@ lose: \
END (name)
#undef JUMPTARGET
-#ifdef PIC
+#ifdef SHARED
# ifdef BIND_NOW
# define JUMPTARGET(name) *name##@GOTPCREL(%rip)
# else
# define JUMPTARGET(name) name##@PLT
# endif
#else
+/* For static archives, branch to target directly. */
# define JUMPTARGET(name) name
#endif
--
2.7.4