1021 Commits
Author SHA1 Message Date
sisungo d65988fcf0 feat: adapt semios filesystem layout
Signed-off-by: sisungo <[email protected]>
2026-07-18 21:20:39 +08:00
sisungo 1c8ee1fa29 feat: update upstream musl libc to v1.2.6 2026-06-27 13:16:53 +08:00
Michal BiesekandRich Felker 19f9aeaaba sys/mman.h: add MADV_COLLAPSE from linux v6.1
Add madvise flag which performs a best-effort synchronous
collapse of the native pages mapped by the memory range
into Transparent Huge Pages (THPs)
see
  linux commit 7d8faaf155454f8798ec56404faca29a82689c77
  mm/madvise: introduce MADV_COLLAPSE sync hugepage collapse
2026-03-19 09:57:30 -04:00
Rich Felker 56df2e1fc1 sys/mman.h: add MADV_DONTNEED_LOCKED from linux v6.0
this flag works like MADV_DONTNEED but also applies to locked memory
ranges.

see
  linux commit 9457056ac426e5ed0671356509c8dcce69f8dee0
  mm: madvise: MADV_DONTNEED_LOCKED
2026-03-19 09:56:42 -04:00
Michal BiesekandRich Felker bb5693fa5e sys/mman.h: add MADV_POPULATE_(READ|WRITE) from linux v5.14
Add madvise flags to populate(prefault) page tables
see
  linux commit 4ca9b3859dac14bbef0c27d00667bb5b10917adb
  mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables
2026-03-15 16:23:20 -04:00
Jingyun HuaandRich Felker 38b00812ef loongarch64: add new reloc types and NT_LOONGARCH_HW_* into elf.h
These new LoongArch reloc types(101 to 126) have been added in
LoongArch psABI v2.30 and NT_LOONGARCH_HW_BREAK/NT_LOONGARCH_HW_WATCH
sync with Linux 6.12 elf.h.
2026-03-10 23:37:14 -04:00
sisungo 475334f2db feat: add rpmalloc 2026-02-23 13:16:42 +08:00
sisungo 9ed6813222 fix: stdatomic.h compatibility with gcc -std=c11/c17/...
Newer versions of gcc has __has_feature(x) macro, too, and returns
true on c_atomic, though it does not support Clang-flavored atomic
builtins.
2026-02-22 15:52:46 +08:00
sisungo ccca821d4e fix: remove stdckdint.h cplusplus code to reduce size 2026-02-22 14:19:26 +08:00
sisungo 1d717f1afd feat: add C23 stdckdint.h 2026-02-22 14:05:01 +08:00
sisungo e7e10be26a feat: support C11 atomics 2026-02-22 13:01:19 +08:00
Rich Felker a6244de1c9 fix erroneous definition of IN6_IS_ADDR_V4COMPAT
v4-compatible addresses in ipv6 are a deprecated feature where the
high 96 bits are all zero and an ipv4 address is stored in the low
32 bits. however, since :: and ::1 are the unspecified and loopback
addresses, these two particular values are excluded from the
definition of the v4-compat class.

our version of the macro incorrectly assessed this condition by
checking only the high 96 and low 8 bits. this incorrectly excluded
the v4compat version of any ipv4 address ending in .1, not just ::1.

