Commit Graph

2193 Commits

Author SHA1 Message Date
Szabolcs Nagy
90710df5cc sys/resource.h: add PRIO_MIN and PRIO_MAX for getpriority and setpriority
These constants are not specified by POSIX, but they are in the reserved
namespace, glibc and bsd systems seem to provide them as well.
(Note that POSIX specifies -NZERO and NZERO-1 to be the limits, but
PRIO_MAX equals NZERO)
2013-09-16 15:16:55 +00:00
Szabolcs Nagy
268375c1c0 update include/elf.h following glibc changes
the changes were verified using various sources:
linux: include/uapi/linux/elf.h
binutils: include/elf/common.h
glibc: elf/elf.h
sysv gabi: http://www.sco.com/developers/gabi/latest/contents.html
sun linker docs: http://docs.oracle.com/cd/E18752_01/pdf/817-1984.pdf
and platform specific docs

- fixed:
EF_MIPS_* E_MIPS_* e_flags: fixed accoding to glibc and binutils

- added:
ELFOSABI_GNU for EI_OSABI entry: glibc, binutils and sysv gabi
EM_* e_machine values: updated according to linux and glibc
PN_XNUM e_phnum value: from glibc and linux, see oracle docs
NT_* note types: updated according to linux and glibc
DF_1_* flags for DT_FLAGS_1 entry: following glibc and oracle docs
AT_HWCAP2 auxv entry for more hwcap bits accoding to linux and glibc
R_386_SIZE32 relocation according to glibc and binutils
EF_ARM_ABI_FLOAT_* e_flags: added following glibc and binutils
R_AARCH64_* relocs: added following glibc and aarch64 elf specs
R_ARM_* relocs: according to glibc, binutils and arm elf specs
R_X86_64_* relocs: added missing relocs following glibc

- removed:
HWCAP_SPARC_* flags were moved to arch specific header in glibc
R_ARM_SWI24 reloc is marked as obsolete in glibc, not present in binutils
  not specified in arm elf spec, R_ARM_TLS_DESC reused its number
  see http://www.codesourcery.com/publications/RFC-TLSDESC-ARM.txt

- glibc changes not pulled in:
ELFOSABI_ARM_AEABI (bare-metal system, binutils and glibc disagrees about the name)
R_68K_* relocs for unsupported platform
R_SPARC_* ditto
EF_SH* ditto (e_flags)
EF_S390* ditto (e_flags)
R_390* ditto
R_MN10300* ditto
R_TILE* ditto
2013-09-16 15:16:55 +00:00
Rich Felker
271c211944 omit CLONE_PARENT flag to clone in pthread_create
CLONE_PARENT is not necessary (CLONE_THREAD provides all the useful
parts of it) and Linux treats CLONE_PARENT as an error in certain
situations, without noticing that it would be a no-op due to
CLONE_THREAD. this error case prevents, for example, use of a
multi-threaded init process and certain usages with containers.
2013-09-16 10:56:01 -04:00
Rich Felker
f68a3468d4 use symbolic names for clone flags in pthread_create 2013-09-16 10:54:31 -04:00
Szabolcs Nagy
ae51aa7534 sys/socket.h: add new SO_BUSY_POLL socket option
low latency busy poll sockets are new in linux v3.11
2013-09-15 04:54:19 +00:00
Szabolcs Nagy
0a7ecf7606 ptrace.h: add new ptrace requests to get/set sigmask
PTRACE_GETSIGMASK and PTRACE_SETSIGMASK were added in linux v3.11
and used by checkpoint/restore tools
2013-09-15 02:49:26 +00:00
Szabolcs Nagy
2607e39a04 net/if_arp.h: add missing ARP hardware identifiers from linux uapi headers
the removed ARPHRD_IEEE802154_PHY was only present in the kernel api
in v2.6.31 (by accident), but it got into the glibc headers (in 2009)
and remained there since this header was not updated since then.
2013-09-15 02:42:29 +00:00
Szabolcs Nagy
0dc630ec95 netinet/in.h: add missing IP protocol numbers from the linux uapi headers 2013-09-15 02:41:36 +00:00
Szabolcs Nagy
b20760c023 support configurable page size on mips, powerpc and microblaze
PAGE_SIZE was hardcoded to 4096, which is historically what most
systems use, but on several archs it is a kernel config parameter,
user space can only know it at execution time from the aux vector.

