1. 27 7月, 2013 4 次提交
  2. 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
  3. 25 7月, 2013 19 次提交
  4. 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
  5. 23 7月, 2013 10 次提交
    • 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
    • R
      fix regression in size of nlink_t (broken stat struct) on x86_64 · 1c6cace0
      Rich Felker 提交于
      rather than moving nlink_t back to the arch-specific file, I've added
      a macro _Reg defined to the canonical type for register-size values on
      the arch. this is not the same as _Addr for (not-yet-supported)
      32-on-64 pseudo-archs like x32 and mips n32, so a new macro was
      needed.
      1c6cace0
    • R
      make regoff_t and regex_t match C++ ABI · 8327ae0c
      Rich Felker 提交于
      for regoff_t, it's impossible to match on 64-bit archs because glibc
      defined the type in a non-conforming way. however this change makes
      the type match on 32-bit archs.
      8327ae0c
    • R
      disable legacy init/fini processing on ARM · 1da53dad
      Rich Felker 提交于
      since the old, poorly-thought-out musl approach to init/fini arrays on
      ARM (when it was the only arch that needed them) was to put the code
      in crti/crtn and have the legacy _init/_fini code run the arrays,
      adding proper init/fini array support caused the arrays to get
      processed twice on ARM. I'm not sure skipping legacy init/fini
      processing is the best solution to the problem, but it works, and it
      shouldn't break anything since the legacy init/fini system was never
      used for ARM EABI.
      1da53dad
    • R
      make pthread_key_t unsigned to match ABI · 4e3c6b43
      Rich Felker 提交于
      4e3c6b43
    • R
      make pthread attribute types structs, even when they just have one field · 0109d950
      Rich Felker 提交于
      this change is to get the right tags for C++ ABI matching. it should
      have no other effects.
      0109d950
    • R
      change wint_t to unsigned · c4dd0c98
      Rich Felker 提交于
      aside from the obvious C++ ABI purpose for this change, it also brings
      musl into alignment with the compiler's idea of the definition of
      wint_t (use in -Wformat), and makes the situation less awkward on ARM,
      where wchar_t is unsigned.
      
      internal code using wint_t and WEOF was checked against this change,
      and while a few cases of storing WEOF into wchar_t were found, they
      all seem to operate properly with the natural conversion from unsigned
      to signed.
      c4dd0c98