about summary refs log tree commit diff
path: root/src/linux
Commit message (Collapse)AuthorAgeFilesLines
* overhaul internally-public declarations using wrapper headersRich Felker2018-09-121-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* fix issues from public functions defined without declaration visibleRich Felker2018-09-123-0/+6
| | | | | | | | | | | | | | | | | 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.
* add memfd_create syscall wrapperSzabolcs Nagy2018-06-201-0/+8
| | | | memfd_create was added in linux v3.17 and glibc has api for it.
* add mlock2 linux syscall wrapperSzabolcs Nagy2018-06-201-0/+10
| | | | | | | | 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.
* add getrandom syscall wrapperHauke Mehrtens2018-02-221-0/+7
| | | | | This syscall is available since Linux 3.17 and was also implemented in glibc in version 2.25 using the same interfaces.
* fix undefined behavior in ptraceAlexander Monakov2017-07-041-2/+6
|
* move x32 sysinfo impl and syscall fixup code out of arch/x32/srcRich Felker2016-01-222-1/+50
| | | | | all such arch-specific translation units are being moved to appropriate arch dirs under the main src tree.
* fix incorrect void return type for syncfs functionRich Felker2015-07-091-2/+2
| | | | | | being nonstandard, the closest thing to a specification for this function is its man page, which documents it as returning int. it can fail with EBADF if the file descriptor passed is invalid.
* fix missing argument to syscall in fanotify_markClément Vasseur2014-06-141-1/+1
|
* fix breakage from recent syscall commits due to missing errno macrosRich Felker2014-05-303-0/+3
|
* fix for broken kernel side RLIM_INFINITY on mipsSzabolcs Nagy2014-05-301-1/+16
| | | | | | | | | | | | | | | | | | | | 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).
* support linux kernel apis (new archs) with old syscalls removedRich Felker2014-05-295-8/+29
| | | | | | | | | | | | | | | | | | | | | | | | 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.
* add namespace-protected name for sysinfo functionRich Felker2014-04-152-6/+5
| | | | | | | | | | | 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.
* x32: fix sysinfo()rofl0r2014-03-061-0/+5
| | | | | | | | 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.
* clone: make clone a wrapper around __cloneBobby Bingham2014-02-091-0/+19
| | | | | | | | | | | | 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.
* fix const-correctness of argument to stimeRich Felker2014-01-071-1/+1
| | | | | | | it's unclear what the historical signature for this function was, but semantically, the argument should be a pointer to const, and this is what glibc uses. correct programs should not be using this function anyway, so it's unlikely to matter.
* fix signedness of pgoff argument to remap_file_pagesRich Felker2014-01-071-1/+1
| | | | | both the kernel and glibc agree that this argument is unsigned; the incorrect type ssize_t came from erroneous man pages.
* fix incorrect type for wd argument of inotify_rm_watchRich Felker2014-01-071-1/+1
| | | | | | this was wrong since the original commit adding inotify, and I don't see any explanation for it. not even the man pages have it wrong. it was most likely a copy-and-paste error.
* add some missing LFS64 aliases for fadvise/fallocate functionsRich Felker2014-01-061-0/+4
|
* fanotify.c: fix typo in header inclusionrofl0r2014-01-031-1/+1
| | | | | | 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.
* disable the brk functionRich Felker2014-01-021-1/+2
| | | | | | 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.
* disable sbrk for all values of increment except 0Rich Felker2014-01-021-3/+3
| | | | | | | | | | | | | | | 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.
* add fanotify syscall wrapper and headerrofl0r2014-01-021-0/+14
|
* add sys/quota.h and quotactl syscall wrapperRich Felker2013-12-201-0/+7
| | | | based on patch by Timo Teräs.
* include cleanups: remove unused headers and add feature test macrosSzabolcs Nagy2013-12-1214-10/+12
|
* fix the prototype of settimeofday to follow the original BSD declarationSzabolcs Nagy2013-05-261-1/+2
|
* fix signalfd not to ignore flagsRich Felker2013-04-071-1/+12
| | | | | | 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.
* remove __SYSCALL_SSLEN arch macro in favor of using public _NSIGRich Felker2013-03-263-3/+6
| | | | | | | | | | | | | | 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.
* remove __arch_prctl alias for arch_prctlRich Felker2012-12-071-3/+1
| | | | | | | 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.
* move new linux syscall wrapper functions to proper source dirRich Felker2012-12-072-0/+16
|
* add port io functions to sys/io.hRich Felker2012-11-182-2/+4
| | | | | | | 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.
* mips cache flush/ctl syscall support and headerRich Felker2012-11-041-0/+18
|
* move accept4, dup3, and pipe2 to non-linux-specific locationsRich Felker2012-09-293-27/+0
| | | | | these interfaces have been adopted by the Austin Group for inclusion in the next version of POSIX.
* fix some indention-with-spaces that crept inRich Felker2012-09-292-4/+4
|
* LFS64 alias for prlimitRich Felker2012-09-211-0/+3
| | | | issue reported/requested by Justin Cormack
* add clock_adjtime, remap_file_pages, and syncfs syscall wrappersRich Felker2012-09-163-0/+25
| | | | patch by Justin Cormack, with slight modification
* fix another ppoll issue (missing sigset_t size argument)Rich Felker2012-09-101-1/+1
|
* fix ppoll with null timeout argumentRich Felker2012-09-101-2/+2
|
* add linux ppoll syscall wrapperRich Felker2012-09-091-0/+9
|
* reenable sync_file_range; should no longer break on mipsRich Felker2012-09-091-2/+2
|
* disable sync_file_range for nowRich Felker2012-09-081-2/+3
| | | | | | | something is wrong with the logic for the argument layout, resulting in compile errors on mips due to too many args to syscall... further information on how it's supposed to work will be needed before it can be reactivated.
* add acct, accept4, setns, and dup3 syscalls (linux extensions)Rich Felker2012-09-083-0/+28
| | | | based on patch by Justin Cormack
* add linux tee syscallRich Felker2012-09-081-0/+8
|
* add linux sync_file_range syscallRich Felker2012-09-081-0/+16
|
* move fallocate syscall wrapper to linux-specific syscalls dirRich Felker2012-09-081-0/+9
|
* add linux readahead syscallRich Felker2012-09-081-0/+8
|
* add timerfd interfaces (untested)Rich Felker2012-09-081-0/+17
|
* cleanup src/linux and src/misc trees, etc.Rich Felker2012-09-0731-404/+107
| | | | | | | | | | | | previously, it was pretty much random which one of these trees a given function appeared in. they have now been organized into: src/linux: non-POSIX linux syscalls (possibly shard with other nixen) src/legacy: various obsolete/legacy functions, mostly wrappers src/misc: still mostly uncategorized; some misc POSIX, some nonstd src/crypt: crypt hash functions further cleanup will be done later.
* further use of _Noreturn, for non-plain-C functionsRich Felker2012-09-061-4/+4
| | | | | | | | | | | | | | | | | | | note that POSIX does not specify these functions as _Noreturn, because POSIX is aligned with C99, not the new C11 standard. when POSIX is eventually updated to C11, it will almost surely give these functions the _Noreturn attribute. for now, the actual _Noreturn keyword is not used anyway when compiling with a c99 compiler, which is what POSIX requires; the GCC __attribute__ is used instead if it's available, however. in a few places, I've added infinite for loops at the end of _Noreturn functions to silence compiler warnings. presumably __buildin_unreachable could achieve the same thing, but it would only work on newer GCCs and would not be portable. the loops should have near-zero code size cost anyway. like the previous _Noreturn commit, this one is based on patches contributed by philomath.
* handle null arguments to legacy bsd err.h functionsRich Felker2012-08-151-2/+2
|