This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] PR dynamic-link/17711: copy relocations against protected symbols don't work
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 27 Feb 2015 13:58:40 -0800
- Subject: Re: [PATCH] PR dynamic-link/17711: copy relocations against protected symbols don't work
- Authentication-results: sourceware.org; auth=none
- References: <20150227212418 dot GA5072 at intel dot com> <20150227213519 dot C8B2C2C3B2C at topped-with-meat dot com>
On Fri, Feb 27, 2015 at 1:35 PM, Roland McGrath <roland@hack.frob.com> wrote:
>> Protocted symbol in shared library can only be accessed from PIE
>> or shared library. Linker in binutils 2.26 enforces it. We must
>> compile vismain with -fPIE and link it with -pie. OK for master?
>
> Add some comments (in vismain.c is probably fine) explaining that it must
> be a PIE and why.
>
>> PR dynamic-link/17711
> [BZ #17711]
>
>> * elf/Makefile (tests): Add vismain only if PIE is enabled.
>> (tests-pie): Add vismain.
>> (CFLAGS-vismain.c): New.
Here is the updated patch. OK for master?
Thanks.
--
H.J.
From 4a8b140bf71a22571525e856352a34b61a6c5f18 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 27 Feb 2015 13:56:44 -0800
Subject: [PATCH] Compile vismain with -fPIE and link with -pie
Protocted symbol in shared library can only be accessed from PIE
or shared library. Linker in binutils 2.26 enforces it. We must
compile vismain with -fPIE and link it with -pie.
[BZ #17711]
* elf/Makefile (tests): Add vismain only if PIE is enabled.
(tests-pie): Add vismain.
(CFLAGS-vismain.c): New.
* elf/vismain.c: Add comments for PIE requirement.
---
elf/Makefile | 5 ++++-
elf/vismain.c | 5 +++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/elf/Makefile b/elf/Makefile
index f78642e..20b1682 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -130,7 +130,7 @@ endif
tests += $(tests-static)
ifeq (yes,$(build-shared))
tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
- constload1 order vismain noload filter unload \
+ constload1 order noload filter unload \
reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
nodlopen nodlopen2 neededtest neededtest2 \
neededtest3 neededtest4 unload2 lateglobal initfirst global \
@@ -218,6 +218,9 @@ ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1
tests += tst-pie1 tst-pie2
tests-pie += tst-pie1 tst-pie2
+tests += vismain
+tests-pie += vismain
+CFLAGS-vismain.c = $(PIE-ccflag)
endif
modules-execstack-yes = tst-execstack-mod
extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
diff --git a/elf/vismain.c b/elf/vismain.c
index dfcaeeb..05b3748 100644
--- a/elf/vismain.c
+++ b/elf/vismain.c
@@ -15,6 +15,11 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+/* This file must be compiled as PIE to avoid copy relocation when
+ accessing protected symbols defined in shared libaries since copy
+ relocation doesn't work with protected symbols and linker in
+ binutils 2.26 enforces this rule. */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
--
1.9.3