Commit Graph

655 Commits

Author SHA1 Message Date
Szabolcs Nagy ad85fcb568 add new si_lower and si_upper siginfo_t members
new in linux v3.19 commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83
used to report intel mpx bound violation information.
2015-03-04 14:50:52 -05:00
Rich Felker 9c3da8968d declare incomplete type struct itimerspec in timerfd.h
normally time.h would provide a definition for this struct, but
depending on the feature test macros in use, it may not be exposed,
leading to warnings when it's used in the function prototypes.
2015-03-04 14:38:08 -05:00
Rich Felker 91a3bd743e fix preprocessor error introduced in poll.h in last commit 2015-03-04 14:15:44 -05:00
Trutz Behn f5011c62c3 fix POLLWRNORM and POLLWRBAND on mips
these macros have the same distinct definition on blackfin, frv, m68k,
mips, sparc and xtensa kernels. POLLMSG and POLLRDHUP additionally
differ on sparc.
2015-03-04 12:09:37 -05:00
Rich Felker 56fbaa3bbe make all objects used with atomic operations volatile
the memory model we use internally for atomics permits plain loads of
values which may be subject to concurrent modification without
requiring that a special load function be used. since a compiler is
free to make transformations that alter the number of loads or the way
in which loads are performed, the compiler is theoretically free to
break this usage. the most obvious concern is with atomic cas
constructs: something of the form tmp=*p;a_cas(p,tmp,f(tmp)); could be
transformed to a_cas(p,*p,f(*p)); where the latter is intended to show
multiple loads of *p whose resulting values might fail to be equal;
this would break the atomicity of the whole operation. but even more
fundamental breakage is possible.

with the changes being made now, objects that may be modified by
atomics are modeled as volatile, and the atomic operations performed
on them by other threads are modeled as asynchronous stores by
hardware which happens to be acting on the request of another thread.
such modeling of course does not itself address memory synchronization
between cores/cpus, but that aspect was already handled. this all
seems less than ideal, but it's the best we can do without mandating a
C11 compiler and using the C11 model for atomics.

in the case of pthread_once_t, the ABI type of the underlying object
is not volatile-qualified. so we are assuming that accessing the
object through a volatile-qualified lvalue via casts yields volatile
access semantics. the language of the C standard is somewhat unclear
on this matter, but this is an assumption the linux kernel also makes,
and seems to be the correct interpretation of the standard.
2015-03-03 22:50:02 -05:00
Rich Felker 102f6a01e2 add new masked cancellation mode
this is a new extension which is presently intended only for
experimental and internal libc use. interface and behavior details may
change subject to feedback and experience from using it internally.

the basic concept for the new PTHREAD_CANCEL_MASKED state is that the
first cancellation point to observe the cancellation request fails
with an errno value of ECANCELED rather than acting on cancellation,
allowing the caller to process the status and choose whether/how to
act upon it.
2015-02-21 22:05:15 -05:00
Szabolcs Nagy 70572dce07 add new socket options SO_INCOMING_CPU, SO_ATTACH_BPF, SO_DETACH_BPF
these socket options are new in linux v3.19, introduced in commit
2c8c56e15df3d4c2af3d656e44feb18789f75837 and commit
89aa075832b0da4402acebd698d0411dcc82d03e

with SO_INCOMING_CPU the cpu can be queried on which a socket is
managed inside the kernel and optimize polling of large number of
sockets accordingly.

SO_ATTACH_BPF lets eBPF programs (created by the bpf syscall) to
be attached to sockets.
2015-02-09 22:22:13 +01:00
Trutz Behn 2d67ae923d move MREMAP_MAYMOVE and MREMAP_FIXED out of bits
the definitions are generic for all kernel archs. exposure of these
macros now only occurs on the same feature test as for the function
accepting them, which is believed to be more correct.
2015-01-30 22:02:23 -05:00
Szabolcs Nagy 11ac2a6e81 add new prctl command PR_SET_MM_MAP to sys/prctl.h
PR_SET_MM_MAP was introduced as a subcommand for PR_SET_MM in
linux v3.18 commit f606b77f1a9e362451aca8f81d8f36a3a112139e

