1. 07 6月, 2012 1 次提交
  2. 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
  3. 04 6月, 2012 3 次提交
  4. 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
  5. 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
  6. 31 5月, 2012 1 次提交
  7. 29 5月, 2012 4 次提交
  8. 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
  9. 27 5月, 2012 3 次提交
  10. 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
  11. 25 5月, 2012 5 次提交
  12. 24 5月, 2012 4 次提交
    • R
      linux deprecated SYS_utime on some archs, so use SYS_utimes instead · c37afdfd
      Rich Felker 提交于
      the old code could be kept for cases where SYS_utime is available, but
      it's not really worth the ifdef ugliness. and better to avoid
      deprecated stuff just in case the kernel devs ever get crazy enough to
      start removing it from archs where it was part of the ABI and breaking
      static bins...
      c37afdfd
    • R
      fix bad opcode in arm syscall_cp_asm · 4d4f13e5
      Rich Felker 提交于
      4d4f13e5
    • R
      fix issue with longjmp out of signal handlers and cancellation · 4da268f7
      Rich Felker 提交于
      stale state information indicating that a thread was possibly blocked
      at a cancellation point could get left behind if longjmp was used to
      exit a signal handler that interrupted a cancellation point.
      
      to fix the issue, we throw away the state information entirely and
      simply compare the saved instruction pointer to a range of code
      addresses in the __syscall_cp_asm function. all the ugly PIC work
      (which becomes minimal anyway with this approach) is defered to
      cancellation time instead of happening at every syscall, which should
      improve performance too.
      
      this commit also fixes cancellation on arm, which was mildly broken
      (race condition, not checking cancellation flag once inside the
      cancellation point zone). apparently i forgot to implement that. the
      new arm code is untested, but appears correct; i'll test and fix it
      later if there are problems.
      4da268f7
    • R
      simplify cancellation push/pop slightly · cfd892fd
      Rich Felker 提交于
      no need to pass unnecessary extra arguments on to the core code in
      pthread_create.c. this just wastes cycles and code bloat.
      cfd892fd
  13. 23 5月, 2012 3 次提交
    • R
      debloat jmp_buf in _GNU_SOURCE mode · 25d575ed
      Rich Felker 提交于
      i originally made it the same size as the bloated GNU version, which
      contains space for saved signal mask, but this makes some structures
      containing jmp_buf become much larger for no benefit. we will never
      use the signal mask field with plain setjmp; sigsetjmp serves that
      purpose.
      25d575ed
    • R
      remove everything related to forkall · 0c29adfe
      Rich Felker 提交于
      i made a best attempt, but the intended semantics of this function are
      fundamentally contradictory. there is no consistent way to handle
      ownership of locks when forking a multi-threaded process. the code
      could have worked by accident for programs that only used normal
      mutexes and nothing else (since they don't actually store or care
      about their owner), but that's about it. broken-by-design interfaces
      that aren't even in glibc (only solaris) don't belong in musl.
      0c29adfe
    • R
      some feature test fixes for unistd.h · af3330d7
      Rich Felker 提交于
      af3330d7