only use memcpy realloc to shrink if an exact-sized free chunk exists
[oweals/musl.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 5713cd49baf74224dc0246bd7067b36923ae2772..22477b6ba0f99f2fef07011535da873c5907a862 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -18,28 +18,18 @@ Build Prerequisites
 
 The only build-time prerequisites for musl are GNU Make and a
 freestanding C99 compiler toolchain targeting the desired instruction
-set architecture and ABI, with support for gcc-style inline assembly,
-weak aliases, and stand-alone assembly source files.
+set architecture and ABI, with support for a minimal subset of "GNU C"
+extensions consisting mainly of gcc-style inline assembly, weak
+aliases, hidden visibility, and stand-alone assembly source files.
+
+GCC, LLVM/clang, Firm/cparser, and PCC have all successfully built
+musl, but GCC is the most widely used/tested. Recent compiler (and
+binutils) versions should be used if possible since some older
+versions have bugs which affect musl.
 
 The system used to build musl does not need to be Linux-based, nor do
 the Linux kernel headers need to be available.
 
-If support for dynamic linking is desired, some further requirements
-are placed on the compiler and linker. In particular, the linker must
-support the -Bsymbolic-functions option.
-
-At present, GCC 4.6 or later is the recommended compiler for building
-musl. Any earlier version of GCC with full C99 support should also
-work, but may be subject to minor floating point conformance issues on
-i386 targets. Sufficiently recent versions of PCC and LLVM/clang are
-also believed to work, but have not been tested as heavily; prior to
-Fall 2012, both had known bugs that affected musl. Firm/cparser is
-also believed to work but lacks support for producing shared
-libraries. GCC 4.9.0 and 4.9.1 are known to have a serious bug
-(#61144) which affects musl. Beginning with version 1.1.4 musl
-attempts to work around the bug, but these compiler versions are still
-considered unstable and unsupported.
-
 
 
 Supported Targets
@@ -53,42 +43,64 @@ and ABI combinations:
       the `cmpxchg` instruction is added
 
 * x86_64
+    * ILP32 ABI (x32) is available as a separate arch but is still
+      experimental
 
 * ARM
     * EABI, standard or hard-float VFP variant
     * Little-endian default; big-endian variants also supported
     * Compiler toolchains only support armv4t and later
 
+* AArch64
+    * Little-endian default; big-endian variants also supported
+
 * MIPS
-    * ABI is o32
+    * ABI is o32, fp32/fpxx (except on r6 which is fp64)
     * Big-endian default; little-endian variants also supported
     * Default ABI variant uses FPU registers; alternate soft-float ABI
       that does not use FPU registers or instructions is available
     * MIPS2 or later, or kernel emulation of ll/sc (standard in Linux)
       is required
+    * MIPS32r6, an incompatible ISA, is supported as a variant "mipsr6"
+
+* MIPS64
+    * ABI is n64 (LP64) or n32 (ILP32)
+    * Big-endian default; little-endian variants also supported
+    * Default ABI variant uses FPU registers; alternate soft-float ABI
+      that does not use FPU registers or instructions is available
 
 * PowerPC
-    * Only 32-bit is supported
     * Compiler toolchain must provide 64-bit long double, not IBM
       double-double or IEEE quad
     * For dynamic linking, compiler toolchain must be configured for
       "secure PLT" variant
 
-* Microblaze
-    * Big-endian default; little-endian variants also supported
-    * Soft-float
-    * Requires support for lwx/swx instructions
+* PowerPC64
+    * Both little and big endian variants are supported
+    * Compiler toolchain must provide 64-bit long double, not IBM
+      double-double or IEEE quad
+    * Compiler toolchain must use the new (ELFv2) ABI regardless of
+      whether it is for little or big endian
 
-The following additional targets are available for build, but may not
-work correctly and may not yet have ABI stability:
+* S390X (64-bit S390)
 
 * SuperH (SH)
+    * Standard ELF ABI or FDPIC ABI (shared-text without MMU)
     * Little-endian by default; big-engian variant also supported
     * Full FPU ABI or soft-float ABI is supported, but the
-      single-precision-only FPU ABI is not supported (musl always
-      requires IEEE single and double to be supported)
+      single-precision-only FPU ABI is not
+
+* Microblaze
+    * Big-endian default; little-endian variants also supported
+    * Soft-float
+    * Requires support for lwx/swx instructions
+
+* OpenRISC 1000 (or1k)
 
-* x32 (x86_64 ILP32 ABI)
+* RISC-V 64
+    * Little endian
+    * Hard, soft, and hard-single/soft-double floating point ABIs
+    * Standard ELF; no shared-text NOMMU support