the associated struct type is replicated in sys/prctl.h using
libc types.

example usage:

 struct prctl_mm_map *p;
 ...
 prctl(PR_SET_MM, PR_SET_MM_MAP, p, sizeof *p);

the kernel side supported struct size may be queried with
the PR_SET_MM_MAP_SIZE subcommand.
2014-12-23 01:46:22 -05:00
Rich Felker 91f15e2d0d move wint_t definition to the shared part of alltypes.h.in 2014-12-21 02:43:35 -05:00
Rich Felker dac4fc49ae fix signedness of UINT32_MAX and UINT64_MAX at the preprocessor level
per the rules for hexadecimal integer constants, the previous
definitions were correctly treated as having unsigned type except
possibly when used in preprocessor conditionals, where all artithmetic
takes place as intmax_t or uintmax_t. the explicit 'u' suffix ensures
that they are treated as unsigned in all contexts.
2014-12-21 02:30:29 -05:00
Felix Janda 4b2cb37770 add login_tty function 2014-12-20 20:13:27 -05:00
Rich Felker aee9b15262 fix signedness of WINT_MIN expression
since wint_t is unsigned, WINT_MIN needs to expand to an unsigned zero.
2014-12-17 16:52:37 -05:00
Rich Felker a9c2294eef make the definition of _Complex_I explicitly complex
it's unclear whether compilers which provide pure imaginary types
might produce a pure imaginary expression for 1.0fi. using 0.0f+1.0fi
ensures that the result is explicitly complex and makes this obvious
to human readers too.
2014-12-17 16:47:34 -05:00
Rich Felker 4075af4318 make the result of the cimag macro a non-lvalue
this change is not necessary but helps diagnose invalid code. based on
patch by Jens Gustedt.
2014-12-17 16:45:42 -05:00
Rich Felker 5ff2a118c6 fix definition of CMPLX macros in complex.h to work in constant expressions
based on patches by Jens Gustedt. these macros need to be usable in
static initializers, and the old definitions were not.

there is no portable way to provide correct definitions for these
macros unless the compiler supports pure imaginary types. a portable
definition is provided for this case even though there are presently
no compilers that can use it. gcc and compatible compilers provide a
builtin function that can be used, but clang fails to support this and
instead requires a construct which is a constraint violation and which
is only a constant expression as a clang-specific extension.

since these macros are a namespace violation in pre-C11 profiles, and
since no known pre-C11 compilers provide any way to define them
correctly anyway, the definitions have been made conditional on C11.
2014-12-17 16:43:09 -05:00
Rich Felker aac59c1164 add basic dns record parsing functions
based on patch by Timo Teräs, with some corrections to bounds checking
code and other minor changes.

while they are borderline scope creep, the functions added are fairly
small and are roughly the minimum code needed to use the results of
the res_query API without re-implementing error-prone DNS packet
parsing, and they are used in practice by some kerberos related
software and possibly other things. at this time there is no intent to
implement further nameser.h API functions.
2014-12-17 14:40:35 -05:00
Bobby Bingham f164875a84 don't shadow functions with macros in C++
C++ programmers typically expect something like "::function(x,y)" to work
and may be surprised to find that "(::function)(x,y)" is actually required
due to the headers declaring a macro version of some standard functions.

We already omit function-like macros for C++ in most cases where there is
a real function available. This commit extends this to the remaining
function-like macros which have a real function version.
2014-12-09 22:34:56 -05:00
Rich Felker a60457c84a suppress macro definitions of ctype functions under C++
based on patch by Sergey Dmitrouk.
2014-10-14 12:30:50 -04:00
Rich Felker ab9672ae73 implement uchar.h (C11 UTF-16/32 conversion) interfaces 2014-10-13 20:59:42 -04:00
Szabolcs Nagy a3763d64e0 add new linux file sealing api to fcntl.h
new in linux v3.17 commit 40e041a2c858b3caefc757e26cb85bfceae5062b
sealing allows some operations to be blocked on a file which makes
file access safer when fds are shared between processes (only
supported for shared mem fds currently)