PAGE_SIZE and PAGESIZE are not defined on archs where page size is
a runtime parameter, applications should use sysconf(_SC_PAGE_SIZE)
to query it. Internally libc code defines PAGE_SIZE to libc.page_size,
which is set to aux[AT_PAGESZ] in __init_libc and early in __dynlink
as well. (Note that libc.page_size can be accessed without GOT, ie.
before relocations are done)

Some fpathconf settings are hardcoded to 4096, these should be actually
queried from the filesystem using statfs.
2013-09-15 02:00:32 +00:00
Rich Felker
7a34dd3495 fix overflow in sysconf for _SC_MQ_PRIO_MAX
the value of MQ_PRIO_MAX does not fit, so it needs to use OFLOW.
2013-09-14 19:27:24 -04:00
Rich Felker
bfba15c9b9 fix child stack alignment on mips clone
unlike other archs, the mips version of clone was not doing anything
to align the stack pointer. this seems to have been the cause for some
SIGBUS crashes that were observed in posix_spawn.
2013-09-14 19:19:11 -04:00
Rich Felker
9b35ed3fef fix mips sysv ipc bits headers
msg.h was wrong for big-endian (wrong endiannness padding).
shm.h was just plain wrong (mips is not supposed to have padding).

both changes were tested using libc-test on qemu-system-mips.
2013-09-14 14:44:03 -04:00
Rich Felker
2f1de8051b fix x86_64 lrintl asm, again
the underlying problem was not incorrect sign extension (fixed in the
previous commit to this file by nsz) but that code that treats "long"
as 32-bit was copied blindly from i386 to x86_64.

now lrintl is identical to llrintl on x86_64, as it should be.
2013-09-13 01:22:13 -04:00
Rich Felker
ff4be700d0 do not use default when dynamic linker fails to open existing path file
if fopen fails for a reason other than ENOENT, we must assume the
intent is that the path file be used. failure may be due to
misconfiguration or intentional resource-exhaustion attack (against
suid programs), in which case falling back to loading libraries from
an unintended path could be dangerous.
2013-09-09 13:39:08 -04:00
Szabolcs Nagy
067aea7c9b math: remove STRICT_ASSIGN from exp2f (see previous commit) 2013-09-06 20:05:25 +00:00
Szabolcs Nagy
9b0fcb441a math: remove STRICT_ASSIGN macro
gcc did not always drop excess precision according to c99 at assignments
before version 4.5 even if -std=c99 was requested which caused badly
broken mathematical functions on i386 when FLT_EVAL_METHOD!=0

but STRICT_ASSIGN was not used consistently and it is worked around for
old compilers with -ffloat-store so it is no longer needed

the new convention is to get the compiler respect c99 semantics and when
excess precision is not harmful use float_t or double_t or to specialize
code using FLT_EVAL_METHOD
2013-09-06 18:35:55 +00:00
Szabolcs Nagy
f657fe4b9f math: support invalid ld80 representations in fpclassify
apparently gnulib requires invalid long double representations
to be handled correctly in printf so we classify them according
to how the fpu treats them: bad inf is nan, bad nan is nan,
bad normal is nan and bad subnormal/zero is minimal normal
2013-09-05 18:05:07 +00:00
Szabolcs Nagy
f4d9bfb3a9 math: fix atanh (overflow and underflow issues)
in atanh exception handling was left to the called log functions,
but the argument to those functions could underflow or overflow.

use double_t and float_t to avoid some useless stores on x86
2013-09-05 16:57:46 +00:00
Szabolcs Nagy
afa2aaccea math: remove libc.h include from libm.h
libc.h is only for weak_alias so include it directly where it is used
2013-09-05 14:03:10 +00:00
Szabolcs Nagy
101e601285 math: fix acoshf on negative values
acosh(x) is invalid for x<1, acoshf tried to be clever using
signed comparisions to handle all x<2 the same way, but the
formula was wrong on large negative values.
2013-09-05 12:26:26 +00:00
Szabolcs Nagy
0234394621 math: fix expm1l on x86_64 (avoid underflow for large negative x)
copy the fix from i386: return -1 instead of exp2l(x)-1 when x <= -65
2013-09-05 12:23:44 +00:00
Szabolcs Nagy
e5937885de math: fix lrintl.s on x86_64 (use movslq to signextend the result) 2013-09-05 12:04:58 +00:00
Szabolcs Nagy
07039ed856 math: fix exp2l asm on x86 (raise underflow correctly)
there were two problems:
* omitted underflow on subnormal results: exp2l(-16383.5) was calculated
as sqrt(2)*2^-16384, the last bits of sqrt(2) are zero so the down scaling
does not underflow eventhough the result is in subnormal range
* spurious underflow for subnormal inputs: exp2l(0x1p-16400) was evaluated
as f2xm1(x)+1 and f2xm1 raised underflow (because inexact subnormal result)

