Commit Graph
100 Commits
Author SHA1 Message Date
Szabolcs NagyandRich Felker c06c1eb661 fix tls access on arm targets before armv6k
commit 610c5a8524 changed the thread
pointer setup so tp points at the end of the pthread struct on arm,
but failed to update __aeabi_read_tp so it was off by 8.

this broke tls access in code that is compiled with -mtp=soft, which
is the default when target arch is pre armv6k or thumb1.

maintainer's note: no release versions are affected.
2018-08-23 16:41:44 -04:00
Szabolcs NagyandRich Felker df6d9450ea add support for arch-specific ptrace command macros
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).
2018-07-17 22:25:08 -04:00
Szabolcs NagyandRich Felker 7ea32a8282 sys/ptrace.h: add missing PTRACE_EVENT_STOP
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.
2018-07-17 22:24:15 -04:00
Szabolcs NagyandRich Felker cbf16c4abf uchar.h: define char16_t and char32_t for old c++
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.
2018-07-17 22:24:03 -04:00
Szabolcs NagyandRich Felker 38f2fa3d02 add memfd_create syscall wrapper
memfd_create was added in linux v3.17 and glibc has api for it.
2018-06-20 21:36:04 -04:00
Szabolcs NagyandRich Felker b64d66d0b0 add mlock2 linux syscall wrapper
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.
2018-06-20 21:35:45 -04:00
Szabolcs NagyandRich Felker 7ea235b1be s390x: add kexec_file_load syscall number from linux v4.17
new in linux commit 71406883fd35794d573b3085433c41d0a3bf6c21
2018-06-19 13:27:39 -04:00
Szabolcs NagyandRich Felker 1177f61d6e mips: add HWCAP_ flags from linux v4.17
new in linux commit 256211f2b0b251e532d1899b115e374feb16fa7a
2018-06-19 13:27:27 -04:00
Szabolcs NagyandRich Felker f3b6690a53 aarch64: add HWCAP_ flags from linux v4.17
hwcaps for armv8.4, new in linux commit
7206dc93a58fb76421c4411eefa3c003337bcb2d
2018-06-19 13:27:17 -04:00
Szabolcs NagyandRich Felker da9f2b2ac8 add speculation control prctls from linux v4.17
PR_{SET,GET}_SPECULATION_CTRL controls speculation related vulnerability
mitigations, new in commits
b617cfc858161140d69cc0b5cc211996b557a1c7
356e4bfff2c5489e016fdb925adbf12a1e3950ee
2018-06-19 13:27:08 -04:00
Szabolcs NagyandRich Felker 5b85ed5cec add ETH_P_PREAUTH ethertype from linux v4.17
added in linux commit 4fe0de5b143762d327bfaf1d7be7c5b58041a18c
2018-06-19 13:26:41 -04:00
Szabolcs NagyandRich Felker ebeb1de288 add TCP_NLA_* from linux v4.17
new and missing netlink attributes types for SCM_TIMESTAMPING_OPT_STATS,
new ones were added in commits
7156d194a0772f733865267e7207e0b08f81b02b
be631892948060f44b1ceee3132be1266932071e
87ecc95d81d951b0984f2eb9c5c118cb68d0dce8
2018-06-19 13:26:36 -04:00
Szabolcs NagyandRich Felker af55070eae add {MSG,SEM,SHM}_STAT_ANY from linux v4.17
introduced to stat ipc objects without permission checks since the
info is available in /proc/sysvipc anyway, new in linux commits
23c8cec8cf679b10997a512abb1e86f0cedc42ba
a280d6dc77eb6002f269d58cd47c7c7e69b617b6
c21a6970ae727839a2f300cd8dd957de0d0238c3
2018-06-19 13:26:24 -04:00
Szabolcs NagyandRich Felker 156a3bedb2 add MAP_FIXED_NOREPLACE from linux v4.17
to map at a fixed address without unmapping underlying mappings
(fails with EEXIST unlike MAP_FIXED), new in linux commits
4ed28639519c7bad5f518e70b3284c6e0763e650 and
a4ff8e8620d3f4f50ac4b41e8067b7d395056843.
2018-06-19 13:26:00 -04:00
Szabolcs NagyandRich Felker 90ac71d853 powerpc: add pkey syscall numbers from linux v4.16
add pkey_mprotect, pkey_alloc, pkey_free syscall numbers,
new in linux commits 3350eb2ea127978319ced883523d828046af4045
and 9499ec1b5e82321829e1c1510bcc37edc20b6f38
2018-06-19 13:25:50 -04:00
Szabolcs NagyandRich Felker a697a1c9a5 aarch64: add HWCAP_ASIMDFHM from linux v4.16
armv8.4 fp mul instructions.
added in commit 3b3b681097fae73b7f5dcdd42db6cfdf32943d4c
2018-06-19 13:25:44 -04:00
Szabolcs NagyandRich Felker 0f7aa600f7 sys/ptrace.h: add PTRACE_SECCOMP_GET_METADATA from linux v4.16
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.
2018-06-19 13:25:33 -04:00
Szabolcs NagyandRich Felker 3a81cbe643 netinet/if_ether.h: add ETH_TLEN from linux v4.16
octets in ethernet type field
added in linux commit 4bbb3e0e8239f9079bf1fe20b3c0cb598714ae61
2018-06-19 13:25:25 -04:00
Szabolcs NagyandRich Felker 833df8675c netinet/if_ether.h: add ETH_P_ERSPAN2 from linux v4.16
protocol number for erspan v2 support
added in linux commit f551c91de262ba36b20c3ac19538afb4f4507441
2018-06-19 13:25:22 -04:00
Szabolcs NagyandRich Felker 29f3202b73 sys/epoll.h: add EPOLLNVAL from linux v4.16
added to uapi in commit 65aaf87b3aa2d049c6b9fd85221858a895df3393
used since commit a9a08845e9acbd224e4ee466f5c1275ed50054e8,
which renamed POLL* to EPOLL* in the kernel.
2018-06-19 13:25:16 -04:00
Szabolcs NagyandRich Felker 610c5a8524 fix TLS layout of TLS variant I when there is a gap above TP
In TLS variant I the TLS is above TP (or above a fixed offset from TP)
but on some targets there is a reserved gap above TP before TLS starts.