flags:
F_SEAL_SEAL prevents further sealing
F_SEAL_SHRINK prevents file from shrinking
F_SEAL_GROW prevents file from growing
F_SEAL_WRITE prevents writes

fcntl commands:
F_GET_SEALS get the current seal flags
F_ADD_SEALS add new seal flags
2014-10-08 11:39:28 -04:00
Szabolcs Nagy a0c90b9773 add new IPV6_AUTOFLOWLABEL socket option in netinet/in.h
added in linux v3.17 commit 753a2ad54ef45e3417a9d49537c2b42b04a2e1be
enables automatic flow label generation on transmit
2014-10-08 11:38:25 -04:00
Rich Felker 5edbc6fe13 add _DEFAULT_SOURCE feature profile as an alias for _BSD_SOURCE
as a result of commit ab8f6a6e42, this
definition is now equivalent to the actual "default profile" which
appears immediately below in features.h, and which defines both
_BSD_SOURCE and _XOPEN_SOURCE.

the intent of providing a _DEFAULT_SOURCE, which glibc also now
provides, is to give applications a way to "get back" the default
feature profile when it was lost either by compiler flags that inhibit
it (such as -std=c99) or by library-provided predefined macros (such
as -D_POSIX_C_SOURCE=200809L) which may inhibit exposure of features
that were otherwise visible by default and which the application may
need. without _DEFAULT_SOURCE, the application had encode knowledge of
a particular libc's defaults, and such knowledge was fragile and
subject to bitrot.

eventually the names _GNU_SOURCE and _BSD_SOURCE should be phased out
in favor of the more-descriptive and more-accurate _ALL_SOURCE and
_DEFAULT_SOURCE, leaving the old names as aliases but using the new
ones internally. however this is a more invasive change that would
require extensive regression testing, so it is deferred.
2014-09-10 12:47:55 -04:00
Rich Felker f929493c49 fix _ALL_SOURCE logic to avoid possible redefinition of _GNU_SOURCE
this could be an error if _GNU_SOURCE was already defined differently
by the application.
2014-09-10 12:40:38 -04:00
Rich Felker ab8f6a6e42 fix places where _BSD_SOURCE failed to yield a superset of _XOPEN_SOURCE
the vast majority of these failures seem to have been oversights at
the time _BSD_SOURCE was added, or perhaps shortly afterward. the one
which may have had some reason behind it is omission of setpgrp from
the _BSD_SOURCE feature profile, since the standard setpgrp interface
conflicts with a legacy (pre-POSIX) BSD interface by the same name.
however, such omission is not aligned with our general policy in this
area (for example, handling of similar _GNU_SOURCE cases) and should
not be preserved.
2014-09-10 12:27:33 -04:00
Szabolcs Nagy 976bb28fa0 add new F_OFD_* macros to fcntl.h (open file description locks)
open file description locks are inherited across fork and only auto
dropped after the last fd of the file description is closed, they can be
used to synchronize between threads that open separate file descriptions
for the same file.

new in linux 3.15 commit 0d3f7a2dd2f5cf9642982515e020c1aee2cf7af6
2014-09-08 15:35:26 +02:00
Rich Felker b7cf71a190 add threads.h and needed per-arch types for mtx_t and cnd_t
based on patch by Jens Gustedt.

mtx_t and cnd_t are defined in such a way that they are formally
"compatible types" with pthread_mutex_t and pthread_cond_t,
respectively, when accessed from a different translation unit. this
makes it possible to implement the C11 functions using the pthread
functions (which will dereference them with the pthread types) without
having to use the same types, which would necessitate either namespace
violations (exposing pthread type names in threads.h) or incompatible
changes to the C++ name mangling ABI for the pthread types.

