1. 28 7月, 2013 4 次提交
    • R
      fix semantically incorrect use of LC_GLOBAL_LOCALE · 1ae4bc42
      Rich Felker 提交于
      LC_GLOBAL_LOCALE refers to the global locale, controlled by setlocale,
      not the thread-local locale in effect which these functions should be
      using. neither LC_GLOBAL_LOCALE nor 0 has an argument to the *_l
      functions has behavior defined by the standard, but 0 is a more
      logical choice for requesting the callee to lookup the current locale.
      in the future I may move the current locale lookup the the caller (the
      non-_l-suffixed wrapper).
      
      at this point, all of the locale logic is dummied out, so no harm was
      done, but it should at least avoid misleading usage.
      1ae4bc42
    • R
      fix indention-with-spaces · f44e239f
      Rich Felker 提交于
      f44e239f
    • R
      reorder strftime to eliminate the incorrect indention level · d53b1f82
      Rich Felker 提交于
      this change is in preparation for possibly adding support for the
      field width and padding specifiers added in POSIX 2008.
      d53b1f82
    • R
      add wrapper headers, with warnings, for various incorrect names under sys · 54446d73
      Rich Felker 提交于
      also add a warning to the existing sys/poll.h. the warning is absent
      from sys/dir.h because it is actually providing a slightly different
      API to the program, and thus just replacing the #include directive is
      not a valid fix to programs using this one.
      54446d73
  2. 27 7月, 2013 6 次提交
  3. 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
  4. 25 7月, 2013 19 次提交
  5. 24 7月, 2013 5 次提交
    • R
      support STB_GNU_UNIQUE symbol bindings in dynamic linker · e152ee97
      Rich Felker 提交于
      these are needed for some C++ library binaries including most builds
      of libstdc++. I'm not entirely clear on the rationale. this patch does
      not implement any special semantics for them, but as far as I can
      tell, no special treatment is needed in correctly-linked programs;
      this binding seems to exist only for catching incorrectly-linked
      programs.
      e152ee97
    • R
      move the dynamic linker's jmp_buf from static to automatic storage · 17276be3
      Rich Felker 提交于
      this more than compensates for the size increase of jmp_buf, and
      greatly reduces bss/data size on archs with huge jmp_buf.
      17276be3
    • R
      change jmp_buf to share an underlying type and struct tag with sigjmp_buf · 9693501c
      Rich Felker 提交于
      this is necessary to meet the C++ ABI target. alternatives were
      considered to avoid the size increase for non-sig jmp_buf objects, but
      they seemed to have worse properties. moreover, the relative size
      increase is only extreme on x86[_64]; one way of interpreting this is
      that, if the size increase from this patch makes jmp_buf use too much
      memory, then the program was already using too much memory when built
      for non-x86 archs.
      9693501c
    • R
      remove redundant check in memalign · 4a30ba5c
      Rich Felker 提交于
      the case where mem was already aligned is handled earlier in the
      function now.
      4a30ba5c
    • R
      fix heap corruption bug in memalign · 70a92bc9
      Rich Felker 提交于
      this bug was caught by the new footer-corruption check in realloc and
      free.
      
      if the block returned by malloc was already aligned to the desired
      alignment, memalign's logic to split off the misaligned head was
      incorrect; rather than writing to a point inside the allocated block,
      it was overwriting the footer of the previous block on the heap with
      the value 1 (length 0 plus an in-use flag).
      
      fortunately, the impact of this bug was fairly low. (this is probably
      why it was not caught sooner.) due to the way the heap works, malloc
      will never return a block whose previous block is free. (doing so would
      be harmful because it would increase fragmentation with no benefit.)
      the footer is actually not needed for in-use blocks, except that its
      in-use bit needs to remain set so that it does not get merged with
      free blocks, so there was no harm in it being set to 1 instead of the
      correct value.
      
      however, there is one case where this bug could have had an impact: in
      multi-threaded programs, if another thread freed the previous block
      after memalign's call to malloc returned, but before memalign
      overwrote the previous block's footer, the resulting block in the free
      list could be left in a corrupt state. I have not analyzed the impact
      of this bad state and whether it could lead to more serious
      malfunction.
      70a92bc9
  6. 23 7月, 2013 4 次提交
    • R
      enhance build process to allow selective -O3 optimization · a80847d8
      Rich Felker 提交于
      the motivation for this patch is that the vast majority of libc is
      code that does not benefit at all from optimizations, but that certain
      components like string/memory operations can be major performance
      bottlenecks.
      
      at the same time, the old -falign-*=1 options are removed, since they
      were only beneficial for avoiding bloat when global -O3 was used, and
      in that case, they may have prevented some of the performance gains.
      
      to be the most useful, this patch will need further tuning. in
      particular, research is needed to determine which components should be
      built with -O3 by default, and it may be desirable to remove the
      hard-coded -O3 and instead allow more customization of the
      optimization level used for selected modules.
      a80847d8
    • R
      undefine internal-use type macros at the end of alltypes.h · 9578f053
      Rich Felker 提交于
      this patch is something of a compromise for a compatibility
      regression discovered after the header refactoring: libtiff uses
      _Int64 for its own use. this is absolutely wrong, invalid C, and
      should not be supported, but it's also frustrating for users when code
      that used to work suddenly breaks.
      
      rather than leave the breakage in place or change musl internals to
      accommodate broken software, I've found a change that makes the
      problem go away and improves musl. by undefining these macros at the
      end of alltypes.h, the temptation to use them in other headers is
      removed. (for example, I almost used _Int64 in sys/types.h to define
      u_int64_t rather than adding it back to alltypes.h.) by confining use
      of these macros to alltypes.h, we keep it easy to go back and change
      the implementation of alltypes later, if needed.
      9578f053
    • R
      remove SIG_ATOMIC_MIN/MAX from stdint bits headers · 3f08154a
      Rich Felker 提交于
      i386 was done with the big commit but I missed the others
      3f08154a
    • R
      move register_t and u_int64_t (back) to alltypes · 009f1868
      Rich Felker 提交于
      during the header refactoring, I had moved u_int64_t out of alltypes
      under the assumption that we could just use long long everywhere.
      however, it seems some broken applications make inconsistent mixed use
      of u_int64_t and uint64_t, resulting in build errors when the
      underlying type differs.
      009f1868