This matters for the local-exec tls access model when the offsets of
TLS variables from the TP are hard coded by the linker into the
executable, so the libc must compute these offsets the same way as the
linker.  The tls offset of the main module has to be

	alignup(GAP_ABOVE_TP, main_tls_align).

If there is no TLS in the main module then the gap can be ignored
since musl does not use it and the tls access models of shared
libraries are not affected.

The previous setup only worked if (tls_align & -GAP_ABOVE_TP) == 0
(i.e. TLS did not require large alignment) because the gap was
treated as a fixed offset from TP.  Now the TP points at the end
of the pthread struct (which is aligned) and there is a gap above
it (which may also need alignment).

The fix required changing TP_ADJ and __pthread_self on affected
targets (aarch64, arm and sh) and in the tlsdesc asm the offset to
access the dtv changed too.
2018-06-02 19:38:44 -04:00
Szabolcs NagyandRich Felker 282b1cd266 fix fmaf wrong result
if double precision r=x*y+z is not a half way case between two single
precision floats or it is an exact result then fmaf returns (float)r.

however the exactness check was wrong when |x*y| < |z| and could cause
incorrectly rounded result in nearest rounding mode when r is a half
way case.

fmaf(-0x1.26524ep-54, -0x1.cb7868p+11, 0x1.d10f5ep-29)
was incorrectly rounded up to 0x1.d117ap-29 instead of 0x1.d1179ep-29.
(exact result is 0x1.d1179efffffffecp-29, r is 0x1.d1179fp-29)
2018-04-02 18:57:41 -04:00
Szabolcs NagyandRich Felker 9bed82df30 aarch64: add sve_context struct and related defines from linux v4.15
signal context definitions for scalable vector extension new in commit
d0b8cd3187889476144bd9b13bf36a932c3e7952
2018-02-22 18:51:32 -05:00
Szabolcs NagyandRich Felker 74ab4b8284 elf.h: add DT_SYMTAB_SHNDX
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
2018-02-22 18:51:16 -05:00
Szabolcs NagyandRich Felker dfeeeaf544 elf.h: syncronize DF_1_ flags with binutils
DF_1_STUB and DF_1_PIE were added in binutils-gdb commit
5c383f026242d25a3c21fdfda42e5ca218b346c8
2018-02-22 18:51:00 -05:00
Szabolcs NagyandRich Felker eef5e4821d elf.h: update NT_* coredump elf notes for linux v4.15
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
2018-02-22 18:49:46 -05:00
Szabolcs NagyandRich Felker 5024804176 elf.h: add PPC64_OPT_LOCALENTRY
allows calling extern functions without saving r2, for details see
glibc commit 0572433b5beb636de1a49ec6b4fdab830c38cdc5
2018-02-22 18:49:42 -05:00
Szabolcs NagyandRich Felker e7bd039df2 elf.h: add AT_* auxval macros for cache geometry
AT_L1I_*, AT_L1D_*, AT_L2_* and AT_L3_* were added in linux v4.11 for
powerpc in commit 98a5f361b8625c6f4841d6ba013bbf0e80d08147.
2018-02-22 18:49:39 -05:00
Szabolcs NagyandRich Felker 121d18d2f2 sys/prctl.h: add new PR_SVE_* macros from linux v4.15
PR_SVE_SET_VL and PR_SVE_GET_VL controls are new in linux commit
2d2123bc7c7f843aa9db87720de159a049839862
related PR_SVE_* macros were added in
7582e22038a266444eb87bc07c372592ad647439
2018-02-22 18:49:34 -05:00
Szabolcs NagyandRich Felker 5a4a780ccb aarch64: update hwcap.h for linux v4.15
HWCAP_SVE is new in linux commit 43994d824e8443263dc98b151e6326bf677be52e
HWCAP_SHA3, HWCAP_SM3, HWCAP_SM4, HWCAP_ASIMDDP and HWCAP_SHA512 are new in
f5e035f8694c3bdddc66ea46ecda965ee6853718
2018-02-22 18:49:29 -05:00
Szabolcs NagyandRich Felker 8be960d188 arm: add get_tls syscall from linux v4.15
for systems without tp register or kuser helper, new in linux commit
8fcd6c45f5a65621ec809b7866a3623e9a01d4ed
2018-02-22 18:49:24 -05:00
Szabolcs NagyandRich Felker 0fc2f098a4 powerpc: update hwcap.h for linux v4.15
PPC_FEATURE2_HTM_NO_SUSPEND is new in linux commit
cba6ac4869e45cc93ac5497024d1d49576e82666
PPC_FEATURE2_DARN and PPC_FEATURE2_SCV were new in v4.12 in commit
a4700a26107241cc7b9ac8528b2c6714ff99983d
2018-02-22 18:49:16 -05:00
Szabolcs NagyandRich Felker 4ccd07527e s390x: add s390_sthyi system call from v4.15
to store hypervisor information, added in linux commit
3d8757b87d7fc15a87928bc970f060bc9c6dc618
2018-02-22 18:49:11 -05:00
Szabolcs NagyandRich Felker 4001c51181 netinet/in.h: add new IPV6_FREEBIND from linux v4.15
new socekt option for AF_INET6 SOL_RAW sockets, added in linux commit
84e14fe353de7624872e582887712079ba0b2d56
2018-02-22 18:49:07 -05:00
Szabolcs NagyandRich Felker 5f4ff22aa3 netinet/tcp.h: add TCP_* socket options from linux v4.15
TCP_FASTOPEN_KEY is new in 1fba70e5b6bed53496ba1f1f16127f5be01b5fb6
TCP_FASTOPEN_NO_COOKIE is new in 71c02379c762cb616c00fd5c4ed253fbf6bbe11b
2018-02-22 18:49:03 -05:00
Szabolcs NagyandRich Felker 9b57db3f95 add MAP_SYNC and MAP_SHARED_VALIDATE from linux v4.15
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*).
2018-02-22 18:48:58 -05:00
Szabolcs NagyandRich Felker 9eda4dc69c mips,powerpc: fix TIOCSER_TEMT in termios.h
use the same token to define TIOCSER_TEMT as is used in ioctl.h
so when both headers are included there are no redefinition warnings
during musl build.
2018-02-22 18:48:38 -05:00
Szabolcs NagyandRich Felker e69608700f netinet/tcp.h: add tcp_diag_md5sig struct from linux v4.14
for querying tcp md5 signing keys.
new in linux commit c03fa9bcacd9ac04595cc13f34f3445f0a5ecf13
2018-02-22 18:48:18 -05:00
Szabolcs NagyandRich Felker abdaba8616 sys/{mman,shm}.h: add {MAP,SHM}_HUGE_ macros from linux uapi
*_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.
2018-02-22 18:48:12 -05:00
Szabolcs NagyandRich Felker fba3059d72 netinet/if_ether.h: add new ETH_P_ macros from linux v4.14
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
2018-02-22 18:47:52 -05:00
Szabolcs NagyandRich Felker 4d4a665799 net/if_arp.h: add ARPHRD_RAWIP from linux v4.14
new in linux commmit cdf4969c42a6c1a376dd03a9e846cf638d3cd4b1
2018-02-22 18:47:49 -05:00
Szabolcs NagyandRich Felker 38e81ddc04 signal.h: add missing SIGTRAP si_codes
TRAP_BRANCH and TRAP_HWBKPT new in linux commit
da654b74bda14c45a7d98c731bf3c1a43b6b74e2
2018-02-22 18:46:31 -05:00
Szabolcs NagyandRich Felker ebd8ef50d5 aarch64: add HWCAP_DCPOP from linux v4.14
indicates ARMv8.2-DCPoP persistent memory support extension.
new in linux commit 7aac405ebb3224037efd56b73d82d181111cdac3
2018-02-22 18:45:35 -05:00
Szabolcs NagyandRich Felker 5431c20040 sys/mman.h: add MADV_WIPEONFORK from linux v4.14
allows zeroing anonymous private pages inherited by a child process.
new in linux commit d2cd9ede6e193dd7d88b6d27399e96229a551b19
2018-02-22 18:45:31 -05:00
Szabolcs NagyandRich Felker 986bc21713 sys/socket.h: add MSG_ZEROCOPY from linux v4.14
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
2018-02-22 18:45:24 -05:00
Szabolcs NagyandRich Felker 404097a4ef sys/socket.h: add SOL_TLS from linux v4.13
socket option for kernel TLS support
new in linux commit 3c4d7559159bfe1e3b94df3a657b2cda3a34e218
2018-02-22 18:45:19 -05:00
Szabolcs NagyandRich Felker 709bbf5175 sys/socket.h: add PF_SMC from linux v4.11
add AF_SMC and PF_SMC for the IBM shared memory communication protocol.
new in linux commit ac7138746e14137a451f8539614cdd349153e0c0
(linux socket.h is not in uapi so this update was missed earlier)
2018-02-22 18:45:16 -05:00
Szabolcs NagyandRich Felker 249b621f9e better configure check for long double support 2018-02-07 15:43:33 -05:00
Szabolcs NagyandRich Felker 72656157f5 fix fgetwc when decoding a character that crosses buffer boundary
Update the buffer position according to the bytes consumed into st when
decoding an incomplete character at the end of the buffer.
2017-11-18 20:11:08 -05:00
Szabolcs NagyandRich Felker 13935337f3 s390x: use generic ioctl.h
s390 can use the generic ioctls definitions other than FIOQSIZE (like arm).

