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.
This commit is contained in:
H.J. Lu 2015-02-27 13:56:44 -08:00
parent 2ca725c594
commit ef4ad06fe5
4 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2015-02-27 H.J. Lu <hongjiu.lu@intel.com>
[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.
2015-02-27 Joseph Myers <joseph@codesourcery.com> 2015-02-27 Joseph Myers <joseph@codesourcery.com>
[BZ #18046] [BZ #18046]

8
NEWS
View File

@ -10,10 +10,10 @@ Version 2.22
* The following bugs are resolved with this release: * The following bugs are resolved with this release:
4719, 14841, 13064, 14094, 15319, 15467, 15790, 15969, 16351, 16560, 4719, 14841, 13064, 14094, 15319, 15467, 15790, 15969, 16351, 16560,
16783, 17269, 17523, 17569, 17588, 17792, 17836, 17912, 17916, 17932, 16783, 17269, 17523, 17569, 17588, 17711, 17792, 17836, 17912, 17916,
17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17932, 17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991,
17998, 17999, 18019, 18020, 18029, 18030, 18032, 18038, 18039, 18046, 17996, 17998, 17999, 18019, 18020, 18029, 18030, 18032, 18038, 18039,
18047. 18046, 18047.
* Character encoding and ctype tables were updated to Unicode 7.0.0, using * Character encoding and ctype tables were updated to Unicode 7.0.0, using
new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red

View File

@ -130,7 +130,7 @@ endif
tests += $(tests-static) tests += $(tests-static)
ifeq (yes,$(build-shared)) ifeq (yes,$(build-shared))
tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ 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 \ reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
nodlopen nodlopen2 neededtest neededtest2 \ nodlopen nodlopen2 neededtest neededtest2 \
neededtest3 neededtest4 unload2 lateglobal initfirst global \ neededtest3 neededtest4 unload2 lateglobal initfirst global \
@ -218,6 +218,9 @@ ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1 modules-names += tst-piemod1
tests += tst-pie1 tst-pie2 tests += tst-pie1 tst-pie2
tests-pie += tst-pie1 tst-pie2 tests-pie += tst-pie1 tst-pie2
tests += vismain
tests-pie += vismain
CFLAGS-vismain.c = $(PIE-ccflag)
endif endif
modules-execstack-yes = tst-execstack-mod modules-execstack-yes = tst-execstack-mod
extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))

View File

@ -15,6 +15,11 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */ <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 <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>