rather than writing out non-obvious or error-prone conditions on the
individual address bytes, just express the "not :: or ::1" condition
naturally using the existing IN6_IS_ADDR_UNSPECIFIED and
IN6_IS_ADDR_LOOPBACK macros, after checking that the high 96 bits are
all zero. any vaguely reasonable compiler will collapse out the
redundant tests of the upper bits as part of CSE.
2025-07-30 09:32:02 -04:00
Rich Felker bd981f3342 elf.h: add AT_HWCAP3 and AT_HWCAP4
there are probably more new auxv keys that should be added, but these
are added now specifically because we may need to mask them.
2025-07-12 21:48:59 -04:00
J. NeuschäferandRich Felker fcdff46a32 statx: add Linux 6.11 fields/constants
As of Linux 6.11, these fields and mask macros have been added to
include/uapi/linux/stat.h.
2025-06-13 14:30:42 -04:00
Rich Felker 00fb7107ca shadow.h: remove declaration of function not implemented 2025-02-21 19:32:27 -05:00
Rich Felker 1a98576401 sched.h: reduce namespace conflicts in _GNU_SOURCE profile
we have the cpuset macros call calloc/free/memset/memcmp directly so
that they don't depend on any further ABI surface. this is not
namespace-clean, but only affects the _GNU_SOURCE feature profile,
which is not intended to be namespace-clean. nonetheless, reports come
up now and then of things which are gratuitously broken, usually when
an application has wrapped malloc with macros.

this patch parenthesizes the function names so that function-like
macros will not be expanded, and removes the unused declaration of
memcpy. this is not a complete solution, but it should improve things
for affected applications, particularly ones which are not even trying
to use the cpuset interfaces which got them just because g++ always
defines _GNU_SOURCE.
2025-01-13 08:31:02 -05:00
Xing LiandRich Felker 61399d4bd0 loongarch64: add TLSDESC support 2024-10-22 20:36:09 -04:00
Khem RajandRich Felker 047a16398b sys/stat.h: fix typo in statx member name stx_dio_offset_align
This was added in 23ab04a863
2024-10-12 21:33:41 -04:00
Rich Felker 23ab04a863 statx: add new struct statx fields and corresponding mask macros 2024-09-13 17:21:17 -04:00
Rich Felker dd1e63c363 syslog: revert LOG_FAC/LOG_FACMASK changes
commit 895736d49b made these changes
along with fixing a real bug in LOG_MAKEPRI. based on further
information, they do not seem to be well-motivated or in line with
policy.

the result of LOG_FAC is not a meaningful facility value if we shift
it down like before, but apparently the way it is used by applications
is as an index into an array of facility names. moreover, all
historical systems which define it do so with the shift. as it is a
nonstandard interface, there is no justification for providing a macro
by the same name that is incompatible with historical practice.

the value of LOG_FACMASK likewise is 0x3f8 on all historical systems
checked. while only 5 bits are used for existing facility codes, the
convention seems to be that all 7 bits belong to the facility field
and theoretically could be used to expand to having more facilities.
that seems unlikely to happen, but there is no reason to make a
gratuitously incompatible change here.
2024-07-05 13:22:25 -04:00
Joe DamatoandRich Felker 1b97d0060b sys/epoll.h: add epoll ioctls
add two ioctls to get and set struct epoll_params to allow users to
control epoll based busy polling of network sockets.

added to uapi in commit 18e2bf0edf4dd88d9656ec92395aa47392e85b61 (Linux
kernel 6.9 and newer).
2024-06-22 16:53:06 -04:00
Rich Felker 895736d49b syslog: fix incorrect LOG_MAKEPRI and LOG_FAC[MASK] macros
these are nonstandard and unnecessary for using the associated
functionality, but resulted in applications that used them
malfunctioning.

patch based on proposed fix by erny hombre.
2024-06-13 11:48:40 -04:00
Tony AmbardarandRich Felker 05ce67fea9 add renameat2 linux syscall wrapper
This syscall is available since Linux 3.15 and also implemented in
glibc from version 2.28. It is commonly used in filesystem or security
contexts.