this fixes some missing ioctls and two incorrect ones:
TIOCTTYGSTRUCT and TIOCM_MODEM_BITS seem to be defined on frv
target only in linux.
2017-11-05 18:43:51 -05:00
Szabolcs NagyandRich Felker 4dc44ce8e2 microblaze: add statx syscall from linux v4.13
statx number is allocated for microblaze in linux commit
f5ef419630e85e80284cd0256cb5a13a66bbd6c5
2017-11-05 18:41:29 -05:00
Szabolcs NagyandRich Felker ffd048a07b aarch64: add extra_context struct from linux v4.13
allows expanding the signal frame beyond the 4k reserved space.
new in linux commit 33f082614c3443d937f50fe936f284f62bbb4a1b
2017-11-05 18:41:27 -05:00
Szabolcs NagyandRich Felker 6651ef1f06 add new tcp.h socket options from linux v4.13
TCP_ULP is new in linux commit 734942cc4ea6478eed125af258da1bdbb4afe578
TCP_MD5SIG_EXT is new in 8917a777be3ba566377be05117f71b93a5fd909d
2017-11-05 18:41:26 -05:00
Szabolcs NagyandRich Felker 14ced22830 add new fcntl.h macros from linux v4.13
for getting/setting write lifetime hints fcntl commands were
added in linux commit c75b1d9421f80f4143e389d2d50ddfc8a28c8c35

