1. 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
  2. 27 5月, 2012 3 次提交
  3. 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
  4. 25 5月, 2012 4 次提交
    • R
      fix regex on arm · 8b4c232e
      Rich Felker 提交于
      TRE has a broken assumption that wchar_t is signed, which is a sane
      expectation, but not required by the standard, and false on ARM's ABI.
      
      i leave tre_char_t as wchar_t for now, since a pointer to it is
      directly passed to functions that need pointer to wchar_t. it does not
      seem to break anything. and since the maximum unicode scalar value is
      0x10ffff, just use that explicitly rather than using the max value of
      any particular C type.
      8b4c232e
    • R
      7efd14ec
    • R
      remove leftover cp_sp cruft from cancellation code, fix small bug · 73db33b9
      Rich Felker 提交于
      the bug was that cancellation requests which arrived while a
      cancellation point was interrupted by a signal handler would not be
      acted upon when the signal handler returns. this was because cp_sp was
      never set; it's no longer needed or used.
      
      instead, just always re-raise the signal when cancellation was not
      acted upon. this wastes a tiny amount of time in the rare case where
      it even matters, but it ensures correctness and simplifies the code.
      73db33b9
    • R
      e241896c
  5. 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
  6. 23 5月, 2012 1 次提交
    • 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
  7. 22 5月, 2012 2 次提交
  8. 17 5月, 2012 1 次提交
  9. 14 5月, 2012 2 次提交
    • R
      remove some no-op end of string tests from regex parser · 13b2945a
      Rich Felker 提交于
      these are cruft from the original code which used an explicit string
      length rather than null termination. i blindly converted all the
      checks to null terminator checks, without noticing that in several
      cases, the subsequent switch statement would automatically handle the
      null byte correctly.
      13b2945a
    • R
      another BRE fix: in ^*, * is literal · e9cddc8e
      Rich Felker 提交于
      i don't understand why this has to be conditional on being in BRE
      mode, but enabling this code unconditionally breaks a huge number of
      ERE test cases.
      e9cddc8e
  10. 13 5月, 2012 4 次提交
  11. 11 5月, 2012 2 次提交
  12. 08 5月, 2012 6 次提交
  13. 07 5月, 2012 2 次提交
  14. 06 5月, 2012 2 次提交
    • R
      add isastream (obsolete STREAMS junk) · 106e75f7
      Rich Felker 提交于
      apparently some packages see stropts.h and want to be able to use
      this. the implementation checks that the file descriptor is valid by
      using fcntl/F_GETFD so it can report an error if not (as specified).
      106e75f7
    • N
      math: nextafter and nexttoward cleanup · 6cf865db
      nsz 提交于
      make nexttoward, nexttowardf independent of long double representation.
      fix nextafterl: it did not raise underflow flag when the result was 0.
      6cf865db
  15. 05 5月, 2012 3 次提交
    • R
      update license of njk contributed code (x86_64 asm) · 8cfbc8be
      Rich Felker 提交于
      these changes are based on the following communication via email:
      
      "I hereby grant that all of the code I have contributed to musl on or
      before April 23, 2012 may be licensed under the terms of the following
      MIT license:
      
      Copyright (c) 2011-2012 Nicholas J. Kain
      
      Permission is hereby granted, free of charge, to any person obtaining
      a copy of this software and associated documentation files (the
      "Software"), to deal in the Software without restriction, including
      without limitation the rights to use, copy, modify, merge, publish,
      distribute, sublicense, and/or sell copies of the Software, and to
      permit persons to whom the Software is furnished to do so, subject to
      the following conditions:
      
      The above copyright notice and this permission notice shall be
      included in all copies or substantial portions of the Software.
      
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
      IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
      CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
      TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
      SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
      8cfbc8be
    • R
      make pthread stacks non-executable · 7e4d7946
      Rich Felker 提交于
      this change is necessary or pthread_create will always fail on
      security-hardened kernels. i considered first trying to make the stack
      executable and simply retrying without execute permissions when the
      first try fails, but (1) this would incur a serious performance
      penalty on hardened systems, and (2) having the stack be executable is
      just a bad idea from a security standpoint.
      
      if there is real-world "GNU C" code that uses nested functions with
      threads, and it can't be fixed, we'll have to consider other ways of
      solving the problem, but for now this seems like the best fix.
      7e4d7946
    • R
      fix error reporting for dlsym with global symbols · 4027f4e8
      Rich Felker 提交于
      4027f4e8