Constants RENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT are
guarded by _GNU_SOURCE as with glibc.
2024-05-23 09:13:49 -04:00
Gonzalo AlvarezandRich Felker 84015cee17 fix typo that broke sys/reg.h and sys/user.h
commit 7019fbe103 and commit
e709a6f07a misspelled bits/alltypes.h.
2024-05-11 17:52:04 -04:00
Rich Felker 1b0d48517f implement posix_getdents adopted for next issue of POSIX
this interface was added as the outcome of Austin Group tracker issue
697. no error is specified for unsupported flags, which is probably an
oversight. for now, EOPNOTSUPP is used so as not to overload EINVAL.
2024-05-08 08:50:03 -04:00
Rich Felker 7019fbe103 sys/user.h: derive __WORDSIZE from __LONG_MAX
previously, only a few archs defined it here. this change makes the
presence consistent across all archs, and reduces the amount of header
duplication (and potential for future inconsistency) between archs.
2024-05-07 09:11:10 -04:00
Rich Felker e709a6f07a sys/reg.h: derive __WORDSIZE from __LONG_MAX
this removes an otherwise-unnecessary bits header from most archs,
replacing it with an empty generic version.
2024-05-07 09:08:31 -04:00
Rich Felker 29b216b2f2 unistd.h: derive ILP32/LP64 macros from __LONG_MAX instead of arch bits 2024-05-07 09:01:47 -04:00
Rich Felker cbf1c7b605 add missing STATX_ATTR_* macros omitted when statx was added
commit b817541f1c added statx and the
mask constant macros, but not the stx_attributes[_mask] ones.
2024-04-24 13:26:03 -04:00
Rich Felker bdc9a9ff6f uio.h: add RWF_NOAPPEND flag for pwritev2
added in linux kernel commit 73fa7547c70b32cc69685f79be31135797734eb6.

this is added now as a prerequisite for fixing pwrite/pwritev behavior
for O_APPEND files.
2024-03-13 10:39:37 -04:00
Rich Felker a7239cbc1b switch __STDC_UTF_{16,32}__ macro definitions from #undef to #ifndef
originally, compilers did not provide these macros and we had to
provide them ourselves. this meant we were redefining them, which was
technically invalid unless the token sequence of the original
definition matched exactly.

the original patch proposed by Jules Maselbas to fix this made the
definitions conditional on them not already being defined; however I
suggested using #undef to avoid any possibly-wrong definitions already
in place and ensure that the definitions are 1. the version adopted as
commit 8b70486807 made this change.

unfortunately, gcc is loud about not liking #undef of any __STDC_*
macro name, and while warnings are suppressed in the system include
path, there is apparently no way to suppress this warning if the
system include dir has also been provided via -I.

while normally we don't go out of our way to satisfy warnings over
style in the public headers, in this case, it seems to be a matter of
disagreement over contract of which part of "the implementation" is
entitled to define or undefine macros belonging to the implementation,
and it's quite reasonable to conclude that the compiler may reject
attempts to undefine them.

this commit reverts to the originally-submitted version of the patch
making the definitions conditional.
2024-02-26 14:14:08 -05:00
Duncan BellamyandRich Felker b817541f1c add statx interface using syscall, fallback to fstatat 2024-02-24 12:27:09 -05:00
Hongliang WangandRich Felker 522bd54eda add loongarch64 port
Author: Xiaojuan Zhai <[email protected]>
Author: Meidan Li <[email protected]>
Author: Guoqi Chen <[email protected]>
Author: Xiaolin Zhao <[email protected]>
Author: Fan peng <[email protected]>
Author: Jiantao Shan <[email protected]>
Author: Xuhui Qiang <[email protected]>
Author: Jingyun Hua <[email protected]>
Author: Liu xue <[email protected]>
Author: Hongliang Wang <[email protected]>
2024-02-16 09:33:10 -05:00
Rich Felker cf91e9b393 fix erroneous feature test macro check for ppoll
commit f247462b08 incorrectly hid ppoll
in the presence of _GNU_SOURCE due to an oversight that defining
_BSD_SOURCE does not implicitly define _GNU_SOURCE. at present,
headers still have to explicitly check for each feature profile level;
this may be changed at some point in the future via features.h, but
has not been changed yet.
2024-02-08 21:57:38 -05:00
Jules MaselbasandRich Felker 8b70486807 stdc-predef.h: prevent redefining __STDC_UTF_{16,32}__ macros
Undefine any previous __STDC_UTF_{16,32}__ macros before defining
them to prenvent any warnings of redefining macros.