the first issue is fixed by raising underflow manually if x is in
(-32768,-16382] and not integer (x-0x1p63+0x1p63 != x)

the second issue is fixed by treating x in (-0x1p64,0x1p64) specially

for these fixes the special case handling was completely rewritten
2013-09-05 11:30:09 +00:00
Szabolcs Nagy
8dba548628 math: cosmetic cleanup (use explicit union instead of fshape and dshape) 2013-09-05 11:30:09 +00:00
Szabolcs Nagy
63b9cc7773 math: remove *_WORD64 macros from libm.h
only fma used these macros and the explicit union is clearer
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
94a3d13ae6 math: remove old longdbl.h 2013-09-05 11:30:08 +00:00
Szabolcs Nagy
aa0c4a204e math: long double fix (use ldshape union)
* use new ldshape union consistently
* add ld128 support to frexpl
* simplify sqrtl comment (ld64 is not just arm)
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
2eaed464e2 math: use float_t and double_t in scalbnf and scalbn
remove STRICT_ASSIGN (c99 semantics is assumed) and use the conventional
union to prepare the scaling factor (so libm.h is no longer needed)
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
34660d73bd math: fix remaining old long double code (erfl, fmal, lgammal, scalbnl)
in lgammal don't handle 1 and 2 specially, in fma use the new ldshape
union instead of ld80 one.
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
535104ab6a math: cbrt cleanup and long double fix
* use float_t and double_t
* cleanup subnormal handling
* bithacks according to the new convention (ldshape for long double
and explicit unions for float and double)
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
39c910fb06 math: fix underflow in exp*.c and long double handling in exp2l
* don't care about inexact flag
* use double_t and float_t (faster, smaller, more precise on x86)
* exp: underflow when result is zero or subnormal and not -inf
* exp2: underflow when result is zero or subnormal and not exact
* expm1: underflow when result is zero or subnormal
* expl: don't underflow on -inf
* exp2: fix incorrect comment
* expm1: simplify special case handling and overflow properly
* expm1: cleanup final scaling and fix negative left shift ub (twopk)
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
ea9bb95a5b math: long double trigonometric cleanup (cosl, sinl, sincosl, tanl)
ld128 support was added to internal kernel functions (__cosl, __sinl,
__tanl, __rem_pio2l) from freebsd (not tested, but should be a good
start for when ld128 arch arrives)

__rem_pio2l had some code cleanup, the freebsd ld128 code seems to
gather the results of a large reduction with precision loss (fixed
the bug but a todo comment was added for later investigation)

the old copyright was removed from the non-kernel wrapper functions
(cosl, sinl, sincosl, tanl) since these are trivial and the interesting
parts and comments had been already rewritten.
2013-09-05 11:30:08 +00:00
Szabolcs Nagy
bcd797a5ba math: long double inverse trigonometric cleanup (acosl, asinl, atanl, atan2l)
* added ld128 support from freebsd fdlibm (untested)
* using new ldshape union instead of IEEEl2bits
* inexact status flag is not supported
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
c2a0dfea62 math: rewrite hypot
method: if there is a large difference between the scale of x and y
then the larger magnitude dominates, otherwise reduce x,y so the
argument of sqrt (x*x+y*y) does not overflow or underflow and calculate
the argument precisely using exact multiplication. If the argument
has less error than 1/sqrt(2) ~ 0.7 ulp, then the result has less error
than 1 ulp in nearest rounding mode.

the original fdlibm method was the same, except it used bit hacks
instead of dekker-veltkamp algorithm, which is problematic for long
double where different representations are supported. (the new hypot
and hypotl code should be smaller and faster on 32bit cpu archs with
fast fpu), the new code behaves differently in non-nearest rounding,
but the error should be still less than 2ulps.

