]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - INSTALL
elf: Refuse to dlopen PIE objects [BZ #24323]
[thirdparty/glibc.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 68b9252b74b6285f8fa90b2b8ceef93ec6811246..e137a71169651929142c6a98ad9e58ed78bca0fc 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -36,9 +36,18 @@ normal setting to install as the standard system library is
 '--prefix=/usr' for GNU/Linux systems and '--prefix=' (an empty prefix)
 for GNU/Hurd systems.
 
-   It may also be useful to set the CC and CFLAGS variables in the
-environment when running 'configure'.  CC selects the C compiler that
-will be used, and CFLAGS sets optimization options for the compiler.
+   It may also be useful to pass 'CC=COMPILER' and 'CFLAGS=FLAGS'
+arguments to 'configure'.  'CC' selects the C compiler that will be
+used, and 'CFLAGS' sets optimization options for the compiler.  Any
+compiler options required for all compilations, such as options
+selecting an ABI or a processor for which to generate code, should be
+included in 'CC'.  Options that may be overridden by the GNU C Library
+build system for particular files, such as for optimization and
+debugging, should go in 'CFLAGS'.  The default value of 'CFLAGS' is '-g
+-O2', and the GNU C Library cannot be compiled without optimization, so
+if 'CFLAGS' is specified it must enable optimization.  For example:
+
+     $ ../glibc-VERSION/configure CC="gcc -m32" CFLAGS="-O3"
 
    The following list describes all of the available options for
 'configure':
@@ -81,6 +90,22 @@ will be used, and CFLAGS sets optimization options for the compiler.
      library will still be usable, but functionality may be lost--for
      example, you can't build a shared libc with old binutils.
 
+'--with-nonshared-cflags=CFLAGS'
+     Use additional compiler flags CFLAGS to build the parts of the
+     library which are always statically linked into applications and
+     libraries even with shared linking (that is, the object files
+     contained in 'lib*_nonshared.a' libraries).  The build process will
+     automatically use the appropriate flags, but this option can be
+     used to set additional flags required for building applications and
+     libraries, to match local policy.  For example, if such a policy
+     requires that all code linked into applications must be built with
+     source fortification,
+     '--with-nonshared-cflags=-Wp,-D_FORTIFY_SOURCE=2' will make sure
+     that the objects in 'libc_nonshared.a' are compiled with this flag
+     (although this will not affect the generated code in this
+     particular case and potentially change debugging information and
+     metadata only).
+
 '--disable-shared'
      Don't build shared libraries even if it is possible.  Not all
      systems support shared libraries; you need ELF support and
@@ -97,6 +122,22 @@ will be used, and CFLAGS sets optimization options for the compiler.
      programs and tests are created as dynamic position independent
      executables (PIE) by default.
 
+'--enable-cet'
+     Enable Intel Control-flow Enforcement Technology (CET) support.
+     When the GNU C Library is built with '--enable-cet', the resulting
+     library is protected with indirect branch tracking (IBT) and shadow
+     stack (SHSTK).  When CET is enabled, the GNU C Library is
+     compatible with all existing executables and shared libraries.
+     This feature is currently supported on i386, x86_64 and x32 with
+     GCC 8 and binutils 2.29 or later.  Note that when CET is enabled,
+     the GNU C Library requires CPUs capable of multi-byte NOPs, like
+     x86-64 processors as well as Intel Pentium Pro or newer.
+
+     NOTE: '--enable-cet' has been tested for i686, x86_64 and x32 on
+     non-CET processors.  '--enable-cet' has been tested for x86_64 and
+     x32 on CET SDVs, but Intel CET support hasn't been validated for
+     i686.
+
 '--disable-profile'
      Don't build libraries with profiling information.  You may want to
      use this option if you don't plan to do profiling.
@@ -135,10 +176,10 @@ will be used, and CFLAGS sets optimization options for the compiler.
      protection.
 
 '--enable-bind-now'
-     Disable lazy binding for installed shared objects.  This provides
-     additional security hardening because it enables full RELRO and a
-     read-only global offset table (GOT), at the cost of slightly
-     increased program load times.
+     Disable lazy binding for installed shared objects and programs.
+     This provides additional security hardening because it enables full
+     RELRO and a read-only global offset table (GOT), at the cost of
+     slightly increased program load times.
 
 '--enable-pt_chown'
      The file 'pt_chown' is a helper binary for 'grantpt' (*note
@@ -186,7 +227,21 @@ will be used, and CFLAGS sets optimization options for the compiler.
      By default, libnsl is only built as shared library for backward
      compatibility and the NSS modules libnss_compat, libnss_nis and
      libnss_nisplus are not built at all.  Use this option to enable
-     libnsl with all depending NSS modules and header files.
+     libnsl with all depending NSS modules and header files.  For
+     architectures and ABIs that have been added after version 2.28 of
+     the GNU C Library this option is not available, and the libnsl
+     compatibility library is not built.
+
+'--disable-crypt'
+     Do not install the passphrase-hashing library 'libcrypt' or the
+     header file 'crypt.h'.  'unistd.h' will still declare the function
+     'crypt'.  Using this option does not change the set of programs
+     that may need to be linked with '-lcrypt'; it only means that the
+     GNU C Library will not provide that library.
+
+     This option is for hackers and distributions experimenting with
+     independently-maintained implementations of libcrypt.  It may
+     become the default in a future release.
 
 '--disable-experimental-malloc'
      By default, a per-thread cache is enabled in 'malloc'.  While this
@@ -210,7 +265,7 @@ will be used, and CFLAGS sets optimization options for the compiler.
      but you want to compile a library for 586es, give
      '--host=i586-pc-linux-gnu' or just '--host=i586-linux' and add the
      appropriate compiler flags ('-mcpu=i586' will do the trick) to
-     CFLAGS.
+     'CC'.
 
      If you specify just '--build', 'configure' will get confused.
 
@@ -260,33 +315,6 @@ You can specify 'stop-on-test-failure=y' when running 'make check' to
 make the test run stop and exit with an error status immediately when a
 failure occurs.
 
-   The GNU C Library pretty printers come with their own set of scripts
-for testing, which run together with the rest of the testsuite through
-'make check'.  These scripts require the following tools to run
-successfully:
-
-   * Python 2.7.6/3.4.3 or later
-
-     Python is required for running the printers' test scripts.
-
-   * PExpect 4.0
-
-     The printer tests drive GDB through test programs and compare its
-     output to the printers'.  PExpect is used to capture the output of
-     GDB, and should be compatible with the Python version in your
-     system.
-
-   * GDB 7.8 or later with support for Python 2.7.6/3.4.3 or later
-
-     GDB itself needs to be configured with Python support in order to
-     use the pretty printers.  Notice that your system having Python
-     available doesn't imply that GDB supports it, nor that your
-     system's Python and GDB's have the same version.
-
-If these tools are absent, the printer tests will report themselves as
-'UNSUPPORTED'.  Notice that some of the printer tests require the GNU C
-Library to be compiled with debugging symbols.
-
    To format the 'GNU C Library Reference Manual' for printing, type
 'make dvi'.  You need a working TeX installation to do this.  The
 distribution builds the on-line formatted version of the manual, as Info
@@ -304,7 +332,7 @@ makefiles.
 setting a few variables in 'configparms'.  Set 'CC' to the
 cross-compiler for the target you configured the library for; it is
 important to use this same 'CC' value when running 'configure', like
-this: 'CC=TARGET-gcc configure TARGET'.  Set 'BUILD_CC' to the compiler
+this: 'configure TARGET CC=TARGET-gcc'.  Set 'BUILD_CC' to the compiler
 to use for programs run on the build system as part of compiling the
 library.  You may need to set 'AR' to cross-compiling versions of 'ar'
 if the native tools are not configured to work with object files for the
@@ -383,13 +411,33 @@ a pseudoterminal so it can be used by the calling process.  If you are
 using a Linux kernel with the 'devpts' filesystem enabled and mounted at
 '/dev/pts', you don't need this program.
 
-   After installation you might want to configure the timezone and
-locale installation of your system.  The GNU C Library comes with a
-locale database which gets configured with 'localedef'.  For example, to
-set up a German locale with name 'de_DE', simply issue the command
-'localedef -i de_DE -f ISO-8859-1 de_DE'.  To configure all locales that
+   After installation you should configure the timezone and install
+locales for your system.  The time zone configuration ensures that your
+system time matches the time for your current timezone.  The locales
+ensure that the display of information on your system matches the
+expectations of your language and geographic region.
+
+   The GNU C Library is able to use two kinds of localization
+information sources, the first is a locale database named
+'locale-archive' which is generally installed as
+'/usr/lib/locale/locale-archive'.  The locale archive has the benefit of
+taking up less space and being very fast to load, but only if you plan
+to install sixty or more locales.  If you plan to install one or two
+locales you can instead install individual locales into their self-named
+directories e.g. '/usr/lib/locale/en_US.utf8'.  For example to install
+the German locale using the character set for UTF-8 with name 'de_DE'
+into the locale archive issue the command 'localedef -i de_DE -f UTF-8
+de_DE', and to install just the one locale issue the command 'localedef
+--no-archive -i de_DE -f UTF-8 de_DE'.  To configure all locales that
 are supported by the GNU C Library, you can issue from your build
-directory the command 'make localedata/install-locales'.
+directory the command 'make localedata/install-locales' to install all
+locales into the locale archive or 'make
+localedata/install-locale-files' to install all locales as files in the
+default configured locale installation directory (derived from
+'--prefix' or '--localedir').  To install into an alternative system
+root use 'DESTDIR' e.g. 'make localedata/install-locale-files
+DESTDIR=/opt/glibc', but note that this does not change the configured
+prefix.
 
    To configure the locally used timezone, set the 'TZ' environment
 variable.  The script 'tzselect' helps you to select the right value.
@@ -406,27 +454,19 @@ Recommended Tools for Compilation
 We recommend installing the following GNU tools before attempting to
 build the GNU C Library:
 
-   * GNU 'make' 3.79 or newer
+   * GNU 'make' 4.0 or newer
 
-     You need the latest version of GNU 'make'.  Modifying the GNU C
-     Library to work with other 'make' programs would be so difficult
-     that we recommend you port GNU 'make' instead.  *Really.*  We
-     recommend GNU 'make' version 3.79.  All earlier versions have
-     severe bugs or lack features.
+     As of relase time, GNU 'make' 4.2.1 is the newest verified to work
+     to build the GNU C Library.
 
-   * GCC 4.9 or newer
+   * GCC 6.2 or newer
 
-     GCC 4.9 or higher is required.  In general it is recommended to use
+     GCC 6.2 or higher is required.  In general it is recommended to use
      the newest version of the compiler that is known to work for
      building the GNU C Library, as newer compilers usually produce
-     better code.  As of release time, GCC 7.3.1 is the newest compiler
+     better code.  As of release time, GCC 8.2.1 is the newest compiler
      verified to work to build the GNU C Library.
 
-     For PowerPC 64-bits little-endian (powerpc64le), GCC 6.2 or higher
-     is required.  This compiler version is the first to provide the
-     features required for building the GNU C Library with support for
-     '_Float128'.
-
      For multi-arch support it is recommended to use a GCC which has
      been built with support for GNU indirect functions.  This ensures
      that correct debugging information is generated for functions
@@ -446,7 +486,7 @@ build the GNU C Library:
 
      You must use GNU 'binutils' (as and ld) to build the GNU C Library.
      No other assembler or linker has the necessary functionality at the
-     moment.  As of release time, GNU 'binutils' 2.29.1 is the newest
+     moment.  As of release time, GNU 'binutils' 2.31.1 is the newest
      verified to work to build the GNU C Library.
 
    * GNU 'texinfo' 4.7 or later
@@ -463,25 +503,55 @@ build the GNU C Library:
      'awk' is used in several places to generate files.  Some 'gawk'
      extensions are used, including the 'asorti' function, which was
      introduced in version 3.1.2 of 'gawk'.  As of release time, 'gawk'
-     version 4.2.0 is the newest verified to work to build the GNU C
+     version 4.2.1 is the newest verified to work to build the GNU C
      Library.
 
    * GNU 'bison' 2.7 or later
 
      'bison' is used to generate the 'yacc' parser code in the 'intl'
-     subdirectory.  As of release time, 'bison' version 3.0.4 is the
+     subdirectory.  As of release time, 'bison' version 3.0.5 is the
      newest verified to work to build the GNU C Library.
 
    * Perl 5
 
-     Perl is not required, but it is used if present to test the
-     installation.  We may decide to use it elsewhere in the future.
+     Perl is not required, but if present it is used in some tests and
+     the 'mtrace' program, to build the GNU C Library manual.  As of
+     release time 'perl' version 5.28.1 is the newest verified to work
+     to build the GNU C Library.
 
    * GNU 'sed' 3.02 or newer
 
      'Sed' is used in several places to generate files.  Most scripts
      work with any version of 'sed'.  As of release time, 'sed' version
-     4.4 is the newest verified to work to build the GNU C Library.
+     4.5 is the newest verified to work to build the GNU C Library.
+
+   * Python 3.4 or later
+
+     Python is required to build the GNU C Library.  As of release time,
+     Python 3.7.1 is the newest verified to work for building and
+     testing the GNU C Library.
+
+   * PExpect 4.0
+
+     The pretty printer tests drive GDB through test programs and
+     compare its output to the printers'.  PExpect is used to capture
+     the output of GDB, and should be compatible with the Python version
+     in your system.  As of release time PExpect 4.3 is the newest
+     verified to work to test the pretty printers.
+
+   * GDB 7.8 or later with support for Python 2.7/3.4 or later
+
+     GDB itself needs to be configured with Python support in order to
+     use the pretty printers.  Notice that your system having Python
+     available doesn't imply that GDB supports it, nor that your
+     system's Python and GDB's have the same version.  As of release
+     time GNU 'debugger' 8.2 is the newest verified to work to test the
+     pretty printers.
+
+     Unless Python, PExpect and GDB with Python support are present, the
+     printer tests will report themselves as 'UNSUPPORTED'.  Notice that
+     some of the printer tests require the GNU C Library to be compiled
+     with debugging symbols.
 
 If you change any of the 'configure.ac' files you will also need
 
@@ -491,6 +561,9 @@ and if you change any of the message translation files you will need
 
    * GNU 'gettext' 0.10.36 or later
 
+     As of release time, GNU 'gettext' version 0.19.8.1 is the newest
+     version verified to work to build the GNU C Library.
+
 You may also need these packages if you upgrade your source tree using
 patches, although we try to avoid this.