about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Rename xlocale.h to bits/types/__locale_t.h.Zack Weinberg2017-06-2036-112/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | xlocale.h is already a single-type micro-header, defining struct __locale_struct and the typedefs __locale_t and locale_t. This patch brings it into the bits/types/ scheme: there are now bits/types/__locale_t.h which defines only __locale_struct and __locale_t, and bits/types/locale_t.h which defines locale_t as well as the other two. None of *our* headers need __locale_t.h, but it appears to me that libstdc++ could make use of it. There are a lot of external uses of xlocale.h, but all the uses I checked had an autoconf test or equivalent for its existence. It has never been available from other C libraries, and it has always contained a comment reading "This file is not standardized, don't rely on it, it can go away without warning" so I think dropping it is pretty safe. I also took the opportunity to clean up comments in various public header files that still talk about the *_l interfaces as though they were completely nonstandard. There are a few of them, notably the strtoX_l and wcstoX_l families, that haven't been standardized, but the bulk are in POSIX.1-2008. * locale/xlocale.h: Rename to... * locale/bits/types/__locale_t.h: ...here. Adjust commentary. Only define struct __locale_struct and __locale_t, not locale_t. * locale/bits/types/locale_t.h: New file; define locale_t here. * locale/Makefile (headers): Update to match. * include/xlocale.h: Delete wrapper. * include/bits/types/__locale_t.h: New wrapper. * include/bits/types/locale_t.h: New wrapper. * ctype/ctype.h, include/printf.h, include/time.h * locale/langinfo.h, locale/locale.h, stdlib/monetary.h * stdlib/stdlib.h, string/string.h, string/strings.h, time/time.h * wcsmbs/wchar.h, wctype/wctype.h: Use bits/types/locale_t.h. Correct outdated comments regarding the standardization status of the functions that take locale_t arguments. * stdlib/strtod_l.c, stdlib/strtof_l.c, stdlib/strtol_l.c * stdlib/strtold_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c * sysdeps/ieee754/ldbl-128ibm/strtold_l.c * sysdeps/ieee754/ldbl-64-128/strtold_l.c * wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c * wcsmbs/wcstof_l.c, wcsmbs/wcstold.c, wcsmbs/wcstold_l.c: Don't include xlocale.h. If necessary, include locale.h instead. * stdlib/strtold_l.c: Unconditionally include wchar.h.
* Consolidate Linux openat implementationAdhemerval Zanella2017-06-205-38/+71
| | | | | | | | | | | | | | | | | | | | This patch consolidates the open Linux syscall implementation on sysdeps/unix/sysv/linux/open{64}.c. The changes are: 1. Remove wordsize-64 openat{64}. 2. For architetures that define __OFF_T_MATCHES_OFF64_T openat64 will be default one with alias to required symbols. Otherwise openat64 will pass the required O_LARGEFILE flag on syscall. Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32, arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu. * sysdeps/unix/sysv/linux/openat.c (__libc_openat): Build only for !__OFF_T_MATCHES_OFF64_T. * sysdeps/unix/sysv/linux/openat64.c (__libc_openat64): New implementation based on open64. * sysdeps/unix/sysv/linux/wordsize-64/openat.c: Remove file. * sysdeps/unix/sysv/linux/wordsize-64/openat64.c: Likewise.
* Move x86 specific tunables to x86/dl-tunables.listH.J. Lu2017-06-203-12/+39
| | | | | * elf/dl-tunables.list: Move x86 specific tunables to ... * sysdeps/x86/dl-tunables.list: Here. New file.
* conformtest: XFAIL uc_mcontext test for powerpc32 (bug 21635).Joseph Myers2017-06-204-3/+18
| | | | | | | | | | | | | | | This patch XFAILs one test where the powerpc32 ucontext_t has the wrong type of a field, to allow the conform/ tests as a whole to pass once the namespace issues are fixed. Tested with build-many-glibcs.py. [BZ #21635] * sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile [$(subdir) = conform] (conformtest-xfail-conds): New variable. * conform/data/signal.h-data (uc_mcontext): XFAIL for powerpc32-linux. * conform/data/ucontext.h-data (uc_mcontext): Likewise.
* conformtest: XFAIL uc_sigmask test for ia64 (bug 21634).Joseph Myers2017-06-204-3/+19
| | | | | | | | | | | | | | This patch XFAILs one test where the ia64 ucontext_t has the wrong type of a field, to allow the conform/ tests as a whole to pass once the namespace issues are fixed. Tested with build-many-glibcs.py. [BZ #21634] * sysdeps/unix/sysv/linux/ia64/Makefile [$(subdir) = conform] (conformtest-xfail-conds): New variable. * conform/data/signal.h-data (uc_sigmask): XFAIL for ia64-linux. * conform/data/ucontext.h-data (uc_sigmask): Likewise.
* Add powf traceWilco Dijkstra2017-06-202-0/+2191
| | | | | | | | Add a workload for powf. This is a reduced trace based on 2.3 billion samples extracted from wrf. The distribution of values, in particular frequency of commonly used operands is the same as in the full trace. * benchtests/powf-inputs: Add reduced trace from wrf.
* tunables: Add IFUNC selection and cache sizesH.J. Lu2017-06-208-1/+464
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current IFUNC selection is based on microbenchmarks in glibc. It should give the best performance for most workloads. But other choices may have better performance for a particular workload or on the hardware which wasn't available at the selection was made. The environment variable, GLIBC_TUNABLES=glibc.tune.ifunc=-xxx,yyy,-zzz...., can be used to enable CPU/ARCH feature yyy, disable CPU/ARCH feature yyy and zzz, where the feature name is case-sensitive and has to match the ones in cpu-features.h. It can be used by glibc developers to override the IFUNC selection to tune for a new processor or improve performance for a particular workload. It isn't intended for normal end users. NOTE: the IFUNC selection may change over time. Please check all multiarch implementations when experimenting. Also, GLIBC_TUNABLES=glibc.tune.x86_non_temporal_threshold=NUMBER is provided to set threshold to use non temporal store to NUMBER, GLIBC_TUNABLES=glibc.tune.x86_data_cache_size=NUMBER to set data cache size, GLIBC_TUNABLES=glibc.tune.x86_shared_cache_size=NUMBER to set shared cache size. * elf/dl-tunables.list (tune): Add ifunc, x86_non_temporal_threshold, x86_data_cache_size and x86_shared_cache_size. * manual/tunables.texi: Document glibc.tune.ifunc, glibc.tune.x86_data_cache_size, glibc.tune.x86_shared_cache_size and glibc.tune.x86_non_temporal_threshold. * sysdeps/unix/sysv/linux/x86/dl-sysdep.c: New file. * sysdeps/x86/cpu-tunables.c: Likewise. * sysdeps/x86/cacheinfo.c (init_cacheinfo): Check and get data cache size, shared cache size and non temporal threshold from cpu_features. * sysdeps/x86/cpu-features.c [HAVE_TUNABLES] (TUNABLE_NAMESPACE): New. [HAVE_TUNABLES] Include <unistd.h>. [HAVE_TUNABLES] Include <elf/dl-tunables.h>. [HAVE_TUNABLES] (TUNABLE_CALLBACK (set_ifunc)): Likewise. [HAVE_TUNABLES] (init_cpu_features): Use TUNABLE_GET to set IFUNC selection, data cache size, shared cache size and non temporal threshold. * sysdeps/x86/cpu-features.h (cpu_features): Add data_cache_size, shared_cache_size and non_temporal_threshold.
* Improve math benchmark infrastructureWilco Dijkstra2017-06-203-18/+51
| | | | | | | | | | | | | | Improve support for math function benchmarking. This patch adds a feature that allows accurate benchmarking of traces extracted from real workloads. This is done by iterating over all samples rather than repeating each sample many times (which completely ignores branch prediction and cache effects). A trace can be added to existing math function inputs via "## name: workload-<name>", followed by the trace. * benchtests/README: Describe workload feature. * benchtests/bench-skeleton.c (main): Add support for benchmarking traces from workloads.
* Fix fallout from bits/string.h removal.Zack Weinberg2017-06-204-17/+12
| | | | | | | | | | | | | | | Remove one more string inline that was defined directly in string.h; in the absence of the rest of the inlines, it broke the build. Like other ifunc shims for these functions, x86_64/multiarch/{mem,st}pcpy.c need to define __NO_STRING_INLINES and NO_MEMPCPY_STPCPY_REDIRECT. * string/string.h (__mempcpy_inline): Delete. * sysdeps/x86_64/multiarch/mempcpy.c * sysdeps/x86_64/multiarch/stpcpy.c: Define NO_MEMPCPY_STPCPY_REDIRECT and __NO_STRING_INLINES before including string.h.
* Add powf bench testsPaul Clarke2017-06-203-1/+337
| | | | | | | | | | | | | | | | | | | | Add powf() bench test with input which covers these cases: - positive base to positive exponent - exponent 0 - negative base to even exponent - exponent 1 - exponent -1 - squared - squareroot - 1 to negative exponent - -1 to negative exponent - base 0 - -1 to even exponent - small base - small exponent * benchtests/Makefile (bench-math): Add powf. * benchtests/powf-inputs: New file.
* Mention in NEWS that __(NO|USE)_STRING_INLINES don't do anything anymore.Zack Weinberg2017-06-201-0/+4
|
* Remove bits/string.h.Zack Weinberg2017-06-2023-2452/+264
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These machine-dependent inline string functions have never been on by default, and even if they were a good idea at the time they were introduced, they haven't really been touched in ten to fifteen years and probably aren't a good idea on current-gen processors. Current thinking is that this class of optimization is best left to the compiler. * bits/string.h, string/bits/string.h * sysdeps/aarch64/bits/string.h * sysdeps/m68k/m680x0/m68020/bits/string.h * sysdeps/s390/bits/string.h, sysdeps/sparc/bits/string.h * sysdeps/x86/bits/string.h: Delete file. * string/string.h: Don't include bits/string.h. * string/bits/string3.h: Rename to bits/string_fortified.h. No need to undef various symbols that the removed headers might have defined as macros. * string/Makefile (headers): Remove bits/string.h, change bits/string3.h to bits/string_fortified.h. * string/string-inlines.c: Update commentary. Remove definitions of various macros that nothing looks at anymore. Don't directly include bits/string.h. Set _STRING_INLINE_unaligned here, based on compiler-predefined macros. * string/strncat.c: If STRNCAT is not defined, or STRNCAT_PRIMARY _is_ defined, provide internal hidden alias __strncat. * include/string.h: Declare internal hidden alias __strncat. Only forward __stpcpy to __builtin_stpcpy if __NO_STRING_INLINES is not defined. * include/bits/string3.h: Rename to bits/string_fortified.h, update to match above. * sysdeps/i386/string-inlines.c: Define compat symbols for everything formerly defined by sysdeps/x86/bits/string.h. Make existing definitions into compat symbols as well. Remove some no-longer-necessary messing around with macros. * sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c * sysdeps/powerpc/powerpc64/multiarch/mempcpy.c * sysdeps/powerpc/powerpc64/multiarch/stpcpy.c * sysdeps/s390/multiarch/mempcpy.c No need to define _HAVE_STRING_ARCH_mempcpy. Do define __NO_STRING_INLINES and NO_MEMPCPY_STPCPY_REDIRECT. * sysdeps/i386/i686/multiarch/strncat-c.c * sysdeps/s390/multiarch/strncat-c.c * sysdeps/x86_64/multiarch/strncat-c.c Define STRNCAT_PRIMARY. Don't change definition of libc_hidden_def.
* manual: Complete @standards in lang.texi.Rical Jasan2017-06-202-20/+43
| | | | | | | | | | | | | | | | | | | | | | | * manual/lang.texi (LDBL_MANT_DIG): Add annotation. (LDBL_DIG): Likewise. (LDBL_MIN_EXP): Likewise. (LDBL_MIN_10_EXP): Likewise. (LDBL_MAX_EXP): Likewise. (LDBL_MAX_10_EXP): Likewise. (LDBL_MAX): Likewise. (LDBL_MIN): Likewise. (LDBL_EPSILON): Likewise. (FLT_ROUNDS): Change standard from ISO to C90. (FLT_RADIX): Likewise. (FLT_MANT_DIG, DBL_MANT_DIG): Likewise. (FLT_DIG, DBL_DIG): Likewise. (FLT_MIN_EXP, DBL_MIN_EXP): Likewise. (FLT_MIN_10_EXP, DBL_MIN_10_EXP): Likewise. (FLT_MAX_EXP, DBL_MAX_EXP): Likewise. (FLT_MAX_10_EXP, DBL_MAX_10_EXP): Likewise. (FLT_MAX, DBL_MAX): Likewise. (FLT_MIN, DBL_MIN): Likewise. (FLT_EPSILON, DBL_EPSILON): Likewise.
* Remove pre-GCC-4.9 MIPS code.Joseph Myers2017-06-193-327/+52
| | | | | | | | | | | | | | This patch removes some MIPS code in glibc that was conditional on old GCC versions no longer supported for building glibc. Tested with build-many-glibcs.py. * sysdeps/mips/atomic-machine.h (R10K_BEQZ_INSN): Remove. [__GNUC_PREREQ (4, 8) || __mips16]: Make code unconditional. [!__GNUC_PREREQ (4, 8) && !__mips16]: Remove conditional code. * sysdeps/mips/math-tests.h [_MIPS_SIM != _ABIO32 && !__GNUC_PREREQ (4, 9)]: Remove conditional code.
* DCIGETTEXT: Do not make copy of localenameFlorian Weimer2017-06-192-1/+6
|
* ld.so: Reject overly long LD_AUDIT path elementsFlorian Weimer2017-06-192-15/+106
| | | | Also only process the last LD_AUDIT entry.
* ld.so: Reject overly long LD_PRELOAD path elementsFlorian Weimer2017-06-192-16/+73
|
* Fix wait3 namespace (bug 21625).Joseph Myers2017-06-192-1/+8
| | | | | | | | | | | | | | The wait3 function was removed in the 2001 edition of POSIX. sys/wait.h wrongly declares it for the 2001 and 2008 editions of POSIX when XSI features are enabled. This patch fixes the conditionals. Tested for x86_64. [BZ #21625] * posix/sys/wait.h (strust rusage forward declaration): Change [__USE_XOPEN_EXTENDED] conditional to [__USE_XOPEN_EXTENDED && !__USE_XOPEN2K]. (wait3): Likewise.
* Require GCC 4.9 or later for building glibc.Joseph Myers2017-06-196-6/+18
| | | | | | | | | | | | | | | | | | | This patch makes configure require GCC 4.9 or later for building glibc, and documents that requirement. Requiring GCC 4.9 or later allows use of _Generic (as in tzcode). It would allow <stdatomic.h> and _Atomic to be used as well if desired, although we need to avoid any libatomic dependencies on any platforms. This patch is explicitly the minimum to implement a new version requirement, with any consequent cleanups of conditional code (not in installed headers or files shared with gnulib etc.) to be done separately. Tested for x86_64. * configure.ac (libc_cv_compiler_ok): Require GCC 4.9 or later. * configure: Regenerated. * manual/install.texi (Tools for Compilation): Document requirement for GCC 4.9 or later. * INSTALL: Regenerated.
* CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1 programs [BZ #21624]Florian Weimer2017-06-192-1/+9
| | | | | | | | LD_LIBRARY_PATH can only be used to reorder system search paths, which is not useful functionality. This makes an exploitable unbounded alloca in _dl_init_paths unreachable for AT_SECURE=1 programs.
* S390: Sync ptrace.h with kernel. [BZ #21539]Stefan Liebler2017-06-196-22/+182
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch removes PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS and PTRACE_SETFPREGS as these requests does not exist on s390 kernel. But the kernel has support for PTRACE_SINGLEBLOCK, PTRACE_SECCOMP_GET_FILTER, PTRACE_PEEKUSR_AREA, PTRACE_POKEUSR_AREA, PTRACE_GET_LAST_BREAK, PTRACE_ENABLE_TE, PTRACE_DISABLE_TE and PTRACE_TE_ABORT_RAND. Thus those are defined now. The current kernel s390 specific ptrace.h file also defines PTRACE_PEEKTEXT_AREA, PTRACE_PEEKDATA_AREA, PTRACE_POKETEXT_AREA, PTRACE_POKEDATA_AREA, PTRACE_PEEK_SYSTEM_CALL, PTRACE_POKE_SYSTEM_CALL and PTRACE_PROT, but those requests are not supported. Thus those defines are skipped in glibc ptrace.h. There were old includes of ptrace.h in sysdeps/s390/fpu/fesetenv.c. The ptrace feature isn't used there anymore, thus I removed the includes. Before this patch, <glibc>/sysdeps/unix/sysv/linux/s390/sys/ptrace.h uses ptrace-request 12 for PTRACE_GETREGS, but <kernel>/include/uapi/linux/ptrace.h uses 12 for PTRACE_SINGLEBLOCK. The s390 kernel has never had support for PTRACE_GETREGS! Thus glibc ptrace.h is adjusted to match kernel ptrace.h. The new s390 specific test ensures, that PTRACE_SINGLEBLOCK defined in glibc works as expected. If the kernel would interpret it as PTRACE_GETREGS, then the testcase will not make any progress and will time out. ChangeLog: [BZ #21539] * NEWS: Mention s390 ptrace request changes. * sysdeps/unix/sysv/linux/s390/sys/ptrace.h (PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS, PTRACE_SETFPREGS): Remove enum constant. (PT_GETREGS, PT_SETREGS, PT_GETFPREGS, T_SETFPREGS): Remove defines. (PTRACE_SINGLEBLOCK): New enum constant. (PT_STEPBLOCK): New define. (PTRACE_PEEKUSR_AREA, PTRACE_POKEUSR_AREA, PTRACE_GET_LAST_BREAK, PTRACE_ENABLE_TE, PTRACE_DISABLE_TE, PTRACE_TE_ABORT_RAND): New enum constant and define. * sysdeps/s390/fpu/fesetenv.c: Remove ptrace.h includes. * sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c: New file. * sysdeps/unix/sysv/linux/s390/Makefile: Add test.
* resolv: Use getline for configuration file reading in res_vinit_1Florian Weimer2017-06-192-24/+49
|
* resolv: Report allocation errors in __res_vinitFlorian Weimer2017-06-194-34/+101
|
* resolv: Reformat res_vinit and related functions to GNU styleFlorian Weimer2017-06-192-334/+370
| | | | Also remove some obsolete comments.
* resolv: Introduce is_sort_mask and call it from res_vinitFlorian Weimer2017-06-192-5/+16
|
* resolv: Remove DEBUG preprocessor conditionals from res_setoptionsFlorian Weimer2017-06-192-21/+5
|
* resolv: Move _res deallocation functions to their own fileFlorian Weimer2017-06-194-56/+145
|
* resolv: Move res_randomid to its own fileFlorian Weimer2017-06-194-8/+99
|
* resolv: Make __res_vinit hiddenFlorian Weimer2017-06-194-5/+7
| | | | And remove unnecessary separate declarations.
* Fix another x86 sys/ucontext.h namespace issue (bug 21457).Joseph Myers2017-06-192-1/+5
| | | | | | | | | | | This patch fixes a namespace issue for one more field in the x86 sys/ucontext.h that I missed in my previous changes. Tested for x86_64. [BZ #21457] * sysdeps/unix/sysv/linux/x86/sys/ucontext.h [__x86_64__] (struct _libc_xmmreg): Use __ctx in defining field.
* Fix siginterrupt namespace (bug 21597).Joseph Myers2017-06-192-5/+9
| | | | | | | | | | | | | | The siginterrupt function is XSI-shaded in POSIX. glibc wrongly declares it in <signal.h> for non-XSI POSIX.1:2008. This patch fixes the conditionals (moving it into the __USE_XOPEN_EXTENDED || __USE_MISC block as the minimum conservative change, although it's not clear this obsolescent function should be declared by default). Tested for x86_64. [BZ #21597] * signal/signal.h (siginterrupt): Make declaration conditional on [__USE_XOPEN_EXTENDED || __USE_MISC].
* Fix signal stack namespace (bug 21584).Joseph Myers2017-06-192-4/+13
| | | | | | | | | | | | | | | | | | | In POSIX.1:2008, various signal stack symbols - sigaltstack, SS_*, SIGSTKSZ, MINSIGSTKSZ - are all XSI-shaded. glibc wrongly makes them visible for non-XSI POSIX. This patch fixes the conditionals, leaving the symbols available for __USE_MISC as it seems likely some of them are widely used and should be visible by default. (Note that stack_t is *not* XSI-shaded and so the conditionals on that are correctly unchanged.) Tested for x86_64. [BZ #21584] * signal/signal.h: Make includes of <bits/sigstack.h> and <bits/ss_flags.h> conditional on [__USE_XOPEN_EXTENDED || __USE_MISC]. (sigaltstack): Make declaration conditional on [__USE_XOPEN_EXTENDED || __USE_MISC].
* Define struct rusage in sys/wait.h when required (bug 21575).Joseph Myers2017-06-1910-278/+162
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some older standards (XPG4.2 through POSIX.1:2001, XSI only) require sys/wait.h to include the definition of struct rusage. This is missing in glibc. This patch adds the required definition. struct rusage is moved to a new header bits/types/struct_rusage.h to avoid bringing in the whole of sys/resource.h (although the standards in question do allow the whole of sys/resource.h to be brought in). In the five bits/resource.h headers, the only variation between the definitions of struct rusage is that the sysdeps/unix/sysv/linux version is prepared for x32 (by having anonymous unions with __syscall_slong_t fields) and the others are not. Thus, this version is suitable for use generically (everything other than x32 simply has __syscall_slong_t the same as long int, so there are no API or ABI changes involved, and anonymous unions are already a required language feature for glibc headers elsewhere), and this patch uses it as a base for the single implementation of bits/types/struct_rusage.h. Tested for x86_64, and with build-many-glibcs.py. [BZ #21575] * resource/bits/types/struct_rusage.h: New file. * include/bits/types/struct_rusage.h: Likewise. * bits/resource.h (struct rusage): Include <bits/types/struct_rusage.h> instead of defining here. * sysdeps/unix/sysv/linux/bits/resource.h (struct rusage): Likewise. * sysdeps/unix/sysv/linux/alpha/bits/resource.h (struct rusage): Likewise. * sysdeps/unix/sysv/linux/mips/bits/resource.h (struct rusage): Likewise. * sysdeps/unix/sysv/linux/sparc/bits/resource.h (struct rusage): Likewise. * resource/Makefile (headers): Add bits/types/struct_rusage.h. * posix/sys/wait.h [__USE_XOPEN_EXTENDED && !__USE_XOPEN2K8]: Include <bits/types/struct_rusage.h>
* dynarray: Use libc_hidden_proto only for !_ISOMACFlorian Weimer2017-06-192-4/+11
| | | | | With this change, it is possible to use dynarray from non-internal tests.
* Fix typo when undefining weak_aliasSiddhesh Poyarekar2017-06-192-1/+5
| | | | | | The macro directive #undef was miswritten as #undefine. * sysdeps/x86_64/multiarch/rawmemchr-sse2.S: Fix typo.
* Fix gen-tunables.awk to work with older awkAdhemerval Zanella2017-06-192-34/+38
| | | | | | | Awk 3.1.x does not support multi-dimensional arrays, so fix up to make sure that gen-tunables.awk works on it. * scripts/gen-tunables.awk: Avoid multi-dimensional arrays.
* S390: Fix build with gcc configured with --enable-default-pie. [BZ #21537]Stefan Liebler2017-06-194-24/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Building glibc with gcc configured with --enable-default-pie failed on s390 due to assembler messages: ../sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S:44: Error: junk at end of line, first unrecognized character is `@' HIDDEN_JUMPTARGET was expanded to exit@PLT@GOTOFF. If SHARED is not defined, HIDDEN_JUMPTARGET is defined to JUMPTARGET in sysdeps/s390/s390-32/sysdep.h. There it expanded to exit@PLT in non SHARED case as PIC is defined if gcc is configured with --enable-default-pie. Thus I've changed the "ifdef PIC" to "ifdef SHARED" as we do not want PLTs in the static obj files. I've also changed this in sysdeps/s390/s390-64/sysdep.h. I've also adjusted sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S. If glibc is configured with --disable-hidden-plt, then NO_HIDDEN is defined. In SHARED case HIDDEN_JUMPTARGET would be expanded to exit@PLT@GOTOFF instead of __GI_exit@GOTOFF. Now we jump to: - __GI_exit if SHARED is defined - exit@PLT if SHARED and NO_HIDDEN is defined - exit if both are not defined. On s390 31bit we have to setup GOT pointer in r12 if we use a PLT stub. Therefore I use SYSCALL_PIC_SETUP from sysdep.h and added the missing semicolons. ChangeLog: [BZ #21537] * sysdeps/s390/s390-32/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP): Check SHARED instead of PIC. (SYSCALL_PIC_SETUP): Add missing semicolons. * sysdeps/s390/s390-64/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP): Check SHARED instead of PIC. * sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S (__makecontext_ret): Adjust code to jump to exit.
* s390: optimize syscall functionChristian Borntraeger2017-06-193-18/+12
| | | | | | | | | | | | | | Since kernel 2.6.0 all Linux version accept the system call number in register 1 for svc 0. There is no need to have special handling that uses EX for system calls < 256. This will simplify and speed up that code. A microbenchmark doing "syscall(__NR_getpid);" in a loops gets faster by ~12%. * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S: Simplify code by always using SVC 0 instead of EX. * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise.
* Remove _dl_out_of_memory from elf/VersionsH.J. Lu2017-06-162-1/+5
| | | | | | | | | | Since _dl_out_of_memory is static in elf/dl-error-skeleton.c: static const char _dl_out_of_memory[] = "out of memory"; remove _dl_out_of_memory from elf/Versions. * elf/Versions (ld): Remove _dl_out_of_memory.
* Update timezone code from tzcode 2017b.Joseph Myers2017-06-168-615/+877
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch updates files coming from tzcode to the versions in tzcode 2017b. A couple of changes to other glibc code are needed. time/tzset.c was using the SECSPERDAY macro from tzfile.h, which no longer defines that macro, so a local definition is added to tzset.c. Because timezone/private.h now defines the _ macro whenever HAVE_GETTEXT is true, even if it was previously defined, it is also necessary to avoid a conflict with the definition in include/libintl.h. Defining _ISOMAC is the obvious way to avoid such internal definitions being visible, together with defining TZ_DOMAIN so that zic and zdump continue to get the messages from the libc domain as desired. However, zic and zdump rely on PKGVERSION and REPORT_BUGS_TO from config.h, which is not included by default with _ISOMAC, so -include config.h needs adding to the options for these programs as well. Together those changes allow unmodified tzcode 2017b sources to work in glibc. Tested for x86_64. * timezone/private.h: Update from tzcode 2017b. * timezone/tzfile.h: Likewise. * timezone/tzselect.ksh: Likewise. * timezone/zdump.c: Likewise. * timezone/zic.c: Likewise. * timezone/Makefile (tz-cflags): Add -D_ISOMAC -DTZ_DOMAIN='"libc"' -include $(common-objpfx)config.h. * time/tzset.c (SECSPERDAY): New macro.
* manual: Complete @standards in string.texi.Rical Jasan2017-06-162-2/+8
| | | | | | * manual/string.texi (strdup): Complete header and standards annotation. (strncpy): Likewise.
* manual: Complete @standards in arith.texi.Rical Jasan2017-06-162-7/+27
| | | | | | | | | | | | | | | | | * manual/arith.texi (FP_NAN): Add or complete header and standard annotations. (FP_INFINITE): Likewise. (FP_ZERO): Likewise. (FP_SUBNORMAL): Likewise. (FP_NORMAL): Likewise. (SNAN): Likewise. (SNANL): Likewise. (totalorderf): Likewise. (totalorderl): Likewise. (totalordermagf): Likewise. (totalordermagl): Likewise. (_Complex_I): Likewise. (I): Likewise.
* manual: Complete @standards in argp.texi.Rical Jasan2017-06-162-0/+32
| | | | | | | | | | | | | | | | | | * manual/argp.texi (ARGP_HELP_USAGE): Add missing header and standard annotation. (ARGP_HELP_SHORT_USAGE): Likewise. (ARGP_HELP_SEE): Likewise. (ARGP_HELP_LONG): Likewise. (ARGP_HELP_PRE_DOC): Likewise. (ARGP_HELP_POST_DOC): Likewise. (ARGP_HELP_DOC): Likewise. (ARGP_HELP_BUG_ADDR): Likewise. (ARGP_HELP_LONG_ONLY): Likewise. (ARGP_HELP_EXIT_ERR): Likewise. (ARGP_HELP_EXIT_OK): Likewise. (ARGP_HELP_STD_ERR): Likewise. (ARGP_HELP_STD_USAGE): Likewise. (ARGP_HELP_STD_HELP): Likewise.
* manual: Replace summary.awk with summary.pl.Rical Jasan2017-06-1541-4870/+2611
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Summary is now generated from @standards, and syntax-checking is performed. If invalid @standards syntax is detected, summary.pl will fail, reporting all errors. Failure and error reporting is disabled for now, however, since much of the manual is still incomplete wrt. header and standards annotations. Note that the sorting order of the Summary has changed; summary.pl respects the locale, like summary.awk did, but the use of LC_ALL=C is introduced in the Makefile. Other notable deviations are improved detection of the annotated elements' names, which are used for sorting, and improved detection of the @node used to reference into the manual. The most noticeable difference in the rendered Summary is that entries may now contain multiple lines, one for each header and standard combination. summary.pl accepts a `--help' option, which details the expected syntax of @standards. If errors are reported, the user is directed to this feature for further information. * manual/Makefile: Generate summary.texi with summary.pl. Force use of the C locale. Update Perl dependency comment. * manual/header.texi: Update reference to summary.awk. * manual/macros.texi: Refer authors to `summary.pl --help'. * manual/summary.awk: Remove file. * manual/summary.pl: New file. Generate summary.texi, and check for @standards-related syntax errors. * manual/argp.texi: Convert header and standards @comments to @standards. * manual/arith.texi: Likewise. * manual/charset.texi: Likewise. * manual/conf.texi: Likewise. * manual/creature.texi: Likewise. * manual/crypt.texi: Likewise. * manual/ctype.texi: Likewise. * manual/debug.texi: Likewise. * manual/errno.texi: Likewise. * manual/filesys.texi: Likewise. * manual/getopt.texi: Likewise. * manual/job.texi: Likewise. * manual/lang.texi: Likewise. * manual/llio.texi: Likewise. * manual/locale.texi: Likewise. * manual/math.texi: Likewise. * manual/memory.texi: Likewise. * manual/message.texi: Likewise. * manual/pattern.texi: Likewise. * manual/pipe.texi: Likewise. * manual/process.texi: Likewise. * manual/resource.texi: Likewise. * manual/search.texi: Likewise. * manual/setjmp.texi: Likewise. * manual/signal.texi: Likewise. * manual/socket.texi: Likewise. * manual/startup.texi: Likewise. * manual/stdio.texi: Likewise. * manual/string.texi: Likewise. * manual/sysinfo.texi: Likewise. * manual/syslog.texi: Likewise. * manual/terminal.texi: Likewise. * manual/threads.texi: Likewise. * manual/time.texi: Likewise. * manual/users.texi: Likewise.
* manual: Create empty placeholder macros for @standards.Rical Jasan2017-06-152-0/+13
| | | | | | | | | | | | | | | | | | | Header and standards annotations are slated for standardization, including being rendered in the description of functions, variables, etc. (elements), and eventually required. This commit adds @standards dummy macros so we can convert all existing annotations to the new framework while maintaining the rendered status quo. There needs to be a way to disambiguate annotations in lists of @*x elements, where a common description is shared but some elements may have different headers or standards. The @standardsx macro fills this role by accepting an additional parameter: the name of the annotated element. * manual/macros.texi (@standards): New macro. Provide placeholder for header and standards annotations. (@standardsx): New macro. Likewise, for lists of @*x elements.
* linux: Consolidate sync_file_range implementationAdhemerval Zanella2017-06-154-2/+7
| | | | | | | | | | | | | | | This patch consolidates Linux sync_file_range at default sysdeps/unix/sysv/linux/sync_file_range.c implementation. It also moves the rules flags from generic io/Makefile to Linux one due the fact it is a Linux-only symbol. Checked on i686-linux-gnu and x86_64-linux-gnu. * io/Makefile (CFLAGS-sync_file_range.c): Remove rule. * sysdeps/unix/sysv/linux/Makefile (CFLAGS-sync_file_range.c): New rule. * sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Remove sync_file_range.
* support: Add optstring supportAdhemerval Zanella2017-06-154-1/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds an option to test to add small command line option through CMDLINE_OPTSTRING define. For instance: #define CMDLINE_OPTSTRING "vd" static void cmdline_process_function (int c) { switch (c): 'v': /* process '-v' option. */ break; 'd': /* process '-d' option. */ break; } #define CMDLINE_PROCESS cmdline_process_function It will add both '-v' and '-d' along with already default long options. * support/support_test_main.c (support_test_main): Use optstring member for option string in getopt_long. * support/test-driver.c: Add comment about CMDLINE_OPTSTRING. (CMDLINE_OPTSTRING): New define. * support/test-driver.h (test_config): Add optstring member.
* x86-64: Implement strcspn/strpbrk/strspn IFUNC selectors in CH.J. Lu2017-06-1514-115/+233
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement strcspn/strpbrk/strspn IFUNC selectors in C All internal calls within libc.so can use IFUNC on x86-64 since unlike x86, x86-64 supports PC-relative addressing to access the GOT entry so that it can call via PLT without using an extra register. For libc.a, we can't use IFUNC for functions which are called before IFUNC has been initialized. Use IFUNC internally reduces the icache footprint since libc.so and other codes in the process use the same implementations. This patch uses IFUNC for strcspn/strpbrk/strspn functions within libc. * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add strcspn-sse2, strpbrk-sse2 and strspn-sse2. * sysdeps/x86_64/strcspn.S (STRPBRK_P): Removed. Check USE_AS_STRPBRK instead of STRPBRK_P. * sysdeps/x86_64/strpbrk.S (USE_AS_STRPBRK): New. * sysdeps/x86_64/multiarch/ifunc-sse4_2.h: New file. * sysdeps/x86_64/multiarch/strcspn-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strcspn.c: Likewise. * sysdeps/x86_64/multiarch/strpbrk-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strpbrk.c: Likewise. * sysdeps/x86_64/multiarch/strspn-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strspn.c: Likewise. * sysdeps/x86_64/multiarch/strcspn.S: Removed. * sysdeps/x86_64/multiarch/strpbrk.S: Likewise. * sysdeps/x86_64/multiarch/strspn.S: Likewise. * sysdeps/x86_64/multiarch/strpbrk-c.c: Remove "#ifdef SHARED" and "#endif".
* x86-64: Implement wcscpy IFUNC selector in CH.J. Lu2017-06-152-17/+26
| | | | | * sysdeps/x86_64/multiarch/wcscpy.S: Removed. * sysdeps/x86_64/multiarch/wcscpy.c: New file.
* x86-64: Implement strcat family IFUNC selectors in CH.J. Lu2017-06-157-90/+105
| | | | | | | | | | | | | | | | | | | | Implement strcat family IFUNC selectors in C. All internal calls within libc.so can use IFUNC on x86-64 since unlike x86, x86-64 supports PC-relative addressing to access the GOT entry so that it can call via PLT without using an extra register. For libc.a, we can't use IFUNC for functions which are called before IFUNC has been initialized. Use IFUNC internally reduces the icache footprint since libc.so and other codes in the process use the same implementations. This patch uses IFUNC for strcat family functions within libc. * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add strcat-sse2. * sysdeps/x86_64/multiarch/strcat-sse2.S: New file. * sysdeps/x86_64/multiarch/strcat.c: Likewise. * sysdeps/x86_64/multiarch/strncat.c: Likewise. * sysdeps/x86_64/multiarch/strcat.S: Removed. * sysdeps/x86_64/multiarch/strncat.S: Likewise.