summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorLines
2014-06-01improve getservbyname_r using new resolver backendRich Felker-22/+16
now that host and service lookup have been separated in the backend, there's no need for service lookup functions to pull in the host lookup code. moreover, dynamic allocation is no longer needed, so this function should now be async-signal-safe. it's also significantly smaller. one change in getservbyname is also made: knowing that getservbyname_r needs only two character pointers in the caller-provided buffer, some wasted bss can be avoided.
2014-06-01improve gethostbyname2_r using new resolver backendRich Felker-35/+22
these changes reduce the size of the function somewhat and remove many of its dependencies, including free. in principle it should now be async-signal-safe, but this has not been verified in detail. minor changes to error handling are also made.
2014-05-31refactor getaddrinfo and add support for most remaining featuresRich Felker-228/+360
this is the first phase of the "resolver overhaul" project. conceptually, the results of getaddrinfo are a direct product of a list of address results and a list of service results. the new code makes this explicit by computing these lists separately and combining the results. this adds support for services that have both tcp and udp versions, where the caller has not specified which it wants, and eliminates a number of duplicate code paths which were all producing the final output addrinfo structures, but in subtly different ways, making it difficult to implement any of the features which were missing. in addition to the above benefits, the refactoring allows for legacy functions like gethostbyname to be implemented without using the getaddrinfo function itself. such changes to the legacy functions have not yet been made, however. further improvements include matching of service alias names from /etc/services (previously only the primary name was supported), returning multiple results from /etc/hosts (previously only the first matching line was honored), and support for the AI_V4MAPPED and AI_ALL flags. features which remain unimplemented are IDN translations (encoding non-ASCII hostnames for DNS lookup) and the AI_ADDRCONFIG flag. at this point, the DNS-based name resolving code is still based on the old interfaces in __dns.c, albeit somewhat simpler in its use of them. there may be some dead code which could already be removed, but changes to this layer will be a later phase of the resolver overhaul.
2014-05-30fix POSIX namespace pollution in sys/types.hSzabolcs Nagy-10/+6
int8_t, u_int8_t, etc types are moved under _BSD_SOURCE
2014-05-30use cleaner code for handling float rounding in vfprintfSzabolcs Nagy-3/+1
CONCAT(0x1p,LDBL_MANT_DIG) is not safe outside of libc, use 2/LDBL_EPSILON instead. fix was proposed by Morten Welinder.
2014-05-30update netinet/in.h to match the current kernel uapiSzabolcs Nagy-1/+21
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-30add SO_BPF_EXTENSIONS socket optionSzabolcs Nagy-0/+1
this was introduced to query BPF extension support with getsockopt in linux 3.14, commit ea02f9411d9faa3553ed09ce0ec9f00ceae9885e
2014-05-30add sched_{get,set}attr syscall numbers and SCHED_DEADLINE macroSzabolcs Nagy-0/+31
linux 3.14 introduced sched_getattr and sched_setattr syscalls in commit d50dde5a10f305253cbc3855307f608f8a3c5f73 and the related SCHED_DEADLINE scheduling policy in commit aab03e05e8f7e26f51dee792beddcb5cca9215a5 but struct sched_attr "extended scheduling parameters data structure" is not yet exported to userspace (necessary for using the syscalls) so related uapi definitions are not added yet.
2014-05-30fix breakage from recent syscall commits due to missing errno macrosRich Felker-0/+3
2014-05-30fix for broken kernel side RLIM_INFINITY on mipsSzabolcs Nagy-3/+40
On 32 bit mips the kernel uses -1UL/2 to mark RLIM_INFINITY (and this is the definition in the userspace api), but since it is in the middle of the valid range of limits and limits are often compared with relational operators, various kernel side logic is broken if larger than -1UL/2 limits are used. So we truncate the limits to -1UL/2 in get/setrlimit and prlimit. Even if the kernel side logic consistently treated -1UL/2 as greater than any other limit value, there wouldn't be any clean workaround that allowed using large limits: * using -1UL/2 as RLIM_INFINITY in userspace would mean different infinity value for get/setrlimt and prlimit (where infinity is always -1ULL) and userspace logic could break easily (just like the kernel is broken now) and more special case code would be needed for mips. * translating -1UL/2 kernel side value to -1ULL in userspace would mean that -1UL/2 limit cannot be set (eg. -1UL/2+1 had to be passed to the kernel instead).
2014-05-30break down coarse-grained 64-bit-off_t syscall remappingsRich Felker-4/+16
using the existence of SYS_stat64 as the condition for remapping other related syscalls is no longer valid, since new archs that omit the old syscalls will not have SYS_stat or SYS_stat64, but still potentially need SYS_fstat and others remapped. it would probably be possible to get by with just one or two extra conditionals, but just breaking them all down into separate conditions is robust and not significantly heavier for the preprocessor.
2014-05-30additional fixes for linux kernel apis with old syscalls removedRich Felker-0/+9
2014-05-30fix sendfile syscall to use 64-bit off_tRich Felker-0/+5
somehow the remapping of this syscall to the 64-bit version was overlooked. the issue was found, and patch provided, by Stefan Kristiansson. presumably the reason this bug was not caught earlier is that the syscall takes a pointer to off_t rather than a value, so on little-endian systems, everything appears to work as long as the offset value fits in the low 31 bits. on big-endian systems, though, sendfile was presumably completely non-functional.
2014-05-29support linux kernel apis (new archs) with old syscalls removedRich Felker-29/+267
such archs are expected to omit definitions of the SYS_* macros for syscalls their kernels lack from arch/$ARCH/bits/syscall.h. the preprocessor is then able to select the an appropriate implementation for affected functions. two basic strategies are used on a case-by-case basis: where the old syscalls correspond to deprecated library-level functions, the deprecated functions have been converted to wrappers for the modern function, and the modern function has fallback code (omitted at the preprocessor level on new archs) to make use of the old syscalls if the new syscall fails with ENOSYS. this also improves functionality on older kernels and eliminates the incentive to program with deprecated library-level functions for the sake of compatibility with older kernels. in other situations where the old syscalls correspond to library-level functions which are not deprecated but merely lack some new features, such as the *at functions, the old syscalls are still used on archs which support them. this may change at some point in the future if or when fallback code is added to the new functions to make them usable (possibly with reduced functionality) on old kernels.
2014-05-29remove useless synchronization in exit and quick_exitRich Felker-11/+0
calling exit more than once invokes undefined behavior. in some cases it's desirable to detect undefined behavior and diagnose it via a predictable crash, but the code here was silently covering up an uncommon case (exit from more than one thread) and turning a much more common case (recursive calls to exit) into a permanent hang.
2014-05-27fix missing declaration of strcpy in implementation of tmpnamRich Felker-0/+1
2014-05-27overhaul tmpfile, tmpnam, and tempnam functionsRich Felker-55/+48
these all now use the shared __randname function internally, rather than duplicating logic for producing a random name. incorrect usage of the access syscall (which works with real uid/gid, not effective) has been removed, along with unnecessary heavy dependencies like snprintf.
2014-05-27fix sys_open macro for archs without the plain open syscallRich Felker-4/+4
2014-05-27fix placement of multiple inclusion guard endif in internal syscall.hRich Felker-2/+2
this was messed up during a recent commit when the socketcall macros were moved to the common internal/syscall.h, and the following commit expanded the problem by adding more new content outside the guard.
2014-05-26fix type of extended argument array to pselect6 syscallRich Felker-1/+2
this only matters on x32 (and perhaps future 32-on-64 abis for other archs); otherwise the type is long anyway. the cast through uintptr_t prevents nonsensical "sign extension" of pointers, and follows the principle that uintptr_t is the canonical integer type to which pointer conversion is safe.
2014-05-24support kernels with no SYS_open syscall, only SYS_openatRich Felker-10/+26
open is handled specially because it is used from so many places, in so many variants (2 or 3 arguments, setting errno or not, and cancellable or not). trying to do it as a function would not only increase bloat, but would also risk subtle breakage. this is the first step towards supporting "new" archs where linux lacks "old" syscalls.
2014-05-24overhaul siginfo_t definition in signal.hRich Felker-23/+28
the main motivation for this change is that, with the previous definition, it was arguably illegal, in standard C, to initialize both si_value and si_pid/si_uid with designated initializers, due to the rule that only one member of a union can have an initializer. whether or not this affected real-world application code, it affected some internal code, and clang was producing warnings (and possibly generating incorrect code). the new definition uses a more complex hierarchy of structs and unions to avoid the need to initialize more than one member of a single union in usage cases that make sense. further work would be needed to eliminate even the ones with no practical applications. at the same time, some fixes are made to the exposed names for nonstandard fields, to match what software using them expects.
2014-05-20release 1.1.1v1.1.1Rich Felker-1/+27
2014-05-20trivial formatting fix for the config.mak generated by configureRich Felker-1/+1
2014-05-19fix unhandled cases in strptimeRich Felker-5/+16
%C, %U, %W, and %y handling were completely missing; %C wrongly fell-through to unrelated cases, and the rest returned failure. for now, they all parse numbers in the proper forms and range-check the values, but they do not store the value anywhere. it's not clear to me whether, as "derived" fields, %U and %W should produce any result. they certainly cannot produce a result unless the year and weekday are also converted, but in this case it might be desirable for them to do so. clarification is needed on the intended behavior of strptime in cases like this. %C and %y have well-defined behavior as long as they are used together (and %y is defined by itself but may change in the future). implementing them (including their correct interaction) is left as a later change to be made. finally, strptime now rejects unknown/invalid format characters instead of ignoring them.
2014-05-19remove unsupported nonstandard sysconf macros and their table entriesRich Felker-120/+0
some of these may have been from ancient (pre-SUSv2) POSIX versions; more likely, they were from POSIX drafts or glibc interpretations of what ancient versions of POSIX should have added (instead they made they described functionality mandatory and/or dropped it completely). others are purely glibc-isms, many of them ill-thought-out, like providing ways to lookup the min/max values of types at runtime (despite the impossibility of them changing at runtime and the impossibility of representing ULONG_MAX in a return value of type long). since our sysconf implementation does not support or return meaningful values for any of these, it's harmful to have the macros around; applications' build scripts may detect and attempt to use them, only to get -1/EINVAL as a result. if removing them does break some applications, and it's determined that the usage was reasonable, some of these could be added back on an as-needed basis, but they should return actual meaningful values, not junk like they were returning before.
2014-05-19rework sysconf table to treat zero entries as invalidRich Felker-10/+13
based on patch by Timo Teräs. previously, the value zero was used as a literal zero, meaning that all invalid sysconf "names", which should result in sysconf returning -1, had to be explicitly listed. (in addition, it was not possible for sysconf to set errno to EINVAL, as there was no distinction between -1 as an error and -1 as a valid result.) now, the value 0 is used for invalid/undefined slots in the table and a new switch table entry is used for returning literal zeros. in addition, an off-by-one error in checking against the table size is fixed.
2014-05-19add configure check for broken gcc 4.9.0 and possibly other versionsRich Felker-5/+37
this is gcc bug #61144. the broken compiler is detected, but the user must manually work around it. this is partly to avoid complex logic for adding workaround CFLAGS and attempting to recheck with them, and partly for the sake of letting the user know the compiler is broken (since the workaround will result in less-efficient code production). some refactoring was also needed to move the check for gcc outside of the check for whether to build the compiler wrapper.
2014-05-13add cp437 and cp850 to available iconv conversionsRich Felker-177/+206
perhaps some additional legacy DOS-era codepages would also be useful to have, but these are the ones for which there has been demand. the size of the diff is due to the fact that legacychars.h is updated in such a way that new characters are inserted into the table in unicode codepoint order; thus other mappings in codepages.h have changed to reflect the new table indices of their characters.
2014-05-12add configure check for working compilerRich Felker-0/+9
without this, broken choices of CC/CPPFLAGS/CFLAGS don't show up until late in the configure process where they are confusingly reported as a different failure such as incorrect long double type.
2014-05-08fix strftime %s not to zero pad with default width=2Szabolcs Nagy-0/+1
2014-05-04remove useless __yield alias for sched_yieldRich Felker-4/+1
this is no longer used for anything, and reportedly clashed with a builtin on certain compilers.
2014-04-30fix arm thread-pointer/atomic asm when compiling to thumb codeRich Felker-6/+7
armv7/thumb2 provides a way to do atomics in thumb mode, but for armv6 we need a call to arm mode. this commit is based on a patch by Stephen Thomas which fixed the armv7 cases but not the armv6 ones. all of this should be revisited if/when runtime selection of thread pointer access and atomics are added.
2014-04-30fix missing SO_RCVBUFFORCE and SO_SNDBUFFORCE in mips socket.hRich Felker-1/+2
2014-04-27fix superh nofpu check on old gcc versionsBobby Bingham-1/+1
As far as gcc3 knows, sh4 is the only processor version that can have an FPU, so it indicates the FPU's presence by defining __SH4__. This is not defined if there is no FPU, even if the processor really is an SH4. Starting with gcc4, there is support for the sh2a processor, which has an FPU but is not an SH4. gcc4 therefore additionally defines __SH_FPU_ANY__ when there is an FPU, but still doesn't define __SH4__ for an FPU-less sh4. Therefore, to support all gcc versions, we must look at both preprocessor symbols.
2014-04-22perform minimal sanity checks on zoneinfo files loaded via TZ variableRich Felker-0/+5
previously, setting TZ to the pathname of a file which was not a valid zoneinfo file would usually cause programs using local time zone based operations to crash. the new code checks the file size and magic at the beginning of the file, which seems sufficient to prevent accidental misconfiguration from causing crashes. attempting to make fully-robust validation would be futile unless we wanted to drop use of mmap (shared zoneinfo) and instead read it into a local buffer, since such validation would be subject to race conditions with modification of the file.
2014-04-22do not try to interpret implementation specific strings as tz definitionTimo Teräs-0/+1
2014-04-21make __init_libc static for non-shared libcRich Felker-0/+3
being static allows it to be inlined in __libc_start_main; inlining should take place at all levels since the function is called exactly once. this further reduces mandatory startup code size for static binaries.
2014-04-21further micro-optimize startup code for sizeRich Felker-23/+14
there is no reason (and seemingly there never was any) for __init_security to be its own function. it's linked unconditionally so it can just be placed inline in __init_libc.
2014-04-21micro-optimize some startup code for sizeRich Felker-7/+4
moving the call to __init_ssp from __init_security to __init_libc makes __init_security a leaf function, which allows the compiler to make it smaller. __init_libc is already non-leaf, and the additional call makes no difference to the amount of register spillage. in addition, it really made no sense for the call to __init_ssp to be buried inside __init_security rather than parallel with other init functions.
2014-04-21allow zoneinfo-path-relative filenames with no slashes in TZ variableRich Felker-12/+8
since the form TZ=name is reserved for POSIX-form time zone strings, TZ=:name needs to be used when the zoneinfo filename is in the top-level zoneinfo directory and therefore does not contain a slash. previously the leading colon was merely dropped, making it impossible to access such zones without a full absolute pathname. changes based on patch by Timo Teräs.
2014-04-20expose public execvpe interfaceM Farkas-Dyck-0/+4
2014-04-18fix false negatives with periodic needles in strstr, wcsstr, and memmemRich Felker-3/+3
in cases where the memorized match range from the right factor exceeded the length of the left factor, it was wrongly treated as a mismatch rather than a match. issue reported by Yves Bastide.
2014-04-17make socketcall types common as they are same for all architecturesTimo Teräs-40/+23
2014-04-16add options when explicitly invoking dynamic loaderRich Felker-2/+21
so far the options are --library-path and --preload which override the corresponding environment variables, and --list which forces the behavior of ldd even if the invocation name is not ldd. both the two-arg form and the one-arg form using an equals sign are supported. based loosely on a patch proposed by Rune.
2014-04-16release 1.1.0v1.1.0Rich Felker-1/+29
2014-04-16add working vdso clock_gettime support, including static linkingRich Felker-5/+108
the vdso symbol lookup code is based on the original 2011 patch by Nicholas J. Kain, with some streamlining, pointer arithmetic fixes, and one symbol version matching fix. on the consumer side (clock_gettime), per-arch macros for the particular symbol name and version to lookup are added in syscall_arch.h, and no vdso code is pulled in on archs which do not define these macros. at this time, vdso is enabled only on x86_64. the vdso support at the dynamic linker level is no longer useful to libc, but is left in place for the sake of debuggers (which may need the vdso in the link map to find its functions) and possibly use with dlsym.
2014-04-15fix deadlock race in pthread_onceRich Felker-2/+1
at the end of successful pthread_once, there was a race window during which another thread calling pthread_once would momentarily change the state back from 2 (finished) to 1 (in-progress). in this case, the status was immediately changed back, but with no wake call, meaning that waiters which arrived during this short window could block forever. there are two possible fixes. one would be adding the wake to the code path where it was missing. but it's better just to avoid reverting the status at all, by using compare-and-swap instead of swap.
2014-04-15fix RLIMIT_ constants for mipsSzabolcs Nagy-2/+10
The mips arch is special in that it uses different RLIMIT_ numbers than other archs, so allow bits/resource.h to override the default RLIMIT_ numbers (empty on all archs except mips). Reported by orc.
2014-04-15add _SC_PHYS_PAGES and _SC_AVPHYS_PAGES extentions to sysconfRich Felker-2/+17