1. 08 6月, 2012 7 次提交
  2. 07 6月, 2012 6 次提交
    • R
      check for ld support of -Bsymbolic-functions; disable shared if not avail · 498a100d
      Rich Felker 提交于
      this issue affects the last gpl2 version of binutils, which some
      people are still using out of aversion to gpl3. musl requires
      -Bsymbolic-functions because it's the only way to make a libc.so
      that's able to operate prior to dynamic linking but that still behaves
      correctly with respect to global vars that may be moved to the main
      program via copy relocations.
      498a100d
    • R
    • R
      avoid linking main program in linker tests · 67a0383d
      Rich Felker 提交于
      it's possible that the user has provided a compiler that does not have
      any libc to link to, so linking a main program is a bad idea. instead,
      generate an empty shared library with no dependencies.
      67a0383d
    • R
      make configure try to disable stack protector · 0c5efde8
      Rich Felker 提交于
      in theory we could support stack protector in the libc itself, and
      users wanting to experiment with such usage could add
      -fstack-protector to CFLAGS intentionally. but to avoid breakage in
      the default case, override broken distro-patched gcc that forces stack
      protector on.
      0c5efde8
    • R
      add configure check for gnu linker hash style setting · 08f70a30
      Rich Felker 提交于
      some broken distro-provided toolchains have modified gcc to produce
      only "gnu hash" dynamic hash table by default. as this is unsupported
      by musl, that results in a non-working libc.so. we detect and switch
      this on in configure rather than hard-coding it in the Makefile
      because it's not supported by old binutils versions, but that might
      not even be relevant since old binutils versions already fail from
      -Bsymbolic-functions being missing. at some point I may review whether
      this should just go in the Makefile...
      08f70a30
    • R
      make gcc wrapper rewrite link options rather than just extending them · 6e0ad227
      Rich Felker 提交于
      this is not tested yet, but should work to get rid of unwanted
      --hash-style=gnu hacks present in some distro-patched gcc versions.
      6e0ad227
  3. 06 6月, 2012 2 次提交
    • R
      treat failure of mprotect in map_library as a fatal load failure · f7d15dcc
      Rich Felker 提交于
      the error will propagate up and be printed to the user at program
      start time; at runtime, dlopen will just fail and leave a message for
      dlerror.
      
      previously, if mprotect failed, subsequent attempts to perform
      relocations would crash the program. this was resulting in an
      increasing number of false bug reports on grsec systems where rwx
      permission is not possible in cases where users were wrongly
      attempting to use non-PIC code in shared libraries. supporting that
      usage is in theory possible, but the x86_64 toolchain does not even
      support textrels, and the cost of keeping around the necessary
      information to handle textrels without rwx permissions is
      disproportionate to the benefit (which is essentially just supporting
      broken library setups on grsec machines).
      
      also, i unified the error-out code in map_library now that there are 3
      places from which munmap might have to be called.
      f7d15dcc
    • R
      908bed20
  4. 04 6月, 2012 3 次提交
  5. 03 6月, 2012 8 次提交
    • R
      ensure that abort always works · 2557d0ba
      Rich Felker 提交于
      Per POSIX, "The abort() function shall cause abnormal process
      termination to occur, unless the signal SIGABRT is being caught and
      the signal handler does not return."
      
      If SIGABRT is blocked or if a signal handler is installed and does
      return, abort is still required to cause abnormal program termination.
      We cannot use a_crash() to do this, since a SIGILL handler could also
      be installed (and might even longjmp out of the abort, not expecting
      to be invoked from within abort), nor can we rely on resetting the
      signal handler and re-raising the signal (this has race conditions in
      multi-threaded programs). On the other hand, SIGKILL is a perfectly
      safe, unblockable way to obtain abnormal program termination, and it
      requires no ugly loop-and-retry logic.
      2557d0ba
    • R
      add some ugly aliases for LSB ABI compatibility · 6a4b9472
      Rich Felker 提交于
      for some nonsensical reason, glibc's headers use inline functions that
      redirect some of the standard functions to ugly nonstandard names (and
      likewise for some of their nonstandard functions).
      6a4b9472
    • R
      increase default thread stack size to 80k · 13b3645c
      Rich Felker 提交于
      I've been looking for data that would suggest a good default, and
      since little has shown up, i'm doing this based on the limited data I
      have. the value 80k is chosen to accommodate 64k of application data
      (which happens to be the size of the buffer in git that made it crash
      without a patch to call pthread_attr_setstacksize) plus the max stack
      usage of most libc functions (with a few exceptions like crypt, which
      will be fixed soon to avoid excessive stack usage, and [n]ftw, which
      inherently uses a fair bit in recursive directory searching).
      
      if further evidence emerges suggesting that the default should be
      larger, I'll consider changing it again, but I'd like to avoid it
      getting too large to avoid the issues of large commit charge and rapid
      address space exhaustion on 32-bit machines.
      13b3645c
    • R
      remove implementation-reserved bits when saving signal mask · 40bd1726
      Rich Felker 提交于
      this fix is necessary because a program could be started with some of
      the implementation-reserved signals masked (e.g. due to exec having
      been called from a signal handler, or from a non-musl program) and
      then could obtain an invalid-to-use-later sigset_t as the old/saved
      signal mask.
      40bd1726
    • R
      remove no-longer-needed unblocking of signals in pthread_create · 1e597a3e
      Rich Felker 提交于
      this action is now performed in pthread_self initialization; it must
      be performed there in case the first call to pthread_create is from a
      signal handler, in which case the old signal mask could be restored on
      return from the signal.
      1e597a3e
    • R
      add LSB abi junk for ctype functions · 9372655e
      Rich Felker 提交于
      this should be the last major fix needed to support running
      glibc-linked conforming POSIX programs with musl in place of glibc, as
      long as musl provides the features they need and they don't use
      pthread cancellation (which is implemented as c++ exceptions in glibc,
      and fundamentally incompatible with musl).
      9372655e
    • R
      declare environ in unistd.h when _GNU_SOURCE feature test macro is used · d200bd72
      Rich Felker 提交于
      lots of broken programs expect this, and it's gotten to the point of
      being a troubleshooting FAQ topic. best to just fix it.
      d200bd72
    • R
      use fistpll mnemonic instead of fistpq (more widely supported) on x86_64 too · 19e48c55
      Rich Felker 提交于
      this was fixed previously on i386 but the corresponding code on x86_64
      was missed.
      19e48c55
  6. 01 6月, 2012 2 次提交
    • R
      add LSB ABI __xstat, etc. junk · 9ea20dcb
      Rich Felker 提交于
      9ea20dcb
    • R
      enable LARGEFILE64 aliases · a5412976
      Rich Felker 提交于
      these will NOT be used when compiling with -D_LARGEFILE64_SOURCE on
      musl; instead, they exist in the hopes of eventually being able to run
      some glibc-linked apps with musl sitting in place of glibc.
      
      also remove the (apparently incorrect) fcntl alias.
      a5412976
  7. 31 5月, 2012 1 次提交
  8. 29 5月, 2012 4 次提交
  9. 28 5月, 2012 2 次提交
    • R
      5c1909a8
    • R
      cleanup dynamic linker start code cruft · b94608ca
      Rich Felker 提交于
      two actual issues: one is that __dynlink no longer wants/needs a GOT
      pointer argument, so the code to generate that argument can be
      removed. the other issue was that in the i386 code, argc/argv were
      being loaded into registers that would be call-clobbered, then copied
      to preserved registers, rather than just being loaded into the proper
      call-preserved registers to begin with.
      
      this cleanup is in preparation for adding new dynamic linker
      functionality (ability to explicitly invoke the dynamic linker to run
      a program).
      b94608ca
  10. 27 5月, 2012 3 次提交
  11. 26 5月, 2012 2 次提交
    • R
      avoid using pthread cleanup push/pop in stdio when not needed · 3f25354e
      Rich Felker 提交于
      unfortunately in dynamic-linked programs, these macros cause
      pthread_self to be initialized, which costs a couple syscalls, and
      (much worse) would necessarily fail, crash, and burn on ancient (2.4
      and earlier) kernels where setting up a thread pointer does not work.
      
      i'd like to do this in a more generic way that avoids all use of
      cleanup push/pop before pthread_self has been successfully called and
      avoids ugly if/else constructs like the one in this commit, but for
      now, this will suffice.
      3f25354e
    • R
      ensure pthread-internal signals are unblocked before threads are used · 8cce15af
      Rich Felker 提交于
      if the process started with these signals blocked, cancellation could
      fail or setxid could deadlock. there is no way to globally unblock
      them after threads have been created. by unblocking them in the
      pthread_self initialization for the main thread, we ensure that
      they're unblocked before any other threads are created and also
      outside of any signal handler context (sigaction initialized
      pthread_self), which is important so that return from a signal handler
      won't re-block them.
      8cce15af