This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libc/21913] static binaries SIGSEGV in __brk when host's gcc is pie-by-default (i386)


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]