1. 30 4月, 2016 1 次提交
    • R
      follow standard configure behavior for cross compile prefix · 2d49c224
      Rich Felker 提交于
      the standard configure interface, which our configure script tries to
      implement, identifies cross compiling (build != host) and searches for
      the properly-prefixed cross tools. our script was not doing that,
      forcing users to explicitly provide either CC or a CROSS_COMPILE tool
      prefix, and the more common choice, just providing CC, was incomplete
      because the Makefile would still invoke the native ar and ranlib
      programs. this happened to work when building on ELF-based systems
      with GNU binutils, but could easily fail when cross-compiling from
      dissimilar systems.
      
      like before, and like the standard configure behavior, an explicit CC
      or CROSS_COMPILE variable on the command line or in the environment
      overrides the automatic prefixing.
      2d49c224
  2. 18 4月, 2016 1 次提交
  3. 03 4月, 2016 1 次提交
    • R
      add support for mips and mips64 r6 isa · 6d99ad91
      Rich Felker 提交于
      mips32r6 and mips64r6 are actually new isas at both the asm source and
      opcode levels (pre-r6 code cannot run on r6) and thus need to be
      treated as a new subarch. the following changes are made, some of
      which yield code generation improvements for non-r6 targets too:
      
      - add subarch logic in configure script and reloc.h files for dynamic
        linker name.
      
      - suppress use of .set mips2 asm directives (used to allow mips2
        atomic instructions on baseline mips1 builds; the kernel has to
        emulate them on mips1) except when actually needed. they cause wrong
        instruction encodings on r6, and pessimize inlining on at least some
        compilers.
      
      - only hard-code sync instruction encoding on mips1.
      
      - use "ZC" constraint instead of "m" constraint for llsc memory
        operands on r6, where the ll/sc instructions no longer accept full
        16-bit offsets.
      
      - only hard-code rdhwr instruction encoding with .word on targets
        (pre-r2) where it may need trap-and-emulate by the kernel.
        otherwise, just use the instruction mnemonic, and allow an arbitrary
        destination register to be used.
      6d99ad91
  4. 07 3月, 2016 3 次提交
    • R
      make configure check for unsupported (SPE) powerpc hard-float models · 636a4799
      Rich Felker 提交于
      the SPE ABI may be compatible with soft-float, but actually making it
      work requires some additional work, so for now it's best to make sure
      broken builds don't happen.
      636a4799
    • F
      add powerpc soft-float support · 5a92dd95
      Felix Fietkau 提交于
      Some PowerPC CPUs (e.g. Freescale MPC85xx) have a completely different
      instruction set for floating point operations (SPE).
      Executing regular PowerPC floating point instructions results in
      "Illegal instruction" errors.
      
      Make it possible to run these devices in soft-float mode.
      5a92dd95
    • R
      add mips64 port · 83933573
      Rich Felker 提交于
      patch by Mahesh Bodapati and Jaydeep Patil of Imagination
      Technologies.
      83933573
  5. 19 2月, 2016 2 次提交
    • R
      add arch tuple matching for nt32 and nt64 in configure · 4c101e15
      Rich Felker 提交于
      the nt32 and nt64 archs will be provided by the midipix project for
      building musl on top of its posix-like syscall layer for windows. at
      present the needed arch files are in a separate repository, but having
      the tuple matching in the upstream configure script should make it
      possible to overlay the arch files without needing any further
      patching.
      4c101e15
    • R
      work around regression building for armhf with clang (compiler bug) · 71c334f9
      Rich Felker 提交于
      commit e4355bd6 moved the math asm
      from external source files to inline asm, but unfortunately, all
      current releases of clang use the wrong inline asm constraint codes
      for float and double ("w" and "P" instead of "t" and "w",
      respectively). this patch adds detection for the bug in configure,
      and, for now, just disables the affected asm on broken clang versions.
      71c334f9
  6. 18 2月, 2016 2 次提交
  7. 03 2月, 2016 1 次提交
  8. 31 1月, 2016 1 次提交
    • R
      don't suppress shared libc when linker lacks -Bsymbolic-functions · 65498f28
      Rich Felker 提交于
      previous work overhauling the dynamic linker made it so that linking
      libc with -Bsymbolic-functions was no longer mandatory, but the
      configure logic that forced --disable-shared when ld failed to accept
      the option was left in place.
      
      this commit removes the hard-coded -Bsymbolic-functions from the
      Makefile and changes the configure test to one that simply adds it to
      the auto-detected LDFLAGS on success.
      65498f28
  9. 28 1月, 2016 2 次提交
  10. 26 1月, 2016 1 次提交
    • R
      use same object files for libc.a and libc.so if compiler produces PIC · 1619127c
      Rich Felker 提交于
      now that .lo and .o files differ only by whether -fPIC is passed (and
      no longer at the source level based on the SHARED macro), it's
      possible to use the same object files for both static and shared libc
      when the compiler would produce PIC for the static files anyway. this
      happens if the user has included -fPIC in their CFLAGS or if the
      compiler has been configured to produce PIE by default.
      
      we use the .lo files for both, and still append -fPIC to the CFLAGS,
      rather than using the .o files so that libc.so does not break
      catastrophically if the user later removes -fPIC from CFLAGS in
      config.mak or on the make command line. this also ensures that we get
      full -fPIC in case -fpic, -fPIE, or some other lesser-PIC option was
      passed in CFLAGS.
      1619127c
  11. 21 1月, 2016 1 次提交
  12. 18 1月, 2016 1 次提交
    • P
      support out-of-tree build · 2f853dd6
      Petr Hosek 提交于
      this change adds support for building musl outside of the source
      tree. the implementation is similar to autotools where running
      configure in a different directory creates config.mak in the current
      working directory and symlinks the makefile, which contains the
      logic for creating all necessary directories and resolving paths
      relative to the source directory.
      
      to support both in-tree and out-of-tree builds with implicit make
      rules, all object files are now placed into a separate directory.
      2f853dd6
  13. 08 11月, 2015 1 次提交
  14. 05 11月, 2015 3 次提交
    • R
      have configure check/add --gc-sections linker option · 6a851e3a
      Rich Felker 提交于
      this allowing the linker to drop certain weak definitions that are
      only used as dummies for static linking. they could be eliminated for
      shared library builds using the preprocessor instead, but we are
      trying to transition to using the same object files for shared and
      static libc, so a link-time solution is preferable.
      6a851e3a
    • R
      have configure check/add linker options to reduce size lost to padding · 2efd38e8
      Rich Felker 提交于
      based on patch by Denys Vlasenko. sorting sections and common data
      symbols by alignment acts as an approximation for optimal packing,
      which the linker does not actually support.
      2efd38e8
    • R
      have configure check/add -ffunction-sections and -fdata-sections · 27c1eccf
      Rich Felker 提交于
      based on patch by Denys Vlasenko. the original intent for using these
      options was to enable linking optimizations. these are immediately
      available for static linking applications to libc.a, and will also be
      used for linking libc.so in a subsequent commit.
      
      in addition to the original motives, this change works around a whole
      class of toolchain bugs where the compiler generates relative address
      expressions using a weak symbol and the assembler "optimizes out" the
      relocation which should result by using the weak definition. (see gas
      pr 18561 and gcc pr 66609, 68178, etc. for examples.) by having
      different functions and data objects in their own sections, all
      relative address expressions are cross-section and thus cannot be
      resolved to constants until link time. this allows us to retain
      support for affected compiler/assembler versions without invasive
      and fragile source-level workarounds.
      27c1eccf
  15. 03 11月, 2015 1 次提交
  16. 23 10月, 2015 1 次提交
    • R
      prevent user CFLAGS overrides from exposing executable stack · bc0c4841
      Rich Felker 提交于
      the option to suppress executable stack tagging was placed in CFLAGS,
      which is treated as optional and overridable by the build system. if a
      user replaces CFLAGS after configure has run, it could get lost,
      resulting in a libc.so that's flagged as needing executable stack,
      which would cause the kernel to map the initial stack as executable.
      
      move -Wa,--noexecstack to CFLAGS_C99FSE, the make variable used for
      mandatory compiler options.
      bc0c4841
  17. 16 10月, 2015 1 次提交
  18. 29 9月, 2015 1 次提交
    • R
      eliminate protected-visibility data in libc.so with vis.h preinclude · f3a53f09
      Rich Felker 提交于
      some newer binutils versions print scary warnings about protected data
      because most gcc versions fail to produce the right address
      references/relocations for such data that might be subject to copy
      relocations. originally vis.h explicitly assigned default visibility
      to all public data symbols to avoid this issue, but commit
      b8dda24f removed this treatment for
      stdin/out/err to work around a gcc 3.x bug, and since they don't
      actually need it (because taking their addresses is not valid C).
      
      instead, a check for the gcc 3.x bug is added to the configure check
      for vis.h preinclude support; this feature will simply be disabled
      when using a buggy version of gcc.
      f3a53f09
  19. 22 9月, 2015 2 次提交
  20. 12 9月, 2015 1 次提交
    • R
      add sh fdpic subarch variants · d4c82d05
      Rich Felker 提交于
      with this commit it should be possible to produce a working
      static-linked fdpic libc and application binaries for sh.
      
      the changes in reloc.h are largely unused at this point since dynamic
      linking is not supported, but the CRTJMP macro is used one place
      outside of dynamic linking, in __unmapself.
      d4c82d05
  21. 26 8月, 2015 1 次提交
    • A
      Build process uses script to add CFI directives to x86 asm · 35b3312b
      Alex Dowad 提交于
      Some functions implemented in asm need to use EBP for purposes other
      than acting as a frame pointer. (Notably, it is used for the 6th
      argument to syscalls with 6 arguments.) Without frame pointers, GDB
      can only show backtraces if it gets CFI information from a
      .debug_frame or .eh_frame ELF section.
      
      Rather than littering our asm with ugly .cfi directives, use an awk
      script to insert them in the right places during the build process, so
      GDB can keep track of where the current stack frame is relative to the
      stack pointer. This means GDB can produce beautiful stack traces at
      any given point when single-stepping through asm functions.
      
      Additionally, when registers are saved on the stack and later
      overwritten, emit ..cfi directives so GDB will know where they were
      saved relative to the stack pointer. This way, when you look back up
      the stack from within an asm function, you can still reliably print
      the values of local variables in the caller.
      
      If this awk script were to understand every possible wild and crazy
      contortion that an asm programmer can do with the stack and registers,
      and always emit the exact ..cfi directives needed for GDB to know what
      the register values were in the preceding stack frame, it would
      necessarily be as complex as a full x86 emulator. That way lies
      madness.
      
      Hence, we assume that the stack pointer will _only_ ever be adjusted
      using push/pop or else add/sub with a constant. We do not attempt to
      detect every possible way that a register value could be saved for
      later use, just the simple and common ways.
      
      Thanks to Szabolcs Nagy for suggesting numerous improvements to this
      code.
      35b3312b
  22. 07 7月, 2015 3 次提交
    • S
      add musl-clang, a wrapper for system clang installs · fb58545f
      Shiz 提交于
      musl-clang allows the user to compile musl-powered programs using their
      already existent clang install, without the need of a special cross compiler.
      it achieves this by wrapping around both the system clang install and the
      linker and passing them special flags to re-target musl at runtime.
      it does only affect invocations done through the special musl-clang wrapper
      script, so that the user setup remains fully intact otherwise.
      
      the clang wrapper consists of the compiler frontend wrapper script,
      musl-clang, and the linker wrapper script, ld.musl-clang.
      musl-clang makes sure clang invokes ld.musl-clang to link objects; neither
      script needs to be in PATH for the wrapper to work.
      fb58545f
    • S
      build: fix musl-targeting toolchain test · f8db6f74
      Shiz 提交于
      the old test was broken in that it would never fail on a toolchains built
      without dynamic linking support, leading to the wrapper script possibly being
      installed on compilers that do not support it. in addition, the new test is
      portable across compilers: the old test only worked on GCC.
      
      the new test works by testing whether the toolchain libc defines __GLIBC__:
      most non-musl Linux libc's do define this for compatibility even when they
      are not glibc, so this is a safe bet to check for musl. in addition, the
      compiler runtime would need to have a somewhat glibc-compatible ABI in the
      first place, so any non-glibc compatible libc's compiler runtime might not
      work. it is safer to disable these cases by default and have the user enable
      the wrappers manually there using --enable-wrapper if they certain it works.
      f8db6f74
    • S
      build: overhaul wrapper script system for multiple wrapper support · b3cd7d13
      Shiz 提交于
      this overhauls part of the build system in order to support multiple
      toolchain wrapper scripts, as opposed to solely the musl-gcc wrapper as
      before. it thereby replaces --enable-gcc-wrapper with --enable-wrapper=...,
      which has the options 'auto' (the default, detect whether to use wrappers),
      'all' (build and install all wrappers), 'no' (don't build any) and finally
      the options named after the individual compiler scripts (currently only
      'gcc' is available) to build and install only that wrapper.
      the old --enable-gcc-wrapper is removed from --help, but still available.
      
      it also modifies the wrappers to use the C compiler specified to the build
      system as 'inner' compiler, when applicable. as wrapper detection works by
      probing this compiler, it may not work with any other.
      b3cd7d13
  23. 28 5月, 2015 1 次提交
    • S
      configure: work around compilers that merely warn for unknown options · fc431d3f
      Shiz 提交于
      some compilers (such as clang) accept unknown options without error,
      but then print warnings on each invocation, cluttering the build
      output and burying meaningful warnings. this patch makes configure's
      tryflag and tryldflag functions use additional options to turn the
      unknown-option warnings into errors, if available, but only at check
      time. these options are not output in config.mak to avoid the risk of
      spurious build breakage; if they work, they will have already done
      their job at configure time.
      fc431d3f
  24. 23 4月, 2015 1 次提交
  25. 22 4月, 2015 2 次提交
    • R
      make configure check for visibility preinclude compatible with pcc · 428462a4
      Rich Felker 提交于
      pcc does not search for -include relative to the working directory
      unless -I. is used. rather than adding -I., which could be problematic
      if there's extra junk in the top-level directory, switch back to the
      old method (reverting commit 60ed988f)
      of using -include vis.h and relying on -I./src/internal being present
      on the command line (which the Makefile guarantees). to fix the
      breakage that was present in trycppif checks with the old method,
      $CFLAGS_AUTO is removed from the command line passed to trycppif; this
      is valid since $CFLAGS_AUTO should not contain options that alter
      compiler semantics or ABI, only optimizations, warnings, etc.
      428462a4
    • A
      configure: check for -march and -mtune passed via CC · a6274a19
      Andre McCurdy 提交于
      Some build environments pass -march and -mtune as part of CC, therefore
      update configure to check both CC and CFLAGS before making the decision
      to fall back to generic -march and -mtune options for x86.
      Signed-off-by: NAndre McCurdy <armccurdy@gmail.com>
      a6274a19
  26. 21 4月, 2015 1 次提交
    • R
      fix regression in configure script with new visibility option · 60ed988f
      Rich Felker 提交于
      commit de2b67f8 introduced a
      regression by adding a -include option to CFLAGS_AUTO which did not
      work without additional -I options. this broke subsequent trycppif
      tests and caused x86_64 to be misdetected as x32, among other issues.
      simply using the full relative pathname to vis.h rather than -I is the
      cleanest way to fix the problem.
      60ed988f
  27. 20 4月, 2015 1 次提交
    • R
      add optional global visibility override · de2b67f8
      Rich Felker 提交于
      this is implemented via the build system and does not affect source
      files. the idea is to use protected or hidden visibility to prevent
      the compiler from pessimizing function calls within a shared (or
      position-independent static) libc in the form of overhead setting up
      for a call through the PLT. the ld-time symbol binding via the
      -Bsymbolic-functions option already optimized out the PLT itself, but
      not the code in the caller needed to support a call through the PLT.
      on some archs this overhead can be substantial; on others it's
      trivial.
      de2b67f8
  28. 14 4月, 2015 1 次提交
    • R
      allow libc itself to be built with stack protector enabled · 1ef849c6
      Rich Felker 提交于
      this was already essentially possible as a result of the previous
      commits changing the dynamic linker/thread pointer bootstrap process.
      this commit mainly adds build system infrastructure:
      
      configure no longer attempts to disable stack protector. instead it
      simply determines how so the makefile can disable stack protector for
      a few translation units used during early startup.
      
      stack protector is also disabled for memcpy and memset since compilers
      (incorrectly) generate calls to them on some archs to implement
      struct initialization and assignment, and such calls may creep into
      early initialization.
      
      no explicit attempt to enable stack protector is made by configure at
      this time; any stack protector option supported by the compiler can be
      passed to configure in CFLAGS, and if the compiler uses stack
      protector by default, this default is respected.
      1ef849c6
  29. 12 3月, 2015 1 次提交
    • S
      add aarch64 port · 01ef3dd9
      Szabolcs Nagy 提交于
      This adds complete aarch64 target support including bigendian subarch.
      
      Some of the long double math functions are known to be broken otherwise
      interfaces should be fully functional, but at this point consider this
      port experimental.
      
      Initial work on this port was done by Sireesh Tripurari and Kevin Bortis.
      01ef3dd9