about summary refs log tree commit diff
path: root/include
Commit message (Collapse)AuthorAgeFilesLines
* rework mechanism for posix_spawnp calling posix_spawnRich Felker2018-09-121-1/+3
| | | | | | | | | | | | | | | | | | previously, a common __posix_spawnx backend was used that accepted an additional argument for the execve variant to call in the child. this moderately bloated up the posix_spawn function, shuffling arguments between stack and/or registers to call a 7-argument function from a 6-argument one. instead, tuck the exec function pointer in an unused part of the (large) pthread_spawnattr_t structure, and have posix_spawnp duplicate the attributes and fill in a pointer to __execvpe. the net code size change is minimal, but the weight is shifted to the "heavier" function which already pulls in more dependencies. as a bonus, we get rid of an external symbol (__posix_spawnx) that had no really good place for a declaration because it shouldn't have existed to begin with.
* fix dubious char signedness check in limits.hRich Felker2018-08-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | commit 201995f382cc698ae19289623cc06a70048ffe7b introduced a hack utilizing the signedness of character constants at the preprocessor level to avoid depending on the gcc-specific __CHAR_UNSIGNED__ predef. while this trick works on gcc and presumably other compilers being used, it's not clear that the behavior it depends on is actually conforming. C11 6.4.4.4 ¶10 defines character constants as having type int, and 6.10.1 ¶4 defines preprocessor #if arithmetic to take place in intmax_t or uintmax_t, depending on the signedness of the integer operand types, and it is specified that "this includes interpreting character constants". if character literals had type char and just promoted to int, it would be clear that when char is unsigned they should behave as uintmax_t at the preprocessor level. however, as written the text of the standard seems to require that character constants always behave as intmax_t, corresponding to int, at the preprocessor level. since there is a good deal of ambiguity about the correct behavior and a risk that compilers will disagree or that an interpretation may mandate a change in the behavior, do not rely on it for defining CHAR_MIN and CHAR_MAX correctly. instead, use the signedness of the value (as opposed to the type) of '\xff', which will be positive if and only if plain char is unsigned. this behavior is clearly specified, and the specific case '\xff' is even used in an example, under 6.4.4.4 of the standard.
* fix FP_ILOGB0 and FP_ILOGBNAN definitions to be valid for use in #ifRich Felker2018-08-221-1/+1
| | | | | | | | | | commit 98c9af500125df41fdb46d7e384b00982d72493a wrongly claimed they do not need to be valid for such usage, but the last sentence of C11 7.1.4 ¶1 imposes a broad requirement that all macros specified as integer constant expressions also need to be valid for #if. simply write the value out explicitly. there is no value here in pretending that the width of int will vary.
* remove erroneous SYMLINK_MAX definition from limits.h, pathconfRich Felker2018-08-201-1/+0
| | | | | | | | | | | | | | | | | POSIX requires the symlink function to fail with ENAMETOOLONG if the link contents to be written exceed SYMLINK_MAX in length, but neither Linux nor our syscall wrapper code enforce this. the value 255 for SYMLINK_MAX is not meaningful and does not seem to have been motivated by anything except perhaps a wrong assumption that a definition was mandatory. it has been present (though moving through bits to top-level limits.h) since the beginning of the project history. [f]pathconf is entitled to return -1 as the limit for conf names for which there is no hard limit, with the usual POSIX note that an indefinite limit does not imply an infinite limit. in principle we might should report a limit for filesystems that impose one, but such functionality is not currently present for any of the pathconf limits, and adding it is beyond the scope of fixing the incorrect limit.
* move inclusion of linux headers for kd.h, soundcard.h, vt.h to bitsmidipix2018-07-203-3/+3
| | | | | | | | | | | | maintainer's note: while musl does not use the linux kernel headers, it does provide these three sys/* headers which do nothing but include the corresponding linux/* headers, since the sys/* versions are the ones documented for application use (and they arguably provide interfaces that are not linux-specific but common to other unices). these headers should probably not be provided by libc (rather by a separate package), but as long as they are, use the bits header framework as an aid to out-of-tree ports of musl for non-linux systems that want to implement them in some other way.
* remove inclusion guard hacks for sys/kd.hmidipix2018-07-201-7/+0
| | | | | | | | | | | | maintainer's note: at some point, probably long before linux separated the uapi headers, it was the case, or at least I believed it was the case, that linux/types.h was unsafe to include from userspace. thus, the inclusion guard macro _LINUX_TYPES_H was defined in sys/kd.h to prevent linux/kd.h from including linux/types.h (which it spuriously includes but does not use). as far as I can tell, whatever problem this was meant to solve does not seem to have been present for a long time, and the hack was not done correctly anyway, so removing it is the right thing to do.
* add support for arch-specific ptrace command macrosSzabolcs Nagy2018-07-171-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | sys/ptrace.h is target specific, use bits/ptrace.h to add target specific macro definitions. these macros are kept in the generic sys/ptrace.h even though some targets don't support them: PTRACE_GETREGS PTRACE_SETREGS PTRACE_GETFPREGS PTRACE_SETFPREGS PTRACE_GETFPXREGS PTRACE_SETFPXREGS so no macro definition got removed in this patch on any target. only s390x has a numerically conflicting macro definition (PTRACE_SINGLEBLOCK). the PT_ aliases follow glibc headers, otherwise the definitions come from linux uapi headers except ones that are skipped in glibc and there is no real kernel support (s390x PTRACE_*_AREA) or need special type definitions (mips PTRACE_*_WATCH_*) or only relevant for linux 2.4 compatibility (PTRACE_OLDSETOPTIONS).
* sys/ptrace.h: add missing PTRACE_EVENT_STOPSzabolcs Nagy2018-07-171-0/+1
| | | | | | | | new in linux v3.1 commit 3544d72a0e10d0aa1c1bd59ed77a53a59cdc12f7 changed in linux v3.4 commit 5cdf389aee90109e2e3d88085dea4dd5508a3be7 A tracer recieves this event in the waitpid status of a PTRACED_SEIZED process.
* uchar.h: define char16_t and char32_t for old c++Szabolcs Nagy2018-07-171-1/+3
| | | | | | | | including uchar.h in c++ code is only well defined in c++11 onwards where char16_t and char32_t type definitions must be hidden since they are keywords. however some c++ code compiled for older c++ standard include uchar.h too and they need the typedefs, this fix makes such code work.
* add ST_RELATIME to statvfs.hRich Felker2018-07-121-0/+1
|
* add explicit_bzero implementationDavid Carlier2018-06-261-0/+1
| | | | | | | | | maintainer's note: past sentiment was that, despite being imperfect and unable to force clearing of all possible copies of sensitive data (e.g. in registers, register spills, signal contexts left on the stack, etc.) this function would be added if major implementations agreed on it, which has happened -- several BSDs and glibc all include it.
* fix value of SO_PEERSEC on mips archsRich Felker2018-06-261-1/+1
| | | | adapted from patch by Matthias Schiffer.
* add memfd_create syscall wrapperSzabolcs Nagy2018-06-201-0/+5
| | | | memfd_create was added in linux v3.17 and glibc has api for it.
* add mlock2 linux syscall wrapperSzabolcs Nagy2018-06-201-3/+8
| | | | | | | | 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 speculation control prctls from linux v4.17Szabolcs Nagy2018-06-191-0/+9
| | | | | | | PR_{SET,GET}_SPECULATION_CTRL controls speculation related vulnerability mitigations, new in commits b617cfc858161140d69cc0b5cc211996b557a1c7 356e4bfff2c5489e016fdb925adbf12a1e3950ee
* add ETH_P_PREAUTH ethertype from linux v4.17Szabolcs Nagy2018-06-191-0/+1
| | | | added in linux commit 4fe0de5b143762d327bfaf1d7be7c5b58041a18c
* add TCP_NLA_* from linux v4.17Szabolcs Nagy2018-06-191-0/+10
| | | | | | | | new and missing netlink attributes types for SCM_TIMESTAMPING_OPT_STATS, new ones were added in commits 7156d194a0772f733865267e7207e0b08f81b02b be631892948060f44b1ceee3132be1266932071e 87ecc95d81d951b0984f2eb9c5c118cb68d0dce8
* add {MSG,SEM,SHM}_STAT_ANY from linux v4.17Szabolcs Nagy2018-06-193-0/+3
| | | | | | | | introduced to stat ipc objects without permission checks since the info is available in /proc/sysvipc anyway, new in linux commits 23c8cec8cf679b10997a512abb1e86f0cedc42ba a280d6dc77eb6002f269d58cd47c7c7e69b617b6 c21a6970ae727839a2f300cd8dd957de0d0238c3
* add MAP_FIXED_NOREPLACE from linux v4.17Szabolcs Nagy2018-06-191-0/+1
| | | | | | | to map at a fixed address without unmapping underlying mappings (fails with EEXIST unlike MAP_FIXED), new in linux commits 4ed28639519c7bad5f518e70b3284c6e0763e650 and a4ff8e8620d3f4f50ac4b41e8067b7d395056843.
* sys/ptrace.h: add PTRACE_SECCOMP_GET_METADATA from linux v4.16Szabolcs Nagy2018-06-191-1/+7
| | | | | | | | to get seccomp state for checkpoint restore. added in linux commit 26500475ac1b499d8636ff281311d633909f5d20 struct tag follows the glibc api and ptrace_peeksiginfo_args got changed too accordingly.
* netinet/if_ether.h: add ETH_TLEN from linux v4.16Szabolcs Nagy2018-06-191-0/+1
| | | | | octets in ethernet type field added in linux commit 4bbb3e0e8239f9079bf1fe20b3c0cb598714ae61
* netinet/if_ether.h: add ETH_P_ERSPAN2 from linux v4.16Szabolcs Nagy2018-06-191-0/+1
| | | | | protocol number for erspan v2 support added in linux commit f551c91de262ba36b20c3ac19538afb4f4507441
* sys/epoll.h: add EPOLLNVAL from linux v4.16Szabolcs Nagy2018-06-191-0/+1
| | | | | | added to uapi in commit 65aaf87b3aa2d049c6b9fd85221858a895df3393 used since commit a9a08845e9acbd224e4ee466f5c1275ed50054e8, which renamed POLL* to EPOLL* in the kernel.
* add missing m68k relocation types in elf.hRich Felker2018-06-121-1/+19
|
* fix default feature profile in tar.hRich Felker2018-03-281-0/+2
| | | | | | | commit d93c0740d86aaf7043e79b942a6c0b3f576af4c8 added use of feature test macros without including features.h, causing a definition that should be exposed in the default profile, TSVTX, to appear only when _XOPEN_SOURCE or higher is explicitly defined.
* explicitly use signed keyword to define intNN_t and derivative typesRich Felker2018-03-121-4/+4
| | | | | | | | | | | | | | | | | | | | standing alone, both the signed and int keywords identify the same type, a (signed) int. however the C language has an exception where, when the lone keyword int is used to declare a bitfield, it's implementation-defined whether the bitfield is signed or unsigned. C11 footnote 125 extends this implementation-definedness to typedefs, and DR#315 extends it to other integer types (for which support with bitfields is implementation-defined). while reasonable ABIs (all the ones we support) define bitfields as signed by default, GCC and compatible compilers offer an option -funsigned-bitfields to change the default. while any signed types defined without explicit use of the signed keyword are affected, the stdint.h types, especially intNN_t, have a natural use in bitfields. ensure that bitfields defined with these types always have the correct signedness regardless of compiler & flags used. see also GCC PR 83294.
* remove spurious const keyword in sigqueue declarationRich Felker2018-03-101-1/+1
| | | | | | this must have been taken from POSIX without realizing that it was meaningless. the resolution to Austin Group issue #844 removed it from the standard.
* fix minor namespace issue in unistd.hRich Felker2018-03-101-2/+1
| | | | | | the F_* macros associated with the lockf function are XSI-shaded (like the lockf function itself) and should only be exposed when the function is.
* fix minor namespace issue in tar.hRich Felker2018-03-101-0/+2
| | | | TSVTX is XSI-shaded.
* fix minor namespace issues in limits.hRich Felker2018-03-101-5/+10
| | | | PAGE_SIZE, NZERO, and NL_LANGMAX are XSI-shaded.
* reverse definition dependency between PAGESIZE and PAGE_SIZERich Felker2018-03-101-2/+2
| | | | | | PAGESIZE is actually the version defined in POSIX base, with PAGE_SIZE being in the XSI option. use PAGESIZE as the underlying definition to facilitate making exposure of PAGE_SIZE conditional.
* fix aliasing violations in fgetpos/fsetposRich Felker2018-02-241-0/+1
| | | | | | | | | | | | | add a member of appropriate type to the fpos_t union so that accesses are well-defined. use long long instead of off_t since off_t is not always exposed in stdio.h and there's no namespace-clean alias for it. access is still performed using pointer casts rather than by naming the union member as a matter of style; to the extent possible, the naming of fields in opaque types defined in the public headers is not treated as an API contract with the implementation. access via the pointer cast is valid as long as the union has a member of matching type.
* add getentropy functionRich Felker2018-02-231-0/+1
| | | | | | | based loosely on patch by Hauke Mehrtens; converted to wrap the public API of the underlying getrandom function rather than direct syscalls, so that if/when a fallback implementation of getrandom is added it will automatically get picked up by getentropy too.
* add getrandom syscall wrapperHauke Mehrtens2018-02-221-0/+19
| | | | | This syscall is available since Linux 3.17 and was also implemented in glibc in version 2.25 using the same interfaces.
* elf.h: add DT_SYMTAB_SHNDXSzabolcs Nagy2018-02-221-1/+2
| | | | | | | it's a recent addition to elf gabi: http://sco.com/developers/gabi/latest/revision.html based on discussions at https://sourceware.org/bugzilla/show_bug.cgi?id=15835
* elf.h: syncronize DF_1_ flags with binutilsSzabolcs Nagy2018-02-221-0/+2
| | | | | DF_1_STUB and DF_1_PIE were added in binutils-gdb commit 5c383f026242d25a3c21fdfda42e5ca218b346c8
* elf.h: update NT_* coredump elf notes for linux v4.15Szabolcs Nagy2018-02-221-0/+21
| | | | | | | | | NT_ARM_SVE and NT_S390_RI_CB are new in linux commits 43d4da2c45b2f5d62f8a79ff7c6f95089bb24656 and 262832bc5acda76fd8f901d39f4da1121d951222 the rest are older. musl missed NT_PRFPREG because it followed the glibc api: https://sourceware.org/bugzilla/show_bug.cgi?id=14890
* elf.h: add PPC64_OPT_LOCALENTRYSzabolcs Nagy2018-02-221-0/+1
| | | | | allows calling extern functions without saving r2, for details see glibc commit 0572433b5beb636de1a49ec6b4fdab830c38cdc5
* elf.h: add AT_* auxval macros for cache geometrySzabolcs Nagy2018-02-221-0/+8
| | | | | AT_L1I_*, AT_L1D_*, AT_L2_* and AT_L3_* were added in linux v4.11 for powerpc in commit 98a5f361b8625c6f4841d6ba013bbf0e80d08147.
* sys/prctl.h: add new PR_SVE_* macros from linux v4.15Szabolcs Nagy2018-02-221-0/+6
| | | | | | | PR_SVE_SET_VL and PR_SVE_GET_VL controls are new in linux commit 2d2123bc7c7f843aa9db87720de159a049839862 related PR_SVE_* macros were added in 7582e22038a266444eb87bc07c372592ad647439
* netinet/in.h: add new IPV6_FREEBIND from linux v4.15Szabolcs Nagy2018-02-221-0/+1
| | | | | new socekt option for AF_INET6 SOL_RAW sockets, added in linux commit 84e14fe353de7624872e582887712079ba0b2d56
* netinet/tcp.h: add TCP_* socket options from linux v4.15Szabolcs Nagy2018-02-221-0/+2
| | | | | TCP_FASTOPEN_KEY is new in 1fba70e5b6bed53496ba1f1f16127f5be01b5fb6 TCP_FASTOPEN_NO_COOKIE is new in 71c02379c762cb616c00fd5c4ed253fbf6bbe11b
* add MAP_SYNC and MAP_SHARED_VALIDATE from linux v4.15Szabolcs Nagy2018-02-221-0/+2
| | | | | | | | for synchronous page faults, new in linux commit 1c9725974074a047f6080eecc62c50a8e840d050 and b6fb293f2497a9841d94f6b57bd2bb2cd222da43 note that only targets that use asm-generic/mman.h have this new flag defined, so undef it on other targets (mips*, powerpc*).
* netinet/tcp.h: add tcp_diag_md5sig struct from linux v4.14Szabolcs Nagy2018-02-221-0/+8
| | | | | for querying tcp md5 signing keys. new in linux commit c03fa9bcacd9ac04595cc13f34f3445f0a5ecf13
* sys/{mman,shm}.h: add {MAP,SHM}_HUGE_ macros from linux uapiSzabolcs Nagy2018-02-222-0/+26
| | | | | | | | | | | | | *_HUGE_SHIFT, *_HUGE_2MB, *_HUGE_1GB are documented in the man page, so add all of the *_HUGE_* macros from linux uapi. if MAP_HUGETLB is set, top bits of the mmap flags encode the page size. see the linux commit aafd4562dfee81a40ba21b5ea3cf5e06664bc7f6 if SHM_HUGETLB is set, top bits of the shmget flags encode the page size. see the linux commit 4da243ac1cf6aeb30b7c555d56208982d66d6d33 *_HUGE_16GB is defined unsigned to avoid signed left shift ub.
* netinet/if_ether.h: add new ETH_P_ macros from linux v4.14Szabolcs Nagy2018-02-221-0/+4
| | | | | | | | new ethertypes in linux v4.14: ETH_P_ERSPAN new in 84e54fe0a5eaed696dee4019c396f8396f5a908b ETH_P_IFE new in 2804fd3af6ba5ae5737705b27146455eabe2e2f8 ETH_P_NSH new in 155e6f649757c902901e599c268f8b575ddac1f8 ETH_P_MAP new in 7373ae7e8f0bf2c0718422481da986db5058b005
* net/if_arp.h: add ARPHRD_RAWIP from linux v4.14Szabolcs Nagy2018-02-221-0/+1
| | | | new in linux commmit cdf4969c42a6c1a376dd03a9e846cf638d3cd4b1
* signal.h: add missing SIGTRAP si_codesSzabolcs Nagy2018-02-221-0/+2
| | | | | TRAP_BRANCH and TRAP_HWBKPT new in linux commit da654b74bda14c45a7d98c731bf3c1a43b6b74e2
* sys/mman.h: add MADV_WIPEONFORK from linux v4.14Szabolcs Nagy2018-02-221-0/+2
| | | | | allows zeroing anonymous private pages inherited by a child process. new in linux commit d2cd9ede6e193dd7d88b6d27399e96229a551b19
* sys/socket.h: add MSG_ZEROCOPY from linux v4.14Szabolcs Nagy2018-02-221-0/+2
| | | | | | | MSG_ZEROCOPY socket send flag avoids copy in the kernel new in linux commit 52267790ef52d7513879238ca9fac22c1733e0e3 SO_ZEROCOPY socket option enables MSG_ZEROCOPY if availale new in linux commit 76851d1212c11365362525e1e2c0a18c97478e6b