added under _GNU_SOURCE || _BSD_SOURCE, since RWH_* life time
hints are not in the POSIX reserved namespace.
2017-11-05 18:41:24 -05:00
Szabolcs NagyandRich Felker 754f66afb7 ioctl TIOCGPTPEER from linux v4.13
added for safe opening of peer end of pty in a mount namespace.
new in linux commit c6325179238f1d4683edbec53d8322575d76d7e2
2017-11-05 18:41:22 -05:00
Szabolcs NagyandRich Felker c35a8bf456 add SO_ getsockopt options from linux v4.13
SCM_TIMESTAMPING_PKTINFO is new in aad9c8c470f2a8321a99eb053630ce0e199558d6
SO_PEERGROUPS is new in 28b5ba2aa0f55d80adb2624564ed2b170c19519e
2017-11-05 18:41:21 -05:00
Szabolcs NagyandRich Felker 5daaed6a0e s390x: add syscall number for s390_guarded_storage from linux v4.12
new syscall in linux commit 916cda1aa1b412d7cf2991c3af7479544942d121
2017-11-05 18:41:19 -05:00
Szabolcs NagyandRich Felker 2dc6760f3c i386: add arch_prctl syscall number from linux v4.12
syscall for i386 compat mode on x86_64 for non-x86_64 prctls.
new in linux commit 79170fda313ed5be2394f87aa2a00d597f8ed4a1
2017-11-05 18:41:18 -05:00
Szabolcs NagyandRich Felker 840d45bebd aarch64: add new HWCAP_* flags from linux v4.12
hwcap bits for armv8.3 extensions, added in linux commits
c8c3798d2369e4285da44b244638eafe446a8f8a
cb567e79fa504575cb97fb2f866d2040ed1c92e7
c651aae5a7732287c1c9bc974ece4ed798780544
2017-11-05 18:41:16 -05:00
Szabolcs NagyandRich Felker 4c81122711 add ARPHDR_VSOCKMON from linux v4.12
new in linux commit 531b374834c891ae2abf800693074df35a7d1a36
2017-11-05 18:41:14 -05:00
Szabolcs NagyandRich Felker 54f04d9991 add new SO_ socket options from linux v4.12
SO_MEMINFO added in linux commit a2d133b1d465016d0d97560b11f54ba0ace56d3e
SO_INCOMING_NAPI_ID added in 6d4339028b350efbf87c61e6d9e113e5373545c9
SO_COOKIE added in 5daab9db7b65df87da26fd8cfa695fb9546a1ddb
2017-11-05 18:41:13 -05:00
Szabolcs NagyandRich Felker 9864f60e92 add statx syscall numbers from linux v4.11
statx was added in linux commit a528d35e8bfcc521d7cb70aaf03e1bd296c8493f
(there is no libc wrapper yet and microblaze and sh misses the number).
2017-11-05 18:41:11 -05:00
Szabolcs NagyandRich Felker c519658cea add TCP_NLA_* enums from linux v4.11
two new stats for SCM_TIMESTAMPING_OPT_STATS, added in linux commit
7e98102f489775d8c000884fca8a0d995ea688a9
2017-11-05 18:41:09 -05:00
Szabolcs NagyandRich Felker ee3ae7827b add TCP_FASTOPEN_CONNECT tcp socket option from linux v4.11
new in linux commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
2017-11-05 18:41:08 -05:00
Szabolcs NagyandRich Felker 3eb82f7338 add ETH_P_IBOE from linux v4.11
new in linux commit 69ae543969abeba48e04dd93277684c8c0895f3b
2017-11-05 18:41:06 -05:00
Szabolcs NagyandRich Felker bd1560f6eb update aarch64 hwcap.h for linux v4.11
new hwcap bits were added in kernel commits
77c97b4ee21290f5f083173d957843b615abbff2
f92f5ce01ee6a6a86cbfc4e3b0d18529c302b1ea
2017-11-05 18:41:04 -05:00
Szabolcs NagyandRich Felker cee73f0c10 add kexec_file_load syscall number on powerpc from linux v4.10
added in linux commit 80f60e509a03ff9ff2bdbf9cd1e935c6360b8bd9
2017-11-05 18:41:02 -05:00
Szabolcs NagyandRich Felker 8f56955713 add microblaze syscall numbers from linux v4.10
missing syscalls got allocated on microblaze.
2017-11-05 18:41:00 -05:00
Szabolcs NagyandRich Felker d800403032 add TFD_TIMER_CANCEL_ON_SET that timerfd.h was missing
linux commit 575b1967e10a1f3038266244d2c7a3ca6b99fed8 moved timerfd
apis to a new uapi header which showed musl was missing this flag.
2017-11-05 18:40:58 -05:00
Szabolcs NagyandRich Felker f5638c22e3 add ETH_MIN_MTU and ETH_MAX_MTU from linux v4.10
min max mtu size definitions mostly for drivers.
new in linux commits a52ad514fdf3b8a57ca4322c92d2d8d5c6182485 and
d894be57ca92c8a8819ab544d550809e8731137b
2017-11-05 18:40:53 -05:00
Szabolcs NagyandRich Felker 013696918b add IP_RECVFRAGSIZE and IPV6_RECVFRAGSIZE from linux v4.10
added in linux commit 70ecc24841326396a827deb55c3fefac582a729d
2017-11-05 18:39:29 -05:00
Szabolcs NagyandRich Felker 5c596ed867 add SCM_TIMESTAMPING_OPT_STATS and related TCP_ enums from linux v4.10
for tcp timestamp control messages, new in linux commit
1c885808e45601b2b6f68b30ac1d999e10b6f606
and export time measurements via tcp_info, added in linux commit
efd90174167530c67a54273fd5d8369c87f9bd32
2017-11-05 18:39:25 -05:00
Szabolcs NagyandRich Felker 907476925f math: rewrite fma with mostly int arithmetics
the freebsd fma code failed to raise underflow exception in some
cases in nearest rounding mode (affects fmal too) e.g.

  fma(-0x1p-1000, 0x1.000001p-74, 0x1p-1022)

