This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug libc/19574] glibc should support building static PIE binaries
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Tue, 03 Oct 2017 14:27:38 +0000
- Subject: [Bug libc/19574] glibc should support building static PIE binaries
- Auto-submitted: auto-generated
- References: <bug-19574-131@http.sourceware.org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=19574
--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, hjl/pie/static has been created
at cfe0d52782764c4f4d0701985459931b7a579ea8 (commit)
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=cfe0d52782764c4f4d0701985459931b7a579ea8
commit cfe0d52782764c4f4d0701985459931b7a579ea8
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Sep 27 16:47:29 2017 -0700
Add --enable-static-pie to build-many-glibcs.py
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d9c5665a6df85479fa9535d912956eefb565739c
commit d9c5665a6df85479fa9535d912956eefb565739c
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Sep 29 01:07:53 2017 -0700
tile: Check SHARED instead PIC for SYSCALL_ERROR_NAME
For static PIE code, PIC is defined and SHARED is undefined. We
should check SHARED instead PIC for SYSCALL_ERROR_NAME.
* sysdeps/unix/sysv/linux/tile/sysdep.h (SYSCALL_ERROR_NAME):
Check SHARED instead PIC.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=79453220daacdf11ec12a44cce831dcd78b92d72
commit 79453220daacdf11ec12a44cce831dcd78b92d72
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 16:13:54 2017 -0700
sparc: Check PIC instead of SHARED in start.S
Since start.o may be compiled as PIC, we should check PIC instead of
SHARED.
* sysdeps/sparc/sparc32/start.S (_start): Check PIC instead of
SHARED.
* sysdeps/sparc/sparc64/start.S (_start): Likewise.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e435376ffe41749285ec9f7c2dff0f9beb53becd
commit e435376ffe41749285ec9f7c2dff0f9beb53becd
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 16:13:22 2017 -0700
microblaze: Check PIC instead of SHARED in start.S
Since start.o may be compiled as PIC, we should check PIC instead of
SHARED.
* sysdeps/microblaze/start.S (_start): Check PIC instead of SHARED.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=871ea1623680c7b236c9a41928638ea3ee0679f0
commit 871ea1623680c7b236c9a41928638ea3ee0679f0
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 16:12:52 2017 -0700
m68k: Check PIC instead of SHARED in start.S
Since start.o may be compiled as PIC, we should check PIC instead of
SHARED.
* sysdeps/m68k/start.S (_start): Check PIC instead of SHARED.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=86dedca076cb8a64c71209424d2dcc6e76823e76
commit 86dedca076cb8a64c71209424d2dcc6e76823e76
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 16:12:28 2017 -0700
hppa: Check PIC instead of SHARED in start.S
Since start.o may be compiled as PIC, we should check PIC instead of
SHARED.
* sysdeps/hppa/start.S (_start): Check PIC instead of SHARED.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=82cb35c2e6ecad2a82062aea4834f1684c12bf19
commit 82cb35c2e6ecad2a82062aea4834f1684c12bf19
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 16:11:02 2017 -0700
aarch64: Check PIC instead of SHARED in start.S
Since start.o may be compiled as PIC, we should check PIC instead of
SHARED.
* sysdeps/aarch64/start.S (_start): Check PIC instead of SHARED.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=4dd595fa8888f31fdfed21c1ece1a4b25f178667
commit 4dd595fa8888f31fdfed21c1ece1a4b25f178667
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:59:00 2017 -0700
tile: Update elf_machine_load_address for static PIE
tile uses _DYNAMIC to compute load address, which works with static PIE.
We just need to return 0 if _DYNAMIC is undefined for static executable.
* sysdeps/tile/dl-machine.h (elf_machine_load_address): Return 0
if _DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0e7446e61030aca7848c9a0fd75ef4454b616ac3
commit 0e7446e61030aca7848c9a0fd75ef4454b616ac3
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:57:09 2017 -0700
sparc: Update elf_machine_load_address for static PIE
sparc uses a local label to compute load address, which works with static
PIE. We just need to return 0 if _DYNAMIC is undefined for static
executable.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_dynamic): Return
0 if _DYNAMIC is undefined for static executable.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_dynamic):
Likewise.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=34c3eb56717ff903808e112e9898cf2fa395dbb7
commit 34c3eb56717ff903808e112e9898cf2fa395dbb7
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:55:18 2017 -0700
sh: Update elf_machine_load_address for static PIE
When --enable-static-pie is used to configure glibc, we need to use
_dl_relocate_static_pie to compute load address in static PIE.
* sysdeps/sh/dl-machine.h (elf_machine_load_address): Use
_dl_relocate_static_pie instead of _dl_start to compute load
address in static PIE. Return 0 if _DYNAMIC is undefined for
static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b15a9995a23a588a8dc7b3948947c4be3a811176
commit b15a9995a23a588a8dc7b3948947c4be3a811176
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:53:06 2017 -0700
s390: Update elf_machine_load_address for static PIE
When --enable-static-pie is used to configure glibc, we need to use
_dl_relocate_static_pie to compute load address in static PIE.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_dynamic): Use
_dl_relocate_static_pie instead of _dl_start to compute load
address in static PIE. Return 0 if _DYNAMIC is undefined for
static executable.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_dynamic):
Likewise.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9d68ebe8eb3d2cee5f7d9aae7b3d198a861e4bbf
commit 9d68ebe8eb3d2cee5f7d9aae7b3d198a861e4bbf
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:51:41 2017 -0700
powerpc32: Update elf_machine_load_address for static PIE
powerpc32 uses _DYNAMIC to compute load address, which works with static
PIE. We just need to return 0 if _DYNAMIC is undefined for static
executable.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_load_address):
Return 0 if _DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5e819917600a4a5fd2c751739e1ee42b28f9644d
commit 5e819917600a4a5fd2c751739e1ee42b28f9644d
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:50:10 2017 -0700
nios2: Update elf_machine_load_address for static PIE
nios2 uses a local label to compute load address, which works with static
PIE. We just need to return 0 if _DYNAMIC is undefined for static
executable.
* sysdeps/nios2/dl-machine.h (elf_machine_dynamic): Return 0 if
_DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=358575f2c530d7dcc680204ccf87e7cf6c071906
commit 358575f2c530d7dcc680204ccf87e7cf6c071906
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:47:20 2017 -0700
microblaze: Update elf_machine_load_address for static PIE
microblaze uses _DYNAMIC to compute load address, which works with static
PIE. We just need to return 0 if _DYNAMIC is undefined for static
executable.
* sysdeps/microblaze/dl-machine.h (elf_machine_load_address):
Return 0 if _DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d876d0384e07170a3c3ac1bf49030c817dcb8781
commit d876d0384e07170a3c3ac1bf49030c817dcb8781
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:46:26 2017 -0700
m68k: Update elf_machine_load_address for static PIE
When --enable-static-pie is used to configure glibc, we need to use
_dl_relocate_static_pie to compute load address in static PIE.
* sysdeps/m68k/dl-machine.h (elf_machine_load_address): Use
_dl_relocate_static_pie instead of _dl_start to compute load
address in static PIE. Return 0 if _DYNAMIC is undefined for
static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e78ad9e38d4df5210818588bafa861490efa613c
commit e78ad9e38d4df5210818588bafa861490efa613c
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:44:46 2017 -0700
ia64: Update elf_machine_load_address for static PIE
ia64 uses a local label to compute load address, which works with static
PIE. We just need to return 0 if _DYNAMIC is undefined for static
executable.
* sysdeps/ia64/dl-machine.h (elf_machine_dynamic): Return 0 if
_DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=870ac9f7969d4de7974cf64f8805c05b3c66ea06
commit 870ac9f7969d4de7974cf64f8805c05b3c66ea06
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:42:18 2017 -0700
hppa: Update elf_machine_load_address for static PIE
hppa uses _DYNAMIC to compute load address, which works with static PIE.
We just need to return 0 if _DYNAMIC is undefined for static executable.
* sysdeps/hppa/dl-machine.h (elf_machine_load_address): Return 0
if _DYNAMIC is undefined for static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5e6c987785f992abbf0e56ac2e48bc90ec235714
commit 5e6c987785f992abbf0e56ac2e48bc90ec235714
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Sep 28 14:36:33 2017 -0700
aarch64: Update elf_machine_load_address for static PIE
When --enable-static-pie is used to configure glibc, we need to use
_dl_relocate_static_pie to compute load address in static PIE.
* sysdeps/aarch64/dl-machine.h (elf_machine_load_address): Use
_dl_relocate_static_pie instead of _dl_start to compute load
address in static PIE. Return 0 if _DYNAMIC is undefined for
static executable.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c7f8f74e82dc8427be97211c8383757952b747e3
commit c7f8f74e82dc8427be97211c8383757952b747e3
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Tue Aug 22 15:37:10 2017 -0700
Don't use hidden visibility in libc.a with PIE on i386
On i386, when multi-arch is enabled, all external functions must be
called via PIC PLT in PIE, which requires setting up EBX register,
since they may be IFUNC functions.
* config.h.in (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New.
* include/libc-symbols.h (__hidden_proto_hiddenattr): Add check
for PIC and NO_HIDDEN_EXTERN_FUNC_IN_PIE.
* sysdeps/i386/configure.ac (NO_HIDDEN_EXTERN_FUNC_IN_PIE): New
AC_DEFINE if multi-arch is enabled.
* sysdeps/i386/configure: Regenerated.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9f807af3b78dc14c8d6bfa87d27efa77dc72ec82
commit 9f807af3b78dc14c8d6bfa87d27efa77dc72ec82
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Mon Jul 17 08:17:32 2017 -0700
Add --enable-static-pie configure option to build static PIE [BZ #19574]
Dynamic linker, ld.so, is a standalone program which can be loaded at
any address. This patch adds a configure option, --enable-static-pie,
to embed the part of ld.so in static executable to create static position
independent executable (static PIE). A static PIE is similar to static
executable, but can be loaded at any address without help from a dynamic
linker. When --enable-static-pie is used to configure glibc, libc.a is
built as PIE and all static executables, including tests, are built as
static PIE. The resulting libc.a can be used together with GCC 8 or
above to build static PIE with the compiler option, -static-pie. But
GCC 8 isn't required to build glibc with --enable-static-pie. When an
older GCC is used to build glibc with --enable-static-pie, proper input
files are passed to linker to create static executables as static PIE,
together with "-z text" to prevent dynamic relocations in read-only
segments, which are allowed in static PIE.
Static PIE can work on all architectures which support PIE, provided
1. Target must support accessing of local functions without dynamic
relocations, which is needed in start.S to call __libc_start_main with
function addresses of __libc_csu_init, __libc_csu_fini and main. All
functions in statice PIE are local functions.
2. start.S is updated to check PIC instead SHARED for PIC code path and
avoid dynamic relocation, when PIC is defined and SHARED isn't defined,
to support static PIE. Patches are submitted for aarch64, arm, hppa,
m68k, microblaze and sparc.
3. All assembly codes are updated check PIC instead SHARED for PIC code
path to avoid dynamic relocations in read-only sections.
4. All assembly codes are updated check SHARED instead PIC for static
symbol name. A patch is submitted for tile.
5. elf_machine_load_address in dl-machine.h are updated to support static
PIE. Patches are submitted for aarch64, arm, hppa, ia64, m68k, microblaze,
mips, nios2, powerpc, s390, sh, sparc and tile.
NB: When glibc is built with GCC defaulted to PIE, libc.a is compiled
with -fPIE, regardless if --enable-static-pie is used to configure glibc.
When glibc is configured with --enable-static-pie, libc.a is compiled
with -fPIE, regardless wether GCC defaults to PIE or not. The same libc.a
can be used to build both static executable and static PIE. There is no
need for separate PIE copy of libc.a.
Linker requirements to build glibc with --enable-static-pie:
1. Linker supports --no-dynamic-linker to remove PT_INTERP segment from
static PIE.
2. Linker can create working static PIE. The x86-64 linker needs the
fix for
https://sourceware.org/bugzilla/show_bug.cgi?id=21782
The i386 linker needs to be able to convert "movl main@GOT(%ebx), %eax"
to "leal main@GOTOFF(%ebx), %eax" if main is defined locally.
Binutils 2.29 or above are OK for i686 and x86-64. But linker status for
other targets need to be verified.
Tested on i686 and x86-64.
Build results of build-many-glibcs.py with --enable-static-pie with all
patches for static PIE applied are
PASS: glibcs-aarch64_be-linux-gnu build
PASS: glibcs-aarch64-linux-gnu build
PASS: glibcs-armeb-linux-gnueabi build
PASS: glibcs-armeb-linux-gnueabi-be8 build
PASS: glibcs-armeb-linux-gnueabihf build
PASS: glibcs-armeb-linux-gnueabihf-be8 build
PASS: glibcs-arm-linux-gnueabi build
PASS: glibcs-arm-linux-gnueabihf build
PASS: glibcs-hppa-linux-gnu build
PASS: glibcs-i486-linux-gnu build
PASS: glibcs-i586-linux-gnu build
PASS: glibcs-i686-linux-gnu build
PASS: glibcs-i686-linux-gnu-disable-multi-arch build
PASS: glibcs-m68k-linux-gnu build
PASS: glibcs-microblazeel-linux-gnu build
PASS: glibcs-microblaze-linux-gnu build
PASS: glibcs-mips64el-linux-gnu-n64 build
PASS: glibcs-mips64el-linux-gnu-n64-nan2008 build
PASS: glibcs-mips64el-linux-gnu-n64-nan2008-soft build
PASS: glibcs-mips64el-linux-gnu-n64-soft build
PASS: glibcs-mips64-linux-gnu-n64 build
PASS: glibcs-mips64-linux-gnu-n64-nan2008 build
PASS: glibcs-mips64-linux-gnu-n64-nan2008-soft build
PASS: glibcs-mips64-linux-gnu-n64-soft build
PASS: glibcs-nios2-linux-gnu build
PASS: glibcs-powerpc64le-linux-gnu build
PASS: glibcs-powerpc64-linux-gnu build
PASS: glibcs-s390x-linux-gnu build
PASS: glibcs-x86_64-linux-gnu build
PASS: glibcs-x86_64-linux-gnu-disable-multi-arch build
PASS: glibcs-x86_64-linux-gnu-x32 build
FAIL: glibcs-alpha-linux-gnu build
elf/sln is failed to link due to:
assertion fail bfd/elf64-alpha.c:4125
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-ia64-linux-gnu build
elf/sln is failed to link due to:
libc.a(sched_yield.o): non-pic code with imm relocation against dynamic
symbol `_dl_sysinfo'
This is caused by non-PIC version of DO_CALL macro in ia64 sysdep.h. PIE
libc.a should use PIC version of DO_CALL, except during startup in static
PIE. An ia64 startup.h, similar to i386 startup.h, is needed to handle
this.
FAIL: glibcs-mips64el-linux-gnu-n32 build
FAIL: glibcs-mips64el-linux-gnu-n32-nan2008 build
FAIL: glibcs-mips64el-linux-gnu-n32-nan2008-soft build
FAIL: glibcs-mips64el-linux-gnu-n32-soft build
FAIL: glibcs-mips64-linux-gnu-n32 build
FAIL: glibcs-mips64-linux-gnu-n32-nan2008 build
FAIL: glibcs-mips64-linux-gnu-n32-nan2008-soft build
FAIL: glibcs-mips64-linux-gnu-n32-soft build
FAIL: glibcs-mipsel-linux-gnu build
FAIL: glibcs-mipsel-linux-gnu-nan2008 build
FAIL: glibcs-mipsel-linux-gnu-nan2008-soft build
FAIL: glibcs-mipsel-linux-gnu-soft build
FAIL: glibcs-mips-linux-gnu build
FAIL: glibcs-mips-linux-gnu-nan2008 build
FAIL: glibcs-mips-linux-gnu-nan2008-soft build
FAIL: glibcs-mips-linux-gnu-soft build
elf/sln is failed to link due to:
crt1.o: relocation R_MIPS_HI16 against `_gp' can not be used when making a
shared object; recompile with -fPIC
This is caused by linker bug and/or non-PIC code in crt1.o.
FAIL: glibcs-powerpc-linux-gnu build
FAIL: glibcs-powerpc-linux-gnu-soft build
FAIL: glibcs-powerpc-linux-gnuspe build
FAIL: glibcs-powerpc-linux-gnuspe-e500v1 build
elf/sln is failed to link due to:
ld: read-only segment has dynamic relocations.
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-powerpc-linux-gnu-power4 build
elf/sln is failed to link due to:
findlocale.c:96:(.text+0x22c): @local call to ifunc memchr
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-s390-linux-gnu build
elf/sln is failed to link due to:
collect2: fatal error: ld terminated with signal 11 [Segmentation fault],
core dumped
assertion fail bfd/elflink.c:14242
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-sh3eb-linux-gnu build
FAIL: glibcs-sh3-linux-gnu build
FAIL: glibcs-sh4eb-linux-gnu build
FAIL: glibcs-sh4eb-linux-gnu-soft build
FAIL: glibcs-sh4-linux-gnu build
FAIL: glibcs-sh4-linux-gnu-soft build
elf/sln is failed to link due to:
ld: read-only segment has dynamic relocations.
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-sparc64-linux-gnu build
FAIL: glibcs-sparcv9-linux-gnu build
elf/sln is failed to link due to:
ld: read-only segment has dynamic relocations.
This is caused by linker bug and/or non-PIC code in PIE libc.a.
FAIL: glibcs-tilegxbe-linux-gnu build
FAIL: glibcs-tilegxbe-linux-gnu-32 build
FAIL: glibcs-tilegx-linux-gnu build
FAIL: glibcs-tilegx-linux-gnu-32 build
FAIL: glibcs-tilepro-linux-gnu build
elf/sln is failed to link due to:
ld: read-only segment has dynamic relocations.
This is caused by linker bug and/or non-PIC code in PIE libc.a.
[BZ #19574]
* INSTALL: Regenerated.
* Makeconfig (pic-default): Updated for --enable-static-pie.
(pie-default): New for --enable-static-pie.
(default-pie-ldflag): Likewise.
(+link-static-before-libc): Add $(default-pie-ldflag).
(+prectorT): Updated for --enable-static-pie.
(+postctorT): Likewise.
(CFLAGS-.o): Add $(pie-default).
(CFLAGS-.op): Likewise.
* NEWS: Mention --enable-static-pie.
* config.h.in (ENABLE_STATIC_PIE): New.
* configure.ac (--enable-static-pie): New configure option.
(have-no-dynamic-linker): New LIBC_CONFIG_VAR.
(have-static-pie): Likewise.
Enable static PIE if linker supports --no-dynamic-linker.
(ENABLE_STATIC_PIE): New AC_DEFINE.
(enable-static-pie): New LIBC_CONFIG_VAR.
* configure: Regenerated.
* csu/libc-start.c (LIBC_START_MAIN): Call _dl_relocate_static_pie
in libc.a.
* csu/libc-tls.c (__libc_setup_tls): Add main_map->l_addr to
initimage.
* elf/dl-support.c: Include "dynamic-link.h" and don't include
"get-dynamic-info.h" for --enable-static-pie.
(_dl_relocate_static_pie): New function for --enable-static-pie.
(STATIC_PIE_BOOTSTRAP): New for --enable-static-pie.
(BOOTSTRAP_MAP): Likewise.
(RESOLVE_MAP): Likewise.
* elf/dynamic-link.h (ELF_DURING_STARTUP): Also check
STATIC_PIE_BOOTSTRAP.
* elf/get-dynamic-info.h (elf_get_dynamic_info): Likewise.
* manual/install.texi: Document --enable-static-pie.
* sysdeps/generic/ldsodefs.h (_dl_relocate_static_pie): New.
* sysdeps/i386/configure.ac: Check if linker supports static PIE.
* sysdeps/x86_64/configure.ac: Likewise.
* sysdeps/i386/configure: Regenerated.
* sysdeps/x86_64/configure: Likewise.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f84d2c7c3988ac6f89d6e3dbde5ffffde4c538f5
commit f84d2c7c3988ac6f89d6e3dbde5ffffde4c538f5
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Tue Oct 3 06:54:54 2017 -0700
i386: Use "movl main@GOT(%ebx), %eax" in start.S
Don't use "leal main@GOTOFF(%ebx), %eax" since main may be in a
shared object. Linker will convert "movl main@GOT(%ebx), %eax"
to "leal main@GOTOFF(%ebx), %eax" if main is defined locally.
* sysdeps/i386/start.S: Replace "leal main@GOT(%ebx), %eax" with
"movl main@GOTOFF(%ebx), %eax".
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=67e8204d4812c54d3e48abb9860f2a1ec7049f46
commit 67e8204d4812c54d3e48abb9860f2a1ec7049f46
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Tue Oct 3 06:48:11 2017 -0700
Add a test for main () in a shared object
Verify that crt1.o can be used with main () in a shared object.
* elf/Makefile (tests): Add tst-main1.
(modules-names): Add tst-main1mod.
($(objpfx)tst-main1): New.
(CRT-tst-main1): Likewise.
(LDFLAGS-tst-main1): Likewise.
(LDLIBS-tst-main1): Likewise.
(tst-main1mod.so-no-z-defs): Likewise.
* elf/tst-main1.c: New file.
* elf/tst-main1mod.c: Likewise.
-----------------------------------------------------------------------
--
You are receiving this mail because:
You are on the CC list for the bug.