1. 30 5月, 2014 3 次提交
    • S
      fix for broken kernel side RLIM_INFINITY on mips · 8258014f
      Szabolcs Nagy 提交于
      On 32 bit mips the kernel uses -1UL/2 to mark RLIM_INFINITY (and
      this is the definition in the userspace api), but since it is in
      the middle of the valid range of limits and limits are often
      compared with relational operators, various kernel side logic is
      broken if larger than -1UL/2 limits are used. So we truncate the
      limits to -1UL/2 in get/setrlimit and prlimit.
      
      Even if the kernel side logic consistently treated -1UL/2 as greater
      than any other limit value, there wouldn't be any clean workaround
      that allowed using large limits:
      * using -1UL/2 as RLIM_INFINITY in userspace would mean different
      infinity value for get/setrlimt and prlimit (where infinity is always
      -1ULL) and userspace logic could break easily (just like the kernel
      is broken now) and more special case code would be needed for mips.
      * translating -1UL/2 kernel side value to -1ULL in userspace would
      mean that -1UL/2 limit cannot be set (eg. -1UL/2+1 had to be passed
      to the kernel instead).
      8258014f
    • R
      break down coarse-grained 64-bit-off_t syscall remappings · 106e65d6
      Rich Felker 提交于
      using the existence of SYS_stat64 as the condition for remapping other
      related syscalls is no longer valid, since new archs that omit the old
      syscalls will not have SYS_stat or SYS_stat64, but still potentially
      need SYS_fstat and others remapped. it would probably be possible to
      get by with just one or two extra conditionals, but just breaking them
      all down into separate conditions is robust and not significantly
      heavier for the preprocessor.
      106e65d6
    • R
      fix sendfile syscall to use 64-bit off_t · 55f45bc7
      Rich Felker 提交于
      somehow the remapping of this syscall to the 64-bit version was
      overlooked. the issue was found, and patch provided, by Stefan
      Kristiansson. presumably the reason this bug was not caught earlier is
      that the syscall takes a pointer to off_t rather than a value, so on
      little-endian systems, everything appears to work as long as the
      offset value fits in the low 31 bits. on big-endian systems, though,
      sendfile was presumably completely non-functional.
      55f45bc7
  2. 27 5月, 2014 2 次提交
  3. 25 5月, 2014 1 次提交
    • R
      support kernels with no SYS_open syscall, only SYS_openat · 594c827a
      Rich Felker 提交于
      open is handled specially because it is used from so many places, in
      so many variants (2 or 3 arguments, setting errno or not, and
      cancellable or not). trying to do it as a function would not only
      increase bloat, but would also risk subtle breakage.
      
      this is the first step towards supporting "new" archs where linux
      lacks "old" syscalls.
      594c827a
  4. 18 4月, 2014 1 次提交
  5. 12 4月, 2014 1 次提交
    • R
      use hidden visibility rather than protected for syscall internals · 83c98aac
      Rich Felker 提交于
      the use of visibility at all is purely an optimization to avoid the
      need for the caller to load the GOT register or similar to prepare for
      a call via the PLT. there is no reason for these symbols to be
      externally visible, so hidden works just as well as protected, and
      using protected visibility is undesirable due to toolchain bugs and
      the lack of testing it receives.
      
      in particular, GCC's microblaze target is known to generate symbolic
      relocations in the GOT for functions with protected visibility. this
      in turn results in a dynamic linker which crashes under any nontrivial
      usage that requires making a syscall before symbolic relocations are
      processed.
      83c98aac
  6. 23 2月, 2014 1 次提交
  7. 22 2月, 2014 2 次提交
    • R
      internal/syscall.h: add syscall_arg_t macro · 5cc1d920
      rofl0r 提交于
      some 32-on-64 archs require that the actual syscall args be long long.
      in that case syscall_arch.h can define syscall_arg_t to whatever it needs
      and syscall.h picks it up.
      all other archs just use long as usual.
      5cc1d920
    • R
      internal/syscall.h: use a macro for the syscall args casts · bf84967c
      rofl0r 提交于
      this allows syscall_arch.h to define the macro __scc if special
      casting is needed, as is the case for x32, where the actual syscall
      arguments are 64bit, but, in case of pointers, would get sign-extended
      and thus become invalid.
      bf84967c
  8. 17 7月, 2013 1 次提交
  9. 26 10月, 2012 1 次提交
    • R
      use explicit visibility to optimize a few hot-path function calls · 607b05ac
      Rich Felker 提交于
      on x86 and some other archs, functions which make function calls which
      might go through a PLT incur a significant overhead cost loading the
      GOT register prior to making the call. this load is utterly useless in
      musl, since all calls are bound at library-creation time using
      -Bsymbolic-functions, but the compiler has no way of knowing this, and
      attempts to set the default visibility to protected have failed due to
      bugs in GCC and binutils.
      
      this commit simply manually assigns hidden/protected visibility, as
      appropriate, to a few internal-use-only functions which have many
      callers, or which have callers that are hot paths like getc/putc. it
      shaves about 5k off the i386 libc.so with -Os. many of the
      improvements are in syscall wrappers, where the benefit is just size
      and performance improvement is unmeasurable noise amid the syscall
      overhead. however, stdio may be measurably faster.
      
      if in the future there are toolchains that can do the same thing
      globally without introducing linking bugs, it might be worth
      considering removing these workarounds.
      607b05ac
  10. 10 9月, 2012 1 次提交
    • R
      add 7-arg syscall support for mips · 9a3bbce4
      Rich Felker 提交于
      no syscalls actually use that many arguments; the issue is that some
      syscalls with 64-bit arguments have them ordered badly so that
      breaking them into aligned 32-bit half-arguments wastes slots with
      padding, and a 7th slot is needed for the last argument.
      9a3bbce4
  11. 09 9月, 2012 1 次提交
    • R
      syscall organization overhaul · 208eb584
      Rich Felker 提交于
      now public syscall.h only exposes __NR_* and SYS_* constants and the
      variadic syscall function. no macros or inline functions, no
      __syscall_ret or other internal details, no 16-/32-bit legacy syscall
      renaming, etc. this logic has all been moved to src/internal/syscall.h
      with the arch-specific parts in arch/$(ARCH)/syscall_arch.h, and the
      amount of arch-specific stuff has been reduced to a minimum.
      
      changes still need to be reviewed/double-checked. minimal testing on
      i386 and mips has already been performed.
      208eb584
  12. 02 5月, 2011 1 次提交
    • R
      workaround for preprocessor bug in pcc · a9be201c
      Rich Felker 提交于
      with this patch, musl compiles and mostly works with pcc 1.0.0. a few
      tests are still failing and i'm uncertain whether they are due to
      portability problems in musl, or bugs in pcc, but i suspect the
      latter.
      a9be201c
  13. 17 4月, 2011 1 次提交
    • R
      overhaul pthread cancellation · feee9890
      Rich Felker 提交于
      this patch improves the correctness, simplicity, and size of
      cancellation-related code. modulo any small errors, it should now be
      completely conformant, safe, and resource-leak free.
      
      the notion of entering and exiting cancellation-point context has been
      completely eliminated and replaced with alternative syscall assembly
      code for cancellable syscalls. the assembly is responsible for setting
      up execution context information (stack pointer and address of the
      syscall instruction) which the cancellation signal handler can use to
      determine whether the interrupted code was in a cancellable state.
      
      these changes eliminate race conditions in the previous generation of
      cancellation handling code (whereby a cancellation request received
      just prior to the syscall would not be processed, leaving the syscall
      to block, potentially indefinitely), and remedy an issue where
      non-cancellable syscalls made from signal handlers became cancellable
      if the signal handler interrupted a cancellation point.
      
      x86_64 asm is untested and may need a second try to get it right.
      feee9890
  14. 20 3月, 2011 2 次提交
    • R
      global cleanup to use the new syscall interface · aa398f56
      Rich Felker 提交于
      aa398f56
    • R
      syscall overhaul part two - unify public and internal syscall interface · 685e40bb
      Rich Felker 提交于
      with this patch, the syscallN() functions are no longer needed; a
      variadic syscall() macro allows syscalls with anywhere from 0 to 6
      arguments to be made with a single macro name. also, manually casting
      each non-integer argument with (long) is no longer necessary; the
      casts are hidden in the macros.
      
      some source files which depended on being able to define the old macro
      SYSCALL_RETURNS_ERRNO have been modified to directly use __syscall()
      instead of syscall(). references to SYSCALL_SIGSET_SIZE and SYSCALL_LL
      have also been changed.
      
      x86_64 has not been tested, and may need a follow-up commit to fix any
      minor bugs/oversights.
      685e40bb
  15. 15 2月, 2011 1 次提交
  16. 14 2月, 2011 1 次提交
    • R
      cleaning up syscalls in preparation for x86_64 port · 2cdfb7ca
      Rich Felker 提交于
      - hide all the legacy xxxxxx32 name cruft in syscall.h so the actual
      source files can be clean and uniform across all archs.
      
      - cleanup llseek/lseek and mmap2/mmap handling for 32/64 bit systems
      
      - alternate implementation for nice if the target lacks nice syscall
      2cdfb7ca
  17. 12 2月, 2011 1 次提交