This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug libc/21913] static binaries SIGSEGV in __brk when host's gcc is pie-by-default (i386)
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Tue, 08 Aug 2017 15:44:08 +0000
- Subject: [Bug libc/21913] static binaries SIGSEGV in __brk when host's gcc is pie-by-default (i386)
- Auto-submitted: auto-generated
- References: <bug-21913-131@http.sourceware.org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=21913
--- Comment #11 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, master has been updated
via 086df229eef36041cae4a633c6fde6150f18d75e (commit)
from fc5ad7024c620cdfe9b76e94638aac83b99c5bf8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=086df229eef36041cae4a633c6fde6150f18d75e
commit 086df229eef36041cae4a633c6fde6150f18d75e
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Tue Aug 8 08:41:08 2017 -0700
i386: Add <startup.h> [BZ #21913]
On Linux/i386, there are 3 ways to make a system call:
1. call *%gs:SYSINFO_OFFSET. This requires TLS initialization.
2. call *_dl_sysinfo. This requires relocation of _dl_sysinfo.
3. int $0x80. This is slower than #2 and #3, but works everywhere.
When an object file is compiled with PIC, #1 is prefered since it is
faster than #3 and doesn't require relocation of _dl_sysinfo. For
dynamic executables, ld.so initializes TLS. However, for static
executables, before TLS is initialized by __libc_setup_tls, #3 should
be used for system calls.
This patch adds <startup.h> which defines _startup_fatal and defaults
it to __libc_fatal. It replaces __libc_fatal with _startup_fatal in
static executables where it is called before __libc_setup_tls is called.
This header file is included in all files containing functions which are
called before __libc_setup_tls is called. On Linux/i386, when PIE is
enabled by default, _startup_fatal is turned into ABORT_INSTRUCTION and
I386_USE_SYSENTER is defined to 0 so that "int $0x80" is used for system
calls before __libc_setup_tls is called.
Tested on i686 and x86-64. Without this patch, all statically-linked
tests will fail on i686 when the compiler defaults to -fPIE.
[BZ #21913]
* csu/libc-tls.c: Include <startup.h> first.
(__libc_setup_tls): Call _startup_fatal instead of __libc_fatal.
* elf/dl-tunables.c: Include <startup.h> first.
* include/libc-symbols.h (BUILD_PIE_DEFAULT): New.
* sysdeps/generic/startup.h: New file.
* sysdeps/unix/sysv/linux/i386/startup.h: Likewise.
* sysdeps/unix/sysv/linux/i386/brk.c [BUILD_PIE_DEFAULT != 0]
(I386_USE_SYSENTER): New. Defined to 0.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 12 +++++++
csu/libc-tls.c | 3 +-
elf/dl-tunables.c | 1 +
include/libc-symbols.h | 8 +++++
.../huge_val_flt128.h => sysdeps/generic/startup.h | 10 +++---
sysdeps/unix/sysv/linux/i386/brk.c | 5 +++
.../linux/{open_by_handle_at.c => i386/startup.h} | 31 +++++++++----------
7 files changed, 48 insertions(+), 22 deletions(-)
copy bits/huge_val_flt128.h => sysdeps/generic/startup.h (69%)
copy sysdeps/unix/sysv/linux/{open_by_handle_at.c => i386/startup.h} (60%)
--
You are receiving this mail because:
You are on the CC list for the bug.