for the rest of the types, things are much simpler; using identical
types is possible without any namespace considerations.
2014-09-06 20:44:30 -04:00
Rich Felker 6eb19505bc add C11 timespec_get function, with associated time.h changes for C11
based on patch by Jens Gustedt for inclusion with C11 threads
implementation, but committed separately since it's independent of
threads.
2014-09-06 12:58:09 -04:00
Szabolcs Nagy 7ff804269b fix macros for LFS *64_t types in sys/stat.h, sys/types.h, glob.h
there is no blksize64_t (blksize_t is always long) but there are
fsblkcnt64_t and fsfilcnt64_t types in sys/stat.h and sys/types.h.
and glob.h missed glob64_t.
2014-09-05 16:03:07 -04:00
Szabolcs Nagy 70729de075 add static_assert and hide noreturn, alignas, alignof from C++
add static_assert and protect the other new C11 keyword macros
with #ifndef __cplusplus so they don't conflict with C++ keywords.
2014-08-27 02:55:54 -04:00
Szabolcs Nagy 18dde00713 add C11 floating-point characteristic macros to float.h
C11 introduced *_DECIMAL_DIG and *_HAS_SUBNORM macros.
2014-08-27 02:54:01 -04:00
Rich Felker 8d998a7b3b add malloc_usable_size function and non-stub malloc.h
this function is needed for some important practical applications of
ABI compatibility, and may be useful for supporting some non-portable
software at the source level too.

I was hesitant to add a function which imposes any constraints on
malloc internals; however, it turns out that any malloc implementation
which has realloc must already have an efficient way to determine the
size of existing allocations, so no additional constraint is imposed.

for now, some internal malloc definitions are duplicated in the new
source file. if/when malloc is refactored to put them in a shared
internal header file, these could be removed.

since malloc_usable_size is conventionally declared in malloc.h, the
empty stub version of this file was no longer suitable. it's updated
to provide the standard allocator functions, nonstandard ones (even if
stdlib.h would not expose them based on the feature test macros in
effect), and any malloc-extension functions provided (currently, only
malloc_usable_size).
2014-08-25 22:47:27 -04:00
Rich Felker 321f4fa906 add max_align_t definition for C11 and C++11
unfortunately this needs to be able to vary by arch, because of a huge
mess GCC made: the GCC definition, which became the ABI, depends on
quirks in GCC's definition of __alignof__, which does not match the
formal alignment of the type.

GCC's __alignof__ unexpectedly exposes the an implementation detail,
its "preferred alignment" for the type, rather than the formal/ABI
alignment of the type, which it only actually uses in structures. on
most archs the two values are the same, but on some (at least i386)
the preferred alignment is greater than the ABI alignment.

I considered using _Alignas(8) unconditionally, but on at least one
arch (or1k), the alignment of max_align_t with GCC's definition is
only 4 (even the "preferred alignment" for these types is only 4).
2014-08-20 17:20:14 -04:00
Szabolcs Nagy d146d4dc11 fix CPU_EQUAL macro in sched.h 2014-08-13 16:55:56 +02:00
Szabolcs Nagy b04971d91a add inline isspace in ctype.h as an optimization
isspace can be a bottleneck in a simple parser, inlining it
gives slightly smaller and faster code

src/locale/pleval.o already had this optimization, the size
change for other libc functions for i386 is