and the inexact exception may be raised spuriously since the fenv
is not saved/restored around the exact multiplication algorithm
(affects x86 fma too).

another issue is that the underflow behaviour when the rounded result
is the minimal normal number is target dependent, ieee754 allows two
ways to raise underflow for inexact results: raise if the result before
rounding is in the subnormal range (e.g. aarch64, arm, powerpc) or if
the result after rounding with infinite exponent range is in the
subnormal range (e.g. x86, mips, sh).

to avoid all these issues the algorithm was rewritten with mostly int
arithmetics and float arithmetics is only used to get correct rounding
and raise exceptions according to the behaviour of the target without
any fenv.h dependency. it also unifies x86 and non-x86 fma.

fmaf is not affected, fmal need to be fixed too.

this algorithm depends on a_clz_64 and it required a few spurious
instructions to make sure underflow exception is raised in a particular
corner case. (normally FORCE_EVAL(tiny*tiny) would be used for this,
but on i386 gcc is broken if the expression is constant
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57245
and there is no easy portable fix for the macro.)
2017-10-13 22:30:45 -04:00
Szabolcs NagyandRich Felker c10bc61508 powerpc{64}: fix MAP_NORESERVE and MAP_LOCKED in mman.h
MAP_{NORESERVE,LOCKED} have different values on powerpc than in generic.
2017-09-11 14:06:27 -04:00
Szabolcs NagyandRich Felker 822dddfbf1 make syscall.h consistent with linux
most of the found naming differences don't matter to musl, because
internally it unifies the syscall names that vary across targets,
but for external code the names should match the kernel uapi.

