1. 11 12月, 2012 3 次提交
    • R
      fix regressions in app compatibility from previous sys/ipc.h changes · 490d4a0e
      Rich Felker 提交于
      despite glibc using __key and __seq rather than key and seq, some
      applications, notably busybox, assume the names are key and seq unless
      glibc is being used. and the names key and seq are really the ones
      that _should_ be exposed when not attempting to present a
      standards-conforming namespace; apps should not be using names that
      begin with double-underscore. thus, the optimal fix is to use key and
      seq as the actual names of the members when in bsd/gnu source profile,
      and define macros for __key and __seq that redirect to plain key and
      seq.
      490d4a0e
    • R
      f1c1a5ea
    • R
      syscall() declaration belongs in unistd.h, not sys/syscall.h · baf246e5
      Rich Felker 提交于
      traditionally, both BSD and GNU systems have it this way.
      sys/syscall.h is purely syscall number macros. presently glibc exposes
      the syscall declaration in unistd.h only with _GNU_SOURCE, but that
      does not reflect historical practice.
      baf246e5
  2. 08 12月, 2012 5 次提交
    • R
      add support for ctors/dtors on arm with modern gcc · 34aa169d
      Rich Felker 提交于
      a while back, gcc switched from using the old _init/_fini fragments
      method for calling ctors and dtors on arm to the __init_array and
      __fini_array method. unfortunately, on glibc this depends on ugly
      hacks involving making libc.so a linker script and pulling parts of
      libc into the main program binary. so I cheat a little bit, and just
      write asm to iterate over the init/fini arrays from the _init/_fini
      asm. the same approach could be used on any arch it's needed on, but
      for now arm is the only one.
      34aa169d
    • R
      page-align initial brk value used by malloc in shared libc · b8ccf8e4
      Rich Felker 提交于
      this change fixes an obscure issue with some nonstandard kernels,
      where the initial brk syscall returns a pointer just past the end of
      bss rather than the beginning of a new page. in that case, the dynamic
      linker has already reclaimed the space between the end of bss and the
      page end for use by malloc, and memory corruption (allocating the same
      memory twice) will occur when malloc again claims it on the first call
      to brk.
      b8ccf8e4
    • R
      remove __arch_prctl alias for arch_prctl · 3ee67505
      Rich Felker 提交于
      if there's evidence of any use for it, we can add it back later. as
      far as I can tell, glibc has it only for internal use (and musl uses a
      direct syscall in that case rather than a function call), not for
      exposing it to applications.
      3ee67505
    • R
      55aef73f
    • R
      03b0f13e
  3. 07 12月, 2012 18 次提交
  4. 06 12月, 2012 7 次提交
    • R
      add more arch-specific MAP_ macros to bits/mman.h · 7e0d4fce
      rofl0r 提交于
      these are also needed by qemu.
      7e0d4fce
    • R
      remove MAP_32 from non-x86 archs · db846a62
      rofl0r 提交于
      both kernel and glibc define it only on x86(_64).
      db846a62
    • R
      add MAP_NORESERVE to bits/mman.h · 0e10f740
      rofl0r 提交于
      this is needed for qemu, and since it differs for each arch
      it can't be circumvented easily by using a macro in CFLAGS.
      0e10f740
    • R
      remove fenv saving/loading code from setjmp/longjmp on arm · 4b43f05f
      Rich Felker 提交于
      the issue is identical to the recent commit fixing the mips versions:
      despite other implementations doing this, it conflicts with the
      requirements of ISO C and it's a waste of time and code size.
      4b43f05f
    • R
      fix inefficiency of math.h isless, etc. macros · 96b3ea53
      Rich Felker 提交于
      previously, everything was going through an intermediate conversion to
      long double, which caused the extern __fpclassifyl function to get
      invoked, preventing virtually all optimizations of these operations.
      
      with the new code, tests on constant float or double arguments compile
      to a constant 0 or 1, and tests on non-constant expressions are
      efficient. I may later add support for __builtin versions on compilers
      that support them.
      96b3ea53
    • R
      remove mips setjmp/longjmp code to save/restore fenv · b088f855
      Rich Felker 提交于
      nothing in the standard requires or even allows the fenv state to be
      restored by longjmp. restoring the exception flags is not such a big
      deal since it's probably valid to clobber them completely, but
      restoring the rounding mode yields an observable side effect not
      sanctioned by ISO C. saving/restoring it also wastes a few cycles and
      16 bytes of code.
      
      as for historical behavior, reportedly SGI IRIX did save/restore fenv,
      and this is where glibc and uClibc got the behavior from. a few other
      systems save/restore it too (on archs other than mips), even though
      this is apparently wrong. further details are documented here:
      
      http://www-personal.umich.edu/~williams/archive/computation/setjmp-fpmode.html
      
      as musl aims for standards conformance rather than coddling historical
      programs expecting non-conforming behavior, and as it's unlikely that
      any historical programs actually depend on the incorrect behavior
      (such programs would break on other archs, anyway), I'm making the
      change not to save/restore fenv on mips.
      b088f855
    • R
      add scsi headers scsi.h and sg.h · 91b05889
      Rich Felker 提交于
      due to some historical oddity, these are considered libc headers
      rather than kernel headers. the kernel used to provide them too, but
      it seems modern kernels do not install them, so let's just do the
      easiest thing and provide them. stripped-down versions provided by
      John Spencer.
      91b05889
  5. 05 12月, 2012 2 次提交
  6. 04 12月, 2012 3 次提交
    • R
      7aa73925
    • R
      add _ALL_SOURCE as an alias for _GNU_SOURCE/enable-everything · b3175f5c
      Rich Felker 提交于
      reportedly this is a semi-common practice among some BSDs and a few
      other systems, and will improve application compatibility.
      b3175f5c
    • R
      feature test macros: make _GNU_SOURCE enable everything · 769fd4ce
      Rich Felker 提交于
      previously, a few BSD features were enabled only by _BSD_SOURCE, not
      by _GNU_SOURCE. since _BSD_SOURCE is default in the absence of other
      feature test macros, this made adding _GNU_SOURCE to a project not a
      purely additive feature test macro; it actually caused some features
      to be suppressed.
      
      most of the changes made by this patch actually bring musl in closer
      alignment with the glibc behavior for _GNU_SOURCE. the only exceptions
      are the added visibility of functions like strlcpy which were BSD-only
      due to being disliked/rejected by glibc maintainers. here, I feel the
      consistency of having _GNU_SOURCE mean "everything", and especially
      the property of it being purely additive, are more valuable than
      hiding functions which glibc does not have.
      769fd4ce
  7. 03 12月, 2012 1 次提交
    • R
      fix a couple issues in the inttypes.h PRI/SCN macros · 216b7065
      Rich Felker 提交于
      most importantly, the format/scan macros for the [u]int_fast16_t and
      [u]int_fast32_t types were defined incorrectly assuming these types
      would match the native word/pointer size. this is incorrect on any
      64-bit system; the "fast" types for 16- and 32-bit integers are simply
      int.
      
      another issue which was "only a warning" (despite being UB) is that
      the choice of "l" versus "ll" was incorrect for 64-bit types on 64-bit
      machines. while it would "work" to always use "long long" for 64-bit
      types, we use "long" on 64-bit machines to match what glibc does and
      what the ABI documents recommend. the macro definitions were probably
      right in very old versions of musl, but became wrong when we aligned
      most closely with the 'standard' ABI. checking UINTPTR_MAX is an easy
      way to get the system wordsize without pulling in new headers.
      
      finally, the useless __PRIPTR macro to allow the underlying type of
      [u]intptr_t to vary has been removed. we are using "long" on all
      targets, and thankfully this matches what glibc does, so I do not
      envision ever needing to change it. thus, the "l" has just been
      incorporated directly in the strings.
      216b7065
  8. 01 12月, 2012 1 次提交