src/internal/intscan.o     2134    2118   -16
src/locale/dcngettext.o    1562    1552   -10
src/network/res_msend.o    1961    1940   -21
src/network/lookup_name.o  2627    2608   -19
src/network/getnameinfo.o  1814    1811    -3
src/network/lookup_serv.o   643     624   -19
src/stdio/vfscanf.o        2675    2663   -12
src/stdlib/atoll.o          117     107   -10
src/stdlib/atoi.o            95      91    -4
src/stdlib/atol.o            95      91    -4
src/time/strptime.o        1515    1503   -12
(TOTALS)                 432451  432321  -130
2014-08-13 16:47:51 +02:00
Clément Vasseur b1ae7b78bd make clearenv available with _BSD_SOURCE
glibc declares clearenv under _BSD_SOURCE, some applications might
depend on it being available this way.
2014-08-08 00:45:42 -04:00
Rich Felker ecc082c61b implement ffsl and ffsll functions
per the resolution of Austin Group issue #617, these are accepted for
XSI option in POSIX future and thus I'm treating them as standard
functions.
2014-07-31 02:38:23 -04:00
Rich Felker 38db09374a limit visibility of ffs function declaration to _XOPEN_SOURCE
per the standard, ffs is XSI shaded, whereas the other functions in
this header are in the base.
2014-07-31 02:33:17 -04:00
Szabolcs Nagy 871a09c86f add new PR_SET_THP_DISABLE and PR_GET_THP_DISABLE prctl flags
they can be used to set or query if transparent huge pages are disabled.
introduced in linux 3.15 commit a0715cc22601e8830ace98366c0c2bd8da52af52
2014-07-20 18:49:16 +02:00
Szabolcs Nagy 6119fa3269 add pacing rate information to the tcp_info struct in tcp.h
used by monitoring applications such as ss from iproute2
introduced in linux 3.15 commit 977cb0ecf82eb6d15562573c31edebf90db35163
2014-07-20 18:45:43 +02:00
Szabolcs Nagy 4a142db74f add new ethernet packet types ETH_P_80221, ETH_P_LOOPBACK
ETH_P_80221 is ethertype for IEEE Std 802.21 - Media Independent Handover Protocol
introduced in linux 3.15 commit b62faf3cdc875a1ac5a10696cf6ea0b12bab1596

ETH_P_LOOPBACK is the correct packet type for loopback in IEEE 802.3*
introduced in linux 3.15 commit 61ccbb684421d374fdcd7cf5d6b024b06f03ce4e

some defines were shuffled to be in ascending order and match the kernel header
2014-07-20 18:42:21 +02:00
Brent Cook ddddec106f add issetugid function to check for elevated privilege
this function provides a way for third-party library code to use the
same logic that's used internally in libc for suppressing untrusted
input/state (e.g. the environment) when the application is running
with privleges elevated by the setuid or setgid bit or some other
mechanism. its semantics are intended to match the openbsd function by
the same name.

there was some question as to whether this function is necessary:
getauxval(AT_SECURE) was proposed as an alternative. however, this has
several drawbacks. the most obvious is that it asks programmers to be
aware of an implementation detail of ELF-based systems (the aux
vector) rather than simply the semantic predicate to be checked. and
trying to write a safe, reliable version of issetugid in terms of
getauxval is difficult. for example, early versions of the glibc
getauxval did not report ENOENT, which could lead to false negatives
if AT_SECURE was not present in the aux vector (this could probably
only happen when running on non-linux kernels under linux emulation,
since glibc does not support linux versions old enough to lack
AT_SECURE). as for musl, getauxval has always properly reported
errors, but prior to commit 7bece9c209,
the musl implementation did not emulate AT_SECURE if missing, which
would result in a false positive. since musl actually does partially
support kernels that lack AT_SECURE, this was problematic.

the intent is that library authors will use issetugid if its
availability is detected at build time, and only fall back to the
unreliable alternatives on systems that lack it.

patch by Brent Cook. commit message/rationale by Rich Felker.
2014-07-19 21:39:18 -04:00
Stefan Kristiansson 200d15479c add or1k (OpenRISC 1000) architecture port
With the exception of a fenv implementation, the port is fully featured.
The port has been tested in or1ksim, the golden reference functional
simulator for OpenRISC 1000.
It passes all libc-test tests (except the math tests that
requires a fenv implementation).

The port assumes an or1k implementation that has support for
atomic instructions (l.lwa/l.swa).