aarch64:
	__NR_fstatat is called __NR_newfstatat in linux.
	__NR_or1k_atomic got mistakenly copied from or1k.
arm:
	__NR_arm_sync_file_range is an alias for __NR_sync_file_range2
	__NR_fadvise64_64 is called __NR_arm_fadvise64_64 in linux,
	the old non-arm name is kept too, it should not cause issues.
	(powerpc has similar nonstandard fadvise and it uses the
	normal name.)
i386:
	__NR_madvise1 was removed from linux in commit
	303395ac3bf3e2cb488435537d416bc840438fcb 2011-11-11
microblaze:
	__NR_fadvise, __NR_fstatat, __NR_pread, __NR_pwrite
	had different name in linux.
mips:
	__NR_fadvise, __NR_fstatat, __NR_pread, __NR_pwrite, __NR_select
	had different name in linux.
mipsn32:
	__NR_fstatat is called __NR_newfstatat in linux.
or1k:
	__NR__llseek is called __NR_llseek in linux.
	the old name is kept too because that's the name musl uses
	internally.
powerpc:
	__NR_{get,set}res{gid,uid}32 was never present in powerpc linux.
	__NR_timerfd was briefly defined in linux but then got renamed.
2017-09-06 19:29:25 -04:00
Szabolcs NagyandRich Felker 8459c6f264 arm: add HWCAP_ARM_ hwcap macros
Glibc renamed the linux uapi HWCAP_* macros to HWCAP_ARM_*
so have both variants in case some code depends on it.
(The HWCAP2_ macros are not defined in glibc currently so those
only have the linux uapi variant.)
2017-08-29 22:16:19 -04:00
Szabolcs NagyandRich Felker 06fbefd100 add a_clz_64 helper function
counts leading zero bits of a 64bit int, undefined on zero input.
(has nothing to do with atomics, added to atomic.h so target specific
helper functions are together.)

there is a logarithmic generic implementation and another in terms of
a 32bit a_clz_32 on targets where that's available.
2017-08-29 21:47:10 -04:00
Szabolcs NagyandRich Felker 3356177979 s390x: add bits/hwcap.h
aligned with linux arch/s390/include/asm/elf.h
(these macros should be exported into uapi, but they are not)
2017-08-29 21:40:35 -04:00
Szabolcs NagyandRich Felker cc08669380 add SIOCGSTAMPNS socket ioctl macro to ioctl.h
it is defined in linux asm/sockios.h since commit
ae40eb1ef30ab4120bd3c8b7e3da99ee53d27a23 (linux v2.6.22)
but was missing from musl by accident.

in musl the sockios macros are exposed in sys/ioctl.h together
with other ioctl requests instead of in sys/socket.h because of
namespace rules. (glibc has them in sys/socket.h under _GNU_SOURCE.)
2017-08-29 19:48:37 -04:00
Szabolcs NagyandRich Felker 02b50c9d0a fix mips ioctl macros to match linux asm/sockios.h 2017-08-29 19:48:35 -04:00
Szabolcs NagyandRich Felker e6def54435 fix arm run-time abi string functions
in arm rtabi these __aeabi_* functions have special abi (they are
only allowed to clobber r0,r1,r2,r3,ip,lr,cpsr), so they cannot
be simple wrappers around normal string functions (which may
clobber other registers), the safest solution is to write them in
asm, a minimalistic implementation works because these are not
supposed to be emitted by compilers or used in general.
2017-06-22 18:34:06 -04:00
Szabolcs NagyandRich Felker 8c44a06024 fix scalbn when result is in the subnormal range
in nearest rounding mode scalbn could introduce double rounding error
when an intermediate value and the final result were both in the
subnormal range e.g.

  scalbn(0x1.7ffffffffffffp-1, -1073)