ld80 and ld128 are supported
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
ee2ee92d62 math: rewrite remainder functions (remainder, remquo, fmod, modf)
* results are exact
* modfl follows truncl (raises inexact flag spuriously now)
* modf and modff only had cosmetic cleanup
* remainder is just a wrapper around remquo now
* using iterative shift+subtract for remquo and fmod
* ld80 and ld128 are supported as well
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
d1a2ead878 math: rewrite rounding functions (ceil, floor, trunc, round, rint)
* faster, smaller, cleaner implementation than the bit hacks of fdlibm
* use arithmetics like y=(double)(x+0x1p52)-0x1p52, which is an integer
neighbor of x in all rounding modes (0<=x<0x1p52) and only use bithacks
when that's faster and smaller (for float it usually is)
* the code assumes standard excess precision handling for casts
* long double code supports both ld80 and ld128
* nearbyint is not changed (it is a wrapper around rint)
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
98be442ee8 math: fix logb(-0.0) in downward rounding mode
use -1/(x*x) instead of -1/(x+0) to return -inf, -0+0 is -0 in
downward rounding mode
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
4cec31fc23 math: ilogb cleanup
* consistent code style
* explicit union instead of typedef for double and float bit access
* turn FENV_ACCESS ON to make 0/0.0f raise invalid flag
* (untested) ld128 version of ilogbl (used by logbl which has ld128 support)
2013-09-05 11:30:07 +00:00
Szabolcs Nagy
af5f6d9556 long double cleanup, initial commit
new ldshape union, ld128 support is kept, code that used the old
ldshape union was rewritten (IEEEl2bits union of freebsd libm is
not touched yet)

ld80 __fpclassifyl no longer tries to handle invalid representation
2013-09-05 11:30:07 +00:00
Rich Felker
ff4d6020d1 fix typo in comment in __randname 2013-09-04 10:23:42 -04:00
Rich Felker
b4b9743c00 fix mips-specific bug in synccall (too little space for signal mask)
switch to the new __block_all_sigs/__restore_sigs internal API to
clean up the code too.
2013-09-02 15:19:37 -04:00
Rich Felker
3c0501d28c in synccall, ignore the signal before any threads' signal handlers return
this protects against deadlock from spurious signals (e.g. sent by
another process) arriving after the controlling thread releases the
other threads from the sync operation.
2013-09-02 15:16:36 -04:00
Rich Felker
a731e4103b fix invalid pointer in synccall (multithread setuid, etc.)
the head pointer was not being reset between calls to synccall, so any
use of this interface more than once would build the linked list
incorrectly, keeping the (now invalid) list nodes from the previous
call.
2013-09-02 15:06:46 -04:00
Rich Felker
fe80a8eb68 fix special-case breakage in popen due to reversed argument order 2013-09-01 17:02:35 -04:00
Rich Felker
c2d3fd3aad add workaround header for wait.h remapping to sys/wait.h 2013-09-01 01:01:31 -04:00
Rich Felker
316d6741b6 fix missing return value warning in faccessat, minor cleanup
clone will pass the return value of the start function to SYS_exit
anyway; there's no need to call the syscall directly.
2013-08-31 23:15:48 -04:00
Rich Felker
f0328a5656 fix invalid %m format crash in wide scanf variants
the wide variant was missed in the previous commit.
2013-08-31 22:52:41 -04:00
Rich Felker
cbb8a69790 avoid crash in scanf when invalid %m format is encountered
invalid format strings invoke undefined behavior, so this is not a
conformance issue, but it's nicer for scanf to report the error safely
instead of calling free on a potentially-uninitialized pointer or a
pointer to memory belonging to the caller.
2013-08-31 22:47:44 -04:00
Rich Felker
35e8621a28 remove incorrect cancellation points from realpath 2013-08-31 16:01:01 -04:00
Rich Felker
dfddd43256 debloat realpath's allocation strategy
rather than allocating a PATH_MAX-sized buffer when the caller does
not provide an output buffer, work first with a PATH_MAX-sized temp
buffer with automatic storage, and either copy it to the caller's
buffer or strdup it on success. this not only avoids massive memory
waste, but also avoids pulling in free (and thus the full malloc
implementation) unnecessarily in static programs.
2013-08-31 15:50:23 -04:00