Although it passes all the libc-test tests, the port is still
in an experimental state, and has yet experienced very little
'real-world' use.
2014-07-18 14:10:23 -04:00
Rich Felker 5474a34669 implement fmtmsg function
contributed by Isaac Dunham. this seems to be the last interface that
was missing for complete POSIX 2008 base + XSI coverage.
2014-06-21 19:24:15 -04:00
Rich Felker 70d9c303b3 remove hack in syslog.h that resulted in aliasing violations
this issue affected the prioritynames and facilitynames arrays which
are only provided when requested (usually by syslogd implementations)
and which are presently defined as compound literals. the aliasing
violation seems to have been introduced as a workaround for bad
behavior by gcc's -Wwrite-strings option, but it caused compilers to
completely optimize out the contents of prioritynames and
facilitynames since, under many usage cases, the aliasing rules prove
that the contents are never accessed.
2014-06-21 07:44:46 -04:00
Rich Felker acb7e049b8 implement sendmmsg and recvmmsg
these are not pure syscall wrappers because they have to work around
kernel API bugs on 64-bit archs. the workarounds could probably be
made somewhat more efficient, but at the cost of more complexity. this
may be revisited later.
2014-06-19 23:01:15 -04:00
Rich Felker bdad2fefb2 add support for ipv6 scope_id to getaddrinfo and getnameinfo
for all address types, a scope_id specified as a decimal value is
accepted. for addresses with link-local scope, a string containing the
interface name is also accepted.

some changes are made to error handling to avoid unwanted fallbacks in
the case where the scope_id is invalid: if an earlier name lookup
backend fails with an error rather than simply "0 results", this
failure now suppresses any later attempts with other backends.

in getnameinfo, a light "itoa" type function is added for generating
decimal scope_id results, and decimal port strings for services are
also generated using this function now so as not to pull in the
dependency on snprintf.

in netdb.h, a definition for the NI_NUMERICSCOPE flag is added. this
is required by POSIX (it was previously missing) and needed to allow
callers to suppress interface-name lookups.
2014-06-04 02:24:38 -04:00
Szabolcs Nagy 5f4c496693 fix POSIX namespace pollution in sys/types.h
int8_t, u_int8_t, etc types are moved under _BSD_SOURCE
2014-05-30 13:06:51 -04:00
Szabolcs Nagy c350468658 update netinet/in.h to match the current kernel uapi
from linux/in.h and linux/in6.h uapi headers the following
missing socket options were added:

IP_NODEFRAG - used with customized ipv4 headers
IPV6_RECVPATHMTU - for ipv6 path mtu
IPV6_PATHMTU - for ipv6 path mtu
IPV6_DONTFRAG - for ipv6 path mtu
IPV6_ADDR_PREFERENCES - RFC5014 Source Address Selection
IPV6_MINHOPCOUNT - RFC5082 Generalized TTL Security Mechanism
IPV6_ORIGDSTADDR - used by tproxy
IPV6_RECVORIGDSTADDR - used by tproxy
IPV6_TRANSPARENT - used by tproxy
IPV6_UNICAST_IF - ipv6 version of IP_UNICAST_IF

and socket option values:

IP_PMTUDISC_OMIT - value for IP_MTU_DISCOVER option, new in linux 3.14
IPV6_PMTUDISC_OMIT - same for IPV6_MTU_DISCOVER
IPV6_PMTUDISC_INTERFACE - ipv6 version of IP_PMTUDISC_INTERFACE
IPV6_PREFER_* - flags for IPV6_ADDR_PREFERENCES

not added: ipv6 flow info and flow label related definitions.
(it's unclear if libc should define these and namespace polluting
type name is involved so they are not provided for now)
2014-05-30 13:06:51 -04:00
Szabolcs Nagy c8ea212668 add SO_BPF_EXTENSIONS socket option
this was introduced to query BPF extension support with getsockopt
in linux 3.14, commit ea02f9411d9faa3553ed09ce0ec9f00ceae9885e
2014-05-30 13:06:51 -04:00