returned 0x1p-1073 instead of 0x1p-1074, because the intermediate
computation got rounded to 0x1.8p-1023.

with the fix an intermediate value can only be in the subnormal range
if the final result is 0 which is correct even after double rounding.
(there still can be two roundings so signals may be raised twice, but
that's only observable with trapping exceptions which is not supported.)
2017-04-21 17:31:00 -04:00
Szabolcs NagyandRich Felker 54807d47ac aarch64: add single instruction math functions
this should increase performance and reduce code size on aarch64.

the compiled code was checked against using __builtin_* instead
of inline asm with gcc-6.2.0.

lrint is two instructions.

c with inline asm is used because it is safer than a pure asm
implementation, this prevents ll{rint,round} to be an alias
of l{rint,round} (because the types don't match) and depends
on gcc style inline asm support.

ceil, floor, round, trunc can either raise inexact on finite
non-integer inputs or not raise any exceptions. the new
implementation does not raise exceptions while the generic
c code does.

on aarch64, the underflow exception is signaled before rounding
(ieee 754 allows both before and after rounding, but it must be
consistent), the generic fma c code signals it after rounding
so using single instruction fixes a slight conformance issue too.
2017-03-21 12:39:18 -04:00
Szabolcs NagyandRich Felker 8cba1dc46c fix threshold constants in j0f, y0f, j1f, y1f
partly following freebsd rev 279491
https://svnweb.freebsd.org/base?view=revision&revision=279491
(musl had some of the fixes before freebsd).

the change should not matter much for j0f, y0f, but it improves
j1f and y1f in [2.5,~3.75] (that is [0x40200000,~0x40700000]).
near roots (e.g. around 3.8317 for j1f) there are still large
ulp errors.

dropped code that tried to raise inexact.
2017-03-15 00:15:28 -04:00
Szabolcs NagyandRich Felker c9783e4d32 treat STB_WEAK and STB_GNU_UNIQUE like STB_GLOBAL in find_sym
A weak symbol definition is not special during dynamic linking, so
don't let a strong definition in a later module override it.
(glibc dynamic linker allows overriding weak definitions if
LD_DYNAMIC_WEAK is set, musl does not.)

STB_GNU_UNIQUE means that the symbol is global, even if it is in a
module that's loaded with RTLD_LOCAL, and all references resolve to
the same definition. This semantics is only relevant for c++ plugin
systems and even there it's often not what the user wants (so it can
be turned off in g++ by -fno-gnu-unique when the c++ shared lib is
compiled). In musl just treat it like STB_GLOBAL.
2017-03-11 19:10:57 -05:00
Szabolcs NagyandRich Felker 827c4e6fbe fix lsearch and lfind to pass key as first arg to the compar callback
this is not a conformance issue as posix does not specify the
argument order, but the order is specified for bsearch and some
systems document the order for lsearch consistently (openbsd).

since there were two indpendent reports of this issue it's better
to use the more widely expected argument order.
2017-03-05 20:02:31 -05:00
Szabolcs NagyandRich Felker 60c46db80b update tcp_info struct to linux v4.9
export tcp data delivery rate in tcp_info struct.
see linux commit eb8329e0a04db0061f714f033b4454326ba147f4
2016-12-29 22:11:01 -05:00
Szabolcs NagyandRich Felker a8a8fdff96 add MS_NOREMOTELOCK mount flag from linux v4.9
for handling file locking on overlayfs.
see linux commit c568d68341be7030f5647def68851e469b21ca11
2016-12-29 22:10:44 -05:00
Szabolcs NagyandRich Felker 62eaf40bf4 add pkey_{mprotect,alloc,free} syscalls from linux v4.9
see linux commit e8c24d3a23a469f1f40d4de24d872ca7023ced0a
and linux Documentation/x86/protection-keys.txt
2016-12-29 22:10:19 -05:00
Szabolcs NagyandRich Felker 61ff1af76f use lookup table for malloc bin index instead of float conversion
float conversion is slow and big on soft-float targets.

The lookup table increases code size a bit on most hard float targets
(and adds 60byte rodata), performance can be a bit slower because of
position independent data access and cpu internal state dependence
(cache, extra branches), but the overall effect should be minimal
(common, small size allocations should be unaffected).
2016-12-17 18:16:43 -05:00
Szabolcs NagyandRich Felker 7a4c25d780 handle ^ and $ in BRE subexpression start and end as anchors
In BRE, ^ is an anchor at the beginning of an expression, optionally
it may be an anchor at the beginning of a subexpression and must be
treated as a literal otherwise.

Previously musl treated ^ in subexpressions as literal, but at least
glibc and gnu sed treats it as an anchor and that's the more useful
behaviour: it can always be escaped to get back the literal meaning.

Same for $ at the end of a subexpression.

Portable BRE should not rely on this, but there are sed commands in
build scripts which do.

This changes the meaning of the BREs:

	\(^a\)
	\(a\|^b\)
	\(a$\)
	\(a$\|b\)
2016-12-16 23:26:29 -05:00
Szabolcs NagyandRich Felker 5ffe515ca4 fix ldso reserved library name handling
If a DT_NEEDED entry was the prefix of a reserved library name
(up to the first dot) then it was incorrectly treated as a libc
reserved name.

e.g. libp.so dependency was not loaded as it matched libpthread
reserved name.
2016-11-07 12:00:32 -05:00
Szabolcs NagyandRich Felker 86e8cc0fd4 fix accidental global static pointer in ldso
this was harmless as load_library is not called concurrently,
but it used one word of bss.
2016-11-07 11:59:58 -05:00
Szabolcs NagyandRich Felker 6ffdc4579f fix strtod int optimization in non-nearest rounding mode
the mid-sized integer optimization relies on lnz set up properly
to mark the last non-zero decimal digit, but this was not done
if the non-zero digit lied outside the KMAX digits of the base
10^9 number representation.

so if the fractional part was a very long list of zeros (>2048*9 on
x86) followed by non-zero digits then the integer optimization could
kick in discarding the tiny non-zero fraction which can mean wrong
result on non-nearest rounding mode.

strtof, strtod and strtold were all affected.
2016-10-20 13:29:34 -04:00
Szabolcs NagyandRich Felker d184a09e05 fix strtod and strtof rounding with many trailing zeros
in certain cases excessive trailing zeros could cause incorrect
rounding from long double to double or float in decfloat.

e.g. in strtof("9444733528689243848704.000000", 0) the argument
is 0x1.000001p+73, exactly halfway between two representible floats,
this incorrectly got rounded to 0x1.000002p+73 instead of 0x1p+73,
but with less trailing 0 the rounding was fine.

the fix makes sure that the z index always points one past the last
non-zero digit in the base 10^9 representation, this way trailing
zeros don't affect the rounding logic.
2016-10-20 13:29:09 -04:00
Szabolcs NagyandRich Felker 51ab6db4ed fix float formatting of some exact halfway cases
in nearest rounding mode exact halfway cases were not following the
round to even rule if the rounding happened at a base 1000000000 digit
boundary of the internal representation and the previous digit was odd.

e.g. printf("%.0f", 1.5) printed 1 instead of 2.
2016-10-20 01:54:15 -04:00
Szabolcs NagyandRich Felker 688d3da0f1 math: fix pow signed shift ub
j is int32_t and thus j<<31 is undefined if j==1, so j is changed to
uint32_t locally as a quick fix, the generated code is not affected.

(this is a strict conformance fix, future c standard may allow 1<<31,
see DR 463.  the bug was inherited from freebsd fdlibm, the proper fix
is to use uint32_t for all bit hacks, but that requires more intrusive
changes.)

reported by Daniel Sabogal
2016-10-20 01:32:27 -04:00
Szabolcs NagyandRich Felker 87643335ac update icmphdr struct following linux v4.8
add union field that is used in the kernel for SIT/GRE tunneling ICMPv4
messages. see linux commit 20e1954fe238dbe5f8d3a979e593fe352bd703cf
2016-10-20 01:29:06 -04:00
Szabolcs NagyandRich Felker cc7c95e98e add TCP_REPAIR_WINDOW to netinet/tcp.h from linux v4.8
another kernel internal state exposure for checkpoint-restore.
see linux commit b1ed4c4fa9a5ccf325184fd90edc50978ef6e33a
2016-10-20 01:28:44 -04:00
Szabolcs NagyandRich Felker fe39aaae0e add bits/hwcap.h and include it in sys/auxv.h
aarch64, arm, mips, mips64, mipsn32, powerpc, powerpc64 and sh have
cpu feature bits defined in linux for AT_HWCAP auxv entry, so expose
those in sys/auxv.h

it seems the mips hwcaps were never exposed to userspace neither
by linux nor by glibc, but that's most likely an oversight.
2016-10-20 01:28:25 -04:00