1. 13 9月, 2018 4 次提交
    • R
      reduce spurious inclusion of libc.h · 5ce37379
      Rich Felker 提交于
      libc.h was intended to be a header for access to global libc state and
      related interfaces, but ended up included all over the place because
      it was the way to get the weak_alias macro. most of the inclusions
      removed here are places where weak_alias was needed. a few were
      recently introduced for hidden. some go all the way back to when
      libc.h defined CANCELPT_BEGIN and _END, and all (wrongly implemented)
      cancellation points had to include it.
      
      remaining spurious users are mostly callers of the LOCK/UNLOCK macros
      and files that use the LFS64 macro to define the awful *64 aliases.
      
      in a few places, new inclusion of libc.h is added because several
      internal headers no longer implicitly include libc.h.
      
      declarations for __lockfile and __unlockfile are moved from libc.h to
      stdio_impl.h so that the latter does not need libc.h. putting them in
      libc.h made no sense at all, since the macros in stdio_impl.h are
      needed to use them correctly anyway.
      5ce37379
    • R
      remove unused __getdents, rename and move file · ebb6afde
      Rich Felker 提交于
      the __-prefixed filename does not make sense when the only purpose of
      this file is implementing a public function that's not used as a
      backend for implementing the standard dirent functions.
      ebb6afde
    • R
      overhaul internally-public declarations using wrapper headers · 13d1afa4
      Rich Felker 提交于
      commits leading up to this one have moved the vast majority of
      libc-internal interface declarations to appropriate internal headers,
      allowing them to be type-checked and setting the stage to limit their
      visibility. the ones that have not yet been moved are mostly
      namespace-protected aliases for standard/public interfaces, which
      exist to facilitate implementing plain C functions in terms of POSIX
      functionality, or C or POSIX functionality in terms of extensions that
      are not standardized. some don't quite fit this description, but are
      "internally public" interfacs between subsystems of libc.
      
      rather than create a number of newly-named headers to declare these
      functions, and having to add explicit include directives for them to
      every source file where they're needed, I have introduced a method of
      wrapping the corresponding public headers.
      
      parallel to the public headers in $(srcdir)/include, we now have
      wrappers in $(srcdir)/src/include that come earlier in the include
      path order. they include the public header they're wrapping, then add
      declarations for namespace-protected versions of the same interfaces
      and any "internally public" interfaces for the subsystem they
      correspond to.
      
      along these lines, the wrapper for features.h is now responsible for
      the definition of the hidden, weak, and weak_alias macros. this means
      source files will no longer need to include any special headers to
      access these features.
      
      over time, it is my expectation that the scope of what is "internally
      public" will expand, reducing the number of source files which need to
      include *_impl.h and related headers down to those which are actually
      implementing the corresponding subsystems, not just using them.
      13d1afa4
    • R
      fix issues from public functions defined without declaration visible · c221d3e5
      Rich Felker 提交于
      policy is that all public functions which have a public declaration
      should be defined in a context where that public declaration is
      visible, to avoid preventable type mismatches.
      
      an audit performed using GCC's -Wmissing-declarations turned up the
      violations corrected here. in some cases the public header had not
      been included; in others, a feature test macro needed to make the
      declaration visible had been omitted.
      
      in the case of gethostent and getnetent, the omission seems to have
      been intentional, as a hack to admit a single stub definition for both
      functions. this kind of hack is no longer acceptable; it's UB and
      would not fly with LTO or advanced toolchains. the hack is undone to
      make exposure of the declarations possible.
      c221d3e5
  2. 21 6月, 2018 2 次提交
    • S
      add memfd_create syscall wrapper · 38f2fa3d
      Szabolcs Nagy 提交于
      memfd_create was added in linux v3.17 and glibc has api for it.
      38f2fa3d
    • S
      add mlock2 linux syscall wrapper · b64d66d0
      Szabolcs Nagy 提交于
      mlock2 syscall was added in linux v4.4 and glibc has api for it.
      It falls back to mlock in case of flags==0, so that case works
      even on older kernels.
      
      MLOCK_ONFAULT is moved under _GNU_SOURCE following glibc.
      b64d66d0
  3. 23 2月, 2018 1 次提交
  4. 05 7月, 2017 1 次提交
  5. 22 1月, 2016 1 次提交
  6. 10 7月, 2015 1 次提交
  7. 14 6月, 2014 1 次提交
  8. 31 5月, 2014 1 次提交
  9. 30 5月, 2014 2 次提交
    • 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
      support linux kernel apis (new archs) with old syscalls removed · dd5f50da
      Rich Felker 提交于
      such archs are expected to omit definitions of the SYS_* macros for
      syscalls their kernels lack from arch/$ARCH/bits/syscall.h. the
      preprocessor is then able to select the an appropriate implementation
      for affected functions. two basic strategies are used on a
      case-by-case basis:
      
      where the old syscalls correspond to deprecated library-level
      functions, the deprecated functions have been converted to wrappers
      for the modern function, and the modern function has fallback code
      (omitted at the preprocessor level on new archs) to make use of the
      old syscalls if the new syscall fails with ENOSYS. this also improves
      functionality on older kernels and eliminates the incentive to program
      with deprecated library-level functions for the sake of compatibility
      with older kernels.
      
      in other situations where the old syscalls correspond to library-level
      functions which are not deprecated but merely lack some new features,
      such as the *at functions, the old syscalls are still used on archs
      which support them. this may change at some point in the future if or
      when fallback code is added to the new functions to make them usable
      (possibly with reduced functionality) on old kernels.
      dd5f50da
  10. 16 4月, 2014 1 次提交
    • R
      add namespace-protected name for sysinfo function · de20a8ff
      Rich Felker 提交于
      it will be needed to implement some things in sysconf, and the syscall
      can't easily be used directly because the x32 syscall uses the wrong
      structure layout. the l (uncreative, for "linux") prefix is used since
      the symbol name __sysinfo is already taken for AT_SYSINFO from the aux
      vector.
      
      the way the x32 override of this function works is also changed to be
      simpler and avoid the useless jump instruction.
      de20a8ff
  11. 06 3月, 2014 1 次提交
    • R
      x32: fix sysinfo() · dae8ca73
      rofl0r 提交于
      the kernel uses long longs in the struct, but the documentation
      says they're long. so we need to fixup the mismatch between the
      userspace and kernelspace structs.
      since the struct offers a mem_unit member, we can avoid truncation
      by adjusting that value.
      dae8ca73
  12. 10 2月, 2014 1 次提交
    • B
      clone: make clone a wrapper around __clone · fdf5f1b1
      Bobby Bingham 提交于
      The architecture-specific assembly versions of clone did not set errno on
      failure, which is inconsistent with glibc.  __clone still returns the error
      via its return value, and clone is now a wrapper that sets errno as needed.
      The public clone has also been moved to src/linux, as it's not directly
      related to the pthreads API.
      
      __clone is called by pthread_create, which does not report errors via
      errno.  Though not strictly necessary, it's nice to avoid clobbering errno
      here.
      fdf5f1b1
  13. 07 1月, 2014 4 次提交
  14. 03 1月, 2014 4 次提交
    • R
      fanotify.c: fix typo in header inclusion · 9e91398b
      rofl0r 提交于
      the header is included only as a guard to check that the declaration
      and definition match, so the typo didn't cause any breakage aside
      from omitting this check.
      9e91398b
    • R
      disable the brk function · 863d628d
      Rich Felker 提交于
      the reasons are the same as for sbrk. unlike sbrk, there is no safe
      usage because brk does not return any useful information, so it should
      just fail unconditionally.
      863d628d
    • R
      disable sbrk for all values of increment except 0 · 7a995fe7
      Rich Felker 提交于
      use of sbrk is never safe; it conflicts with malloc, and malloc may be
      used internally by the implementation basically anywhere. prior to
      this change, applications attempting to use sbrk to do their own heap
      management simply caused untrackable memory corruption; now, they will
      fail with ENOMEM allowing the errors to be fixed.
      
      sbrk(0) is still permitted as a way to get the current brk; some
      misguided applications use this as a measurement of their memory
      usage or for other related purposes, and such usage is harmless.
      
      eventually sbrk may be re-added if/when malloc is changed to avoid
      using the brk by using mmap for all allocations.
      7a995fe7
    • R
      add fanotify syscall wrapper and header · 5c81b8fe
      rofl0r 提交于
      5c81b8fe
  15. 21 12月, 2013 1 次提交
  16. 12 12月, 2013 1 次提交
  17. 27 5月, 2013 1 次提交
  18. 08 4月, 2013 1 次提交
    • R
      fix signalfd not to ignore flags · bcd93025
      Rich Felker 提交于
      also include fallback code for broken kernels that don't support the
      flags. as usual, the fallback has a race condition that can leak file
      descriptors.
      bcd93025
  19. 27 3月, 2013 1 次提交
    • R
      remove __SYSCALL_SSLEN arch macro in favor of using public _NSIG · ccc7b4c3
      Rich Felker 提交于
      the issue at hand is that many syscalls require as an argument the
      kernel-ABI size of sigset_t, intended to allow the kernel to switch to
      a larger sigset_t in the future. previously, each arch was defining
      this size in syscall_arch.h, which was redundant with the definition
      of _NSIG in bits/signal.h. as it's used in some not-quite-portable
      application code as well, _NSIG is much more likely to be recognized
      and understood immediately by someone reading the code, and it's also
      shorter and less cluttered.
      
      note that _NSIG is actually 65/129, not 64/128, but the division takes
      care of throwing away the off-by-one part.
      ccc7b4c3
  20. 08 12月, 2012 2 次提交
  21. 19 11月, 2012 1 次提交
    • R
      add port io functions to sys/io.h · 61aa6324
      Rich Felker 提交于
      based on proposal by Isaac Dunham. nonexistance of bits/io.h will
      cause inclusion of sys/io.h to produce an error on archs that are not
      supposed to have it. this is probably the desired behavior, but the
      error message may be a bit unusual.
      61aa6324
  22. 05 11月, 2012 1 次提交
  23. 30 9月, 2012 1 次提交
  24. 29 9月, 2012 1 次提交
  25. 21 9月, 2012 1 次提交
  26. 17 9月, 2012 1 次提交
  27. 11 9月, 2012 2 次提交