1. 12 11月, 2016 1 次提交
  2. 09 5月, 2016 1 次提交
  3. 18 4月, 2016 1 次提交
  4. 07 3月, 2016 1 次提交
    • R
      add mips64 port · 83933573
      Rich Felker 提交于
      patch by Mahesh Bodapati and Jaydeep Patil of Imagination
      Technologies.
      83933573
  5. 16 12月, 2015 1 次提交
  6. 12 11月, 2015 1 次提交
    • R
      eliminate use of SHARED macro to suppress visibility attributes · 8a8fdf63
      Rich Felker 提交于
      this is the first and simplest stage of removal of the SHARED macro,
      which will eventually allow libc.a and libc.so to be produced from the
      same object files.
      
      the original motivation for these #ifdefs which are now being removed
      was to allow building a static-only libc using a compiler that does
      not support visibility. however, SHARED was the wrong condition to
      test for this anyway; various assembly-language sources refer to
      hidden symbols and declare them with the .hidden directive, making it
      wrong to define the referenced symbols as non-hidden. if there is a
      need in the future to build libc using compilers that lack visibility,
      support could be moved to the build system or perhaps the __PIC__
      macro could be checked instead of SHARED.
      8a8fdf63
  7. 10 11月, 2015 1 次提交
    • R
      explicitly assemble all arm asm sources as UAL · 4e73d121
      Rich Felker 提交于
      these files are all accepted as legacy arm syntax when producing arm
      code, but legacy syntax cannot be used for producing thumb2 with
      access to the full ISA. even after switching to UAL, some asm source
      files contain instructions which are not valid in thumb mode, so these
      will need to be addressed separately.
      4e73d121
  8. 24 9月, 2015 1 次提交
    • R
      fix signal return for sh/fdpic · b61df229
      Rich Felker 提交于
      the restorer function pointer provided in the kernel sigaction
      structure is interpreted by the kernel as a raw code address, not a
      function descriptor.
      
      this commit moves the declarations of the __restore and __restore_rt
      symbols to ksigaction.h so that arch versions of the file can override
      them, and introduces a version for sh which declares them as objects
      rather than functions.
      
      an alternate solution would have been defining SA_RESTORER to 0 so
      that the functions are not used, but this both requires executable
      stack (since the sh kernel does not have a vdso page with permanent
      restorer functions) and crashes on qemu user-level emulation.
      b61df229
  9. 09 9月, 2015 1 次提交
    • R
      remove unused (and invalid) C version of sigsetjmp · deb85ab4
      Rich Felker 提交于
      originally, the comment in this code was correct and it would likely
      work if the compiler generated a tail call to setjmp. however, commit
      583e5512 redesigned sigsetjmp and
      siglongjmp such that the old C implementation (which was not intended
      to be used) is not even conceptually correct. remove it in the
      interest of avoiding confusion when porting to new archs.
      deb85ab4
  10. 16 6月, 2015 1 次提交
    • R
      switch to using trap number 31 for syscalls on sh · 10d0268c
      Rich Felker 提交于
      nominally the low bits of the trap number on sh are the number of
      syscall arguments, but they have never been used by the kernel, and
      some code making syscalls does not even know the number of arguments
      and needs to pass an arbitrary high number anyway.
      
      sh3/sh4 traditionally used the trap range 16-31 for syscalls, but part
      of this range overlapped with hardware exceptions/interrupts on sh2
      hardware, so an incompatible range 32-47 was chosen for sh2.
      
      using trap number 31 everywhere, since it's in the existing sh3/sh4
      range and does not conflict with sh2 hardware, is a proposed
      unification of the kernel syscall convention that will allow binaries
      to be shared between sh2 and sh3/sh4. if this is not accepted into the
      kernel, we can refit the sh2 target with runtime selection mechanisms
      for the trap number, but doing so would be invasive and would entail
      non-trivial overhead.
      10d0268c
  11. 02 5月, 2015 1 次提交
    • R
      fix crash in x32 sigsetjmp · 551c1d7a
      Rich Felker 提交于
      the 64-bit push reads not only the 32-bit return address but also the
      first 32 signal mask bits. if any were nonzero, the return address
      obtained will be invalid.
      
      at some point storage of the return address should probably be moved
      to follow the saved mask so that there's plenty room and the same code
      can be used on x32 and regular x86_64, but for now I want a fix that
      does not risk breaking x86_64, and this simple re-zeroing works.
      551c1d7a
  12. 28 4月, 2015 1 次提交
    • R
      fix sh jmp_buf size to match ABI · 85d12e02
      Rich Felker 提交于
      while the sh port is still experimental and subject to ABI
      instability, this is not actually an application/libc boundary ABI
      change. it only affects third-party APIs where jmp_buf is used in a
      shared structure at the ABI boundary, because nothing anywhere near
      the end of the jmp_buf object (which includes the oversized sigset_t)
      is accessed by libc.
      
      both glibc and uclibc have 15-slot jmp_buf for sh. presumably the
      smaller version was used in musl because the slots for fpu status
      register and thread pointer register (gbr) were incorrect and must not
      be restored by longjmp, but the size should have been preserved, as
      it's generally treated as a libc-agnostic ABI property for the arch,
      and having extra slots free in case we ever need them for something is
      useful anyway.
      85d12e02
  13. 25 4月, 2015 1 次提交
  14. 20 4月, 2015 4 次提交
  15. 19 4月, 2015 2 次提交
    • R
      remove potentially PIC-incompatible relocations from x86_64 and x32 asm · b35c4c47
      Rich Felker 提交于
      analogous to commit 8ed66ecb for i386.
      b35c4c47
    • R
      remove the last of possible-textrels from i386 asm · 8ed66ecb
      Rich Felker 提交于
      none of these are actual textrels because of ld-time binding performed
      by -Bsymbolic-functions, but I'm changing them with the goal of making
      ld-time binding purely an optimization rather than relying on it for
      semantic purposes.
      
      in the case of memmove's call to memcpy, making it explicit that the
      memmove asm is assuming the forward-copying behavior of the memcpy asm
      is desirable anyway; in case memcpy is ever changed, the semantic
      mismatch would be apparent while editing memmcpy.s.
      8ed66ecb
  16. 18 4月, 2015 1 次提交
    • R
      redesign sigsetjmp so that signal mask is restored after longjmp · 583e5512
      Rich Felker 提交于
      the conventional way to implement sigsetjmp is to save the signal mask
      then tail-call to setjmp; siglongjmp then restores the signal mask and
      calls longjmp. the problem with this approach is that a signal already
      pending, or arriving between unmasking of signals and restoration of
      the saved stack pointer, will have its signal handler run on the stack
      that was active before siglongjmp was called. this can lead to
      unbounded stack usage when siglongjmp is used to leave a signal
      handler.
      
      in the new design, sigsetjmp saves its own return address inside the
      extended part of the sigjmp_buf (outside the __jmp_buf part used by
      setjmp) then calls setjmp to save a jmp_buf inside its own execution.
      it then tail-calls to __sigsetjmp_tail, which uses the return value of
      setjmp to determine whether to save the current signal mask or restore
      a previously-saved mask.
      
      as an added bonus, this design makes it so that siglongjmp and longjmp
      are identical. this is useful because the __longjmp_chk function we
      need to add for ABI-compatibility assumes siglongjmp and longjmp are
      the same, but for different reasons -- it was designed assuming either
      can access a flag just past the __jmp_buf indicating whether the
      signal masked was saved, and act on that flag. however, early versions
      of musl did not have space past the __jmp_buf for the non-sigjmp_buf
      version of jmp_buf, so our setjmp cannot store such a flag without
      risking clobbering memory on (very) old binaries.
      583e5512
  17. 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
  18. 19 12月, 2014 1 次提交
    • R
      use tkill instead of tgkill in implementing raise · 7d351212
      Rich Felker 提交于
      this shaves off a useless syscall for getting the caller's pid and
      brings raise into alignment with other functions which were adapted to
      use tkill rather than tgkill.
      
      commit 83dc6eb0 documents the
      rationale for this change, and in particular why the tgkill syscall is
      useless for its designed purpose of avoiding races.
      7d351212
  19. 19 7月, 2014 1 次提交
    • S
      add or1k (OpenRISC 1000) architecture port · 200d1547
      Stefan Kristiansson 提交于
      With the exception of a fenv implementation, the port is fully featured.
      The port has been tested in or1ksim, the golden reference functional
      simulator for OpenRISC 1000.
      It passes all libc-test tests (except the math tests that
      requires a fenv implementation).
      
      The port assumes an or1k implementation that has support for
      atomic instructions (l.lwa/l.swa).
      
      Although it passes all the libc-test tests, the port is still
      in an experimental state, and has yet experienced very little
      'real-world' use.
      200d1547
  20. 22 6月, 2014 1 次提交
    • R
      add __sysv_signal abi-compat alias for the signal function · 6ce1fade
      Rich Felker 提交于
      it should be noted that the "real" __sysv_signal, which we do not
      implement, is semantically different from signal. references to
      __sysv_signal arise in code built against glibc under certain
      combinations of feature test macros, and are almost surely
      unintentional since the legacy sysv signal behavior has fundamental
      race conditions that cannot be worked around and which make it
      impossible to use safely.
      6ce1fade
  21. 03 4月, 2014 1 次提交
  22. 25 3月, 2014 1 次提交
    • R
      always initialize thread pointer at program start · dab441ae
      Rich Felker 提交于
      this is the first step in an overhaul aimed at greatly simplifying and
      optimizing everything dealing with thread-local state.
      
      previously, the thread pointer was initialized lazily on first access,
      or at program startup if stack protector was in use, or at certain
      random places where inconsistent state could be reached if it were not
      initialized early. while believed to be fully correct, the logic was
      fragile and non-obvious.
      
      in the first phase of the thread pointer overhaul, support is retained
      (and in some cases improved) for systems/situation where loading the
      thread pointer fails, e.g. old kernels.
      
      some notes on specific changes:
      
      - the confusing use of libc.main_thread as an indicator that the
        thread pointer is initialized is eliminated in favor of an explicit
        has_thread_pointer predicate.
      
      - sigaction no longer needs to ensure that the thread pointer is
        initialized before installing a signal handler (this was needed to
        prevent a situation where the signal handler caused the thread
        pointer to be initialized and the subsequent sigreturn cleared it
        again) but it still needs to ensure that implementation-internal
        thread-related signals are not blocked.
      
      - pthread tsd initialization for the main thread is deferred in a new
        manner to minimize bloat in the static-linked __init_tp code.
      
      - pthread_setcancelstate no longer needs special handling for the
        situation before the thread pointer is initialized. it simply fails
        on systems that cannot support a thread pointer, which are
        non-conforming anyway.
      
      - pthread_cleanup_push/pop now check for missing thread pointer and
        nop themselves out in this case, so stdio no longer needs to avoid
        the cancellable path when the thread pointer is not available.
      
      a number of cases remain where certain interfaces may crash if the
      system does not support a thread pointer. at this point, these should
      be limited to pthread interfaces, and the number of such cases should
      be fewer than before.
      dab441ae
  23. 19 3月, 2014 1 次提交
  24. 28 2月, 2014 1 次提交
    • R
      rename superh port to "sh" for consistency · aacd3486
      Rich Felker 提交于
      linux, gcc, etc. all use "sh" as the name for the superh arch. there
      was already some inconsistency internally in musl: the dynamic linker
      was searching for "ld-musl-sh.path" as its path file despite its own
      name being "ld-musl-superh.so.1". there was some sentiment in both
      directions as to how to resolve the inconsistency, but overall "sh"
      was favored.
      aacd3486
  25. 24 2月, 2014 1 次提交
  26. 23 2月, 2014 2 次提交
  27. 07 1月, 2014 1 次提交
  28. 13 12月, 2013 1 次提交
  29. 12 12月, 2013 1 次提交
  30. 17 9月, 2013 1 次提交
  31. 31 8月, 2013 1 次提交
    • R
      fix breakage in synccall due to incorrect signal restoration in sigqueue · 7cc49f98
      Rich Felker 提交于
      commit 07827d1a seems to have
      introduced this issue. sigqueue is called from the synccall core, at
      which time, even implementation-internal signals are blocked. however,
      pthread_sigmask removes the implementation-internal signals from the
      old mask before returning, so that a process which began life with
      them blocked will not be able to save a signal mask that has them
      blocked, possibly causing them to become re-blocked later. however,
      this was causing sigqueue to unblock the implementation-internal
      signals during synccall, leading to deadlock.
      7cc49f98
  32. 11 8月, 2013 1 次提交
    • R
      fix _NSIG and SIGRTMAX on mips · 7c440977
      Rich Felker 提交于
      a mips signal mask contains 128 bits, enough for signals 1 through
      128. however, the exit status obtained from the wait-family functions
      only has room for values up to 127. reportedly signal 128 was causing
      kernelspace bugs, so it was removed from the kernel recently; even
      without that issue, however, it was impossible to support it correctly
      in userspace.
      
      at the same time, the bug was masked on musl by SIGRTMAX incorrectly
      yielding 64 on mips, rather than the "correct" value of 128. now that
      the _NSIG issue is fixed, SIGRTMAX can be fixed at the same time,
      exposing the full range of signals for application use.
      
      note that the (nonstandardized) libc _NSIG value is actually one
      greater than the max signal number, and also one greater than the
      kernel headers' idea of _NSIG. this is the reason for the discrepency
      with the recent kernel changes. since reducing _NSIG by one brought it
      down from 129 to 128, rather than from 128 to 127, _NSIG/8, used
      widely in the musl sources, is unchanged.
      7c440977
  33. 10 8月, 2013 2 次提交
    • R
      change sigset_t functions to restrict to _NSIG · 76fbf6ad
      Rich Felker 提交于
      the idea here is to avoid advertising signals that don't exist and to
      make these functions safe to call (e.g. from within other parts of the
      implementation) on fake sigset_t objects which do not have the HURD
      padding.
      76fbf6ad
    • R
      optimize posix_spawn to avoid spurious sigaction syscalls · 3c5c5e6f
      Rich Felker 提交于
      the trick here is that sigaction can track for us which signals have
      ever had a signal handler set for them, and only those signals need to
      be considered for reset. this tracking mask may have false positives,
      since it is impossible to remove bits from it without race conditions.
      false negatives are not possible since the mask is updated with atomic
      operations prior to making the sigaction syscall.
      
      implementation-internal signals are set to SIG_IGN rather than SIG_DFL
      so that a signal raised in the parent (e.g. calling pthread_cancel on
      the thread executing pthread_spawn) does not have any chance make it
      to the child, where it would cause spurious termination by signal.
      
      this change reduces the minimum/typical number of syscalls in the
      child from around 70 to 4 (including execve). this should greatly
      improve the performance of posix_spawn and other interfaces which use
      it (popen and system).
      
      to facilitate these changes, sigismember is also changed to return 0
      rather than -1 for invalid signals, and to return the actual status of
      implementation-internal signals. POSIX allows but does not require an
      error on invalid signal numbers, and in fact returning an error tends
      to confuse applications which wrongly assume the return value of
      sigismember is boolean.
      3c5c5e6f
  34. 30 7月, 2013 1 次提交
    • T
      use separate sigaction buffers for old and new data · 48748143
      Timo Teräs 提交于
      in signal() it is needed since __sigaction uses restrict in parameters
      and sharing the buffer is technically an aliasing error. do the same
      for the syscall, as at least qemu-user does not handle it properly.
      48748143