1. 02 8月, 2013 3 次提交
    • R
      make mkdtemp and mkstemp family leave template unchanged on fail · c4685ae4
      Rich Felker 提交于
      also refactor mkdtemp based on new shared temp code, removing
      dependency on the deprecated mktemp, whose behavior made this logic
      more difficult.
      c4685ae4
    • R
      optimized memset asm for i386 and x86_64 · 926272dd
      Rich Felker 提交于
      the concept of both versions is the same; they differ only in details.
      for long runs, they use "rep movsl" or "rep movsq", and for small
      runs, they use a trick, writing from both ends towards the middle,
      that reduces the number of branches needed. in addition, if memset is
      called multiple times with the same length, all branches will be
      predicted; there are no loops.
      
      for larger runs, there are likely faster approaches than "rep", at
      least on some cpu models. for 32-bit, it's unlikely that there is any
      faster approach that does not require non-baseline instructions; doing
      anything fancier would require inspecting cpu capabilities. for
      64-bit, there may very well be faster versions that work on all
      models; further optimization could be explored in the future.
      
      with these changes, memset is anywhere between 50% faster and 6 times
      faster, depending on the cpu model and the length and alignment of the
      destination buffer.
      926272dd
    • R
  2. 01 8月, 2013 5 次提交
    • R
      in pthread_getattr_np, use mremap rather than madvise to measure stack · 5db951ef
      Rich Felker 提交于
      the original motivation for this patch was that qemu (and possibly
      other syscall emulators) nop out madvise, resulting in an infinite
      loop. however, there is another benefit to this change: madvise may
      actually undo an explicit madvise the application intended for its
      stack, whereas the mremap operation is a true nop. the logic here is
      that mremap must fail if it cannot resize the mapping in-place, and
      the caller knows that it cannot resize in-place because it knows the
      next page of virtual memory is already occupied.
      5db951ef
    • R
      fix theoretical out-of-bound access in dynamic linker · 27593d3a
      Rich Felker 提交于
      one of the arguments to memcmp may be shorter than the length l-3, and
      memcmp is under no obligation not to access past the first byte that
      differs. instead use strncmp which conveys the correct semantics. the
      performance difference is negligible here and since the code is only
      use for shared libc, both functions are already linked anyway.
      27593d3a
    • R
      prevent passing PT_INTERP name to dlopen from double-loading libc · f8c376da
      Rich Felker 提交于
      the dev/inode for the main app and the dynamic linker ("interpreter")
      are not available, so the subsequent checks don't work. in general we
      don't want to make exact string matches to existing libraries prevent
      loading new ones, since this breaks loading upgraded modules in
      module-loading systems. so instead, special-case it.
      
      the motivation for this fix is that calling dlopen on the names
      returned by dl_iterate_phdr or walking the link map (obtained by
      dlinfo) seem to be the only methods available to an application to
      actually get a list of open dso handles.
      f8c376da
    • R
      add some sanity checks in dynamic loader code · 339516ad
      Rich Felker 提交于
      reject elf files which are not ET_EXEC/ET_DYN type as bad exec format,
      and reject ET_EXEC files when they cannot be loaded at the correct
      address, since they are not relocatable at runtime. the main practical
      benefit of this is to make dlopen of the main program fail rather than
      producing an unsafe-to-use handle.
      339516ad
    • R
  3. 31 7月, 2013 3 次提交
  4. 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
  5. 29 7月, 2013 1 次提交
  6. 28 7月, 2013 5 次提交
  7. 27 7月, 2013 6 次提交
  8. 26 7月, 2013 2 次提交
    • R
      16ac00ac
    • R
      new mostly-C crt1 implementation · c5e34dab
      Rich Felker 提交于
      the only immediate effect of this commit is enabling PIE support on
      some archs that did not previously have any Scrt1.s, since the
      existing asm files for crt1 override this C code. so some of the
      crt_arch.h files committed are only there for the sake of documenting
      what their archs "would do" if they used the new C-based crt1.
      
      the expectation is that new archs should use this new system rather
      than using heavy asm for crt1. aside from being easier and less
      error-prone, it also ensures that PIE support is available immediately
      (since Scrt1.o is generated from the same C source, using -fPIC)
      rather than having to be added as an afterthought in the porting
      process.
      c5e34dab
  9. 25 7月, 2013 14 次提交