aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/s390
AgeCommit message (Collapse)AuthorFilesLines
2021-01-07Remove dbl-64/wordsize-64 (part 2)Wilco Dijkstra1-1/+0
Remove the wordsize-64 implementations by merging them into the main dbl-64 directory. The second patch just moves all wordsize-64 files and removes a few wordsize-64 uses in comments and Implies files. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2021-01-02Update copyright dates with scripts/update-copyrightsPaul Eggert302-302/+302
I used these shell commands: ../glibc/scripts/update-copyrights $PWD/../gnulib/build-aux/update-copyright (cd ../glibc && git commit -am"[this commit message]") and then ignored the output, which consisted lines saying "FOO: warning: copyright statement not found" for each of 6694 files FOO. I then removed trailing white space from benchtests/bench-pthread-locks.c and iconvdata/tst-iconv-big5-hkscs-to-2ucs4.c, to work around this diagnostic from Savannah: remote: *** pre-commit check failed ... remote: *** error: lines with trailing whitespace found remote: error: hook declined to update refs/heads/master
2020-12-22s390x: Regenerate ulpsFlorian Weimer1-10/+12
For new inputs added in commit cad5ad81d2f7f58a7ad0d8afa8c1b710, as seen on a z13 system.
2020-12-17s390x: Require GCC 7.1 or later to build glibc.Stefan Liebler2-0/+52
GCC 6.5 fails to correctly build ldconfig with recent ld.so.cache commits, e.g.: 785969a047ad2f23f758901c6816422573544453 elf: Implement a string table for ldconfig, with tail merging If glibc is build with gcc 6.5.0: __builtin_add_overflow is used in <glibc>/elf/stringtable.c:stringtable_finalize() which leads to ldconfig failing with "String table is too large". This is also recognizable in following tests: FAIL: elf/tst-glibc-hwcaps-cache FAIL: elf/tst-glibc-hwcaps-prepend-cache FAIL: elf/tst-ldconfig-X FAIL: elf/tst-ldconfig-bad-aux-cache FAIL: elf/tst-ldconfig-ld_so_conf-update FAIL: elf/tst-stringtable See gcc "Bug 98269 - gcc 6.5.0 __builtin_add_overflow() with small uint32_t values incorrectly detects overflow" (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269)
2020-12-10s390x: Add glibc-hwcaps supportFlorian Weimer3-0/+175
Subdirectories z13, z14, z15 can be selected, mostly based on the level of support for vector instructions. Co-Authored-By: Stefan Liebler <stli@linux.ibm.com>
2020-12-09S390: Derive float_t from FLT_EVAL_METHODMarius Hillenbrand1-24/+0
float_t supposedly represents the type that is used to evaluate float expressions internally. While the isa supports single-precision float operations, the port of glibc to s390 incorrectly deferred to the generic definitions which, back then, tied float_t to double. gcc by default evaluates float in single precision, so that scenario violates the C standard (sections 5.2.4.2.2 and 7.12 in C11/C17). With -fexcess-precision=standard, gcc evaluates float in double precision, which aligns with the standard yet at the cost of added conversion instructions. With this patch, we drop the s390-specific definition of float_t and defer to the default behavior, which aligns float_t with the compiler-defined FLT_EVAL_METHOD in a standard-compliant way. Checked on s390x-linux-gnu with 31-bit and 64-bit builds.
2020-11-16nptl: Move stack list variables into _rtld_globalFlorian Weimer1-2/+0
Now __thread_gscope_wait (the function behind THREAD_GSCOPE_WAIT, formerly __wait_lookup_done) can be implemented directly in ld.so, eliminating the unprotected GL (dl_wait_lookup_done) function pointer. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-10-02aarch64: enforce >=64K guard size [BZ #26691]Szabolcs Nagy1-0/+3
There are several compiler implementations that allow large stack allocations to jump over the guard page at the end of the stack and corrupt memory beyond that. See CVE-2017-1000364. Compilers can emit code to probe the stack such that the guard page cannot be skipped, but on aarch64 the probe interval is 64K by default instead of the minimum supported page size (4K). This patch enforces at least 64K guard on aarch64 unless the guard is disabled by setting its size to 0. For backward compatibility reasons the increased guard is not reported, so it is only observable by exhausting the address space or parsing /proc/self/maps on linux. On other targets the patch has no effect. If the stack probe interval is larger than a page size on a target then ARCH_MIN_GUARD_SIZE can be defined to get large enough stack guard on libc allocated stacks. The patch does not affect threads with user allocated stacks. Fixes bug 26691.
2020-08-21S390: Sync HWCAP names with kernel by adding aliases [BZ #25971]Stefan Liebler1-0/+3
Unfortunately some HWCAP names like HWCAP_S390_VX differs between kernel (see <kernel>/arch/s390/include/asm/elf.h) and glibc. Therefore, those HWCAP names from kernel are now introduced as alias
2020-08-12S390: Regenerate ULPs.Stefan Liebler1-1/+1
Updates needed after new j0 test: commit 9bfc225078219521439ec8b0f665915e769d40c2 math: Regenerate auto-libm-test-out-j0
2020-06-26S390: Optimize __memset_z196.Stefan Liebler1-10/+9
It turned out that an 256b-mvc instruction which depends on the result of a previous 256b-mvc instruction is counterproductive. Therefore this patch adjusts the 256b-loop by storing the first byte with stc and setting the remaining 255b with mvc. Now the 255b-mvc instruction depends on the stc instruction.
2020-06-26S390: Optimize __memcpy_z196.Stefan Liebler1-6/+15
This patch introduces an extra loop without pfd instructions as it turned out that the pfd instructions are usefull for copies >=64KB but are counterproductive for smaller copies.
2020-06-24S390: Regenerate ULPs.Stefan Liebler1-0/+2
Updates needed after recent exp10f commits.
2020-06-22s390: Use sqrt{f} builtinAdhemerval Zanella3-60/+4
Checked on s390x-linux-gnu.
2020-06-22s390x: Use fma{f} builtinAdhemerval Zanella3-64/+4
Checked on s390x-linux-gnu.
2020-06-22math: Decompose math-use-builtins.hAdhemerval Zanella7-119/+90
Each symbol definitions are moved on a separated file and it cover all symbol type definitions (float, double, long double, and float128). It allows to set support for architectures without the boiler place of copying default values. Checked with a build on the affected ABIs.
2020-06-03ieee754: provide gcc builtins based generic fma functionsVineet Gupta1-0/+5
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-06-03ieee754: provide gcc builtins based generic sqrt functionsVineet Gupta1-0/+3
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-06semaphore: consolidate arch headers into a generic oneVineet Gupta1-39/+0
This consolidates the copy-pasted arch specific semaphore header into single version (based on s390) which suffices 32-bit and and 64-bit arch/ABI based on the canonical WORDSIZE. For now I've left out arches which use alternate defines to choose for 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same header. Passes build-many for aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64 x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-04-24Remove most gmp-mparam.h headers.Joseph Myers1-30/+0
Most gmp-mparam.h headers in glibc define various macros to the same values they would be defined to by the generic version of that header, plus macros IEEE_DOUBLE_BIG_ENDIAN or IEEE_DOUBLE_MIXED_ENDIAN related to the representation of double. The latter macros are in turn only used in gmp-impl.h to define union ieee_double_extract, which is not used in glibc. Thus all of these headers, except for the generic one and those that define _LONG_LONG_LIMB for ILP32 configurations with 64-bit registers, are redundant, and this patch removes them. Tested with build-many-glibcs.py that installed stripped shared libraries are unchanged by this patch.
2020-04-03S390: Regenerate ULPs.Stefan Liebler1-15/+19
Updates needed after recent commit a9d42c09a327540a99f2eac25a98fd2ad6d0b540 math: Add inputs that yield larger errors for float type (x86_64)
2020-03-19math: Remove inline math testsAdhemerval Zanella1-817/+0
With mathinline removal there is no need to keep building and testing inline math tests. The gen-libm-tests.py support to generate ULP_I_* is removed and all libm-test-ulps files are updated to longer have the i{float,double,ldouble} entries. The support for no-test-inline is also removed from both gen-auto-libm-tests and the auto-libm-test-out-* were regenerated. Checked on x86_64-linux-gnu and i686-linux-gnu.
2020-03-05S390: Remove backchain-based fallback and use generic backtrace.c.Stefan Liebler2-295/+0
After recent discussions: - "[PATCH] s390: Remove backchain-based fallback from backtrace" https://www.sourceware.org/ml/libc-alpha/2020-02/msg00287.html - "Re: [PATCH 07/11] s390: Implement backtrace on top of <unwind-link.h>" https://www.sourceware.org/ml/libc-alpha/2020-02/msg00637.html We've checked and decided to remove the backchain: We don't know of any environments without libgcc. Thus the backchain unwinder is not used. If somebody builds with -mbackchain and without fasynchronous-unwind-tables and has libgcc installed, then the libgcc unwinder is called but not the backchain-based fallback. This step allows to get rid of the s390x specific backtrace.c files at all. Furthermore the now used debug/backtrace.c version has some more advantages: - Free all resources if necessary. (libc_freeres_fn) - Remove NULL address above _start. - Check whether we make any progress while getting addresses.
2020-02-18Introduce <elf-initfini.h> and ELF_INITFINI for all architecturesFlorian Weimer1-0/+20
This supersedes the init_array sysdeps directory. It allows us to check for ELF_INITFINI in both C and assembler code, and skip DT_INIT and DT_FINI processing completely on newer architectures. A new header file is needed because <dl-machine.h> is incompatible with assembler code. <sysdep.h> is compatible with assembler code, but it cannot be included in all assembler files because on some architectures, it redefines register names, and some assembler files conflict with that. <elf-initfini.h> is replicated for legacy architectures which need DT_INIT/DT_FINI support. New architectures follow the generic default and disable it.
2020-02-12S390: Fix non-ascii character in fenv.h.Stefan Liebler1-2/+2
The comment "isn't" contained a non-ascii character which leads to an error if compiled with -finput-charset=ascii: error: failure to convert ascii to UTF-8 This is observable in GCC testsuite: FAIL: 17_intro/headers/c++1998/charset.cc (test for excess errors) FAIL: 17_intro/headers/c++2011/charset.cc (test for excess errors) FAIL: 17_intro/headers/c++2014/charset.cc (test for excess errors) FAIL: 17_intro/headers/c++2017/charset.cc (test for excess errors) FAIL: 17_intro/headers/c++2020/charset.cc (test for excess errors) Also rewrite the comment above. Reported-by: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
2020-01-03Add libm_alias_finite for _finite symbolsWilco Dijkstra3-3/+6
This patch adds a new macro, libm_alias_finite, to define all _finite symbol. It sets all _finite symbol as compat symbol based on its first version (obtained from the definition at built generated first-versions.h). The <fn>f128_finite symbols were introduced in GLIBC 2.26 and so need special treatment in code that is shared between long double and float128. It is done by adding a list, similar to internal symbol redifinition, on sysdeps/ieee754/float128/float128_private.h. Alpha also needs some tricky changes to ensure we still emit 2 compat symbols for sqrt(f). Passes buildmanyglibc. Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2020-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers309-309/+309
2019-12-11S390: Use sysdeps/ieee754/dbl-64/wordsize-64 on s390x.Stefan Liebler1-0/+1
This patch enables the usage of implementations in sysdeps/ieee754/dbl-64/wordsize-64 on 64bit s390x.
2019-12-11S390: Implement roundtoint and converttoint and define TOINT_INTRINSICS.Stefan Liebler1-0/+53
This patch implements roundtoint and convertoint for s390 by using the load-fp-integer and convert-to-fixed instructions. Both functions are using "round to nearest with ties away from zero" rounding mode and do not raise inexact exceptions.
2019-12-11S390: Implement math-barriers math_opt_barrier and math_force_eval.Stefan Liebler1-0/+46
This patch implements the s390 specific math barriers in order to omit the store and load from stack if possible.
2019-12-11S390: Use libc_fe* macros in fe* functions.Stefan Liebler9-124/+27
This patch updates the s390 specific functions fegetround, fesetround, feholdexcept, fesetenv, feupdateenv, fegetexceptflag, fetestexcept, fesetexceptflag, fetestexceptflag. Now those functions are using the libc_fe* macros if possible. Furthermore fegetexceptflag is now returning the exception from dxc field shifted to the usual exception-flags. Thus a special fetestexceptflag implementation is not needed anymore.
2019-12-11S390: Implement libc_fe* macros.Stefan Liebler1-0/+250
This patch provides the s390 specific implementation for libc_feholdexcept, libc_fesetround, libc_feholdexcept_setround, libc_fetestexcept, libc_fesetenv, libc_feupdateenv_test, libc_feupdateenv, libc_feholdsetround_ctx, libc_feresetround_ctx, libc_feholdsetround_noex_ctx and libc_feresetround_noex_ctx.
2019-12-11S390: Use convert-to-fixed instruction for llround functions.Stefan Liebler3-0/+127
If compiled with z196 zarch support, the convert-to-fixed instruction is used to implement llround, llroundf, llroundl. Otherwise the common-code implementation is used.
2019-12-11S390: Use convert-to-fixed instruction for lround functions.Stefan Liebler3-0/+142
If compiled with z196 zarch support, the convert-to-fixed instruction is used to implement lround, lroundf, lroundl. Otherwise the common-code implementation is used.
2019-12-11S390: Use convert-to-fixed instruction for llrint functions.Stefan Liebler3-0/+151
If compiled with z196 zarch support, the convert-to-fixed instruction is used to implement llrint, llrintf, llrintl. Otherwise the common-code implementation is used.
2019-12-11S390: Use convert-to-fixed instruction for lrint functions.Stefan Liebler3-0/+166
If compiled with z196 zarch support, the convert-to-fixed instruction is used to implement lrint, lrintf, lrintl. Otherwise the common-code implementation is used.
2019-12-11S390: Use load-fp-integer instruction for roundeven functions.Stefan Liebler3-0/+116
If compiled with z196 zarch support, the load-fp-integer instruction is used to implement roundeven, roundevenf, roundevenl. Otherwise the common-code implementation is used.
2019-12-11Use GCC builtins for copysign functions if desired.Stefan Liebler1-0/+7
This patch is always using the corresponding GCC builtin for copysignf, copysign, and is using the builtin for copysignl, copysignf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. Altough the long double version is enabled by default we still need the macro and the alternative implementation as the _Float128 version of the builtin is not available with all supported GCC versions. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for round functions if desired.Stefan Liebler1-0/+11
This patch is using the corresponding GCC builtin for roundf, round, roundl and roundf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for trunc functions if desired.Stefan Liebler1-0/+11
This patch is using the corresponding GCC builtin for truncf, trunc, truncl and truncf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for ceil functions if desired.Stefan Liebler1-0/+11
This patch is using the corresponding GCC builtin for ceilf, ceil, ceill and ceilf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for floor functions if desired.Stefan Liebler1-0/+11
This patch is using the corresponding GCC builtin for floorf, floor, floorl and floorf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for rint functions if desired.Stefan Liebler1-0/+11
This patch is using the corresponding GCC builtin for rintf, rint, rintl and rintf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-12-11Use GCC builtins for nearbyint functions if desired.Stefan Liebler1-0/+49
This patch is using the corresponding GCC builtin for nearbyintf, nearbyint, nearbintl and nearbyintf128 if the USE_FUNCTION_BUILTIN macros are defined to one in math-use-builtins.h. This is the case for s390 if build with at least --march=z196 --mzarch. Otherwise the generic implementation is used. The code of the generic implementation is not changed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-11-27S390: Fix handling of needles crossing a page in strstr z15 ifunc-variant. ↵Stefan Liebler1-1/+1
[BZ #25226] If the specified needle crosses a page-boundary, the s390-z15 ifunc variant of strstr truncates the needle which results in invalid results. This is fixed by loading the needle beyond the page boundary to v18 instead of v16. The bug is sometimes observable in test-strstr.c in check1 and check2 as the haystack and needle is stored on stack. Thus the needle can be on a page boundary. check2 is now extended to test haystack / needles located on stack, at end of page and on two pages. This bug was introduced with commit 6f47401bd5fc71209219779a0426170a9a7395b0 ("S390: Add arch13 strstr ifunc variant.") and is already released in glibc 2.30.
2019-11-26nptl: Add default pthreadtypes-arch.hAdhemerval Zanella1-43/+0
This patch adds a default pthreadtypes-arch.h, the idea is to simpify new ports inclusion and an override is required only if the architecture adds some arch-specific extensions or requirement. The default values on the new generic header are based on current architecture define value and they are not optimal compared to current code requirements as below. - On 64 bits __SIZEOF_PTHREAD_BARRIER_T is defined as 32 while is sizeof (struct pthread_barrier) is 20 bytes. - On 32 bits __SIZEOF_PTHREAD_ATTR_T is defined as 36 while sizeof (struct pthread_attr) is 32. The default values are not changed so the generic header could be used by some architectures. Checked with a build on affected abis. Change-Id: Ie0cd586258a2650f715c1af0c9fe4e7063b0409a
2019-11-26nptl: Add struct_rwlock.hAdhemerval Zanella2-27/+58
This patch adds a new generic __pthread_rwlock_arch_t definition meant to be used by new ports. Its layout mimics the current usage on some 64 bits ports and it allows some ports to use the generic definition. The arch __pthread_rwlock_arch_t definition is moved from pthreadtypes-arch.h to another arch-specific header (struct_rwlock.h). Also the static intialization macro for pthread_rwlock_t is set to use an arch defined on (__PTHREAD_RWLOCK_INITIALIZER) which simplifies its implementation. The default pthread_rwlock_t layout differs from current ports with: 1. Internal layout is the same for 32 bits and 64 bits. 2. Internal flag is an unsigned short so it should not required additional padding to align for word boundary (if it is the case for the ABI). Checked with a build on affected abis. Change-Id: I776a6a986c23199929d28a3dcd30272db21cd1d0
2019-11-26nptl: Add struct_mutex.hAdhemerval Zanella2-7/+63
The current way of defining the common mutex definition for POSIX and C11 on pthreadtypes-arch.h (added by commit 06be6368da16104be5) is not really the best options for newer ports. It requires define some misleading flags that should be always defined as 0 (__PTHREAD_COMPAT_PADDING_MID and __PTHREAD_COMPAT_PADDING_END), it exposes options used solely for linuxthreads compat mode (__PTHREAD_MUTEX_USE_UNION and __PTHREAD_MUTEX_NUSERS_AFTER_KIND), and requires newer ports to explicit define them (adding more boilerplate code). This patch adds a new default __pthread_mutex_s definition meant to be used by newer ports. Its layout mimics the current usage on both 32 and 64 bits ports and it allows most ports to use the generic definition. Only ports that use some arch-specific definition (such as hardware lock-elision or linuxthreads compat) requires specific headers. For 32 bit, the generic definitions mimic the other 32-bit ports of using an union to define the fields uses on adaptive and robust mutexes (thus not allowing both usage at same time) and by using a single linked-list for robust mutexes. Both decisions seemed to follow what recent ports have done and make the resulting pthread_mutex_t/mtx_t object smaller. Also the static intialization macro for pthread_mutex_t is set to use a macro __PTHREAD_MUTEX_INITIALIZER where the architecture can redefine in its struct_mutex.h if it requires additional fields to be initialized. Checked with a build on affected abis. Change-Id: I30a22c3e3497805fd6e52994c5925897cffcfe13
2019-11-26nptl: Remove rwlock elision definitionsAdhemerval Zanella1-2/+0
The new rwlock implementation added by cc25c8b4c1196 (2.25) removed support for lock-elision. This patch removes remaining the arch-specific unused definitions. Checked with a build against all affected ABIs. Change-Id: I5dec8af50e3cd56d7351c52ceff4aa3771b53cd6
2019-11-26nptl: Add tests for internal pthread_rwlock_t offsetsAdhemerval Zanella1-0/+6
This patch new build tests to check for internal fields offsets for internal pthread_rwlock_t definition. Althoug the '__data.__flags' field layout should be preserved due static initializators, the patch also adds tests for the futexes that may be used in a shared memory (although using different libc version in such scenario is not really supported). Checked with a build against all affected ABIs. Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148