This happens as a result of some compiler versions defining the macros
themselves.
2024-02-03 20:04:42 -05:00
Elliott HughesandRich Felker 15aa7abd34 elf.h: add NT_RISCV_CSR and NT_RISCV_VECTOR constants
See Linux commit 9300f00439743c4a34d735e1a27118eb68a1504e ("RISC-V: Add
ptrace support for vectors").
2024-02-03 19:48:25 -05:00
Fangrui SongandRich Felker 25c4123629 elf.h: update RISC-V relocation types
Note: Some relocation types were only used by binutils and
accidentally exposed to previous versions of psABI. One of the values
has been reused by GOT32_PCREL.
2024-02-03 19:45:53 -05:00
Rich Felker 81cced6ebe add preadv2 and pwritev2 syscall wrappers, flag value macros 2024-01-25 12:02:34 -05:00
Rich Felker f247462b08 expose ppoll in default feature profile
the ppoll function has been accepted as a future part of the standard
as the outcome of Austin Group tracker issue 1263. at some point it
should be exposed unconditionally, but for now, expose it in the
default feature profile.
2024-01-21 17:22:50 -05:00
Rich Felker 725e17ed6d remove non-prototype declaration of basename from string.h
commit 37bb3cce45 suppressed the
declaration for C++, where it is wrongly interpreted as declaring the
function as taking no arguments. with C23 removing non-prototype
declarations, that problem is now also relevant to C.

the non-prototype declaration for basename originates with commit
06aec8d715, where it was designed to
avoid conflicts with programs which declare basename with the GNU
signature taking const char *. that change was probably misguided, as
it represents not only misaligned expectations with the caller, but
also undefined behavior (calling a function that's been declared with
the wrong type).

we could opt to fix the declaration, but since glibc, with the
gratuitously incompatible GNU-basename function, seems to be the only
implementation that declares it in string.h, it seems better to just
remove the declaration. this provides some warning if applications are
being built expecting the GNU behavior but not getting it. if we
declared it here, it would only produce a warning if the caller also
declares it themselves (rare) or if the caller attempts to pass a
const-qualified pointer.
2023-11-06 08:26:19 -05:00
Violet PurcellandRich Felker 6be76895f6 elf.h: add typedefs for Elf64_Relr and Elf32_Relr
These were overlooked when DT_RELR was added in commit
d32dadd60e, potentially breaking
software that treats presence of the DT_RELR macro as implying they
exist.
2023-11-06 08:02:59 -05:00
набandRich Felker 7291c6c66a statvfs: allocate spare for f_type
This is the only missing part in struct statvfs. The LSB calls
[f]statfs() deprecated, and its weird types are definitely
off-putting. However, its use is required to get f_type.

Instead, allocate one of the six spares to f_type, copied directly
from struct statfs. This then becomes a small extension to the
standard interface on Linux, instead of two different interfaces, one
of which is quite odd due to being an ABI type, and there no longer is
any reason to use statfs().

The underlying kernel type is a mess, but all architectures agree on u32
(or more) for the ABI, and all filesystem magicks are 32-bit integers.

Since commit 6567db65f4 (prior to
1.0.0), the spare slots have been zero-filled, so on all versions that
may be reasonably be encountered in the wild, applications can rely on
a nonzero f_type as indication that the new field has been filled in.
2023-08-19 14:46:20 -04:00
Rich Felker 718f363bc2 move fallocate64 declaration under _LARGEFILE64_SOURCE feature test
overlooked in commit 25e6fee27f,
probably because the fallocate function itself is nonstandard and
already under _GNU_SOURCE.
2023-05-02 11:45:28 -04:00
Rich Felker bc695a5ac1 fix incorrect unit for CPU_SETSIZE macro
this macro is supposed to reflect the number of members (bits) in
cpu_set_t, not the storage size (bytes).
2023-02-23 10:10:44 -05:00
Rich Felker ea3b40a321 fix integer overflow in WIFSTOPPED macro
the result of the 0xffff mask with the exit status could have bit 15
set, in which case multiplying by 0x10001 overflows 32-bit signed int.
making the multiply unsigned avoids the overflow. it also changes the
sign extension behavior of the subsequent >> operation, but the
affected bits are all unwanted anyway and all discarded by the cast to
short.
2023-02-08 16:42:28 -05:00
Rich Felker a4b0a665b8 expose memmem under baseline POSIX feature profile
memmem has been adopted for the next issue of POSIX (outcome of
tracker item 1061). since mem* is in the reserved namespace for
string.h it's already fully conforming to expose it by default, so
just do so.
2023-01-06 06:33:19 -05:00
Fangrui SongandRich Felker c5f4b2dfea elf.h: add ELFCOMPRESS_ZSTD 2022-12-14 09:34:32 -05:00
Rich Felker 25e6fee27f remove LFS64 programming interfaces (macro-only) from _GNU_SOURCE
these badly pollute the namespace with macros whenever _GNU_SOURCE is
defined, which is always the case with g++, and especially tends to
interfere with C++ constructs.

as our implementation of these was macro-only, their removal cannot
affect any existing binaries. at the source level, portable software
should be prepared for them not to exist.

for now, they are left in place with explicit _LARGEFILE64_SOURCE.
this provides an easy temporary path for integrators/distributions to
get packages building again right away if they break while working on
a proper, upstreamable fix. the intent is that this be a very
short-term measure and that the macros be removed entirely in the next
release cycle.
2022-10-19 14:01:31 -04:00
Rich Felker 759bf785a8 arpa/nameser.h: update RR types list
our RR type list in arpa/nameser.h was badly outdated, and missing
important types for DNSSEC and DANE use, among other things.
2022-09-22 18:44:44 -04:00
Rich Felker 85050ac5a2 getaddrinfo: add EAI_NODATA error code to distinguish NODATA vs NxDomain
this was apparently omitted long ago out of a lack of understanding of
its importance and the fact that POSIX doesn't specify it. despite not
being officially standardized, however, it turns out that at least
AIX, glibc, NetBSD, OpenBSD, QNX, and Solaris document and support it.

in certain usage cases, such as implementing a DNS gateway on top of
the stub resolver interfaces, it's necessary to distinguish the case
where a name does not exit (NxDomain) from one where it exists but has
no addresses (or other records) of the requested type (NODATA). in
fact, even the legacy gethostbyname API had this distinction, which we
were previously unable to support correctly because the backend lacked
it.

apart from fixing an important functionality gap, adding this
distinction helps clarify to users how search domain fallback works
(falling back in cases corresponding to EAI_NONAME, not in ones
corresponding to EAI_NODATA), a topic that has been a source of
ongoing confusion and frustration.

as a result of this change, EAI_NONAME is no longer a valid universal
error code for getaddrinfo in the case where AI_ADDRCONFIG has
suppressed use of all address families. in order to return an accurate
result in this case, getaddrinfo is modified to still perform at least
one lookup. this will almost surely fail (with a network error, since
there is no v4 or v6 network to query DNS over) unless a result comes
from the hosts file or from ip literal parsing, but in case it does
succeed, the result is replaced by EAI_NODATA.

glibc has a related error code, EAI_ADDRFAMILY, that could be used for
the AI_ADDRCONFIG case and certain NODATA cases, but distinguishing
them properly in full generality seems to require additional DNS
queries that are otherwise not useful. on glibc, it is only used for
ip literals with mismatching family, not for DNS or hosts file results
where the name has addresses only in the opposite family. since this
seems misleading and inconsistent, and since EAI_NODATA already covers
the semantic case where the "name" exists but doesn't have any
addresses in the requested family, we do not adopt EAI_ADDRFAMILY at
this time. this could be changed at some point if desired, but the
logic for getting all the corner cases with AI_ADDRCONFIG right is
slightly nontrivial.
2022-09-20 18:09:42 -04:00