sys/wait.h includes signal.h unconditionally. But the permission to
do so is UX-shaded in XPG4.2, and XSI-shaded in POSIX before 2008, so
this should not be unconditional. This patch fixes this
conservatively: the include is kept, but conditioned on the standards
that permit it (meaning it is still present by default, because
non-XSI POSIX.1:2008 is enabled by default). <bits/types.h> is now
included unconditionally to provide the required definition of
__pid_t; it was previously included via <signal.h>. Some standards
require pid_t to be defined here, and all allow it to be defined here;
previously defined via <signal.h>, it's now defined directly in this
header.
Tested for x86_64. This does not fix any of the sys/wait.h
conformtest failures, but substantially reduces the number of
namespace failures for sys/wait.h for XPG4 and POSIX.
[BZ #21560]
* posix/sys/wait.h: Condition include of <signal.h> on
[__USE_XOPEN_EXTENDED || __USE_XOPEN2K8]. Include <bits/types.h>
unconditionally.
[!__pid_t_defined] (pid_t): Define typedef.
This is just a style fix; we always prefer the shorthand macros over
bare uses of __attribute__, even in private headers.
* include/errno.h (__errno_location): Use __attribute_const__
instead of bare __attribute__.
Like basically all before-compile headers, dl-tunable-list.h should be
generated using a stamp file to minimize unnecessary rebuilding; it
wasn't being added to common-generated, so it wouldn't get cleaned up;
and it was in between the rules for libc-modules.h/.stmp and their own
addition to common-generated.
* Makeconfig (dl-tunable-list.h): Generate using a stamp file.
(common-generated): Add libc-modules.h and libc-modules.stmp in a
more appropriate location. Also add dl-tunable-list.h and
dl-tunable-list.stmp.
Optimize strrchr/wcsrchr with AVX2 to check 32 bytes with vector
instructions. It is as fast as SSE2 version for small data sizes
and up to 1X faster for large data sizes on Haswell. Select AVX2
version on AVX2 machines where vzeroupper is preferred and AVX
unaligned load is fast.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
strrchr-sse2, strrchr-avx2, wcsrchr-sse2 and wcsrchr-avx2.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Add tests for __strrchr_avx2,
__strrchr_sse2, __wcsrchr_avx2 and __wcsrchr_sse2.
* sysdeps/x86_64/multiarch/strrchr-avx2.S: New file.
* sysdeps/x86_64/multiarch/strrchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strrchr.c: Likewise.
* sysdeps/x86_64/multiarch/wcsrchr-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/wcsrchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/wcsrchr.c: Likewise.
Optimize memrchr with AVX2 to search 32 bytes with a single vector
compare instruction. It is as fast as SSE2 memrchr for small data
sizes and up to 1X faster for large data sizes on Haswell. Select
AVX2 memrchr on AVX2 machines where vzeroupper is preferred and AVX
unaligned load is fast.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
memrchr-sse2 and memrchr-avx2.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Add tests for __memrchr_avx2 and
__memrchr_sse2.
* sysdeps/x86_64/multiarch/memrchr-avx2.S: New file.
* sysdeps/x86_64/multiarch/memrchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/memrchr.c: Likewise.
Optimize strchr/strchrnul/wcschr with AVX2 to search 32 bytes with vector
instructions. It is as fast as SSE2 versions for size <= 16 bytes and up
to 1X faster for or size > 16 bytes on Haswell. Select AVX2 version on
AVX2 machines where vzeroupper is preferred and AVX unaligned load is fast.
NB: It uses TZCNT instead of BSF since TZCNT produces the same result
as BSF for non-zero input. TZCNT is faster than BSF and is executed
as BSF if machine doesn't support TZCNT.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
strchr-sse2, strchrnul-sse2, strchr-avx2, strchrnul-avx2,
wcschr-sse2 and wcschr-avx2.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Add tests for __strchr_avx2,
__strchrnul_avx2, __strchrnul_sse2, __wcschr_avx2 and
__wcschr_sse2.
* sysdeps/x86_64/multiarch/strchr-avx2.S: New file.
* sysdeps/x86_64/multiarch/strchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strchr.c: Likewise.
* sysdeps/x86_64/multiarch/strchrnul-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/strchrnul-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strchrnul.c: Likewise.
* sysdeps/x86_64/multiarch/wcschr-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/wcschr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/wcschr.c: Likewise.
* sysdeps/x86_64/multiarch/strchr.S: Removed.
Optimize strlen/strnlen/wcslen/wcsnlen with AVX2 to check 32 bytes with
a single vector compare instruction. It is as fast as SSE2 versions for
size <= 16 bytes and up to 1X faster for or size > 16 bytes on Haswell.
Select AVX2 version on AVX2 machines where vzeroupper is preferred and
AVX unaligned load is fast.
NB: It uses TZCNT instead of BSF since TZCNT produces the same result
as BSF for non-zero input. TZCNT is faster than BSF and is executed
as BSF if machine doesn't support TZCNT.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
strlen-sse2, strnlen-sse2, strlen-avx2, strnlen-avx2,
wcslen-sse2, wcslen-avx2 and wcsnlen-avx2.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Add tests for __strlen_avx2,
__strlen_sse2, __strnlen_avx2, __strnlen_sse2, __wcslen_avx2,
__wcslen_sse2 and __wcsnlen_avx2.
* sysdeps/x86_64/multiarch/strlen-avx2.S: New file.
* sysdeps/x86_64/multiarch/strlen-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strlen.c: Likewise.
* sysdeps/x86_64/multiarch/strnlen-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/strnlen-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/strnlen.c: Likewise.
* sysdeps/x86_64/multiarch/wcslen-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/wcslen-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/wcslen.c: Likewise.
* sysdeps/x86_64/multiarch/wcsnlen-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/wcsnlen.c (OPTIMIZE (avx2)): New.
(IFUNC_SELECTOR): Return OPTIMIZE (avx2) on AVX2 machines where
vzeroupper is preferred and AVX unaligned load is fast.
SSE2 memchr is extended to support wmemchr. AVX2 memchr/rawmemchr/wmemchr
are added to search 32 bytes with a single vector compare instruction.
AVX2 memchr/rawmemchr/wmemchr are as fast as SSE2 memchr/rawmemchr/wmemchr
for small sizes and up to 1.5X faster for larger sizes on Haswell and
Skylake. Select AVX2 memchr/rawmemchr/wmemchr on AVX2 machines where
vzeroupper is preferred and AVX unaligned load is fast.
NB: It uses TZCNT instead of BSF since TZCNT produces the same result
as BSF for non-zero input. TZCNT is faster than BSF and is executed
as BSF if machine doesn't support TZCNT.
* sysdeps/x86_64/memchr.S (MEMCHR): New. Depending on if
USE_AS_WMEMCHR is defined.
(PCMPEQ): Likewise.
(memchr): Renamed to ...
(MEMCHR): This. Support wmemchr if USE_AS_WMEMCHR is defined.
Replace pcmpeqb with PCMPEQ.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
memchr-sse2, rawmemchr-sse2, memchr-avx2, rawmemchr-avx2,
wmemchr-sse4_1, wmemchr-avx2 and wmemchr-c.
* sysdeps/x86_64/multiarch/ifunc-avx2.h: New file.
* sysdeps/x86_64/multiarch/memchr-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/memchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/memchr.c: Likewise.
* sysdeps/x86_64/multiarch/rawmemchr-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/rawmemchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/rawmemchr.c: Likewise.
* sysdeps/x86_64/multiarch/wmemchr-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/wmemchr-sse2.S: Likewise.
* sysdeps/x86_64/multiarch/wmemchr.c: Likewise.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Test __memchr_avx2, __memchr_sse2,
__rawmemchr_avx2, __rawmemchr_sse2, __wmemchr_avx2 and
__wmemchr_sse2.
Previously, the implementation would conditionally exit based on the
status argument, which GCC did not know about. This leads to
false uninitialized variable warnings when data is accessed after a
TEST_VERIFY_EXIT failure (from code which would never execute).
1 << 31 is undefined, so replace it with a cleaner check. Also remove
magic numbers in comments.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h: Remove
mention of magic numbers in comments.
(_dl_procinfo): Fix undefined behavior
This patch corrects the conformtest expectations for sys/wait.h for
XPG4. This does not change the test results for this header at the
makefile level since it fixes some spurious failures for this header
while introducing other failures previously hidden by incorrect
expectations. However, it shows up issues with stdlib.h for XPG4
defining W* names that are not permitted in this case (previously
wrongly allowed; the W* reservation is UX-shaded in XPG4.2 /
XSI-shaded in POSIX before 2008); that test is thus XFAILed.
Tested for x86_64.
* conform/data/sys/wait.h-data (WIFCONTINUED): Do not expect for
[XPG4].
(WEXITED): Likewise.
(WSTOPPED): Likewise.
(WCONTINUED): Likewise.
(WNOHANG): Likewise.
(WNOWAIT): Likewise.
(idtype_t): Likewise.
(P_ALL): Likewise.
(P_PID): Likewise.
(P_PGID): Likewise.
(id_t): Likewise.
(siginfo_t): Likewise.
(wait3): Likewise.
(waitid): Likewise.
(signal.h): Do not allow header for [XPG4].
(sys/resource.h): Likewise.
(si_*): Do not allow for [XPG4].
(W*): Likewise.
(P_*): Likewise.
(BUS_): Likewise.
(CLD_): Likewise.
(FPE_): Likewise.
(ILL_): Likewise.
(POLL_): Likewise.
(SEGV_): Likewise.
(SI_): Likewise.
(TRAP_): Likewise.
* conform/Makefile (test-xfail-XPG4/stdlib.h/conform): New
variable.
There are 2 minimal strtoul implementations in ld.so:
1. __strtoul_internal in elf/dl-minimal.c.
2. tunables_strtoul in elf/dl-tunables.c.
This patch adds _dl_strtoul to replace them. Tested builds with and
without --enable-tunables.
[BZ #21528]
* elf/dl-minimal.c (__strtoul_internal): Removed.
(strtoul): Likewise.
* elf/dl-misc.c (_dl_strtoul): New function.
* elf/dl-tunables.c (tunables_strtoul): Removed.
(tunable_initialize): Replace tunables_strtoul with _dl_strtoul.
* elf/rtld.c (process_envvars): Likewise.
* sysdeps/unix/sysv/linux/dl-librecon.h (_dl_osversion_init):
Likewise.
* sysdeps/generic/ldsodefs.h (_dl_strtoul): New prototype.
wint_t is a little finicky because it might be defined by stddef.h, which
belongs to the compiler.
In addition to the _types_, a bunch of other declarations shared between
wctype.h and wchar.h are factored out to their own header.
* libio/bits/types/FILE.h, libio/bits/types/__FILE.h
* wcsmbs/bits/types/mbstate_t.h, wcsmbs/bits/types/__mbstate_t.h
* wcsmbs/bits/types/wint_t.h: New single-type definition files.
* wctype/bits/wctype-wchar.h: New file holding declarations shared
between wctype.h and wchar.h.
* libio/Makefile, wcsmbs/Makefile, wctype/Makefile:
Install them.
* include/bits/types/FILE.h, include/bits/types/__FILE.h
* include/bits/types/mbstate_t.h, include/bits/types/__mbstate_t.h
* include/bits/types/wint_t.h, include/bits/wcsmbs-wchar.h:
New wrappers.
* include/stdio.h, include/wchar.h, include/wctype.h:
No need to handle __need macros.
* grp/grp.h, gshadow/gshadow.h, hurd/hurd.h, iconv/gconv.h
* libio/stdio.h, mach/mach.h, misc/mntent.h, pwd/pwd.h
* shadow/shadow.h, stdio-common/printf.h, wcsmbs/uchar.h
* wcsmbs/wchar.h, wctype/wctype.h
* sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h
Use the new files instead of __need macros.
This patch adds tests for len == 0 and tests for positions close to the
beginning, which are equivalent to positions close to the end for memchr.
* string/test-memrchr.c (test_main): Add tests for len == 0
and tests for positions close to the beginning, which are
equivalent to positions close to the end for memchr.
Add strfromf128 to stdlib when _Float128 support is enabled.
* stdio-common/printf-parsemb.c (__parse_one_specmb): Initialize
spec->info.is_binary128 to zero.
* stdio-common/printf.h (printf_info): Add new member is_binary128
to indicate that the number being converted to string is compatible
with the IEC 60559 binary128 format.
* stdio-common/printf_fp.c (__printf_fp_l): Add code to deal with
_Float128 numbers.
* stdio-common/printf_fphex.c: Include ieee754_float128.h and
ldbl-128/printf_fphex_macros.h
(__printf_fphex): Add code to deal with _Float128 numbers.
* stdio-common/printf_size.c (__printf_size): Likewise.
* stdio-common/vfprintf.c (process_arg): Initialize member
info.is_binary128 to zero.
* stdlib/fpioconst.h (FLT128_MAX_10_EXP_LOG): New macro.
* stdlib/stdlib.h: Include bits/floatn.h for _Float128 support.
(strfromf128): New declaration.
* stdlib/strfrom-skeleton.c (STRFROM): Set member info.is_binary128
to one.
* sysdeps/ieee754/float128/Makefile: Add strfromf128.
* sysdeps/ieee754/float128/Versions: Likewise.
* sysdeps/ieee754/float128/strfromf128.c: New file.
This patch refactors the macro PRINT_FPHEX_LONG_DOUBLE from the file
sysdeps/ieee754/ldbl-128/printf_fphex.c into a function-like macro to
enable its use for both long double and _Float128, when they are
ABI-distinct.
* sysdeps/ieee754/ldbl-128/printf_fphex.c: Include
ldbl-128/printf_fphex_macros.h for the definition of PRINT_FPHEX.
(PRINT_FPHEX_LONG_DOUBLE): Define based on PRINT_FPHEX.
* sysdeps/ieee754/ldbl-128/printf_fphex_macros.h
(PRINT_FPHEX): New function-like macro that can be used for long
double, as well as for _Float128
In __printf_fp_l, __printf_fphex, and __printf_size the blocks of code that are
used to read a double or long double argument, check for special values and
convert to multiprecision are similar. When adding float128 support to libc,
more code would be duplicated to deal with the extra type. This patch moves
the repetitive code to a macro which is now used by double and long double and
will be used for float128 when support is added, thus avoiding more
duplication.
Tested for powerpc64le and s390x.
* stdio-common/printf_fp.c (PRINTF_FP_FETCH): New macro.
(__printf_fp_l): Use the new macro to avoid duplicating code.
* stdio-common/printf_fphex.c (PRINTF_FPHEX_FETCH): New macro.
(__printf_fphex): Use the new macro to avoid duplicating code.
* stdio-common/printf_size.c (PRINTF_SIZE_FETCH): New macro.
(__printf_size): Use the new macro to avoid duplicating code.
Reuse the code for __mpn_extract_long_double to implement
__mpn_extract_float128.
* include/gmp.h: Include bits/floatn.h
(__mpn_extract_float128): Declare when __HAVE_DISTINCT_FLOAT128 is 1.
* stdlib/gmp-impl.h: Also check if alloca is not defined before
including stack-alloc.h. It could have been defined by other header
which not necessarily defines HAVE_ALLOCA.
* sysdeps/ieee754/float128/Makefile: New file.
* sysdeps/ieee754/float128/float1282mpn.c: New file.
* sysdeps/ieee754/float128/float128_private.h: Include gmp.h before
redefining __mpn_extract_long_double to __mpn_extract_float128, then
redefine __mpn_extract_long_double to __mpn_extract_float128.
* sysdeps/ieee754/ldbl-128/ldbl2mpn.c: Replace long double with
_Float128 to allow float128_private.h overrides.
Update the power of ten tables used by the common implementation when long
double is not the most expressive real type.
* stdlib/fpioconst.h: Include bits/floatn.h.
(FPIOCONST_HAVE_EXTENDED_RANGE): New macro for testing how big the
power of ten table should be.
(FPIOCONST_POW10_ARRAY_SIZE): Use larger table if above is true.
* stdlib/fpioconst.c (__tens): Use FPIOCONST_HAVE_EXTENDED_RANGE
to include larger tables when _Float128 support is enabled.
(_fpioconst_pow10): Likewise.
Various include/bits/types/*.h files do
where the path specified is relative to the toplevel glibc source
directory.
That has the wrong number of ../ components to achieve the desired
effect; it actually searches relative to include/ for a file that does
not exist there, then goes on to search the #include <> paths
specified with -I, eventually finding the desired file via such a path
(e.g. sysdeps/nptl/) with the right number of directory components.
Before that it searches include/../.. because of the -Iinclude,
meaning that an appropriately named file outside the glibc source tree
can affect the build.
This patch changes all those files to do #include <path> without the
../../, as some such files already do.
Tested for x86_64.
* include/bits/types/clock_t.h: Use #include <path> instead of
#include "../../path".
* include/bits/types/clockid_t.h: Likewise.
* include/bits/types/struct_iovec.h: Likewise.
* include/bits/types/struct_itimerspec.h: Likewise.
* include/bits/types/struct_osockaddr.h: Likewise.
* include/bits/types/struct_sigstack.h: Likewise.
* include/bits/types/struct_timespec.h: Likewise.
* include/bits/types/struct_timeval.h: Likewise.
* include/bits/types/struct_tm.h: Likewise.
* include/bits/types/time_t.h: Likewise.
* include/bits/types/timer_t.h: Likewise.
I observed a failure of timezone/tst-timezone with the same symptoms
as reported in bug 14096.
I was unable to reproduce the failure on testing again. However, from
inspection, the cause is as follows. tst-timezone uses time zones
compiled from the northamerica file, but has no dependency on any such
zones, so with a parallel build it is possible that they do not get
compiled until after tst-timezone is run. This patch adds a
dependency on the compiled America/New_York zone (the one used as a
makefile target to cause such zones to be compiled, rather than one
which is actually used in that test) to fix the race.
Tested for x86_64.
[BZ #14096]
* timezone/Makefile ($(objpfx)tst-timezone.out): Depend on
America/New_York.
Since ifunc-sse4_1.h is included only by wcsnlen.c, we can fold it
into wcsnlen.c. No code changes in wcsnlen.o.
2017-06-07 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/ifunc-sse4_1.h: Removed and folded
into ...
* sysdeps/x86_64/multiarch/wcsnlen.c: Here. Don't include
ifunc-sse4_1.h.
`ptsname_r' is declared in stdlib.h to only accept a `nonnull'
second argument and therefore GCC may choose to make optimizations
based on the assumption that this argument is NULL. This means
that potentially, GCC can optimize away the NULL check at some
point in the future. Since this is a programming interface, we
might as well remove the NULL check ourselves.
This also warrants a change to the `ptsname_r' manual page that
must be submitted to the corresponding mailing list.
In addition, remove the NULL buffer test in login/tst-ptsname.c.
Add support for routines in dl-procinfo.h to show string versions of
HWCAP entries when a program is invoked with the LD_SHOW_AUXV
environment variable set and also to aid in path resolution for
ldconfig.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c
(_dl_aarch64_cap_flags): New array.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h
(_dl_hwcap_string, _dl_string_hwcap, _dl_procinfo): Implement
functions.
The LD_HWCAP_MASK environment variable was ignored in static binaries,
which is inconsistent with the behaviour of dynamically linked
binaries. This seems to have been because of the inability of
ld_hwcap_mask being read early enough to influence anything but now
that it is in tunables, the mask is usable in static binaries as well.
This feature is important for aarch64, which relies on HWCAP_CPUID
being masked out to disable multiarch. A sanity test on x86_64 shows
that there are no failures. Likewise for aarch64.
* elf/dl-hwcaps.h [HAVE_TUNABLES]: Always read hwcap_mask.
* sysdeps/sparc/sparc32/dl-machine.h [HAVE_TUNABLES]:
Likewise.
* sysdeps/x86/cpu-features.c (init_cpu_features): Always set
up hwcap and hwcap_mask.
Now that LD_HWCAP_MASK (or glibc.tune.hwcap_mask) is read early enough
to influence cpu feature check in aarch64, use it to influence
multiarch selection. Setting LD_HWCAP_MASK such that it clears
HWCAP_CPUID will now disable multiarch for the binary.
HWCAP_CPUID is also now set in HWCAP_IMPORTANT so that it is set by
default. With this patch, this feature is only usable with
dyanmically linked binaries because LD_HWCAP_MASK is not read for
static binaries. A future patch fixes that.
* sysdeps/unix/sysv/linux/aarch64/cpu-features.c
(init_cpu_features): Use glibc.tune.hwcap_mask.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h: New file.
Drop _dl_hwcap_mask when building with tunables. This completes the
transition of hwcap_mask reading from _dl_hwcap_mask to tunables.
* elf/dl-hwcaps.h: New file.
* elf/dl-hwcaps.c: Include it.
(_dl_important_hwcaps)[HAVE_TUNABLES]: Read and update
glibc.tune.hwcap_mask.
* elf/dl-cache.c: Include dl-hwcaps.h.
(_dl_load_cache_lookup)[HAVE_TUNABLES]: Read
glibc.tune.hwcap_mask.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* elf/dl-support.c (_dl_hwcap2)[HAVE_TUNABLES]: Drop
_dl_hwcap_mask.
* elf/rtld.c (rtld_global_ro)[HAVE_TUNABLES]: Drop
_dl_hwcap_mask.
(process_envvars)[HAVE_TUNABLES]: Likewise.
* sysdeps/generic/ldsodefs.h (rtld_global_ro)[HAVE_TUNABLES]:
Likewise.
* sysdeps/x86/cpu-features.c (init_cpu_features): Don't
initialize dl_hwcap_mask when tunables are enabled.
The dl-procinfo.h for linux/s390 and linux/i386 don't have include
guards, which causes them to fail since addition of LD_HWCAP_MASK to
tunables. Add _DL_I386_PROCINFO_H guard to avoid redefining
_dl_procinfo on multiple includes and also allow the subsequent
include of another dl-procinfo.h to work.
Verified with a build test on i686.
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Add include
guard.
* sysdeps/unix/sysv/linux/s390/dl-procinfo.h: Likewise.
Add LD_HWCAP_MASK to tunables in preparation of it being removed from
rtld.c. This allows us to read LD_HWCAP_MASK much earlier so that it
can influence IFUNC resolution in aarch64.
This patch does not actually do anything other than read the
LD_HWCAP_MASK variable and add the tunables way to set the
LD_HWCAP_MASK, i.e. via the glibc.tune.hwcap_mask tunable. In a
follow-up patch, the _dl_hwcap_mask will be replaced with
glibc.tune.hwcap_mask to complete the transition.
* elf/dl-tunables.list: Add glibc.tune.hwcap_mask.
* scripts/gen-tunables.awk: Include dl-procinfo.h.
* manual/tunables.texi: Document glibc.tune.hwcap_mask.
The TUNABLE_SET_VALUE and family of macros (and my later attempt to
add a TUNABLE_GET) never quite went together very well because the
overall interface was not clearly defined. This patch is an attempt
to do just that.
This patch consolidates the API to two simple sets of macros,
TUNABLE_GET* and TUNABLE_SET*. If TUNABLE_NAMESPACE is defined,
TUNABLE_GET takes just the tunable name, type and a (optionally NULL)
callback function to get the value of the tunable. The callback
function, if non-NULL, is called if the tunable was externally set
(i.e. via GLIBC_TUNABLES or any future mechanism). For example:
val = TUNABLE_GET (check, int32_t, check_callback)
returns the value of the glibc.malloc.check tunable (assuming
TUNABLE_NAMESPACE is set to malloc) as an int32_t into VAL after
calling check_callback.
Likewise, TUNABLE_SET can be used to set the value of the tunable,
although this is currently possible only in the dynamic linker before
it relocates itself. For example:
TUNABLE_SET (check, int32_t, 2)
will set glibc.malloc.check to 2. Of course, this is not possible
since we set (or read) glibc.malloc.check long after it is relocated.
To access or set a tunable outside of TUNABLE_NAMESPACE, use the
TUNABLE_GET_FULL and TUNABLE_SET_FULL macros, which have the following
prototype:
TUNABLE_GET_FULL (glibc, tune, hwcap_mask, uint64_t, NULL)
TUNABLE_SET_FULL (glibc, tune, hwcap_mask, uint64_t, 0xffff)
In future the tunable list may get split into mutable and immutable
tunables where mutable tunables can be modified by the library and
userspace after relocation as well and TUNABLE_SET will be more useful
than it currently is. However whenever we actually do that split, we
will have to ensure that the mutable tunables are protected with
locks.
* elf/Versions (__tunable_set_val): Rename to __tunable_get_val.
* elf/dl-tunables.c: Likewise.
(do_tunable_update_val): New function.
(__tunable_set_val): New function.
(__tunable_get_val): Call CB only if the tunable was externally
initialized.
(tunables_strtoul): Replace strval with initialized.
* elf/dl-tunables.h (strval): Replace with a bool initialized.
(TUNABLE_ENUM_NAME, TUNABLE_ENUM_NAME1): Adjust names to
prevent collision.
(__tunable_set_val): New function.
(TUNABLE_GET, TUNABLE_GET_FULL): New macros.
(TUNABLE_SET, TUNABLE_SET_FULL): Likewise.
(TUNABLE_SET_VAL): Remove.
(TUNABLE_SET_VAL_WITH_CALLBACK): Likewise.
* README.tunables: Document the new macros.
* malloc/arena.c (ptmalloc_init): Adjust.
Since wcsnlen.S uses pminud which is the part of SSE4.1, move wcsnlen.S
to multiarch/wcsnlen-sse4_1.S.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
wcsnlen-sse4_1 and wcsnlen-c.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Test __wcsnlen_sse4_1 and
__wcsnlen_sse2.
* sysdeps/x86_64/multiarch/ifunc-sse4_1.h: New file.
* sysdeps/x86_64/multiarch/wcsnlen-c.c: Likewise.
* sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S: Likewise.
* sysdeps/x86_64/multiarch/wcsnlen.c: Likewise.
* sysdeps/x86_64/wcsnlen.S: Removed.
This patch removes the s390 specific implementation of spinlock code
and is now using the generic one.
ChangeLog:
* sysdeps/s390/nptl/pthread_spin_init.c: Delete File.
* sysdeps/s390/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/s390/nptl/pthread_spin_trylock.c: Likewise.
* sysdeps/s390/nptl/pthread_spin_unlock.c: Likewise.
This patch optimizes the generic spinlock code.
The type pthread_spinlock_t is a typedef to volatile int on all archs.
Passing a volatile pointer to the atomic macros which are not mapped to the
C11 atomic builtins can lead to extra stores and loads to stack if such
a macro creates a temporary variable by using "__typeof (*(mem)) tmp;".
Thus, those macros which are used by spinlock code - atomic_exchange_acquire,
atomic_load_relaxed, atomic_compare_exchange_weak - have to be adjusted.
According to the comment from Szabolcs Nagy, the type of a cast expression is
unqualified (see http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_423.htm):
__typeof ((__typeof (*(mem)) *(mem)) tmp;
Thus from spinlock perspective the variable tmp is of type int instead of
type volatile int. This patch adjusts those macros in include/atomic.h.
With this construct GCC >= 5 omits the extra stores and loads.
The atomic macros are replaced by the C11 like atomic macros and thus
the code is aligned to it. The pthread_spin_unlock implementation is now
using release memory order instead of sequentially consistent memory order.
The issue with passed volatile int pointers applies to the C11 like atomic
macros as well as the ones used before.
I've added a glibc_likely hint to the first atomic exchange in
pthread_spin_lock in order to return immediately to the caller if the lock is
free. Without the hint, there is an additional jump if the lock is free.
I've added the atomic_spin_nop macro within the loop of plain reads.
The plain reads are also realized by C11 like atomic_load_relaxed macro.
The new define ATOMIC_EXCHANGE_USES_CAS determines if the first try to acquire
the spinlock in pthread_spin_lock or pthread_spin_trylock is an exchange
or a CAS. This is defined in atomic-machine.h for all architectures.
The define SPIN_LOCK_READS_BETWEEN_CMPXCHG is now removed.
There is no technical reason for throwing in a CAS every now and then,
and so far we have no evidence that it can improve performance.
If that would be the case, we have to adjust other spin-waiting loops
elsewhere, too! Using a CAS loop without plain reads is not a good idea
on many targets and wasn't used by one. Thus there is now no option to
do so.
Architectures are now using the generic spinlock automatically if they
do not provide an own implementation. Thus the pthread_spin_lock.c files
in sysdeps folder are deleted.
ChangeLog:
* NEWS: Mention new spinlock implementation.
* include/atomic.h:
(__atomic_val_bysize): Cast type to omit volatile qualifier.
(atomic_exchange_acq): Likewise.
(atomic_load_relaxed): Likewise.
(ATOMIC_EXCHANGE_USES_CAS): Check definition.
* nptl/pthread_spin_init.c (pthread_spin_init):
Use atomic_store_relaxed.
* nptl/pthread_spin_lock.c (pthread_spin_lock):
Use C11-like atomic macros.
* nptl/pthread_spin_trylock.c (pthread_spin_trylock):
Likewise.
* nptl/pthread_spin_unlock.c (pthread_spin_unlock):
Use atomic_store_release.
* sysdeps/aarch64/nptl/pthread_spin_lock.c: Delete File.
* sysdeps/arm/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/hppa/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/m68k/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/microblaze/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/mips/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/nios2/nptl/pthread_spin_lock.c: Likewise.
* sysdeps/aarch64/atomic-machine.h (ATOMIC_EXCHANGE_USES_CAS): Define.
* sysdeps/alpha/atomic-machine.h: Likewise.
* sysdeps/arm/atomic-machine.h: Likewise.
* sysdeps/i386/atomic-machine.h: Likewise.
* sysdeps/ia64/atomic-machine.h: Likewise.
* sysdeps/m68k/coldfire/atomic-machine.h: Likewise.
* sysdeps/m68k/m680x0/m68020/atomic-machine.h: Likewise.
* sysdeps/microblaze/atomic-machine.h: Likewise.
* sysdeps/mips/atomic-machine.h: Likewise.
* sysdeps/powerpc/powerpc32/atomic-machine.h: Likewise.
* sysdeps/powerpc/powerpc64/atomic-machine.h: Likewise.
* sysdeps/s390/atomic-machine.h: Likewise.
* sysdeps/sparc/sparc32/atomic-machine.h: Likewise.
* sysdeps/sparc/sparc32/sparcv9/atomic-machine.h: Likewise.
* sysdeps/sparc/sparc64/atomic-machine.h: Likewise.
* sysdeps/tile/tilegx/atomic-machine.h: Likewise.
* sysdeps/tile/tilepro/atomic-machine.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/atomic-machine.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h: Likewise.
* sysdeps/unix/sysv/linux/nios2/atomic-machine.h: Likewise.
* sysdeps/unix/sysv/linux/sh/atomic-machine.h: Likewise.
* sysdeps/x86_64/atomic-machine.h: Likewise.
Since cpu_features is available, use it instead of dl_x86_cpu_features.
* sysdeps/x86/cacheinfo.c (intel_check_word): Accept cpu_features
and use it instead of dl_x86_cpu_features.
(handle_intel): Replace maxidx with cpu_features. Pass
cpu_features to intel_check_word.
(__cache_sysconf): Pass cpu_features to handle_intel.
(init_cacheinfo): Likewise. Use cpu_features instead of
dl_x86_cpu_features.
Optimize x86-64 memcmp/wmemcmp with AVX2. It uses vector compare as
much as possible. It is as fast as SSE4 memcmp for size <= 16 bytes
and up to 2X faster for size > 16 bytes on Haswell and Skylake. Select
AVX2 memcmp/wmemcmp on AVX2 machines where vzeroupper is preferred and
AVX unaligned load is fast.
NB: It uses TZCNT instead of BSF since TZCNT produces the same result
as BSF for non-zero input. TZCNT is faster than BSF and is executed
as BSF if machine doesn't support TZCNT.
Key features:
1. For size from 2 to 7 bytes, load as big endian with movbe and bswap
to avoid branches.
2. Use overlapping compare to avoid branch.
3. Use vector compare when size >= 4 bytes for memcmp or size >= 8
bytes for wmemcmp.
4. If size is 8 * VEC_SIZE or less, unroll the loop.
5. Compare 4 * VEC_SIZE at a time with the aligned first memory area.
6. Use 2 vector compares when size is 2 * VEC_SIZE or less.
7. Use 4 vector compares when size is 4 * VEC_SIZE or less.
8. Use 8 vector compares when size is 8 * VEC_SIZE or less.
* sysdeps/x86/cpu-features.h (index_cpu_MOVBE): New.
* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
memcmp-avx2 and wmemcmp-avx2.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Test __memcmp_avx2 and __wmemcmp_avx2.
* sysdeps/x86_64/multiarch/memcmp-avx2.S: New file.
* sysdeps/x86_64/multiarch/wmemcmp-avx2.S: Likewise.
* sysdeps/x86_64/multiarch/memcmp.S: Use __memcmp_avx2 on AVX
2 machines if AVX unaligned load is fast and vzeroupper is
preferred.
* sysdeps/x86_64/multiarch/wmemcmp.S: Use __wmemcmp_avx2 on AVX
2 machines if AVX unaligned load is fast and vzeroupper is
preferred.
The difference between strlen and wcslen is byte vs int. We can
replace pminub and pcmpeqb with pminud and pcmpeqd to turn strlen
into wcslen.
* sysdeps/x86_64/strlen.S (PMINU): New.
(PCMPEQ): Likewise.
(SHIFT_RETURN): Likewise.
(FIND_ZERO): Replace pcmpeqb with PCMPEQ.
(strlen): Add SHIFT_RETURN before ret. Replace pcmpeqb and
pminub with PCMPEQ and PMINU.
* sysdeps/x86_64/wcsnlen.S: New file.
By x86-64 specification, 32-bit destination registers are zero-extended
to 64 bits. There is no need to use 64-bit registers when only the lower
32 bits are non-zero. Also 2 instructions in:
mov %rdi, %rcx
and $15, %rcx
jz L(length_less16_offset0)
mov %rdi, %rcx <<< redundant
and $15, %rcx <<< redundant
are redundant.
* sysdeps/x86_64/memrchr.S (__memrchr): Use 32-bit registers for
the lower 32 bits. Remove redundant instructions.
The kernel interface for p{readv,writev}{64}v is
(unsigned long fd, {const }struct iovec *iov, unsigned long vlen,
unsigned long pos_l, unsigned long pos_h)
Except for targets which define __ARCH_WANT_COMPAT_SYS_PREADV64 and
__ARCH_WANT_COMPAT_SYS_PWRITEV64,
(unsigned long fd, {const }struct iovec *iov, unsigned long vlen,
off64_t pos)
is used for p{readv,writev}{64}v. X32 is the only such target. The
LO_HI_LONG macro is used to pass offset to the pos_l and pos_h pair.
Since pos_h is ignored when size of offset == sizeof of pos_l, x86-64
has
#define LO_HI_LONG(val) (val)
But the kernel interface for p{readv,writev}{64}v2 is
(unsigned long fd, {const }struct iovec *iov, unsigned long vlen,
unsigned long pos_l, unsigned long pos_h, int flags)
Except for targets which define __ARCH_WANT_COMPAT_SYS_PREADV64V2 and
__ARCH_WANT_COMPAT_SYS_PWRITEV64V2,
(unsigned long fd, {const }struct iovec *iov, unsigned long vlen,
off64_t pos, int flags)
is used for p{readv,writev}{64}v2. X32 is the only such target. Update
x86-64 LO_HI_LONG to pass 0 as the high part of the offset argument for
p{readv,writev}{64}v2 and define a different LO_HI_LONG for x32 to only
pass one argument for offset.
Tested on x32 and x86-64.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h (LO_HI_LONG): Pass
0 as the high part of offset.
* sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h (LO_HI_LONG): New.
Various bits/signum.h headers define SIG_HOLD if __USE_UNIX98. That
should be __USE_XOPEN, as this macro is in XPG4. This patch fixes the
conditionals accordingly. Because of other header bugs, this does not
allow any XFAILs to be removed (however, the XPG4/signal.h/conform
XFAIL only depends on a few such straightforward header bugs, not on
the more complicated to fix ucontext_t issues, as ucontext_t isn't
included in signal.h in XPG4).
Tested for x86_64.
[BZ #21538]
* bits/signum.h (SIG_HOLD): Define if [__USE_XOPEN], not
[__USE_UNIX98].
* sysdeps/unix/bsd/bits/signum.h (SIG_HOLD): Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/signum.h (SIG_HOLD):
Likewise.
* sysdeps/unix/sysv/linux/bits/signum.h (SIG_HOLD): Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/signum.h (SIG_HOLD): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/signum.h (SIG_HOLD): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/signum.h (SIG_HOLD):
Likewise.
glibc defines the stack_t type with the tag struct sigaltstack. This
is not permitted by POSIX; sigaltstack is only reserved with file
scope in the namespace of ordinary identifiers, not the tag namespace,
and in the case where stack_t is obtained from ucontext.h rather than
signal.h, it's not reserved with file scope at all.
This patch removes the tag accordingly and updates uses in glibc of
struct sigaltstack. This is similar to the removal of the "struct
siginfo" tag a few years ago: C++ name mangling changes are an
unavoidable consequence. A NEWS item is added to note the changed
mangling. There is inevitably some risk of breaking builds of
anything that relies on the struct sigaltstack name (though the first
few hits I looked at from codesearch.debian.net generally seemed to
involve code that could use the stack_t name conditionally, so
depending on how they determine the conditionals they may work with
glibc not defining the struct tag anyway).
Tested for x86_64 and x86, and with build-many-glibcs.py.
[BZ #21517]
* bits/types/stack_t.h (stack_t): Remove struct tag.
* sysdeps/unix/sysv/linux/bits/types/stack_t.h (stack_t):
Likewise.
* sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h (stack_t):
Likewise.
* debug/segfault.c (install_handler): Use stack_t instead of
struct sigaltstack.
* hurd/hurd/signal.h (struct hurd_sigstate): Likewise.
* hurd/trampoline.c (_hurd_setup_sighandler): Likewise.
* include/signal.h (__sigaltstack): Likwise.
* signal/sigaltstack.c (__sigaltstack): Likewise.
* signal/signal.h (sigaltstack): Likewise.
* sysdeps/mach/hurd/i386/signal-defines.sym
(SIGALTSTACK__SS_SP__OFFSET): Likewise.
(SIGALTSTACK__SS_SIZE__OFFSET): Likewise.
(SIGALTSTACK__SS_FLAGS__OFFSET): Likewise.
* sysdeps/mach/hurd/sigaltstack.c (__sigaltstack): Likewise.
* sysdeps/mach/hurd/sigstack.c (sigstack): Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/procfs.h (struct
elf_prstatus): Likewise.
* sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c (CHECK_SP):
Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/procfs.h (struct elf_prstatus):
Likewise.
* sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c (CHECK_SP):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/procfs.h (struct
elf_prstatus): Likewise.
* sysdeps/unix/sysv/linux/sh/sys/procfs.h (struct elf_prstatus):
Likewise.
* sysdeps/unix/sysv/linux/sys/procfs.h (struct elf_prstatus):
Likewise.
bench-memchr.c is shared with bench-memrchr.c. This patch adds some
tests for positions close to the beginning for memrchr, which are
equivalent to positions close to the end for memchr.
* benchtests/bench-memchr.c (do_test): Print out both length
and position.
(test_main): Also test the position close to the beginning for
memrchr.
__x86_shared_non_temporal_threshold was set to 6 times of per-core
shared cache size, based on the large memcpy micro benchmark in glibc
on a 8-core processor. For a processor with more than 8 cores, the
threshold is too low. Set __x86_shared_non_temporal_threshold to the
3/4 of the total shared cache size so that it is unchanged on 8-core
processors. On processors with less than 8 cores, the threshold is
lower.
* sysdeps/x86/cacheinfo.c (__x86_shared_non_temporal_threshold):
Set to the 3/4 of the total shared cache size.
The @errno macro is extended to render the canonical error string in
every documented errno error. Redundant entries and "???" are
removed. Sixty-six errors now at least contain the error string as
the description, where no description (or "???") existed before.
* manual/errno.texi: Remove redundant error strings.
* manual/macros.texi (@errno): Render the error string in
every description.
signal.h defines the sigevent structure and constants if defined
__USE_POSIX199309 || defined __USE_XOPEN_EXTENDED. The
__USE_XOPEN_EXTENDED condition is incorrect; this structure does not
appear in XSI standards before Unix98 (which implies
__USE_POSIX199309). This patch fixes the conditionals accordingly
(the existing conditional is correct for siginfo_t, just not for
sigevent).
Tested for x86_64. This does not allow any conform/ XFAILs to be
removed because of other signal.h namespace bugs.
[BZ #21543]
* signal/signal.h: Only include <bits/types/sigevent_t.h> and
<bits/sigevent-consts.h> if [__USE_POSIX199309], not if
[__USE_XOPEN_EXTENDED].
This patch adds the missing compiler flags for correct pthread cancellation
on some architectures for the p{read,write}v2 implementation (52bd938169).
Checked on x86_64-linux-gnu and powerpc64le-linux-gnu.
* misc/Makefile (CFLAGS-preadv2.c): New rule.
(CFLAGS-preadv64v2.c): Likewise.
(CFLAGS-pwritev2.c): Likewise.
(CFLAGS-pwritev64v2.c): Likewise.
A further simplification could eliminate the canon variable in
gaih_inet and replace it with canonbuf. However, canonbuf is
used as a flag in the nscd code, which makes this somewhat
non-straightforward.
This is intended as a type-safe alternative to obstacks and
hand-written realloc constructs. The implementation avoids
writing function pointers to the heap.
In stdlib/gmp-impl.h, the macros MAX and MIN are defined exactly the same
as in sys/param.h. This patch removes the redefinition and makes
gmp-impl.h include sys/param.h instead.
Tested for powerpc64le and s390x.
* stdlib/gmp-impl.h: Include sys/param.h instead of redefining the
macros MAX and MIN.
Various of the signal.h conform/ failures for XPG4 and XPG42 are
actually the result of incorrect test expectations rather than header
bugs. This patch fixes the expectations to accord with those
standards (this does not however allow any XFAILs to be removed, as
some header bugs remain). Note for anyone comparing with the
standards: corrigendum U013/16 removes the mention of a sigmask
function in signal.h (C435 lists such a function in the definition of
signal.h, but without any actual specification for the function
itself), so sigmask is not included in the expectations.
Tested for x86_64.
* conform/data/signal.h-data (sa_sigaction): Do not expect for
[XPG4].
(SA_SIGINFO): Likewise.
(SA_ONSTACK): Likewise.
(SA_RESETHAND): Likewise.
(SA_RESTART): Likewise.
(SA_NOCLDWAIT): Likewise.
(SA_NODEFER): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
(MINSIGSTKSZ): Likewise.
(SIGSTKSZ): Likewise.
(ucontext_t): Likewise.
(stack_t): Likewise.
(struct sigstack): Likewise.
(SI_USER): Do not expect for [XPG4 || XPG42].
(SI_QUEUE): Likewise.
(SI_TIMER): Likewise.
(SI_ASYNCIO): Likewise.
(SI_MESGQ): Likewise.
(bsd_signal): Do not expect for [XPG4].
(killpg): Likewise.
(sigaltstack): Likewise.
(sighold): Likewise.
(sigignore): Likewise.
(siginterrupt): Likewise.
(sigpause): Likewise.
(sigrelse): Likewise.
(sigset): Likewise.
(sigwait): Do not expect for [XPG4 || XPG42].
On Linux-based configurations, bits/syscall.h is a generated file.
To avoid build-ordering problems, the Linux sys/syscall.h only includes
bits/syscall.h if _LIBC is not defined. After the _ISOMAC-testsuite
changes, this means any test case that includes sys/syscall.h tries to
pull in bits/syscall.h. This would be fine, because it'll definitely
have been generated by the time we start compiling tests, except that
the generated <builddir>/misc/bits/syscall.h is not visible in the
include path, because nothing needed it till now. So we either get
the bits/syscall.h from the host system, or the build fails.
The fix is simple: add a shim header for bits/syscall.h. I put it in
sysdeps/unix/sysv/linux/include instead of the top-level include/
because bits/syscall.h doesn't exist at all on other configurations as
far as I can tell.
This is known to affect nptl/tst-cond2[45]. Thanks to John David
Anglin for noticing the problem.
[BZ #21514]
* sysdeps/unix/sysv/linux/include/bits/syscall.h: New shim header
pointing to the generated file in <builddir>/misc/bits/syscall.h.
Continuing the fixes for namespace issues in sys/ucontext.h, this
patch moves various symbols into the implementation namespace in the
absence of __USE_MISC. As with previous changes, it is nonexhaustive,
just covering more straightforward cases.
Structure fields are generally changed to have a prefix __ in the
absence of __USE_MISC, via a macro __ctx (used without a space before
the open parenthesis, since the result is a single identifier).
Various macros such as NGREG also have leading __ added. No changes
are made to structure tags (and thus to C++ name mangling), except
that in the (unused) file sysdeps/i386/sys/ucontext.h, structures
defined inside other structures as the type for a field have their
tags removed in the non-__USE_MISC case (those structure tags would
not in any case have been visible in C++, because in C++ the scope of
such a tag is limited to the containing structure). No changes are
made to the contents of bits/sigcontext.h, or to whether it is
included. Because of remaining namespace issues, this patch does not
yet fix the bug or allow any XFAILs to be removed.
Tested for x86_64 and x86, and with build-many-glibcs.py.
[BZ #21457]
* sysdeps/arm/sys/ucontext.h (NGREG): Rename to __NGREG and define
NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(mcontext_t): Use __ctx in defining fields.
* sysdeps/i386/sys/ucontext.h (NGREG): Rename to __NGREG and
define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(__ctxt): Likewise.
(fpregset_t): Use __ctx and __ctxt in defining fields.
(mcontext_t): Likewise.
* sysdeps/m68k/sys/ucontext.h (NGREG): Rename to __NGREG and
define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(mcontext_t): Use __ctx in defining fields.
* sysdeps/mips/sys/ucontext.h (NGREG): Rename to __NGREG and
define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(fpregset_t): Use __ctx in defining fields.
(mcontext_t): Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h (NGREG): Rename to
__NGREG and define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(NFPREG): Rename to __NFPREG and define NFPREG to __NFPREG if
[__USE_MISC].
(fpregset_t): Define using __NFPREG.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h (NGREG): Rename to
__NGREG and define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(fpregset_t): Use __ctx in defining fields.
(mcontext_t): Likewise.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h (NGREG): Rename to
__NGREG and define NGREG to __NGREG if [__USE_MISC].
(NFPREG): Rename to __NFPREG and define NFPREG to __NFPREG if
[__USE_MISC].
(gregset_t): Define using __NGREG.
(__ctx): New macro.
(fpregset_t): Use __ctx in defining fields.
(mcontext_t): Likewise.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h (__ctx): New macro.
(mcontext_t): Use __ctx in defining fields.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h (__ctx): New
macro.
[__WORDSIZE == 32] (NGREG): Rename to __NGREG and define NGREG to
__NGREG if [__USE_MISC].
[__WORDSIZE == 32] (gregset_t): Define using __NGREG.
[__WORDSIZE == 32] (fpregset_t): Use __ctx in defining fields.
(mcontext_t): Likewise.
[__WORDSIZE != 32] (NGREG): Rename to __NGREG and define NGREG to
__NGREG if [__USE_MISC].
[__WORDSIZE != 32] (NFPREG): Rename to __NFPREG and define NFPREG
to __NFPREG if [__USE_MISC].
[__WORDSIZE != 32] (NVRREG): Rename to __NVRREG and define NVRREG
to __NVRREG if [__USE_MISC].
[__WORDSIZE != 32] (gregset_t): Define using __NGREG.
[__WORDSIZE != 32] (fpregset_t): Define using __NFPREG.
[__WORDSIZE != 32] (vscr_t): Use __ctx in defining fields.
[__WORDSIZE != 32] (vrregset_t): Likewise.
[__WORDSIZE != 32] (mcontext_t): Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (__ctx): New macro.
(__psw_t): Use __ctx in defining fields.
(NGREG): Rename to __NGREG and define NGREG to __NGREG if
[__USE_MISC].
(gregset_t): Define using __NGREG.
(fpreg_t): Use __ctx in defining fields.
(fpregset_t): Likewise.
(mcontext_t): Likewise.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (NGREG): Rename to
__NGREG and define NGREG to __NGREG if [__USE_MISC].
(gregset_t): Define using __NGREG.
(NFPREG): Rename to __NFPREG and define NFPREG to __NFPREG if
[__USE_MISC].
(fpregset_t): Define using __NFPREG.
(__ctx): New macro.
(mcontext_t): Use __ctx in defining fields.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (__ctx): New macro.
[__x86_64__] (NGREG): Rename to __NGREG and define NGREG to
__NGREG if [__USE_MISC].
[__x86_64__] (gregset_t): Define using __NGREG.
[__x86_64__] (struct _libc_fpxreg): Use __ctx in defining fields.
[__x86_64__] (struct _libc_fpstate): Likewise.
[__x86_64__] (mcontext_t): Likewise.
[!__x86_64__] (NGREG): Rename to __NGREG and define NGREG to
__NGREG if [__USE_MISC].
[!__x86_64__] (gregset_t): Define using __NGREG.
[!__x86_64__] (struct _libc_fpreg): Use __ctx in defining fields.
[!__x86_64__] (struct _libc_fpstate): Likewise.
[!__x86_64__] (mcontext_t): Likewise.
libpthread used to have its own vfork implementation that differed
from libc's only in having a pointless micro-optimization. There is
no longer any use to having a separate copy in libpthread, but the
historical ABI requires a compatibility shim. microblaze was trying
to be slightly too clever about how it did this, and tickled a linker
bug. The linker bug should get fixed eventually, but there's no
reason for us to keep tickling it in the meantime.
This doesn't reuse the generic pt-vfork.c because microblaze doesn't
have IFUNC support yet, and it doesn't reuse aarch64/pt-vfork.c
because that fails to generate a tailcall (with GCC 7.1.1).
* sysdeps/unix/sysv/linux/microblaze/pt-vfork.S: Don't include
alpha/pt-vfork.S. Provide own compat shim for vfork and __vfork.
* sysdeps/unix/sysv/linux/microblaze/vfork.S: Add __libc_vfork alias.
* sysdeps/unix/sysv/linux/microblaze/localplt.data:
libpthread.so no longer references __errno_location.
This patch adds support of preadv2 and pwritev2 which are similar to
preadv/pwritev but with an extra flag argument. As for preadv/pwritev
both interfaces are added a non-standard GNU API.
For default 'posix' implementation trying to emulate the Linux supported
flags is troublesome:
* We can not temporary change the file state of the O_DSYNC and O_SYNC
flags to emulate RWF_{D}SYNC (attempts to change the state of using
fcntl are silently ignored).
* IOCB_HIPRI requires the file opened in O_DIRECT and uses an internal
semantic not provided by any other flag (O_NONBLOCK for instance).
So default sysdeps/posix implementations fails with EOPNOTSUPP for any non
supported flag (which are none currently) calls generic preadv/pwritev.
Basically this implementation supports only preadv2 called as preadv (with
flags sets to 0).
The Linux one uses the preadv2/pwritev2 syscall if defined, otherwise it
call preadv/writev. Instead of using the previous __ASSUME_* to
unconditionally issue the syscall (and avoid building the fallback routine),
it call pread/write if the preadv2/pwritev2 syscalls fails. The idea
is just avoid adding another __ASSUME_* and checking each architecture
on every kernel bump and simplify code conditionals.
Checked on x86_64-linux-gnu and on i686-linux-gnu and a check with
run-built-tests=no on aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabihf,
ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu, mips{64,64n32}-linux-gnu,
nios2-linux-gnu, powerpc{64,64le}-linux-gnu, s390{x}-linux-gnu,
sparc{64,v9}-linux-gnu, tile{gx,pro}-linux-gnu, and sh4-linux-gnu (all using
gcc 6.3).
* NEWS: Add note about pwritev2 and preadv2 inclusion.
* misc/Makefile (routines): Add preadv2, preadv64v2, pwritev2, and
pwritev64v2.
(tests): Add tst-preadvwritev2 and tst-preadvwritev64v2.
* misc/Versions (GLIBC_2.26): Add preadv2, preadv64v2, pwritev2, and
pwritev64v2.
* misc/preadv2.c: New file.
* misc/preadv64v2.c: Likewise.
* misc/pwritev2.c: Likewise.
* misc/pwritev64v2.c: Likewise.
* misc/tst-preadvwritev2.c: Likewise.
* misc/tst-preadvwritev64v2.c: Likewise.
* manual/llio.texi: Add preadv2 and pwritev2 documentation.
* misc/sys/uio.h [__USE_GNU && !__USE_FILE_OFFSET64] (preadv2): New
prototype.
[__USE_GNU && !__USE_FILE_OFFSET64] (pwritev2): Likewise.
[__USE_GNU && __USE_FILE_OFFSET64] (preadv64v2): Likewise.
[__USE_GNU && __USE_FILE_OFFSET64] (pwritev64v2): Likewise.
* misc/tst-preadvwritev-common.c (PREADV): Define if not defined.
(PWRITEV): Likewise.
(do_test_with_offset): Use PREADV and PWRITEV macros and check for
ENOSYS.
* nptl/tst-cancel4.c (tf_pwritev2): New test.
(tf_preadv2): Likewise.
(tf_fsync): Add tf_pwritev2 and tf_preadv2.
* sysdeps/posix/preadv2.c: Likewise.
* sysdeps/posix/preadv64v2.c: Likewise.
* sysdeps/posix/pwritev2.c: Likewise.
* sysdeps/posix/pwritev64v2.c: Likewise.
* sysdeps/unix/sysv/linux/kernel-features.h: Add comment for syscall
support in kernel.
* sysdeps/unix/sysv/linux/preadv2.c: Likewise.
* sysdeps/unix/sysv/linux/preadv64v2.c: Likewise.
* sysdeps/unix/sysv/linux/pwritev2.c: Likewise.
* sysdeps/unix/sysv/linux/pwritev64v2.c: Likewise.
* sysdeps/unix/sysv/linux/preadv.c (preadv): Add libc_hidden_def.
* sysdeps/unix/sysv/linux/preadv64.c (preadv64): Likewise.
* sysdeps/unix/sysv/linux/pwritev.c (pwritev): Likewise.
* sysdeps/unix/sysv/linux/pwritev64.c (pwritev64): Likewise.
* sysdeps/unix/sysv/linux/bits/uio.h: Add supported preadv2/pwritev2
support flags on Linux.
* sysdeps/unix/sysv/linux/aarch64/libc.abilist (GLIBC_2.26): Add
preadv2, preadv64v2, pwritev2, pwritev64v2.
* sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/arm/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/hppa/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/i386/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/ia64/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/microblaze/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/nios2/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
(GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
(GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
(GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/sh/libc.abilist (GLIBC_2.26): Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/sysv/linux/tile/tilegx/tilegx32/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/sysv/linux/tile/tilegx/tilegx64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist (GLIBC_2.26):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist (GLIBC_2.26):
Likewise.
Allow the CPU features structure set up to be overridden by tunables
by delaying it to until after tunables are initialized. The
initialization is already delayed in dynamically linked glibc, it is
only in static binaries that the initialization is set early to allow
it to influence IFUNC relocations that happen in libc-start. It is a
bit too early however and there is a good place between tunables
initialization and IFUNC relocations where this can be done.
Verified that this does not regress the testsuite.
* csu/libc-start.c [!ARCH_INIT_CPU_FEATURES]: Define
ARCH_INIT_CPU_FEATURES.
(LIBC_START_MAIN): Call it.
* sysdeps/unix/sysv/linux/aarch64/libc-start.c
(__libc_start_main): Remove.
(ARCH_INIT_CPU_FEATURES): New macro.
* sysdeps/x86/libc-start.c (__libc_start_main): Remove.
(ARCH_INIT_CPU_FEATURES): New macro.
By x86-64 specification, 32-bit destination registers are zero-extended
to 64 bits. There is no need to use 64-bit registers when only the lower
32 bits are non-zero.
* sysdeps/x86_64/memchr.S (MEMCHR): Use 32-bit registers for
the lower 32 bits.
The following tests depend on ENABLE_LOCK_ELISION, which is only
available on tests-internal.
- nptl/tst-mutex8
- nptl/tst-mutex8-static
- nptl/tst-mutexpi8
- nptl/tst-mutexpi8-static
* nptl/Makefile (tests): Move nptl/tst-mutex8, nptl/tst-mutex8-static,
nptl/tst-mutexpi8 and nptl/tst-mutexpi8-static to...
(tests-internal): ... here.
Since __tunables_init is internal to ld.so, we should mark it hidden
to avoid PLT. We should also avoid PLT when calling __tunable_set_val
within ld.so.
2017-05-25 Siddhesh Poyarekar <siddhesh@sourceware.org>
H.J. Lu <hongjiu.lu@intel.com>
* elf/dl-tunables.c (__tunable_set_val): Make a hidden alias.
* elf/dl-tunables.h (__tunables_init): Mark it hidden in rtld.
(__tunable_set_val): Likewise.
We can put processor specific tunables in dl-tunables.list under
sysdeps instead of in elf/dl-tunables.list.
* Makeconfig ($(common-objpfx)dl-tunable-list.h): Also check
dl-tunables.list in subdirectories.
This change defines float128_private.h which contains
macros used to override long double naming conventions
when building a ldbl file.
* math/math.h [__HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)]
(SNANF128): New macro.
* math/e_sqrtf128.c: New file.
* math/s_fmaxmag_template.c: Include math_private.h in order to
make inline expansion of fabs128().
* math/s_fminmag_template.c: Likewise.
* sysdeps/ieee754/float128/e_acosf128.c: New file.
* sysdeps/ieee754/float128/e_acoshf128.c: New file.
* sysdeps/ieee754/float128/e_asinf128.c: New file.
* sysdeps/ieee754/float128/e_atan2f128.c: New file.
* sysdeps/ieee754/float128/e_atanhf128.c: New file.
* sysdeps/ieee754/float128/e_coshf128.c: New file.
* sysdeps/ieee754/float128/e_exp10f128.c: New file.
* sysdeps/ieee754/float128/e_expf128.c: New file.
* sysdeps/ieee754/float128/e_fmodf128.c: New file.
* sysdeps/ieee754/float128/e_gammaf128_r.c: New file.
* sysdeps/ieee754/float128/e_hypotf128.c: New file.
* sysdeps/ieee754/float128/e_ilogbf128.c: New file.
* sysdeps/ieee754/float128/e_j0f128.c: New file.
* sysdeps/ieee754/float128/e_j1f128.c: New file.
* sysdeps/ieee754/float128/e_jnf128.c: New file.
* sysdeps/ieee754/float128/e_lgammaf128_r.c: New file.
* sysdeps/ieee754/float128/e_log10f128.c: New file.
* sysdeps/ieee754/float128/e_log2f128.c: New file.
* sysdeps/ieee754/float128/e_logf128.c: New file.
* sysdeps/ieee754/float128/e_powf128.c: New file.
* sysdeps/ieee754/float128/e_rem_pio2f128.c: New file.
* sysdeps/ieee754/float128/e_remainderf128.c: New file.
* sysdeps/ieee754/float128/e_scalbf128.c: New file.
* sysdeps/ieee754/float128/e_sinhf128.c: New file.
* sysdeps/ieee754/float128/float128_private.h: New file.
* sysdeps/ieee754/float128/gamma_productf128.c: New file.
* sysdeps/ieee754/float128/ieee754_float128.h: New file.
* sysdeps/ieee754/float128/k_cosf128.c: New file.
* sysdeps/ieee754/float128/k_sincosf128.c: New file.
* sysdeps/ieee754/float128/k_sinf128.c: New file.
* sysdeps/ieee754/float128/k_tanf128.c: New file.
* sysdeps/ieee754/float128/lgamma_negf128.c: New file.
* sysdeps/ieee754/float128/lgamma_productf128.c: New file.
* sysdeps/ieee754/float128/s_asinhf128.c: New file.
* sysdeps/ieee754/float128/s_atanf128.c: New file.
* sysdeps/ieee754/float128/s_cbrtf128.c: New file.
* sysdeps/ieee754/float128/s_ceilf128.c: New file.
* sysdeps/ieee754/float128/s_copysignf128.c: New file.
* sysdeps/ieee754/float128/s_cosf128.c: New file.
* sysdeps/ieee754/float128/s_erff128.c: New file.
* sysdeps/ieee754/float128/s_expm1f128.c: New file.
* sysdeps/ieee754/float128/s_fabsf128.c: New file.
* sysdeps/ieee754/float128/s_finitef128.c: New file.
* sysdeps/ieee754/float128/s_floorf128.c: New file.
* sysdeps/ieee754/float128/s_fmaf128.c: New file.
* sysdeps/ieee754/float128/s_fpclassifyf128.c: New file.
* sysdeps/ieee754/float128/s_frexpf128.c: New file.
* sysdeps/ieee754/float128/s_fromfpf128.c: New file.
* sysdeps/ieee754/float128/s_fromfpxf128.c: New file.
* sysdeps/ieee754/float128/s_getpayloadf128.c: New file.
* sysdeps/ieee754/float128/s_isinff128.c: New file.
* sysdeps/ieee754/float128/s_isnanf128.c: New file.
* sysdeps/ieee754/float128/s_issignalingf128.c: New file.
* sysdeps/ieee754/float128/s_llrintf128.c: New file.
* sysdeps/ieee754/float128/s_llroundf128.c: New file.
* sysdeps/ieee754/float128/s_log1pf128.c: New file.
* sysdeps/ieee754/float128/s_logbf128.c: New file.
* sysdeps/ieee754/float128/s_lrintf128.c: New file.
* sysdeps/ieee754/float128/s_lroundf128.c: New file.
* sysdeps/ieee754/float128/s_modff128.c: New file.
* sysdeps/ieee754/float128/s_nearbyintf128.c: New file.
* sysdeps/ieee754/float128/s_nextafterf128.c: New file.
* sysdeps/ieee754/float128/s_nexttowardf128.c: New file.
* sysdeps/ieee754/float128/s_nextupf128.c: New file.
* sysdeps/ieee754/float128/s_remquof128.c: New file.
* sysdeps/ieee754/float128/s_rintf128.c: New file.
* sysdeps/ieee754/float128/s_roundevenf128.c: New file.
* sysdeps/ieee754/float128/s_roundf128.c: New file.
* sysdeps/ieee754/float128/s_scalblnf128.c: New file.
* sysdeps/ieee754/float128/s_scalbnf128.c: New file.
* sysdeps/ieee754/float128/s_setpayloadf128.c: New file.
* sysdeps/ieee754/float128/s_setpayloadsigf128.c: New file.
* sysdeps/ieee754/float128/s_signbitf128.c: New file.
* sysdeps/ieee754/float128/s_significandf128.c: New file.
* sysdeps/ieee754/float128/s_sincosf128.c: New file.
* sysdeps/ieee754/float128/s_sinf128.c: New file.
* sysdeps/ieee754/float128/s_tanf128.c: New file.
* sysdeps/ieee754/float128/s_tanhf128.c: New file.
* sysdeps/ieee754/float128/s_totalorderf128.c: New file.
* sysdeps/ieee754/float128/s_totalordermagf128.c: New file.
* sysdeps/ieee754/float128/s_truncf128.c: New file.
* sysdeps/ieee754/float128/s_ufromfpf128.c: New file.
* sysdeps/ieee754/float128/s_ufromfpxf128.c: New file.
* sysdeps/ieee754/float128/t_sincosf128.c: New file.
* sysdeps/ieee754/float128/x2y2m1f128.c: New file.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h:
(__iscanonicalf128): Define as a macro.
I just noticed that the array count for the hwcap flags list in ARM is
off by 10, i.e. 37 instead of 27. Following patch fixes this.
* sysdeps/unix/sysv/linux/arm/dl-procinfo.c
(_dl_arm_cap_flags): Fix array subscript.
* sysdeps/unix/sysv/linux/arm/dl-procinfo.h (_DL_HWCAP_COUNT):
Fix count.
Remove is_intel, is_amd and max_cpuid macros. Use __get_cpu_features
to get cpu_features instead.
* sysdeps/x86/cacheinfo.c (is_intel): Removed.
(is_amd): Likewise.
(max_cpuid): Likewise.
(__cache_sysconf): Use __get_cpu_features to get cpu_features.
(init_cacheinfo): Likewise.
The sigstack function was removed in the 2001 edition of POSIX, and
the sigstack structure in the 2008 edition. signal.h wrongly includes
those declarations even for newer POSIX versions. This patch fixes
the conditions, and conform/ expectations, accordingly.
This patch makes the minimum change to when these declarations are
present, leaving them visible for __USE_MISC as they would previously
have been visible by default. Arguably these legacy declarations
should only be visible when an old standard is specifically requested,
but implementing that would require arranging for the various sigstack
implementations to be able to see the struct sigstack type despite it
not being in _GNU_SOURCE in that case.
Tested for x86_64.
[BZ #21511]
* signal/signal.h: Include <bits/types/struct_sigstack.h> only if
[(__USE_XOPEN_EXTENDED && !__USE_XOPEN2K8) || __USE_MISC].
(sigstack): Declare only if [(__USE_XOPEN_EXTENDED &&
!__USE_XOPEN2K) || __USE_MISC].
* conform/data/signal.h-data (struct sigstack): Expect type only
if [!XOPEN2K8 && !POSIX2008].
(sigstack): Expect function only if [XPG42 || UNIX98].
The various sys/ucontext.h headers include <signal.h> and all the
headers split out of <bits/sigstack.h>. (Except that the powerpc
version does not include <signal.h>.)
None of the standard versions defining ucontext.h require or permit
such inclusions; rather, they all say that the stack_t and sigset_t
types from signal.h are defined. This patch fixes the headers to
include just the bits/ headers for those types (and the existing
includes of bits/sigcontext.h). Since bits/types/sigset_t.h is now
being included instead of bits/types/__sigset_t.h, __sigset_t uses in
the headers are replaced by direct use of the public sigset_t type.
sysdeps/unix/sysv/linux/x86/bits/sigcontext.h was relying on the prior
inclusion of <signal.h> to define types such as __uint32_t, so gets a
bits/types.h include added to provide those types.
Although one could keep some or all of the includes under a __USE_MISC
conditional, that seems unnecessary to me, especially given the lack
of a <signal.h> include in the powerpc version meaning that portable
programs already cannot rely on such an include.
Tested for x86_64 and x86, and with build-many-glibcs.py. As with
other such fixes, more namespace issues remain so this does not permit
any XFAILs to be removed or bugs to be closed.
[BZ #21457]
* sysdeps/arm/sys/ucontext.h: Do not include <signal.h>,
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/generic/sys/ucontext.h: Do not include <signal.h>,
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/i386/sys/ucontext.h: Do not include <signal.h>,
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/m68k/sys/ucontext.h: Do not include <signal.h>,
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/mips/sys/ucontext.h: Do not include <signal.h>,
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h>.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Do not include
<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
* sysdeps/unix/sysv/linux/x86/bits/sigcontext.h: Include
<bits/types.h>.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h: Do not include
<signal.h>, <bits/sigstack.h>, <bits/types/struct_sigstack.h> or
<bits/ss_flags.h>. Include <bits/types/sigset_t.h> instead of
<bits/types/__sigset_t.h>.
(ucontext_t): Use sigset_t instead of __sigset_t.
siginfo-arch.h is included in two different places, so the default
definitions of the macros that it might or might not define need to
be done conditionally afterward, not unconditionally beforehand.
* sysdeps/unix/sysv/linux/bits/siginfo-consts.h
(__SI_ASYNCIO_AFTER_SIGIO): Define default after including
bits/siginfo-arch.h, only if not already defined.
* sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
(__SI_ALIGNMENT, __SI_BAND_TYPE, __SI_CLOCK_T)
(__SI_ERRNO_THEN_CODE, __SI_HAVE_SIGSYS, __SI_SEGFAULT_ADDL):
Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h:
Unconditionally define __SI_* macros.
As described in BZ#21398 (close as dup of 21393) report current
freopen implementation fails when one tries to freopen STDIN_FILENO,
STDOUT_FILENO, or STDERR_FILENO. Although on bug report the
discussion leads to argue if a close followed by a freopen on the
standard file is a valid operation, the underlying issue is not
really the check for dup3 returned value, but rather calling it
if the returned file descriptor is equal as the input one.
So for a quality of implementation this patch avoid calling dup3
for the aforementioned case. It also adds a dup3 error case check
for the two possible failures, with one being Linux only: EINTR and
EBUSY. The EBUSY issue is better explained on this stackoverflow
thread [1], but in a short it is due the internal Linux
implementation which allows a race condition window for dup2 due
the logic dissociation of file descriptor allocation and actual
VFS 'install' operation. For both outliers failures all allocated
memory is freed and a NULL FILE* is returned.
With this patch the example on BZ#21398 is now actually possible
(I used as the testcase for the bug report). Checked on
x86_64-linux-gnu.
[BZ #21393]
* libio/freopen.c (freopen): Avoid dup already opened file descriptor
and add a check for dup3 failure.
* libio/freopen64.c (freopen64): Likewise.
* libio/tst-freopen.c (do_test): Rename to do_test_basic and use
libsupport.
(do_test_bz21398): New test.
* manual/stdio.texi (freopen): Add documentation of EBUSY failure.
[1] http://stackoverflow.com/questions/23440216/race-condition-when-using-dup2
David Miller has not been shot yet AFAIK (yes, I googled for any news
that may seem relevant and I poked him on twitter some days ago) so
either nobody uses SPARC or the code is correct or nobody read the
instructions in the comment to shoot him. In all of those cases the
comment is clearly not useful, so getting rid of it.
The types affected are __sig_atomic_t, sig_atomic_t, __sigset_t,
sigset_t, sigval_t, sigevent_t, and siginfo_t. __sig_atomic_t is a
scalar, so it's now directly available from bits/types.h. The others
get bits/types/ headers.
Side effects include: There have been small changes to which
non-signal headers expose which subset of the signal-related types.
A couple of architectures' nested siginfo_t fields had to be renamed
to prevent undesired macro expansion. Internal code that wants to
manipulate signal masks must now include <sigsetops.h> (which is not
installed) and should be aware that __sigaddset, __sigandset,
__sigdelset, __sigemptyset, and __sigorset no longer return a value
(unlike the public API). Relatedly, the public signal.h no longer
declares any of those functions. The obsolete sigmask() macro no
longer has a system-specific definition -- in the cases where it
matters, it didn't work anyway.
New Linux architectures should create bits/siginfo-arch.h and/or
bits/siginfo-consts-arch.h to customize their siginfo_t, rather than
duplicating everything in bits/siginfo.h (which no longer exists).
Add new __SI_* macros if necessary. Ports to other operating systems
are strongly encouraged to generalize this scheme further.
* bits/sigevent-consts.h
* bits/siginfo-consts.h
* bits/types/__sigset_t.h
* bits/types/sigevent_t.h
* bits/types/siginfo_t.h
* sysdeps/unix/sysv/linux/bits/sigevent-consts.h
* sysdeps/unix/sysv/linux/bits/siginfo-consts.h
* sysdeps/unix/sysv/linux/bits/types/__sigset_t.h
* sysdeps/unix/sysv/linux/bits/types/sigevent_t.h
* sysdeps/unix/sysv/linux/bits/types/siginfo_t.h:
New system-dependent bits headers.
* sysdeps/unix/sysv/linux/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h
* sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
* sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h
* sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h
* sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h:
New Linux-only system-dependent bits headers.
* signal/bits/types/sig_atomic_t.h
* signal/bits/types/sigset_t.h
* signal/bits/types/sigval_t.h:
New non-system-dependent bits headers.
* sysdeps/generic/sigsetops.h
* sysdeps/unix/sysv/linux/sigsetops.h:
New internal headers.
* include/bits/types/sig_atomic_t.h
* include/bits/types/sigset_t.h
* include/bits/types/sigval_t.h:
New wrappers.
* signal/sigsetops.h
* bits/siginfo.h
* bits/sigset.h
* sysdeps/unix/sysv/linux/bits/siginfo.h
* sysdeps/unix/sysv/linux/bits/sigset.h
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
* sysdeps/unix/sysv/linux/mips/bits/siginfo.h
* sysdeps/unix/sysv/linux/s390/bits/siginfo.h
* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h
* sysdeps/unix/sysv/linux/x86/bits/siginfo.h:
Deleted.
* signal/Makefile, sysdeps/unix/sysv/linux/Makefile:
Update lists of installed headers.
* posix/bits/types.h: Define __sig_atomic_t here.
* signal/signal.h: Use the new bits headers; no need to handle
__need_sig_atomic_t nor __need_sigset_t. Don't use __sigmask
to define sigmask.
* include/signal.h: No need to handle __need_sig_atomic_t
nor __need_sigset_t. Don't define __sigemptyset.
* io/sys/poll.h, setjmp/setjmp.h
* sysdeps/arm/sys/ucontext.h, sysdeps/generic/sys/ucontext.h
* sysdeps/i386/sys/ucontext.h, sysdeps/m68k/sys/ucontext.h
* sysdeps/mach/hurd/i386/bits/sigcontext.h
* sysdeps/mips/sys/ucontext.h, sysdeps/powerpc/novmxsetjmp.h
* sysdeps/pthread/bits/sigthread.h
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h:
Use bits/types/__sigset_t.h.
* misc/sys/select.h, posix/spawn.h
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
* sysdeps/unix/sysv/linux/sys/epoll.h
* sysdeps/unix/sysv/linux/sys/signalfd.h:
Use bits/types/sigset_t.h.
* resolv/netdb.h, rt/mqueue.h: Use bits/types/sigevent_t.h.
* rt/aio.h: Use bits/types/sigevent_t.h and bits/sigevent-consts.h.
* socket/sys/socket.h: Don't include bits/sigset.h.
* login/utmp_file.c, shadow/lckpwdf.c, signal/sigandset.c
* signal/sigisempty.c, stdlib/abort.c, sysdeps/posix/profil.c
* sysdeps/posix/sigignore.c, sysdeps/posix/sigintr.c
* sysdeps/posix/signal.c, sysdeps/posix/sigset.c
* sysdeps/posix/sprofil.c, sysdeps/posix/sysv_signal.c
* sysdeps/unix/sysv/linux/nptl-signals.h:
Include sigsetops.h.
* signal/sigaddset.c, signal/sigandset.c, signal/sigdelset.c
* signal/sigorset.c, stdlib/abort.c, sysdeps/posix/sigignore.c
* sysdeps/posix/signal.c, sysdeps/posix/sigset.c:
__sigaddset, __sigandset, __sigdelset, __sigemptyset, __sigorset
now return no value.
* signal/sigaddset.c, signal/sigdelset.c, signal/sigismem.c
Include <errno.h>, <signal.h>, and <sigsetops.h> instead of
"sigsetops.h".
* signal/sigsetops.c: Explicitly define __sigismember,
__sigaddset, and __sigdelset as compatibility symbols.
* signal/Versions: Correct commentary on __sigpause,
__sigaddset, __sigdelset, __sigismember.
* inet/rcmd.c: Include sigsetops.h. Convert old code using
__sigblock/__sigsetmask to use __sigprocmask and friends.
These __need macros are only used internally, by nptl/descr.h.
However, including all of resolv.h from descr.h causes build failures
due to resolv.h's dozens of pseudo-struct-field macros, some of which
collide with struct fields in NPTL internal data structures.
Similarly, including all of list.h from descr.h produces an include
cycle, atomic.h -> atomic-machine.h -> tls.h -> descr.h -> list.h ->
atomic.h, and then list.h tries to use atomic.h macros that haven't
been defined yet. So we do need mini-headers for these. In the
list.h case I called it include/list_t.h since it isn't going to be
installed.
* resolv/resolv.h: Remove __need_res_state logic.
Move definition of res_state and related constants to ...
* resolv/bits/types/res_state.h: ...this new file.
* resolv/Makefile: Install bits/types/res_state.h.
* include/bits/types/res_state.h: New wrapper.
* include/list.h: Remove __need_list_t logic.
Move definition of list_t to ...
* include/list_t.h: ...this new file.
* nptl/descr.h: Include list_t.h and bits/types/res_state.h
instead of list.h and resolv.h.
This semi-mechanical patch removes all uses and definitions of the
sfi_breg, sfi_pld, and sfi_sp macros from various ARM-specific
assembly files. These were only used by NaCl.
* sysdeps/arm/sysdep.h
(ARM_SFI_MACROS, sfi_breg, sfi_pld, sfi_sp): Delete definitions.
* sysdeps/arm/__longjmp.S, sysdeps/arm/add_n.S
* sysdeps/arm/addmul_1.S, sysdeps/arm/arm-mcount.S
* sysdeps/arm/armv6/rawmemchr.S, sysdeps/arm/armv6/strchr.S
* sysdeps/arm/armv6/strcpy.S, sysdeps/arm/armv6/strlen.S
* sysdeps/arm/armv6/strrchr.S, sysdeps/arm/armv6t2/memchr.S
* sysdeps/arm/armv6t2/strlen.S
* sysdeps/arm/armv7/multiarch/memcpy_impl.S
* sysdeps/arm/armv7/strcmp.S, sysdeps/arm/dl-tlsdesc.S
* sysdeps/arm/memcpy.S, sysdeps/arm/memmove.S
* sysdeps/arm/memset.S, sysdeps/arm/setjmp.S
* sysdeps/arm/strlen.S, sysdeps/arm/submul_1.S:
Remove all uses of sfi_breg, sfi_pld, and sfi_sp.
The NaCl port has not been actively maintained since before the 2.25
release. The complementary GCC back-end was never contributed to GCC,
and we are given to understand that the current NaCl SDK has switched
to Clang and therefore cannot be used to build glibc anymore, so we
doubt that the port remains useful.
This commit simply removes the sysdeps/arm/nacl and sysdeps/nacl
directories and the abi-tags entry.
Remove the NaCl port.
* abi-tags: Remove .*-.*-nacl.* entry.
* sysdeps/arm/nacl: Remove directory and contents.
* sysdeps/nacl: Likewise.
errno.texi documents error macros, their values, and error strings in
Texinfo @comments, some of which are also used for @standards. The
purpose of this commit is to separate the standards from the error
strings so that both the @standards conversion script picks up clean
@standards and the errno documentation framework is improved.
The error names, values, and messages are consolidated in a new custom
macro, @errno. It is not clear that scripts within the sources rely
on the special Texinfo @comment-based format to generate files used
throughout the library, so the definition of @errno in macros.texi now
provides a comment indicating the dependency. The dependent scripts
are updated to use @errno, which also simplifies them a bit. The
files those scripts generate were verified to be unchanged.
The @errno macro is not visibly rendered in any way at this time, but
it does use an @cindex command to add the error string to the Concept
Index, to facilitate searching on error messages.
* manual/errno.texi: Convert @comment-based errno
documentation to @errno.
* manual/macros.texi (@errno): New macro. Consolidate errors,
their values, and messages, adding the error string to the
Concept Index. Provide a warning in the comment about
external (to the manual) dependencies.
* sysdeps/gnu/errlist.awk: Use @errno instead of @comments.
* sysdeps/mach/hurd/errnos.awk: Likewise.
bits/sigstack.h contains four things: the legacy struct sigstack type,
the preferred stack_t type, the SS_* enum values and macros for signal
stack sizes.
These vary in different ways between glibc configurations; in
particular, the stack sizes vary much more than any of the other
pieces. Furthermore, these pieces have different standard namespace
rules for when they should be visible (not currently visible in
conform/ results both because the relevant tests are XFAILed for
sys/ucontext.h namespace issues, and because some of the expectations
are incorrect in the same way as the headers, e.g. neither
expectations nor headers reflect that current POSIX no longer has
either the sigstack function or the sigstack structure).
To reduce duplication of identical definitions, and facilitate
namespace fixes without requiring the same feature test macro
conditions to be repeated in many versions of the same header, this
patch splits bits/sigstack.h up into four headers. It keeps the stack
size macros, while new bits/types/struct_sigstack.h,
bits/types/stack_t.h and bits/ss_flags.h are added for the other
pieces. bits/types/struct_sigstack.h is the same everywhere,
bits/types/stack_t.h has three variants different in the order of the
structure elements (generic = MIPS Linux, and other Linux), and
bits/ss_flags.h has generic and Linux variants.
This patch includes the new headers everywhere that included
<bits/sigstack.h>, so should cause no difference to what any public
header defines. Subsequent namespace fixes would then remove or
condition some of those includes.
There should be no conflicts with Zack's changes to signal.h types,
beyond the trivial conflict of both making additions to
signal/Makefile's headers list; the two patches affect disjoint sets
of types and other definitions.
Tested for x86_64 and x86, and with build-many-glibcs.py.
* bits/ss_flags.h: New file.
* bits/types/stack_t.h: Likewise.
* include/bits/types/struct_sigstack.h: Likewise.
* signal/bits/types/struct_sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/bits/ss_flags.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types/stack_t.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h: Likewise.
* signal/Makefile (headers): Add bits/types/struct_sigstack.h,
bits/types/stack_t.h and bits/ss_flags.h.
* signal/signal.h [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8]:
Include <bits/types/struct_sigstack.h>, <bits/types/stack_t.h> and
<bits/ss_flags.h>.
* bits/sigstack.h (struct sigstack): Remove.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
(struct sigstack): Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
(struct sigstack): Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/arm/sys/ucontext.h: Include
<bits/types/struct_sigstack.h>, <bits/types/stack_t.h> and
<bits/ss_flags.h>.
* sysdeps/generic/sys/ucontext.h: Likewise.
* sysdeps/i386/sys/ucontext.h: Likewise.
* sysdeps/m68k/sys/ucontext.h: Likewise.
* sysdeps/mips/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h: Likewise.
SSE2 memchr computes "edx + ecx - 16" where ecx is less than 16. Use
"edx - (16 - ecx)", instead of satured math, to avoid possible addition
overflow. This replaces
add %ecx, %edx
sbb %eax, %eax
or %eax, %edx
sub $16, %edx
with
neg %ecx
add $16, %ecx
sub %ecx, %edx
It is the same for x86_64, except for rcx/rdx, instead of ecx/edx.
* sysdeps/i386/i686/multiarch/memchr-sse2.S (MEMCHR): Use
"edx + ecx - 16" to avoid possible addition overflow.
* sysdeps/x86_64/memchr.S (memchr): Likewise.
Commits ecade1c, afbbc18, and a5a34d2 added compiler flags for
vmsplice, splice, and open_by_handle_at respectively on default
misc/Makefile. However such symbols are build only for Linux and
the rules should on linux Makefile only.
Checked on x86_64-linux-gnu.
* misc/Makefile (CFLAGS-vmsplice.c): Remove rule.
(CFLAGS-splice.c): Likewise.
(CFLAGS-open_by_handle_at.c): Likewise.
* sysdeps/unix/sysv/linux/Makefile (CFLAGS-vmsplice.c): New rule.
(CFLAGS-splice.c): Likewise.
(CFLAGS-open_by_handle_at.c): Likewise.
This patch makes the glibc build generate an additional header
ldbl-compat-choose.h that defines LONG_DOUBLE_COMPAT_CHOOSE_* macros
for each libc and libm symbol, which select one or the other of their
arguments based on whether the symbol was added before a change to
long double != double.
The effect of this is that it is then possible to define a macro
maybe_long_double_symbol that automatically acts as either
long_double_symbol or weak_alias depending on when the symbol being
defined was added. This can be used when building long double
functions from type-generic templates. Thus, with this patch ldbl-opt
no longer needs special long double implementations of each new libm
function added using such a template, and the existing such
implementations are removed.
This is a step towards being able more generally to use common macros
to create all the aliases needed for a libm function, so reducing the
amount of special-case code needed in ldbl-opt and ldbl-64-128, and
facilitating subsequently adding *f32 / *f64 / *f128 / *f32x / *f64x
aliases to existing functions (where the set of aliases that a
function should have may depend on the architecture in various ways).
Tested with build-many-glibcs.py. Except for on
powerpc64le-linux-gnu, installed stripped shared libraries are
unchanged by the patch. powerpc64le-linux-gnu is the unique
configuration which used ldbl-opt from the start rather than adding a
new long double choice after originally only having had long double =
double. The effect of the patch there is that various cases that
previously used long_double_symbol unconditionally now use weak_alias
instead, so .os files contain e.g. a symbol cabsl instead of
cabsl@@GLIBC_2.17. The final dynamic symbols and versions in the
resulting shared libraries are unchanged (ABI tests pass), as is the
disassembly of the shared libraries, but the differences in the .os
files still result in different .gnu_hash contents in libm.so; the
differences are of no significance and logically using weak_alias is
what's most appropriate in those cases.
* scripts/versions.awk: Generate ldbl-compat-choose.h.
* sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h: Include
<ldbl-compat-choose.h>.
(maybe_long_double_symbol): New macro.
[!declare_mgen_alias] (declare_mgen_alias): Use
maybe_long_double_symbol.
* sysdeps/ieee754/ldbl-opt/s_canonicalizel.c: Remove.
* sysdeps/ieee754/ldbl-opt/s_fmaxmagl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_fminmagl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_nextdownl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_llogbl.c: Likewise.
* Makerules [$(build-shared) = yes && !avoid-generated]
(before-compile): Add $(common-objpfx)ldbl-compat-choose.h.
[$(build-shared) = yes && !avoid-generated]
($(common-objpfx)ldbl-compat-choose.h): New target.
This patch arranges for the glibc build to generate a header
first-versions.h that defines macros for the earliest symbol version
in which each public symbol (GLIBC_[0-9]* symbol version, name only
uses C identifier characters) is available.
This is used in sysdeps/ieee754/ldbl-opt/math-type-macros-double.h to
replace the manually defined LDOUBLE_*_libm_version macros for various
functions defined using type-generic templates, the purpose of which
is to use in LONG_DOUBLE_COMPAT tests "was this function originally
added before glibc supported long double != double on this platform?".
As discussed in
<https://sourceware.org/ml/libc-alpha/2016-12/msg00246.html>, I expect
this to be useful more generally in reducing the amount of
special-case code needed in ldbl-opt and ldbl-64-128.
Tested with build-many-glibcs.py that installed stripped shared
libraries are unchanged by this patch.
* scripts/versions.awk: Generate first-versions.h.
* sysdeps/ieee754/ldbl-opt/math-type-macros-double.h: Include
<first-versions.h>.
(LDOUBLE_cabsl_libm_version): Remove macro.
(LDOUBLE_cargl_libm_version): Likewise.
(LDOUBLE_cimagl_libm_version): Likewise.
(LDOUBLE_conjl_libm_version): Likewise.
(LDOUBLE_creall_libm_version): Likewise.
(LDOUBLE_cacosl_libm_version): Likewise.
(LDOUBLE_cacoshl_libm_version): Likewise.
(LDOUBLE_ccosl_libm_version): Likewise.
(LDOUBLE_ccoshl_libm_version): Likewise.
(LDOUBLE_casinl_libm_version): Likewise.
(LDOUBLE_csinl_libm_version): Likewise.
(LDOUBLE_casinhl_libm_version): Likewise.
(LDOUBLE_csinhl_libm_version): Likewise.
(LDOUBLE_catanl_libm_version): Likewise.
(LDOUBLE_catanhl_libm_version): Likewise.
(LDOUBLE_ctanl_libm_version): Likewise.
(LDOUBLE_ctanhl_libm_version): Likewise.
(LDOUBLE_cexpl_libm_version): Likewise.
(LDOUBLE_clogl_libm_version): Likewise.
(LDOUBLE_cprojl_libm_version): Likewise.
(LDOUBLE_csqrtl_libm_version): Likewise.
(LDOUBLE_cpowl_libm_version): Likewise.
(LDOUBLE_clog10l_libm_version): Likewise.
(LDOUBLE___clog10l_libm_version): Likewise.
(LDOUBLE_fdiml_libm_version): Likewise.
(LDOUBLE_fmaxl_libm_version): Likewise.
(LDOUBLE_fminl_libm_version): Likewise.
(LDOUBLE_ilogbl_libm_version): Likewise.
(LDOUBLE_nanl_libm_version): Likewise.
[!M_LIBM_NEED_COMPAT] (M_LIBM_NEED_COMPAT): Use
FIRST_VERSION_libm_* macros.
[!declare_mgen_libm_compat] (declare_mgen_libm_compat): Likewise.
* Makerules [$(build-shared) = yes && !avoid-generated]
(before-compile): Add $(common-objpfx)first-versions.h.
[$(build-shared) = yes && !avoid-generated]
($(common-objpfx)first-versions.h): New target.
($(common-objpfx)sysd-versions): Depend on and change to rule for
building $(common-objpfx)versions.stmp.
This patch consolidates the mq_timedsend Linux syscall generation
on sysdeps/unix/sysv/linux/mq_timedsend.c. It basically removes it
from architecture auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* rt/Makefile (CFLAGS-mq_timedsend.c): New flag.
* sysdeps/unix/sysv/linux/mq_timedsend.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list (mq_timedsend): Remove from
auto-generation list.
This patch consolidates the mq_timedreceive Linux syscall generation
on sysdeps/unix/sysv/linux/mq_timedreceive.c. It basically removes it
from architecture auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* rt/Makefile (CFLAGS-mq_timedreceive.c): New flag.
* sysdeps/unix/sysv/linux/mq_timedreceive.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list (mq_timedreceive): Remove
from auto-generation list.
This patch consolidates the open_by_handle_at Linux syscall generation on
sysdeps/unix/sysv/linux/open_by_handle_at.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add
open_by_handle_at.
(CFLAGS-open_by_handle_at.c): New flag.
* sysdeps/unix/sysv/linux/open_by_handle_at.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list (open_by_handle_at): New
file.
* misc/Makefile (CFLAGS-open_by_handle_at.c): New rule.
This patch consolidates the splice Linux syscall generation on
sysdeps/unix/sysv/linux/splice.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add splice.
(CFLAGS-splice.c): New flag.
* sysdeps/unix/sysv/linux/splice.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list (splice): Remove from
auto-generation syscall list.
* misc/Makefile (CFLAGS-splice.c): New rule.
This patch consolidates the vmsplice Linux syscall generation on
sysdeps/unix/sysv/linux/vmsplice.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/Makefile (CFLAGS-vmsplice.c): New flag.
* sysdeps/unix/sysv/linux/syscalls.list (vmsplice): Remove from
auto-generation syscall list.
* sysdeps/unix/sysv/linux/vmsplice.c: New file.
* misc/Makefile (CFLAGS-vmsplice.c): New rule.
This patch consolidates the fsync Linux syscall generation on
sysdeps/unix/sysv/linux/fsync.c. It basically removes it from
architectures auto-generation list.
For arm it also removes the __errno_location call since fsync
is not called with SYSCALL_CANCEL with call arch-specific
INLINE_SYSCALL macro which in turn will call __set_errno macro
(and setting errno directly).
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* misc/Makefile (CFLAGS-fsync.c): New flag.
* nptl/Makefile (CFLAGS-fsync.c): Likewise.
* sysdeps/unix/syscalls.list (fsync): Remove from auto-generation
syscall list.
* sysdeps/unix/sysv/linux/fsync.c: New file.
* sysdeps/unix/sysv/linux/arm/localplt.data [libpthread.so]
(__errno_location): Remove.
This patch consolidates the fdatasync Linux syscall generation on
sysdeps/unix/sysv/linux/fdatasync.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* misc/makefile (CFLAGS-datasync.c): New flag.
* nptl/makefile (CFLAGS-datasync.c): Likewise.
* sysdeps/unix/sysv/linux/syscalls.list (fdatasync): Remove from
auto-generation syscall list.
* sysdeps/unix/sysv/linux/fdatasync.c: New file.
This patch consolidates the msync Linux syscall generation on
sysdeps/unix/sysv/linux/msync.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* misc/Makefile (CFLAGS-msync.c): New rule.
* nptl/Makefile (CFLAGS-msync.c): Likewise.
* sysdeps/unix/syscalls.list: Remove msync from auto-generation list.
* sysdeps/unix/sysv/linux/msync.c: New file.
This patch consolidates the sigsuspend Linux syscall generation on
sysdeps/unix/sysv/linux/sigsuspend.c. It basically removes the alpha
assembly version which call the old sigsusped interface using only
the first doubleword from sigset. Current minimum supported kernel
on alpha (3.2) enforces rt_sigsuspend on the architecture
(__ARCH_WANT_SYS_RT_SIGSUSPEND option on kernel), so it is possible
to use the default implementation.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Remove file.
* sysdeps/unix/sysv/linux/sigsuspend.c: Simplify include list.
* nptl/Makefile (CFLAGS-sigsuspend.c): New rule.
* sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
(CFLAGS-sigsuspend.c): Remove rule.
This patch consolidates the tee Linux syscall generation on
sysdeps/unix/sysv/linux/tee.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/Makefile (sysdeps_routines): Add tee.
(CFLAGS-tee.c): New rule.
* sysdeps/unix/sysv/linux/syscalls.list: Remove tee from
auto-generated list.
* sysdeps/unix/sysv/linux/tee.c: New file.
This patch consolidates the nanosleep Linux syscall generation on
sysdeps/unix/sysv/linux/nanosleep.c. It basically removes it from
architectures auto-generation list.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* nptl/Makefile (CFLAGS-nanosleep.c): New rule.
* posix/Makefile (CFLAGS-nanosleep.c): Likewise.
* sysdeps/unix/sysv/linux/nanosleep.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove nanosleep from
auto-generated list.
This patch consolidates the waitpid Linux syscall generation on
sysdeps/unix/sysv/linux/waitpid.c. It basically removes it from
architecture auto-generation list and also remove arch specific
implementations.
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/sh/syscalls.list: Remove waitpid from
auto-generated list.
* sysdeps/unix/sysv/linux/m68k/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/i386/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/sparc/syscalls.list: Remove file.
* sysdeps/unix/sysv/linux/tile/waitpid.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/syscalls.list: Likewise.
This patch consolidates the pause Linux implementation on
sysdeps/unix/sysv/linux/pause.c. If defined the pause syscall
(__NR_pause) will be used, other ppoll with 0 arguments will be
used instead.
It has the small advantage of generic pause implementation with
uses rt_sigprocmask plus rt_sigsuspend because it requires only
one syscall and the pause is done atomically regarding signal
handling (for instance, pause may not be interrupted if the
signal arrives between the rt_sigprocmask and rt_sigsuspend
syscall).
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.
* sysdeps/unix/sysv/linux/generic/pause.c: Remove file.
* sysdeps/unix/sysv/linux/sparc/sparc64/pause.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h [__arch64__]
(__NR_pause): Undefine.
* sysdeps/unix/sysv/linux/pause.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove pause from
auto-generation list.
It was discovered that the dynamic linker allocates a massive amount
of memory that increases with the value of LD_HWCAP_MASK. Due to
this, setting its value to 0xffffffff in the environment of
tst-env-setuid would cause it to fail in some environments where
overcommit was disabled or severely constrained because malloc would
fail.
Since this test is only concerned with the value of LD_HWCAP_MASK
envvar being conserved (or not, for setxid binaries), lower its value
to avoid spurious failures.
The allocation bug is reported as #21502.
The conversion script will convert these annotations, but the
replacement Summary-generation script won't catch them because @items
in @tables are not generally considered annotatable, causing them to
be skipped over (or cause errors). Using @vtable ensures their
continued presence in the Summary, with the added benefit that Texinfo
will also automatically include them in the Variable and Constant
Macro index now.
* manual/conf.texi: Convert @tables of annotated @items to
@vtables.
* manual/lang.texi: Likewise.
* manual/pattern.texi: Likewise.
* manual/resource.texi: Likewise.
* manual/socket.texi: Likewise.
This commit handles exceptional cases of invalid syntax for the
@standards conversion script.
* manual/crypt.texi: Move a comment out of an @*x list.
* manual/filesys.texi: Refactor some comments, one of which
looks like a standard. Fix incorrectly separated standards.
* manual/locale.texi: Invert an annotation.
* manual/resource.texi: Fix incorrectly separated standards.
* manual/time.texi: Refactor a @vtable that obscures an
annotation.
* manual/users.texi: Refactor multiple headers to occupy a
single @comment.
This implementation is based on the one already used at
sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-power8.S.
* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
[$(subdir) = math] (libm-sysdep_routines): Add s_cosf-power8 and
s_cosf-ppc64.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-power8.S: New file.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c: Likewise.
* sysdeps/powerpc/powerpc64/power8/fpu/s_cosf.S: Likewise.
This patch converts the implementation of exp2l in math/e_exp2l.c into
a template in math/e_exp2_template.c, then adjusts Makefile to use
this template for long double (the implementations for float and
double in sysdeps have higher precedence and are not used). This
template can also be used for float128, thus reducing the amount of
duplicated code that gets added when adding support the new type.
Tested for powerpc64le and s390x.
* math/Makefile (libm-calls): Move e_exp2F to gen-libm-calls.
(gen-libm-calls): Add e_exp2F to use the template.
* math/e_exp2l.c: Rename to math/e_exp2_template.c.
* math/e_exp2_template.c: New file, renamed from
math/e_exp2l.c, and made into a template.
* sysdeps/generic/math-type-macros.h (M_MIN_EXP): New macro.
Recognize the uint64_t type in addition to the current int32_t and
size_t. This allows addition of tunables of uint64_t types. In
addition to adding the uint64_t type, this patch also consolidates
validation and reading of integer types in tunables.
One notable change is that of overflow computation in
tunables_strtoul. The function was lifted from __internal_strtoul,
but it does not need the boundary condition check (i.e. result ==
ULONG_MAX) since it does not need to set errno. As a result the check
can be simplified, which I have now done.
* elf/dl-tunable-types.h (tunable_type_code_t): New type
TUNABLE_TYPE_UINT_64.
* elf/dl-tunables.c (tunables_strtoul): Return uint64_t.
Simplify computation of overflow.
(tunable_set_val_if_valid_range_signed,
tunable_set_val_if_valid_range_unsigned): Remove and replace
with this...
(TUNABLE_SET_VAL_IF_VALID_RANGE): ... New macro.
(tunable_initialize): Adjust. Add uint64_t support.
(__tunable_set_val): Add uint64_t support.
* README.tunables: Document it.
Enhance dl-tunables.list to allow specifying a default value for a
tunable that it would be initialized to.
* scripts/gen-tunables.awk: Recognize 'default' keyword in
dl-tunables.list.
* README.tunables: Document it.
Currently all architectures but microblaze use wire-up syscall for
p{readv,write}v. Microblaze still uses the syscall emulation using
sysdep/posix/p{readv,writev}.c and it was reported in some ocasions
[1] [2] that it might have some issues with some linux specific
usage (mainly with O_DIRECT and the alignment requirement).
Although it is not an issue for virtually all the system, this
patch refactors the sysdeps/posix p{read,write}v syscall to avoid
such issue (by using posix_memalign on the buffer used on
p{read,write} call) and by refactoring it common files to avoid
the need check on defines to correct set the alias and internal
symbols.
Checked on microblaze-linux-gnu check with run-built-tests=no and
by using the sysdeps/posix implementation on x86_64-linux-gnu (just
for sanity test where it shown no regression).
* sysdeps/posix/preadv.c: Use sysdeps/posix/preadv_common.c.
* sysdeps/posix/preadv64.c: Likewise.
* sysdeps/unix/sysv/linux/preadv.c: Likewise.
* sysdeps/unix/sysv/linux/preadv64.c: Likewise.
* sysdeps/posix/pwritev.c: Use sysdeps/posix/pwritev_common.c.
* sysdeps/posix/pwritev64.c: Likewise.
* sysdeps/unix/sysv/linux/pwritev.c: Likewise.
* sysdeps/unix/sysv/linux/pwritev64.c: Likewise.
* sysdeps/posix/preadv_common.c: New file.
* sysdeps/posix/pwritev_common.c: Likewise.
[1] http://www.mail-archive.com/qemu-devel@nongnu.org/msg25282.html
[2] https://bugzilla.redhat.com/show_bug.cgi?id=563103#c8
The templates for the IEEE functions wrappers implement wrappers that
do not rely on _LIB_VERSION / matherr / __kernel_standard
functionality to set errno and fix the return value of the functions.
The wrappers are ready to be used by all floating-point types, however
they will first be used by float128, since the old wrappers for float,
double, and long double need to be first deprecated and versioned.
This commits defines __USE_WRAPPER_TEMPLATE to 1 for float128 files,
so that the new wrapper templates are used for this type.
* sysdeps/generic/math-type-macros-float128.h
(__USE_WRAPPER_TEMPLATE): Define to 1 to enable use of the
wrapper templates.
Add the necessary bits to the private headers to support
building the _Float128 libm functions.
A local override for float.h is provided to include the
missing *FLT128 macros implied by TS 18661-3 for this
type when compiling prior to GCC 7.
* include/complex.h (__kernel_casinhf128): New declaration.
* include/float.h: New file.
* include/math.h (__finitef128): Add a hidden def.
(__isinff128): Likewise.
(__isnanf128): Likewise.
(__fpclassify): Likewise.
(__issignalling): Likewise.
(__expf128): Likewise.
(__expm1f128): Likewise.
* sysdeps/generic/fix-fp-int-convert-overflow.h:
(FIX_FLT128_LONG_CONVERT_OVERFLOW): New macro.
(FIX_FLT128_LLONG_CONVERT_OVERFLOW): Likewise.
* sysdeps/generic/math-type-macros-float128.h: New file.
* sysdeps/generic/math_private.h: Include bits/floatn.h and
math_private_calls.h for _Float128.
(__isinff128): New inline implementation used when GCC < 7.0,
since in this case __builtin_isinf_sign is broken.
(fabsf128): New inline implementation that calls the builtin.
(__EXPR_FLT128): New macro.
(min_of_type): Optionally include _Float128 types too.
* sysdeps/generic/math_private_calls.h (__kernel_sincos):
Declare for _Float128.
(__kernel_rem_pio2): Likewise.
* sysdeps/ieee754/ldbl-opt/s_sin.c:
(__DECL_SIMD_sincos_disablef128): New macro.
All the declarations in math-finite.h are macroized by floating-point
type. This patch includes it for float128 and protects the
declarations of functions that need not be declared for float128.
* math/math.h: Include bits/math-finite.h for float128.
(__MATH_DECLARING_FLOATN): Define to control declaration of
float128 functions.
* math/bits/math-finite.h (pow10): Do not declare for float128.
(gamma): Likewise.
(scalb): Likewise.
This introduces the machine-dependent bits/floatn.h to control
the inclusion of _Float128 ABI.
* bits/floatn.h: New file.
* bits/huge_val_flt128.h: Likewise.
* bits/libm-simd-decl-stubs.h (__DECL_SIMD_cosf128): New macro.
(__DECL_SIMD_sinf128): Likewise.
(__DECL_SIMD_sincosf128): Likewise.
(__DECL_SIMD_logf128): Likewise.
(__DECL_SIMD_expf128): Likewise.
(__DECL_SIMD_powf128): Likewise.
* math/Makefile (headers): Install bits/floatn.h and
bits/huge_val_flt128.h.
* math/bits/cmathcalls.h (_Mdouble_complex_): Only define if not
defined.
* math/bits/mathcalls.h (pow10, isinf, finite, drem, significand)
(isnan, gamma, nexttoward, scalb): Only define if not
__MATH_DECLARING_FLOATN.
(nextdown, nextup, llogb, roundeven, fromfp, ufromfp, fromfpx)
(ufromfpx, fmaxmag, fminmag, totalorder, totalordermag)
(canonicalize, getpayload, setpayload, setpayloadsig): Declare for
_FloatN even if __STDC_WANT_IEC_60559_BFP_EXT__ is not defined.
* math/complex.h: Include bits/libc-header-start.h and bits/floatn.h.
Include bits/cmathcalls.h to get the declarations of _Float128
versions of complex functions.
[__HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)] (CMPLXF128):
Define macro.
* math/math.h: Include bits/floatn.h and bits/huge_val_flt128.h.
Include bits/mathcalls-helper-functions.h and bits/mathcalls.h to
get the declarations of _Float128 versions of math functions.
(__MATH_DECLARING_FLOATN): New macro to control declaration of
_FloatN types.
[__GNUC_PREREQ (6,0)] (signbit): Since GCC 6.0, __builtin_signbit
is type-generic, so use it without __MATH_TG.
[__HAVE_DISTINCT_FLOAT128] (isinf): This builtin is broken for
_Float128 type on GCC < 7.0. Explicitly call __isinff128 for
_Float128 type and GCC < 7.0, otherwise use the builtin.
[__HAVE_FLOAT128 && defined __USE_GNU] (M_Ef128, M_LOG2Ef128)
(M_LOG10Ef128, M_LN2f128, M_LN10f128, M_PIf128, M_PI_2f128)
(M_PI_4f128, M_1_PIf128, M_2_PIf128, M_SQRT2f128, M_SQRT1_2f128):
New _GNU_SOURCE enabled macros.
The SPARC implementations of __signbit* functions have aliases
signbit, signbitf, signbitl. These are useless, as they aren't
exported from the shared libraries (only the __signbit* functions are
exported, to be used by the type-generic signbit macro with older
compilers). This patch removes the useless aliases.
Tested (compilation only) with build-many-glibcs.py for
sparc64-linux-gnu and sparcv9-linux-gnu.
* sysdeps/sparc/sparc32/fpu/s_signbit.S (signbit): Remove alias.
(signbitf): Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S (signbit):
Likewise.
(signbitl): Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S (signbitf):
Likewise.
* sysdeps/sparc/sparc64/fpu/s_signbit.S (signbit): Likewise.
(signbitl): Likewise.
* sysdeps/sparc/sparc64/fpu/s_signbitf.S (signbitf): Likewise.
Now that 3.2 is the minimum Linux kernel version for glibc, this patch
removes __ASSUME_STATFS_F_FLAGS and associated conditional code.
Tested for x86_64.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_STATFS_F_FLAGS): Remove macro.
* sysdeps/unix/sysv/linux/internal_statvfs.c
[!__ASSUME_STATFS_F_FLAGS]: Remove conditional code.
This patch adds a new build module called 'testsuite'.
IS_IN (testsuite) implies _ISOMAC, as do IS_IN_build and __cplusplus
(which means several ad-hoc tests for __cplusplus can go away).
libc-symbols.h now suppresses almost all of *itself* when _ISOMAC is
defined; in particular, _ISOMAC mode does not get config.h
automatically anymore.
There are still quite a few tests that need to see internal gunk of
one variety or another. For them, we now have 'tests-internal' and
'test-internal-extras'; files in this category will still be compiled
with MODULE_NAME=nonlib, and everything proceeds as it always has.
The bulk of this patch is moving tests from 'tests' to
'tests-internal'. There is also 'tests-static-internal', which has
the same effect on files in 'tests-static', and 'modules-names-tests',
which has the *inverse* effect on files in 'modules-names' (it's
inverted because most of the things in modules-names are *not* tests).
For both of these, the file must appear in *both* the new variable and
the old one.
There is also now a special case for when libc-symbols.h is included
without MODULE_NAME being defined at all. (This happens during the
creation of libc-modules.h, and also when preprocessing Versions
files.) When this happens, IS_IN is set to be always false and
_ISOMAC is *not* defined, which was the status quo, but now it's
explicit.
The remaining changes to C source files in this patch seemed likely to
cause problems in the absence of the main change. They should be
relatively self-explanatory. In a few cases I duplicated a definition
from an internal header rather than move the test to tests-internal;
this was a judgement call each time and I'm happy to change those
however reviewers feel is more appropriate.
* Makerules: New subdir configuration variables 'tests-internal'
and 'test-internal-extras'. Test files in these categories will
still be compiled with MODULE_NAME=nonlib. Test files in the
existing categories (tests, xtests, test-srcs, test-extras) are
now compiled with MODULE_NAME=testsuite.
New subdir configuration variable 'modules-names-tests'. Files
which are in both 'modules-names' and 'modules-names-tests' will
be compiled with MODULE_NAME=testsuite instead of
MODULE_NAME=extramodules.
(gen-as-const-headers): Move to tests-internal.
(do-tests-clean, common-mostlyclean): Support tests-internal.
* Makeconfig (built-modules): Add testsuite.
* Makefile: Change libof-check-installed-headers-c and
libof-check-installed-headers-cxx to 'testsuite'.
* Rules: Likewise. Support tests-internal.
* benchtests/strcoll-inputs/filelist#en_US.UTF-8:
Remove extra-modules.mk.
* config.h.in: Don't check for __OPTIMIZE__ or __FAST_MATH__ here.
* include/libc-symbols.h: Move definitions of _GNU_SOURCE,
PASTE_NAME, PASTE_NAME1, IN_MODULE, IS_IN, and IS_IN_LIB to the
very top of the file and rationalize their order.
If MODULE_NAME is not defined at all, define IS_IN to always be
false, and don't define _ISOMAC.
If any of IS_IN (testsuite), IS_IN_build, or __cplusplus are
true, define _ISOMAC and suppress everything else in this file,
starting with the inclusion of config.h.
Do check for inappropriate definitions of __OPTIMIZE__ and
__FAST_MATH__ here, but only if _ISOMAC is not defined.
Correct some out-of-date commentary.
* include/math.h: If _ISOMAC is defined, undefine NO_LONG_DOUBLE
and _Mlong_double_ before including math.h.
* include/string.h: If _ISOMAC is defined, don't expose
_STRING_ARCH_unaligned. Move a comment to a more appropriate
location.
* include/errno.h, include/stdio.h, include/stdlib.h, include/string.h
* include/time.h, include/unistd.h, include/wchar.h: No need to
check __cplusplus nor use __BEGIN_DECLS/__END_DECLS.
* misc/sys/cdefs.h (__NTHNL): New macro.
* sysdeps/m68k/m680x0/fpu/bits/mathinline.h
(__m81_defun): Use __NTHNL to avoid errors with GCC 6.
* elf/tst-env-setuid-tunables.c: Include config.h with _LIBC
defined, for HAVE_TUNABLES.
* inet/tst-checks-posix.c: No need to define _ISOMAC.
* intl/tst-gettext2.c: Provide own definition of N_.
* math/test-signgam-finite-c99.c: No need to define _ISOMAC.
* math/test-signgam-main.c: No need to define _ISOMAC.
* stdlib/tst-strtod.c: Convert to test-driver. Split locale_test to...
* stdlib/tst-strtod1i.c: ...this new file.
* stdlib/tst-strtod5.c: Convert to test-driver and add copyright notice.
Split tests of __strtod_internal to...
* stdlib/tst-strtod5i.c: ...this new file.
* string/test-string.h: Include stdint.h. Duplicate definition of
inhibit_loop_to_libcall here (from libc-symbols.h).
* string/test-strstr.c: Provide dummy definition of
libc_hidden_builtin_def when including strstr.c.
* sysdeps/ia64/fpu/libm-symbols.h: Suppress entire file in _ISOMAC
mode; no need to test __STRICT_ANSI__ nor __cplusplus as well.
* sysdeps/x86_64/fpu/math-tests-arch.h: Include cpu-features.h.
Don't include init-arch.h.
* sysdeps/x86_64/multiarch/test-multiarch.h: Include cpu-features.h.
Don't include init-arch.h.
* elf/Makefile: Move tst-ptrguard1-static, tst-stackguard1-static,
tst-tls1-static, tst-tls2-static, tst-tls3-static, loadtest,
unload, unload2, circleload1, neededtest, neededtest2,
neededtest3, neededtest4, tst-tls1, tst-tls2, tst-tls3,
tst-tls6, tst-tls7, tst-tls8, tst-dlmopen2, tst-ptrguard1,
tst-stackguard1, tst-_dl_addr_inside_object, and all of the
ifunc tests to tests-internal.
Don't add $(modules-names) to test-extras.
* inet/Makefile: Move tst-inet6_scopeid_pton to tests-internal.
Add tst-deadline to tests-static-internal.
* malloc/Makefile: Move tst-mallocstate and tst-scratch_buffer to
tests-internal.
* misc/Makefile: Move tst-atomic and tst-atomic-long to tests-internal.
* nptl/Makefile: Move tst-typesizes, tst-rwlock19, tst-sem11,
tst-sem12, tst-sem13, tst-barrier5, tst-signal7, tst-tls3,
tst-tls3-malloc, tst-tls5, tst-stackguard1, tst-sem11-static,
tst-sem12-static, and tst-stackguard1-static to tests-internal.
Link tests-internal with libpthread also.
Don't add $(modules-names) to test-extras.
* nss/Makefile: Move tst-field to tests-internal.
* posix/Makefile: Move bug-regex5, bug-regex20, bug-regex33,
tst-rfc3484, tst-rfc3484-2, and tst-rfc3484-3 to tests-internal.
* stdlib/Makefile: Move tst-strtod1i, tst-strtod3, tst-strtod4,
tst-strtod5i, tst-tls-atexit, and tst-tls-atexit-nodelete to
tests-internal.
* sunrpc/Makefile: Move tst-svc_register to tests-internal.
* sysdeps/powerpc/Makefile: Move test-get_hwcap and
test-get_hwcap-static to tests-internal.
* sysdeps/unix/sysv/linux/Makefile: Move tst-setgetname to
tests-internal.
* sysdeps/x86_64/fpu/Makefile: Add all libmvec test modules to
modules-names-tests.
_IO_MTSAFE_IO controls whether stdio is *built* with support for
multithreading. In the distant past it might also have worked as a
feature selection macro, allowing library *users* to select
thread-safe or lock-free stdio at application build time, I haven't
done the archaeology. Nowadays, defining _IO_MTSAFE_IO while using
the installed headers, or in _ISOMAC mode, will cause libio.h to throw
syntax errors.
This patch removes _IO_MTSAFE_IO from the public headers
(specifically, from libio/libio.h). The most important thing it
controlled in there was whether libio.h defines _IO_lock_t itself or
expects stdio-lock.h to have done it, and we do still need a
inter-header communication macro for that, because stdio-lock.h can
only define _IO_lock_t as a typedef. I've invented
_IO_lock_t_defined, which is defined by both versions of stdio-lock.h.
_IO_MTSAFE_IO also controlled the definitions of a handful of macros
that _might_ count as part of the public libio.h interface. They are
now unconditionally given their non-_IO_MTSAFE_IO definition in
libio/libio.h, and include/libio.h redefines them with the
_IO_MTSAFE_IO definition. This should minimize the odds of breaking
old software that actually uses those macros.
I suspect that this entire mechanism is vestigial, and that glibc
won't build anymore if you *don't* define _IO_MTSAFE_IO, but that's
another patchset. The bulk of libio.h is internal-use-only stuff that
no longer makes sense to expose (libstdc++ gave up on making a FILE
the same object as a C++ filebuf *decades* ago) but that, too, is
another patchset.
* libio/libio.h: Condition dummy definition of _IO_lock_t on
_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
_IO_funlockfile, and _IO_ftrylockfile. Only define
_IO_cleanup_region_start and _IO_cleanup_region_end if not
already defined.
* include/libio.h: If _IO_MTSAFE_IO is defined, redefine
_IO_peekc, _IO_flockfile, _IO_funlockfile, and _IO_ftrylockfile
appropriately.
* sysdeps/generic/stdio-lock.h, sysdeps/nptl/stdio-lock.h:
Define _IO_lock_t_defined after defining _IO_lock_t.
Now with read consolidation which uses SYSCALL_CANCEL macro, a frame
pointer is created in the syscall code and this makes the powerpc
backtrace obtain a bogus entry for the signal handling patch.
It is because it does not setup the correct frame pointer register
(r1) based on the saved value from the kernel sigreturn. It was not
failing because the syscall frame pointer register was the same one
for the next frame (the function that actually called the syscall).
This patch fixes it by setup the next stack frame using the saved
one by the kernel sigreturn. It fixes tst-backtrace{5,6} from
the read consolidation patch.
Checked on powerpc-linux-gnu and powerpc64le-linux-gnu.
* sysdeps/powerpc/powerpc32/backtrace.c (is_sigtramp_address): Use
void* for argument type and use VDSO_SYMBOL macro.
(is_sigtramp_address_rt): Likewise.
(__backtrace): Setup expected frame pointer address for signal
handling.
* sysdeps/powerpc/powerpc64/backtrace.c (is_sigtramp_address): Use
void* for argumetn type and use VSDO_SYMBOL macro.
(__backtrace): Setup expected frame pointer address for signal
handling.
This patch consolidates the writev Linux syscall implementation on
sysdeps/unix/sysv/linux/writev.c.
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/writev.c: New file.
This patch consolidates the readv Linux syscall implementation on
sysdeps/unix/sysv/linux/readv.c.
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/readv.c: New file.
This patch consolidates the write Linux syscall implementation on
sysdeps/unix/sysv/linux/write.c.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* include/unistd.h (write): Add hidden proto.
* io/Makefile (CFLAGS-write.c): New rule.
* nptl/Makefile (CFLAGS-write.c): Likewise.
* sysdeps/unix/sysv/linux/write.c: New file.
This patch consolidates the read Linux syscall implementation on
sysdeps/unix/sysv/linux/read.c. This leads to a different frame
pointer creation on some architectures:
* It fixes BZ#21428 on aarch64, since now the returned address
for the read syscall can be correctly found out by
backtrace_symbols.
* It makes tst-backtrace{5,6} fails on powerpc due an issue on
its custom backtrace implementation. It is fixed on subsequent
patch from this set.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
[BZ #21428]
* include/unistd.h (read): Add hidden proto.
* io/Makefile (CFLAGS-read.c): New rule.
* nptl/Makefile (CFLAGS-read.c): New rule.
* sysdeps/unix/sysv/linux/read.c: New file.
This patch consolidates the creat Linux syscall implementation on
sysdeps/unix/sysv/linux/creat{64}.c. The changes are:
1. Remove creat{64} from auto-generation syscalls.list.
2. Add a new creat{64}.c implementation. For architectures that
define __OFF_T_MATCHES_OFF64_T the default creat64 will create
alias to required creat symbols.
3. Use __NR_creat where possible, otherwise use internal open{64}
call with expected flags.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* io/Makefile (CFLAGS-creat.c): New rule.
(CFLAGS-creat64.c): Likewise.
* sysdeps/unix/sysv/linux/alpha/creat.c: Remove file.
* sysdeps/unix/sysv/linux/generic/creat.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/creat64.c: Likewise.
* sysdeps/unix/sysv/linux/creat.c: New file.
* sysdeps/unix/sysv/linux/creat64.c: Likewise.
* sysdeps/unix/sysv/linux/syscalls.list: Remove create from
auto-generated list.
* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
This patch consolidates the open Linux syscall implementation on
sysdeps/unix/sysv/linux/open{64}.c. The changes are:
1. Remove open{64} from auto-generation syscalls.list.
2. Add a new open{64}.c implementation. For architectures that
define __OFF_T_MATCHES_OFF64_T the default open64 will create
alias to required open symbols.
3. Use __NR_openat as default syscall for open{64}.
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/generic/open.c: Remove file.
* sysdeps/unix/sysv/linux/generic/open64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/open64.c: Likewise.
* sysdeps/unix/sysv/linux/open.c: New file.
* sysdeps/unix/sysv/linux/open64.c (__libc_open64): Use O_LARGEFILE
only for __OFF_T_MATCHES_OFF64_T and add alias to open if the case.
* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Remove open
from auto-generated list.
This patch consolidates the close Linux syscall generation on
sysdeps/unix/sysv/linux/close.c.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* nptl/Makefile (CFLAGS-close.c): New flag.
* sysdeps/unix/sysv/linux/close.c: New file.
As of now we don't need tunables to be writable after they have been
set initially, so there is no point in having them writable. Put
tunable_list in .data.rel.ro so that it is set as read-only after
relocation. This also allows us to move some of the dl_* variables
that are tunables controlled into the tunables infrastructure instead
of having two copies.
In future if we ever need specific tunables to be writable at runtime,
we can split the tunable_list into two.
Regression tested on x86_64 to verify that tests continue to pass.
* scripts/gen-tunables.awk: Add attribute_relro to
tunable_list.
This patch removes wrong struct definition from eab380d (Move shared
pthread definitions to common headers) on ARM and hppa.
Checked on arm-linux-gnueabihf.
* sysdeps/arm/nptl/bits/pthreadtypes-arch.h
(__pthread_rwlock_arch_t): Remove __data definition.
* sysdeps/hppa/nptl/bits/pthreadtypes-arch.h
(__pthread_rwlock_arch_t): Likewise.
The address family splitting via format_ai_family made unpredictable
the place where the canonname field was printed. This commit adjusts
the implementation so that the ai_flags is checked for consistency
across the list, and ai_canonname must only be present on the first
list element.
Tests for AI_CANONNAME are added to resolv/tst-resolv-basic.
The default rawmemchr implementation uses memchr with size (size_t)-1,
which produces a warning with current GCC mainline. The warning seems
reasonable for normal code, so this patch uses the DIAG_* macros to
disable it.
Tested (compilation of glibc only) with build-many-glibcs.py for
arm-linux-gnueabi and powerpc64le-linux-gnu, two architectures for
which the build was previously failing. Note that the glibc testsuite
will still fail to build with GCC mainline because of
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80669>.
* string/rawmemchr.c: Include <libc-diag.h>.
(RAWMEMCHR): Disable -Wstringop-overflow around call to memchr
with size (size_t)-1.
MIPS32 has its own implementations of accept4, recvmmsg and sendmmsg
because at one point it needed to avoid socketcall being used for
those functions (MIPS32 has socketcall, but has never used it in
glibc, and so never had socket.S at the time when socketcall used such
a per-architecture file instead of C code). The current code no
longer uses socketcall based on __NR_socketcall being defined, and the
syscalls are always present on MIPS for supported kernels so the
socketcall case in the code is dead for MIPS; this patch removes the
implementations that are, as Adhemerval noted, no longer needed.
Tested compilation for mips-linux-gnu with build-many-glibcs.py.
* sysdeps/unix/sysv/linux/mips/mips32/accept4.c: Remove file.
* sysdeps/unix/sysv/linux/mips/mips32/recvmmsg.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/sendmmsg.c: Likewise.
The accept4, recvmmsg and sendmmsg functions had macros
__ASSUME_*_SYSCALL_WITH_SOCKETCALL. Before we could assume kernels
with the relevant functionality, these macros represented the
conditions under which, on a socketcall architecture, glibc could just
call the syscall unconditionally and not have to deal with socketcall
at all for those functions, because if the syscall didn't work for
them the socketcall call wouldn't either.
Now we can assume kernels with the relevant functionality, the only
question is whether we can assume the syscall is present; if not, we
are on a socketcall architecture and just use socketcall instead.
Thus, this patch removes the macros that are no longer necessary, and
simplifies the code for accept4, recvmmsg and sendmmsg to use the same
logic as the other C implementations of socket functions that may use
a syscall or socketcall depending on kernel support.
Tested for x86_64 and x86.
* sysdeps/unix/sysv/linux/accept4.c (accept4): Use syscall if
[__ASSUME_ACCEPT4_SYSCALL], otherwise socketcall.
* sysdeps/unix/sysv/linux/recvmmsg.c (recvmmsg): Use syscall if
[__ASSUME_RECVMMSG_SYSCALL], otherwise socketcall.
* sysdeps/unix/sysv/linux/sendmmsg.c (__sendmmsg): Use syscall if
[__ASSUME_SENDMMSG_SYSCALL], otherwise socketcall.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_ACCEPT4_SYSCALL): Move to general list of macros for
socket syscalls.
(__ASSUME_RECVMMSG_SYSCALL): Likewise.
(__ASSUME_SENDMMSG_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/i386/kernel-features.h
(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Remove.
(__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Remove.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_ACCEPT4_SYSCALL_WITH_SOCKETCALL): Likewise.
(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
(__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
This patch removes all the replicated pthread definition accross the
architectures and consolidates it on shared headers. The new
organization is as follow:
* Architecture specific definition (such as pthread types sizes) are
place in the new pthreadtypes-arch.h header in arch specific path.
* All shared structure definition are moved to a common NPTL header
at sysdeps/nptl/bits/pthreadtypes.h (with now includes the arch
specific one for internal definitions).
* Also, for C11 future thread support, both mutex and condition
definition are placed in a common header at
sysdeps/nptl/bits/thread-shared-types.h.
It is also a refactor patch without expected functional changes.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu,
m68k-linux-gnu, microblaze-linux-gnu, mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).
* posix/Makefile (headers): Add pthreadtypes-arch.h and
thread-shared-types.h.
* sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h: New file: arch
specific thread definition.
* sysdeps/alpha/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/arm/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/hppa/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/ia64/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/m68k/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/mips/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/nios2/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/s390/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/sh/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/sparc/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/tile/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/x86/nptl/bits/pthreadtypes-arch.h: Likewise.
* sysdeps/nptl/bits/thread-shared-types.h: New file: shared
thread definition between POSIX and C11.
* sysdeps/aarch64/nptl/bits/pthreadtypes.h.: Remove file.
* sysdeps/alpha/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/arm/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/hppa/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/m68k/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/microblaze/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/mips/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/nios2/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/ia64/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/powerpc/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/s390/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/sh/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/sparc/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/tile/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/x86/nptl/bits/pthreadtypes.h: Likewise.
* sysdeps/nptl/bits/pthreadtypes.h: New file: common thread
definitions shared across all architectures.
Now we can assume a kernel with sendmmsg support, this patch
simplifies the implementation to be similar to that for accept4:
either using socketcall or the syscall according to whether the
syscall is known to be available, without further fallback
implementations. The __ASSUME_SENDMMSG macro is kept (now defined
unconditionally), since it's used in resolv/res_send.c.
Tested for x86_64 and x86.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_SENDMMSG_SYSCALL): Define unconditionally.
(__ASSUME_SENDMMSG): Likewise.
(__ASSUME_SENDMMSG_SOCKETCALL): Remove macro.
* sysdeps/unix/sysv/linux/sendmmsg.c (__sendmmsg): Define using
sendmmsg syscall if that can be assumed to be present, socketcall
otherwise, with no fallback for runtime failure.
Now we can assume a kernel with recvmmsg support, this patch
simplifies the implementation to be similar to that for accept4:
either using socketcall or the syscall according to whether the
syscall is known to be available, without further fallback
implementations.
(In fact further simplification is possible, getting rid of the
__ASSUME_*_SYSCALL_WITH_SOCKETCALL macros now that the minimum kernel
is guaranteed support for all of accept4, recvmmsg, sendmmsg, whether
through syscalls or through socketcall. I intend to do that for all
of accept4 / recvmmsg / sendmmsg together - so making their
implementations just like those for older socket functions - once the
basic cleanup for 3.2 minimum kernel is done for sendmmsg as well as
recvmmsg.)
Tested for x86_64 and x86.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_RECVMMSG_SYSCALL): Define unconditionally.
(__ASSUME_RECVMMSG_SOCKETCALL): Remove macro.
(__ASSUME_RECVMMSG): Likewise.
* sysdeps/unix/sysv/linux/recvmmsg.c (recvmmsg): Define using
recvmmsg syscall if it can be assumed to be present, socketcall
otherwise, with no fallback for runtime failure.
This macro is defined by TS 18661-3 for supporting the _FloatN and
_FloatNx types, as well as the functions suffixed with fN.
* bits/libc-header-start.h:
(__GLIBC_USE_IEC_60559_TYPES_EXT): New macro.
* include/features.h: Describe __STDC_WANT_IEC_60559_TYPES_EXT__.
* manual/creature.texi: Likewise.
This adds the appropriate common bits for a platform to
enable float128 and expose ABI.
* math/Makefile:
(type-float128-suffix): New variable
(type-float128-routines): Likewise
(type-float128-yes): Likewise
(types): Append float128 if supported
(types-basic): New variable to control the use of templates for
float, double, and long double, but not for float128 or newer types.
(type-basic-foreach): Likewise.
* sysdeps/ieee754/float128/Makeconfig: New file.
* sysdeps/ieee754/float128/Versions: New file.
This patch makes sysdeps/unix/sysv/linux code assume the prlimit64
syscall is always available, given the minimum of a 3.2 kernel.
__ASSUME_PRLIMIT64, which in fact was no longer used, is removed.
Code conditional on __NR_prlimit64 being defined is made
unconditional. Fallback code for the case where prlimit64 produces an
ENOSYS error is removed, substantially simplifying some functions.
Tested for x86_64 and x86.
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_PRLIMIT64):
Remove macro.
* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Assume
prlimit64 is always available and does not give an ENOSYS error.
* sysdeps/unix/sysv/linux/prlimit.c [__NR_prlimit64]: Make code
unconditional.
[!__NR_prlimit64]: Remove conditional code.
* sysdeps/unix/sysv/linux/setrlimit.c (__setrlimit): Assume
prlimit64 is always available and does not give an ENOSYS error.
* sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit64): Likewise.
cppflags-iterator.mk no longer has anything to do with CPPFLAGS; all
it does is set libof-$(foo) for a list of files. extra-modules.mk
does the same thing, but with a different input variable, and doesn't
let the caller control the module. Therefore, this patch gives
cppflags-iterator.mk a better name, removes extra-modules.mk, and
updates all uses of both.
* extra-modules.mk: Delete file.
* cppflags-iterator.mk: Rename to ...
* libof-iterator.mk: ...this. Adjust comments.
* Makerules, extra-lib.mk, benchtests/Makefile, elf/Makefile
* elf/rtld-Rules, iconv/Makefile, locale/Makefile, malloc/Makefile
* nscd/Makefile, sunrpc/Makefile, sysdeps/s390/Makefile:
Use libof-iterator.mk instead of cppflags-iterator.mk or
extra-modules.mk.
* benchtests/strcoll-inputs/filelist#en_US.UTF-8: Remove
extra-modules.mk and cppflags-iterator.mk, add libof-iterator.mk.
The magic number 32 is used everywhere as extra size to
use when doing certain operations. This commit refactors
that into a macro so you can change this value if you're
debugging something in a local build.
This patch removes the __ASSUME_PROC_PID_TASK_COMM macro, and
associated conditional code (in a testcase), now that 3.2 is the
global minimum Linux kernel version supported.
Tested for x86_64.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_PROC_PID_TASK_COMM): Remove macro.
* sysdeps/unix/sysv/linux/tst-setgetname.c: Do not include
<kernel-features.h>.
(do_test) [!__ASSUME_PROC_PID_TASK_COMM]: Remove conditional code.
This patch removes the definition of __ASSUME_GETCPU_SYSCALL. In fact
this macro is unused, probably since:
commit dd26c44403
Author: Adhemerval Zanella <adhemerval.zanella@linaro.com>
Date: Wed Apr 22 14:21:39 2015 -0300
Consolidate sched_getcpu
so it could have been removed even without the move to 3.2 as minimum
kernel version on x86_64.
Tested for x86_64.
* sysdeps/unix/sysv/linux/x86_64/kernel-features.h
(__ASSUME_GETCPU_SYSCALL): Remove macro.
Otherwise, another user might recreate these files after the first
deletion. Particularly with temporary directories, this could result
in the removal of unintended files through symbol link attacks.
This is required to remove temporary directories which contain
temporary files. Previously, FIFO order meant that directory
removal was attempted when the directory still contained files,
which meant that temporary directory cleanup was essentially
unsupported.
As per the recent discussion, this patch implements a requirement for
Linux 3.2 or later for x86 and x86_64. This is only the initial
change to increase the configured minimum; it's expected that followup
patches would deal with associated removal of conditionals that are no
longer needed. If we remove the start-up test on the kernel version,
of course the NEWS and README text should then be revised (to reflect
that this version is just one such that glibc does not intend to
include compatibility code for any older kernel version, rather than
older kernels necessarily failing to work or glibc necessarily having
compatibility code for newer interfaces).
The followups would be able to assume presence of getcpu (x86_64),
recvmmsg (not always through its own syscall, sometimes only through
socketcall), sendmmsg (likewise), /proc/$pid/task/$tid/comm, f_flags
from statfs, prlimit64.
Tested for x86_64 and x86.
* sysdeps/unix/sysv/linux/i386/configure.ac (arch_minimum_kernel):
Remove.
* sysdeps/unix/sysv/linux/i386/configure: Regenerated.
* sysdeps/unix/sysv/linux/x86_64/64/configure.ac
(arch_minimum_kernel): Remove.
* sysdeps/unix/sysv/linux/x86_64/64/configure: Regenerated.
* README: Update statement about Linux kernel requirements.
conform/ namespace tests of arpa/inet.h, netdb.h and netinet/in.h fail
for UNIX98 and XPG42 because of inclusion of stdint.h, which defines
macros not permitted in those headers for those standards. UNIX98
allows them to include inttypes.h, but (predating C99) has restricted
inttypes.h contents (not yet tested in the conform/ tests) not
including those macros; XPG4.2 has no such permission and no
inttypes.h / stdint.h at all.
This patch rearranges the headers to avoid this issue. intN_t
definitions move to bits/stdint-intn.h, and uintN_t definitions to
bits/stdint-uintn.h. (These are not bits/types/ headers because they
each define four types. They are separate rather than just a single
header because sys/types.h defines intN_t but u_intN_t rather than
uintN_t - and while sys/types.h could define uintN_t because of the
POSIX reservation of *_t, existing practice there is largely to
condition types on appropriate feature test macros, and indeed there
is at least one open bug report (14553) about a type that's not
so-conditioned, so maybe types there should actually have conditions
added where appropriate.) The affected network headers are then made
to include bits/stdint-uintn.h instead of stdint.h. This allows six
XFAILs to be removed.
This doesn't do anything about inttypes.h defining more than it should
for UNIX98, but we don't have conformtest expectations for that case
at present (and my inclination is that a fix for that should be as
local as possible - affecting only inttypes.h, not stdint.h, only for
the case of __USE_UNIX98 && !__USE_ISOC99).
Tested for x86_64.
[BZ #21455]
* bits/stdint-intn.h: New file.
* bits/stdint-uintn.h: Likewise.
* stdlib/Makefile (headers): Add bits/stdint-intn.h and
bits/stdint-uintn.h.
* inet/netinet/in.h: Include <bits/stdint-uintn.h> instead of
<stdint.h>.
* posix/sys/types.h: Include <bits/stdint-intn.h>.
(__int8_t_defined): Do not define here.
(int8_t): Likewise.
(int16_t): Likewise.
(int32_t): Likewise.
(int64_t): Likewise.
[__GNUC_PREREQ (2, 7)] (__intN_t): Likewise.
* resolv/netdb.h: Include <bits/stdint-uintn.h> instead of
<stdint.h>.
* include/netdb.h [_ISOMAC]: Do not include <stdint.h>.
* sysdeps/generic/stdint.h: Include <bits/stdint-intn.h> and
<bits/stdint-uintn.h>.
(int8_t): Do not define here.
(int16_t): Likewise.
(int32_t): Likewise.
(int64_t): Likewise.
(uint8_t): Likewise.
(uint16_t): Likewise.
(uint32_t): Likewise.
(uint64_t): Likewise.
* conform/Makefile (test-xfail-XPG42/arpa/inet.h/conform): Remove
variable.
(test-xfail-XPG42/netdb.h/conform): Likewise.
(test-xfail-XPG42/netinet/in.h/conform): Likewise.
(test-xfail-UNIX98/arpa/inet.h/conform): Likewise.
(test-xfail-UNIX98/netdb.h/conform): Likewise.
(test-xfail-UNIX98/netinet/in.h/conform): Likewise.
This provides a extra macro expansion before invoking
the hidden_def macro. This is necessary to build the
ldbl-128 files as float128 correctly.
* sysdeps/generic/math_private.h:
(mathx_hidden_def): New macro.
* sysdeps/ieee754/ldbl-128/s_finitel.c: Replace hidden_def with
the above.
* sysdeps/ieee754/ldbl-128/s_isinfl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_isnanl.c: Likewise.
signal.h declares bsd_signal for __USE_XOPEN. But this function was
obsoleted in the 2001 edition of POSIX and removed in the 2008
edition, so it should not be declared when the 2008 edition is in use.
This patch fixes the conditionals accordingly. (This does not fix any
conform/ test failures because of other namespace issues in signal.h.)
Tested for x86_64.
[BZ #21445]
* signal/signal.h [__USE_XOPEN2K8] (bsd_signal): Do not declare.
This patch implements the most straightforward part of fixing
namespace issues for sys/ucontext.h and related headers: where fields
in sys/ucontext.h or bits/sigcontext.h are named "reserved", "padding"
or similar, they are renamed to use the __glibc_reserved* naming
convention. It does not change fields with a leading underscore, or
even those with a prefix such as uc_ or sc_. It only fixes a small
part of bug 21457, so no XFAILs are removed.
Tested for x86_64 and x86, and with build-many-glibcs.py.
[BZ #21457]
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h
[_MIPS_SIM != _ABIO32] (mcontext_t): Rename field reserved to
__glibc_reserved1.
* sysdeps/unix/sysv/linux/x86/bits/sigcontext.h
(struct _fpx_sw_bytes): Rename field padding to __glibc_reserved1.
(struct _fpxreg): Likewise.
[!__x86_64__] (struct _fpstate): Rename field reserved to
__glibc_reserved1. Rename field padding to __glibc_reserved2.
[__x86_64__] (struct _fpstate): Rename field padding to
__glibc_reserved1.
(struct _xsave_hdr): Rename field reserved1 to __glibc_reserved1.
Rename field reserved2 to __glibc_reserved2.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h
[__x86_64__] (struct _libc_fpxreg): Rename field padding to
__glibc_reserved1.
[__x86_64__] (struct _libc_fpstate): Rename field padding to
__glibc_reserved1.
dl_platform and dl_hwcap are set from AT_PLATFORM and AT_HWCAP very
early during startup. They are used by dynamic linker to determine
platform and build an array of hardware capability names, which are
added to search path when loading shared object. dl_platform and
dl_hwcap are unused on x86-64. On i386, i386, i486, i586 and i686
platforms were supported and only SSE2 capability was used.
On x86, usage of AT_PLATFORM and AT_HWCAP to determine platform and
processor capabilities is obsolete since all information is available
in dl_x86_cpu_features. This patch sets dl_platform and dl_hwcap from
dl_x86_cpu_features in dynamic linker. On i386, the available plaforms
are changed to i586 and i686 since i386 has been deprecated. On x86-64,
the available plaforms are haswell, which is for Haswell class processors
with BMI1, BMI2, LZCNT, MOVBE, POPCNT, AVX2 and FMA, and xeon_phi, which
is for Xeon Phi class processors with AVX512F, AVX512CD, AVX512ER and
AVX512PF. A capability, avx512_1, is also added to x86-64 for AVX512
ISAs: AVX512F, AVX512CD, AVX512BW, AVX512DQ and AVX512VL.
[BZ #21391]
* sysdeps/i386/dl-machine.h (dl_platform_init) [IS_IN (rtld)]:
Only call init_cpu_features.
[!IS_IN (rtld)]: Only set GLRO(dl_platform) to NULL if needed.
* sysdeps/x86_64/dl-machine.h (dl_platform_init): Likewise.
* sysdeps/i386/dl-procinfo.h: Removed.
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Don't include
<sysdeps/i386/dl-procinfo.h> nor <ldsodefs.h>. Include
<sysdeps/x86/dl-procinfo.h>.
(_dl_procinfo): Replace _DL_HWCAP_COUNT with 32.
* sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h [!IS_IN (ldconfig)]:
Include <sysdeps/x86/dl-procinfo.h> instead of
<sysdeps/generic/dl-procinfo.h>.
* sysdeps/x86/cpu-features.c: Include <dl-hwcap.h>.
(init_cpu_features): Set dl_platform, dl_hwcap and dl_hwcap_mask.
* sysdeps/x86/cpu-features.h (bit_cpu_LZCNT): New.
(bit_cpu_MOVBE): Likewise.
(bit_cpu_BMI1): Likewise.
(bit_cpu_BMI2): Likewise.
(index_cpu_BMI1): Likewise.
(index_cpu_BMI2): Likewise.
(index_cpu_LZCNT): Likewise.
(index_cpu_MOVBE): Likewise.
(index_cpu_POPCNT): Likewise.
(reg_BMI1): Likewise.
(reg_BMI2): Likewise.
(reg_LZCNT): Likewise.
(reg_MOVBE): Likewise.
(reg_POPCNT): Likewise.
* sysdeps/x86/dl-hwcap.h: New file.
* sysdeps/x86/dl-procinfo.h: Likewise.
* sysdeps/x86/dl-procinfo.c (_dl_x86_hwcap_flags): New.
(_dl_x86_platforms): Likewise.
MMap'd memory isn't shrunk without MREMAP, but IIRC this is intentional for
performance reasons. Regardless, this patch tweaks the existing comment to
be more accurate wrt the existing code.
[BZ #21411]
* malloc/malloc.c: Tweak realloc/MREMAP comment to be more accurate.
This patch consolidates the epoll_wait Linux syscall generation on
sysdeps/unix/sysv/linux/epoll_wait.c. The implementation tries to
use __NR_epoll_wait if defined, otherwise calls epoll_pwait.
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/epoll_wait.c: New file.
* sysdeps/unix/sysv/linux/generic/epoll_wait.c: Remove file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove epoll_wait from
auto-generation list.
This patch consolidates the select Linux syscall implementation on
sysdeps/unix/sysv/linux/select.c. The changes are:
1. Remove select from auto-generation syscalls.list on the architecture
that uses __NR_select.
2. Remove generic implementation add a default one that handle all
current cases (with the expection of alpha)
The new default implementation will either use __NR_select if
available of fallback to __NR_pselect6 otherwise.
3. Add a alpha outlier implementation which requires old compatibility
symbols.
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/alpha/Makefile (sysdep_routines): Add
osf_select.
* sysdeps/unix/sysv/linux/alpha/select.c: New file.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove select and
osf_select from auto-generation list.
* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/generic/select.c: Remove file.
* sysdeps/unix/sysv/linux/select.c: New file.
This patch consolidates the poll Linux syscall implementation on
sysdeps/unix/sysv/linux/poll.c. It basically removes poll from
auto-generation list and add a default implementation that either
call __NR_poll directly (if the kernel headers defines it) or
ppoll adjusting the timeout argument (as the generic implementation).
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
* sysdeps/unix/sysv/linux/generic/poll.c: Remove file.
* sysdeps/unix/sysv/linux/poll.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Remove poll from
auto-generation list.
This patch adds the HWCAP_ASIMDRDM macro from Linux 4.11 to the
AArch64 bits/hwcap.h.
Tested (compilation only) with build-many-glibcs.py.
* sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h (HWCAP_ASIMDRDM):
New macro.
The Studio compiler generates relocation types which are not supported
in glibc. Handle these relocs.
Tested in sparc64-linux-gnu. No regressions.
BZ #21179]
* sysdeps/sparc/sparc64/dl-machine.h: Handle R_SPARC_DISP64 and
R_SPARC_REGISTER relocations.
This patch adds internal alias for __pread, __pread64, and __pwrite
following the already in place one for __pwrite64. This is not used
in any implementation but on microblaze on preadv/pwritev fallback
(since it does not define __ASSUME_PREADV).
In fact it was signaled by commit c35db50ff5 which update the expected
localptl.data for the architecture based on resulted value. This patch
updates the plt for microblaze now that p{read,write}{64} are correctly
routed to use internal alias.
Checked on x86_64-linux-gnu and a build for all supported architectures
(no all variants although).
* include/unistd.h (__pread): Add libc_hidden_proto.
(__pread64): Likewise.
(__pwrite): Likewise.
* sysdeps/unix/sysv/linux/microblaze/localplt.data [libc.so]
(__pread64): Remove.
* sysdeps/unix/sysv/linux/pread.c (__pread64): Add libc_hidden_weak.
* sysdeps/unix/sysv/linux/pread64.c (__pread64): Likewise.
* sysdeps/unix/sysv/linux/pwrite.c (__pwrite): Likewise.
This patch adds the TCP_FASTOPEN_CONNECT macro from Linux 4.11 to
sysdeps/gnu/netinet/tcp.h.
Tested for x86-64.
* sysdeps/gnu/netinet/tcp.h (TCP_FASTOPEN_CONNECT): New macro.
This patch adds the PF_SMC / AF_SMC macros from Linux 4.11 to
sysdeps/unix/sysv/linux/bits/socket.h.
Tested for x86_64.
* sysdeps/unix/sysv/linux/bits/socket.h (PF_SMC): New macro.
(PF_MAX): Set to 44.
(AF_SMC): New macro.
1. Fix the results for negative subnormals by ignoring the signal when
normalizing the value.
2. Fix the output when the high part is a power of 2 and the low part
is a nonzero number with opposite sign. This fix is based on commit
380bd0fd24.
After applying this patch, logbl() tests pass cleanly on POWER >= 7.
Tested on powerpc, powerpc64 and powerpc64le
[BZ #21280]
* sysdeps/powerpc/power7/fpu/s_logbl.c (__logbl): Ignore the
signal of subnormals and adjust the exponent of power of 2 down
when low part has opposite sign.
float128 on powerpc64le requires the addition of the ieee754/float128
sysdep, whereas powerpc64 doesn't. This requires creating a bunch of
submachine and cpu directories and Implies files which just point
towards their powerpc64 equivalent.
Tested on P7, P8, and generic powerpc64le targets with and without
multiarch.
* sysdeps/powerpc/powerpc64le/Implies: New file.
* sysdeps/powerpc/powerpc64le/fpu/Implies: New file.
* sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power7/Implies: New file.
* sysdeps/powerpc/powerpc64le/power7/fpu/Implies: New file.
* sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power7/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power8/Implies: New file.
* sysdeps/powerpc/powerpc64le/power8/fpu/Implies: New file.
* sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power8/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power9/Implies: New file.
* sysdeps/powerpc/powerpc64le/power9/fpu/Implies: New file.
* sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies: New file.
* sysdeps/powerpc/powerpc64le/power9/multiarch/Implies: New file.
* sysdeps/powerpc/preconfigure: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies: New file.
POSIX.1:2001 added sem_timedwait, but said nothing about defining
struct timespec in semaphore.h. The 2008 edition added a
corresponding permission to include <time.h> from <semaphore.h>.
Since this is the normal POSIX approach in such cases, it seems
appropriate to consider this a bug fix, and so this patch makes the
conform/ tests allow that inclusion for POSIX.1:2001 as well.
Tested for x86_64.
* conform/data/semaphore.h-data [XOPEN2K] (time.h): Allow header
inclusion.
* conform/Makefile (test-xfail-XOPEN2K/semaphore.h/conform):
Remove.
The conform/ tests test -D_XOPEN_SOURCE under the name "XPG3", and
-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED under the name "XPG4".
That naming is misleading. _XOPEN_SOURCE_EXTENDED actually means
XPG4.2, including UX-shaded interfaces. _XOPEN_SOURCE actually means
XPG4, or XPG4.2 without UX-shaded interfaces. (Prior XPG versions
also used _XOPEN_SOURCE, but without any versioning of the values of
the macro, so XPG4.2 without UX-shaded interfaces is the only sensible
set of interfaces for glibc to expose given _XOPEN_SOURCE=1 without
_XOPEN_SOURCE_EXTENDED defined.)
This patch fixes the naming in the conform/ tests, so that what is now
called XPG4 is changed to XPG42, and what is now called XPG3 is
changed to XPG4.
Tested for x86_64 (and verified the complete set of expectations is
unchanged by the patch beyond the intended renaming).
* conform/GlibcConform.pm (XPG4): Rename standard to XPG42.
(XPG3): Rename standard to XPG4.
* conform/Makefile: Likewise.
* conform/list-header-symbols.pl: Likewise.
* conform/data/aio.h-data: Likewise.
* conform/data/arpa/inet.h-data: Likewise.
* conform/data/complex.h-data: Likewise.
* conform/data/ctype.h-data: Likewise.
* conform/data/dlfcn.h-data: Likewise.
* conform/data/fcntl.h-data: Likewise.
* conform/data/fenv.h-data: Likewise.
* conform/data/float.h-data: Likewise.
* conform/data/fmtmsg.h-data: Likewise.
* conform/data/ftw.h-data: Likewise.
* conform/data/grp.h-data: Likewise.
* conform/data/inttypes.h-data: Likewise.
* conform/data/iso646.h-data: Likewise.
* conform/data/langinfo.h-data: Likewise.
* conform/data/libgen.h-data: Likewise.
* conform/data/limits.h-data: Likewise.
* conform/data/locale.h-data: Likewise.
* conform/data/math.h-data: Likewise.
* conform/data/mqueue.h-data: Likewise.
* conform/data/ndbm.h-data: Likewise.
* conform/data/net/if.h-data: Likewise.
* conform/data/netdb.h-data: Likewise.
* conform/data/netinet/in.h-data: Likewise.
* conform/data/poll.h-data: Likewise.
* conform/data/pthread.h-data: Likewise.
* conform/data/pwd.h-data: Likewise.
* conform/data/sched.h-data: Likewise.
* conform/data/search.h-data: Likewise.
* conform/data/semaphore.h-data: Likewise.
* conform/data/signal.h-data: Likewise.
* conform/data/spawn.h-data: Likewise.
* conform/data/stdbool.h-data: Likewise.
* conform/data/stdint.h-data: Likewise.
* conform/data/stdio.h-data: Likewise.
* conform/data/stdlib.h-data: Likewise.
* conform/data/string.h-data: Likewise.
* conform/data/strings.h-data: Likewise.
* conform/data/stropts.h-data: Likewise.
* conform/data/sys/mman.h-data: Likewise.
* conform/data/sys/resource.h-data: Likewise.
* conform/data/sys/select.h-data: Likewise.
* conform/data/sys/socket.h-data: Likewise.
* conform/data/sys/stat.h-data: Likewise.
* conform/data/sys/statvfs.h-data: Likewise.
* conform/data/sys/time.h-data: Likewise.
* conform/data/sys/timeb.h-data: Likewise.
* conform/data/sys/types.h-data: Likewise.
* conform/data/sys/uio.h-data: Likewise.
* conform/data/sys/un.h-data: Likewise.
* conform/data/sys/wait.h-data: Likewise.
* conform/data/syslog.h-data: Likewise.
* conform/data/termios.h-data: Likewise.
* conform/data/tgmath.h-data: Likewise.
* conform/data/time.h-data: Likewise.
* conform/data/ucontext.h-data: Likewise.
* conform/data/unistd.h-data: Likewise.
* conform/data/utmpx.h-data: Likewise.
* conform/data/varargs.h-data: Likewise.
* conform/data/wchar.h-data: Likewise.
* conform/data/wctype.h-data: Likewise.
Now there is a GCC 7 release branch, this patch makes
build-many-glibcs.py default to using it instead of GCC 6.
Relative to GCC 6, this fixes the MicroBlaze build but introduces ICEs
building glibc testcases for SH (GCC PRs 78459, 78460; the latter is
an out-of-memory issue so you may want to set memory limits when
running build-many-glibcs.py).
* scripts/build-many-glibcs.py (Context.checkout): Default gcc
version to 7 branch.
When using software completions, we have to prevent assembler to match
input and output operands of sqrtt/sqrtf insn. Add earlyclobber to
output operand to avoid unwanted operand matching.
2017-04-14 Uros Bizjak <ubizjak@gmail.com>
* sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Add
earlyclobber to output operand of sqrt insn.
(__ieee754_sqrtf): Ditto.
sys/socket.h includes sys/uio.h to get the definition of the iovec
structure.
POSIX allows sys/socket.h to make all sys/uio.h symbols visible.
However, all of sys/uio.h is XSI-shaded, so for non-XSI POSIX this
results in conformtest failures (for sys/socket.h and other headers
that include it):
Namespace violation: "UIO_MAXIOV"
Namespace violation: "readv"
Namespace violation: "writev"
Now, there is some ambiguity in POSIX about what namespace
reservations apply in this case - see
http://austingroupbugs.net/view.php?id=1127 - but glibc convention
would still avoid declaring readv and writev, for example, for feature
test macros that don't include them (if only headers from the relevant
standard are included), even if such declarations are permitted, so
there is a bug here according to glibc conventions.
This patch moves the struct iovec definition to a new
bits/types/struct_iovec.h header and includes that from sys/socket.h
instead of including the whole of sys/uio.h. This fixes the namespace
issue; however, three files in glibc that were relying on the implicit
inclusion needed to be updated to include sys/uio.h explicitly. So
there is a question of whether sys/socket.h should continue to include
sys/uio.h under some conditions, such as __USE_XOPEN or __USE_MISC or
__USE_XOPEN || __USE_MISC, for greater compatibility with code that
(wrongly) expects this optional inclusion to be present there. (I
think the three affected files in glibc should still have explicit
sys/uio.h inclusions added in any case, however.)
Tested for x86_64.
[BZ #21426]
* misc/bits/types/struct_iovec.h: New file.
* misc/Makefile (headers): Add bits/types/struct_iovec.h.
* include/bits/types/struct_iovec.h: New file.
* bits/uio.h (struct iovec): Replace by inclusion of
<bits/types/struct_iovec.h>.
* sysdeps/unix/sysv/linux/bits/uio.h (struct iovec): Likewise.
* socket/sys/socket.h: Include <bits/types/struct_iovec.h> instead
of <sys/uio.h>.
* nptl/tst-cancel4.c: Include <sys/uio.h>
* posix/test-errno.c: Likewise.
* support/resolv_test.c: Likewise.
* conform/Makefile (test-xfail-POSIX2008/arpa/inet.h/conform):
Remove.
(test-xfail-POSIX2008/netdb.h/conform): Likewise.
(test-xfail-POSIX2008/netinet/in.h/conform): Likewise.
(test-xfail-POSIX2008/sys/socket.h/conform): Likewise.
The conformtest expectations in sys/socket.h are missing the standard
POSIX allowance for all headers to define *_t names. For XSI standard
versions that allowance comes in via the permission to include
<sys/uio.h> (for which the expectations properly allow *_t), but for
non-XSI POSIX nothing brings in that allowance and spurious namespace
failures occur. This patch adds the required permission to the
expectations to remove the spurious failures (by itself this does not
allow any XFAILs to be removed).
Tested for x86_64.
* conform/data/sys/socket.h-data (*_t): Allow.
The internal 'ret' variable in '__spawni_child' function is not
used after assignment in most cases.
Checked on x86_64-linux-gnu.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Remove ununsed
assignment.
This patch adds support for the POSIX_SPAWN_SETSID flag.
It was recently accepted by the Austin Group:
http://austingroupbugs.net/view.php?id=1044
Checked on x86_64
Daurnimator <quae@daurnimator.com>
Adhemerval Zanella <adhemerval.zanella@linaro.org>
[BZ #21340]
* posix/Makefile (tests): Add tst-posix_spawn-setsid to list of tests.
* posix/spawn.h: define POSIX_SPAWN_SETSID flag.
* posix/spawnattr_setflags.c (ALL_FLAGS): Add POSIX_SPAWN_SETSID to
valid flags.
* posix/tst-posix_spawn-setsid.c: Add test for POSIX_SPAWN_SETSID.
* sysdeps/mach/hurd/spawni.c (__spawni): Implementation of
POSIX_SPAWN_SETSID.
* sysdeps/posix/spawni.c (__spawni): Likewise.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
* NEWS: Add note about POSIX_SPAWN_SETSID support.
This patch moves the declaration of many floating-point functions from
math_private.h to math_private_calls.h and macroize the declaration to
be dependent on floating-point type. For each of float, double, and
long double, the new header file is included once. This reduces the
amount of repetitive boilerplate that will be required when adding
float128 versions of these functions.
Tested for powerpc64le and s390x.
* sysdeps/generic/math_private.h: Move the declaration of many
functions to sysdeps/generic/math_private_calls.h.
* sysdeps/generic/math_private_calls.h: New file with the
declarations of the functions removed from math_private.h
macroized by floating-point type.
The utf8-utf32-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder. Otherwise ifunc is used even if you configure
with --disable-multi-arch.
This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf8-utf32-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.
The ifunc versions are implemented in sysdeps/s390/utf8-utf32-z9.c.
Each version is only implemented if needed or supported. Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level. This block defines HAVE_[FROM|TO]_[C|CU|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|CU|VX] == 1. There is no functional change.
The cu instructions are z9 zarch instructions. As the major distros are
already using the newer z196 as architecture level set, those instructions
can be used as fallback version instead of the c-code. This behaviour is
decided at compile time via HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT.
ChangeLog:
* sysdeps/s390/multiarch/utf8-utf32-z9.c: New File.
* sysdeps/s390/utf8-utf32-z9.c: Move ifunc resolvers to multiarch
folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|CU|VX].
(HAVE_FROM_C, HAVE_FROM_CU, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX,
FROM_LOOP_DEFAULT, FROM_LOOP_C, FROM_LOOP_CU, FROM_LOOP_VX,
TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX): New Define.
The utf16-utf32-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder. Otherwise ifunc is used even if you configure
with --disable-multi-arch.
This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf16-utf32-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.
The ifunc versions are implemented in sysdeps/s390/utf16-utf32-z9.c.
Each version is only implemented if needed or supported. Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level. This block defines HAVE_[FROM|TO]_[C|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|VX] == 1. There is no functional change.
ChangeLog:
* sysdeps/s390/multiarch/utf16-utf32-z9.c: New File.
* sysdeps/s390/utf16-utf32-z9.c: Move ifunc resolvers to multiarch
folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|VX].
(HAVE_FROM_C, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX, FROM_LOOP_DEFAULT,
FROM_LOOP_C, FROM_LOOP_VX, TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX):
New Define.
The utf8-utf16-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder. Otherwise ifunc is used even if you configure
with --disable-multi-arch.
This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf8-utf16-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.
The ifunc versions are implemented in sysdeps/s390/utf8-utf16-z9.c.
Each version is only implemented if needed or supported. Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level. This block defines HAVE_[FROM|TO]_[C|CU|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|CU|VX] == 1. There is no functional change.
The cu instructions are z9 zarch instructions. As the major distros are
already using the newer z196 as architecture level set, those instructions
can be used as fallback version instead of the c-code. This behaviour is
decided at compile time via HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT.
ChangeLog:
* sysdeps/s390/multiarch/utf8-utf16-z9.c: New File.
* sysdeps/s390/utf8-utf16-z9.c: Move ifunc resolvers to multiarch
folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|CU|VX].
(HAVE_FROM_C, HAVE_FROM_CU, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX,
FROM_LOOP_DEFAULT, FROM_LOOP_C, FROM_LOOP_CU, FROM_LOOP_VX,
TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX): New Define.
This patch adds s390_libc_ifunc_expr macro which uses the __ifunc base macro
in include/libc-symbols.h and lets the user define a generic expression to
choose the correct ifunc variant. Furthermore as the base macro is used,
the ifunc resolver functions are now also using inhibit_stack_protector.
S390 needs its own version due to the hwcap argument of the ifunc resolver.
This new macro is now used in iconv code in 8bit-generic.c instead of using
gcc attribute ifunc directly.
ChangeLog:
* sysdeps/s390/multiarch/ifunc-resolve.h
(s390_libc_ifunc_expr_init, s390_libc_ifunc_expr): New Define.
* sysdeps/s390/multiarch/8bit-generic.c
(__to_generic, __from_generic): Use s390_libc_ifunc_expr to
define ifunc resolvers.
As noted in
<https://sourceware.org/ml/libc-alpha/2012-12/msg00240.html>,
stdlib/Versions and wcsmbs/Versions list some functions as
__strto*_internal and __wcsto*_internal rather than explicitly listing
the symbols to be exported (so any new internal function matching one
of those patterns would be wrongly added to version GLIBC_2.0), which
seems like a bad idea. This patch changes those files to list the
exported symbols explicitly. There are still entries in
sysdeps/nacl/Versions for __nacl_irt_*, but as GLIBC_PRIVATE symbols
that seems less significant.
Tested with build-many-glibcs.py that installed stripped shared
libraries are unchanged by the patch.
* stdlib/Versions (__strtod_internal): List explicitly, not as
wildcard.
(__strtof_internal): Likewise.
(__strtold_internal): Likewise.
(__strtol_internal): Likewise.
(__strtoll_internal): Likewise.
(__strtoul_internal): Likewise.
(__strtoull_internal): Likewise.
(__strtoq_internal): Likewise.
(__strtouq_internal): Likewise.
* wcsmbs/Versions (__wcstod_internal): Likewise.
(__wcstof_internal): Likewise.
(__wcstold_internal): Likewise.
(__wcstol_internal): Likewise.
(__wcstoll_internal): Likewise.
(__wcstoul_internal): Likewise.
(__wcstoull_internal): Likewise.
As indicated by the bug report, the 'struct timespec' definition
is not defined for '_XOPEN_SOURCE=700' and '_POSIX_C_SOURCE=200112L'.
It is because current code only includes its definition if __USE_ATFILE
is defined and the define is only set with:
1. _GNU_SOURCE and/or _ATFILE_SOURCE definition.
2. _POSIX_C_SOURCE >= 200809L
However, the 'st_*' fields in 'struct stat' are defined if __USE_XOPEN2K8.
This patch uses the same logic for 'struct timespec' inclusion.
Tested on x86_64-linux-gnu.
* io/sys/stat.h: Use __USE_XOPEN2K8 insteaf of __USE_ATFILE for
struct timespec definition.
Simplify the Linux accept4 implementation based on the assumption
that it is available in some way. __ASSUME_ACCEPT4_SOCKETCALL was
previously unused, so remove it.
For ia64, the accept4 system call (and socket call) were backported
in kernel version 3.2.18. Reflect this in the installation
instructions.
This patch enables the compilation part of the conformtest tests (the
vast bulk of them) when cross compiling, so making it easy to run them
across many configurations with build-many-glibcs.py.
Tested with build-many-glibcs.py.
* conform/Makefile (tests-special): Do not make addition of
$(conformtest-header-tests) conditional on [$(cross-compiling) = no].
(generated): Do not make addition of $(conformtest-header-base)
conditional on [$(cross-compiling) = no].
sysdeps/unix/sysv/linux/bits/socket.h includes asm/socket.h. That
includes asm/sockios.h, which on MIPS includes asm/ioctl.h, resulting
in namespace violations from IOC* macros.
bits/socket.h already has code to handle asm/socket.h unconditionally
defining macros that are only wanted for __USE_MISC. This patch
extends it to handle the IOC* macros as well (always undefining them
if not defined when bits/socket.h was included, as I don't think they
are part of the intended API even for __USE_MISC).
It's possible there should also be a kernel fix - it's not clear to me
that IOC* belong in the uapi headers, and even if they do they might
best be split out into another header to avoid getting defined by this
particular path. But since glibc needs to deal with existing kernel
headers, it also seems appropriate to extend the existing workaround
to these macros.
Tested (compilation only) with build-many-glibcs.py.
[BZ #21267]
* sysdeps/unix/sysv/linux/bits/socket.h (IOCSIZE_MASK): Undefine
if defined by <asm/socket.h> and not previously defined.
(IOCSIZE_SHIFT): Likewise.
(IOC_IN): Likewise.
(IOC_INOUT): Likewise.
(IOC_OUT): Likewise.
On Skylake server, AVX512 load/store instructions in memcpy/memset may
lead to lower CPU turbo frequency in certain situations. Use of AVX2
in memcpy/memset has been observed to have improved overall performance
in many workloads due to the higher frequency.
Since AVX512ER is unique to Xeon Phi, this patch sets Prefer_No_AVX512
if AVX512ER isn't available so that AVX2 versions of memcpy/memset are
used on Skylake server.
[BZ #21396]
* sysdeps/x86/cpu-features.c (init_cpu_features): Set
Prefer_No_AVX512 if AVX512ER isn't available.
* sysdeps/x86/cpu-features.h (bit_arch_Prefer_No_AVX512): New.
(index_arch_Prefer_No_AVX512): Likewise.
* sysdeps/x86_64/multiarch/memcpy.S (__new_memcpy): Don't use
AVX512 version if Prefer_No_AVX512 is set.
* sysdeps/x86_64/multiarch/memcpy_chk.S (__memcpy_chk):
Likewise.
* sysdeps/x86_64/multiarch/memmove.S (__libc_memmove): Likewise.
* sysdeps/x86_64/multiarch/memmove_chk.S (__memmove_chk):
Likewise.
* sysdeps/x86_64/multiarch/mempcpy.S (__mempcpy): Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk.S (__mempcpy_chk):
Likewise.
* sysdeps/x86_64/multiarch/memset.S (memset): Likewise.
* sysdeps/x86_64/multiarch/memset_chk.S (__memset_chk):
Likewise.
AVX512ER won't be implemented in any Xeon processors and will be in
all Xeon Phi processors. Don't check CPU model number when setting
Prefer_No_VZEROUPPER for Xeon Phi. Instead, set Prefer_No_VZEROUPPER
if AVX512ER is available. It works with current and future Xeon Phi
and non-Xeon Phi processors.
* sysdeps/x86/cpu-features.c (init_cpu_features): Set
Prefer_No_VZEROUPPER if AVX512ER is available.
* sysdeps/x86/cpu-features.h
(bit_cpu_AVX512PF): New.
(bit_cpu_AVX512ER): Likewise.
(bit_cpu_AVX512CD): Likewise.
(bit_cpu_AVX512BW): Likewise.
(bit_cpu_AVX512VL): Likewise.
(index_cpu_AVX512PF): Likewise.
(index_cpu_AVX512ER): Likewise.
(index_cpu_AVX512CD): Likewise.
(index_cpu_AVX512BW): Likewise.
(index_cpu_AVX512VL): Likewise.
(reg_AVX512PF): Likewise.
(reg_AVX512ER): Likewise.
(reg_AVX512CD): Likewise.
(reg_AVX512BW): Likewise.
(reg_AVX512VL): Likewise.
P7 code is used for <=32B strings and for > 32B vectorized loops are used.
This shows as an average 25% improvement depending on the position of search
character. The performance is same for shorter strings.
Tested on ppc64 and ppc64le.
__deregister_frame_info_bases() calls free() while holding a mutex which
is also used from _Unwind_Find_FDE(). This leads to a deadlock if
AddressSanitizer uses _Unwind_Backtrace() from its free()
implementation.
Checked on mips-linux-gnu and x86_64-linux-gnu.
[BZ #21357]
* sysdeps/generic/unwind-dw2-fde.c (__deregister_frame_info_bases):
Call free() outside of mutex.
EDNS is disabled by default (so there is interoperability issue), and
the fallback code is problematic because it prevents an application
from obtaining DNSSEC data after a FORMERR response.
This bug did not affect name resolution because those functions
indirectly call ns_name_pack with a buffer which is always larger
than the generated query packet, even in the case of the
longest-possible domain name.
The RES_F_* constants are only used with the private _res._flags
member. RES_EXHAUSTIVE is unused. The removed function
declarations refer to functions not actually exported by glibc,
so they are unusable by applications.
With new optimized strnlen for POWER8 [1], this patch adds
strncat for power8 to make use of optimized strlen and strnlen.
This is faster than POWER7 current implementation for larger strings.
Tested on powerpc64 and powerpc64le.
[1] https://sourceware.org/ml/libc-alpha/2017-03/msg00491.html
* sysdeps/powerpc/powerpc64/multiarch/Makefile (sysdep_routines): Add
strncat-power8.
* sysdeps/powerpc/powerpc64/multiarch/strncat.c (strncat): Add
__strncat_power8 to ifunc list.
* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
(strncat): Add __strncat_power8 to list of strncat functions.
* sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c: New file.
This patch consolidates all Linux mmap implementations on default
sysdeps/unix/sysv/linux/mmap{64}.c one. To accomodate all required
architecture specific requeriments a new internal header is created
(mmap_internal.h) where each architecture add its specific code
requirements. Currently only x86_64 (to define MMAP_PREPARE to add
MAP_32BITS), s390 (which have a different kernel ABI for mmap), m68k
(which have variable minimum page sizes), and MIPS n32 (which zero
extend the offset to handle negative one correctly) redefine the new
header.
The patch also fixes BZ#21270 where default mmap64 on architectures
which uses mmap2 silent truncates large offsets value (larger than
1 << (page shift + 8 * sizeof (off_t)) or 1<<44 on architectures with
4096 bytes page size). The new consolidate implementation returns
EINVAL as allowed by POSIX.
It also adds a tests for on current tst-mmap-offset one. I have run
a full make check on x86_64, x86_64-32, i686, aarch64, armhf, powerpc,
powerpc64le, sparc64, and sparcv9 without any regressions. I also ran
some basic tests (tst-mmap-offset) on sh4, m68k, and on qemu simulated
MIPS32 and MIPS64.
[BZ #21270]
* posix/tst-mmap-offset.c (do_prepare): New function.
(do_test): Rename to do_test_bz18877 and use FAIL_RET.
(do_test_bz21270): New function.
* sysdeps/unix/sysv/linux/aarch64/mmap.c: Remove file.
* sysdeps/unix/sysv/linux/arm/mmap.c: Remove file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/i386/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/mmap64.c: Likewise.
* sysdeps/unix/sysv/linux/microblaze/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/mmap64.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/mmap64.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/mmap.c: Likewise.
* sysdeps/unix/sysv/linux/mmap_internal.h: New file.
* sysdeps/unix/sysv/linux/m68k/mmap_internal.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/mmap_internal.h: Likewise.
* sysdeps/unix/sysv/linux/s390/mmap_internal.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Remove mmap
from auto-generation list.
* sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/mmap.c: New file.
* sysdeps/unix/sysv/linux/mmap64.c (__mmap64): Add check for invalid
offsets and support for mmap2 syscall.
This patch prevents lingering files for SIGSEGV failures by adding
a cleanup handler on trap handler. Checked on x86_64-linux-gnu.
* posix/globtest.sh: Add cleanup routine on trap 0.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S: Define the
implementation-specific function name and remove unneeded
macros definition.
* sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memmove-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/power4/memcmp.S: Set a default function
name if not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/power7/memcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/memmove.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S: Define the
implementation-specific function name and remove unneeded
macros definition.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-power4.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-power6.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/mempcpy-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/a2/memcpy.S: Set a default function
name if not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/cell/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/power4/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/power6/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/memcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/mempcpy.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/memchr-power7.S: Define the
implementation-specific function name and remove unneeded macros
definition.
* sysdeps/powerpc/powerpc64/multiarch/memrchr-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/rawmemchr-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/memchr.S: Set a default
function name if not defined and pass as parameter to macros
accordingly.
* sysdeps/powerpc/powerpc64/power7/memrchr.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/rawmemchr.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/memset-power4.S: Define the
implementation-specific function name and remove unneeded macros
definition.
* sysdeps/powerpc/powerpc64/multiarch/memset-power6.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memset-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memset-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/memset.S: Set a default function name if
not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/power4/memset.S: Likewise.
* sysdeps/powerpc/powerpc64/power6/memset.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/memset.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/memset.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/strcasestr-power8.S: Define the
strcasestr implementation name and remove unneeded macros definition.
* sysdeps/powerpc/powerpc64/multiarch/strstr-power7.S: Define
strstr implementation name and remove unneeded macros definition.
* sysdeps/powerpc/powerpc64/power7/strstr.S: Set a default function
name if not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/power8/strcasestr.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/strchr-power7.S: Define the
implementation-specific function name and remove unneeded macros
definition.
* sysdeps/powerpc/powerpc64/multiarch/strchr-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strchrnul-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strchrnul-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/strchr.S: Set a default
function name if not defined and pass as parameter to macros
accordingly.
* sysdeps/powerpc/powerpc64/power7/strchrnul.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/strrchr.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/strchr.S: Likewise.
* sysdeps/powerpc/powerpc64/strchr.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/strlen-power7.S: Define
the strlen implementation name and remove unneeded macros definition.
* sysdeps/powerpc/powerpc64/multiarch/strlen-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S: Define
the strnlen implementation name and remove unneeded macros definition.
* sysdeps/powerpc/powerpc64/power7/strlen.S: Set a default function
name if not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/power7/strnlen.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/strlen.S: Likewise.
* sysdeps/powerpc/powerpc64/strlen.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S: Define
the implementation-specific function name and remove unneeded
macros definition.
* sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S: Likewise.
* sysdeps/powerpc/powerpc64/power4/strncmp.S: Set a default function
name if not defined and pass as parameter to macros accordingly.
* sysdeps/powerpc/powerpc64/power7/strcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/strcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/strncmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power9/strcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/power9/strncmp.S: Likewise.
* sysdeps/powerpc/powerpc64/strcmp.S: Likewise.
* sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
Clean up the IFUNC implementations for powerpc in order to remove
unneeded macro definitions.
Tested on ppc64le with and without --disable-multi-arch flag.
* sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S: Define the
implementation-specific function name and remove unneeded macros
definition.
* sysdeps/powerpc/powerpc64/multiarch/stpncpy-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strcpy-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncpy-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S: Likewise.
* sysdeps/powerpc/powerpc64/power7/strncpy.S: Set a default
function name if not defined.
* sysdeps/powerpc/powerpc64/power8/strcpy.S: Likewise.
* sysdeps/powerpc/powerpc64/power8/strncpy.S: Likewise.
Add support to getauxval() for new types to get L1, L2, L3 cache sizes,
cache line sizes, and cache associativities. The new types for
getauxval() were added in the stream for Linux kernel v4.11 in commit
98a5f361b8625c6f4841d6ba013bbf0e80d08147.
* elf/elf.h (AT_L1I_CACHESIZE, AT_L1I_CACHEGEOMETRY, AT_L1D_CACHESIZE,
AT_L1D_CACHEGEOMETRY, AT_L2_CACHESIZE, AT_L2_CACHEGEOMETRY,
AT_L3_CACHESIZE, AT_L3_CACHEGEOMETRY): New. Add auxvec
identifiers from kernel arch/powerpc/include/uapi/asm/auxvec.h.
They only modify the state in the dirstream argument, and we
generally do not treat this as a reason to mark a function as
not thread-safe. For an example, see random_r, which is marked
as thread-safe even though the random state is not protected
by a lock.
This patch moves all arch specific pthreadtypes.h to a similar path
for all architectures (sysdeps/unix/sysv/<arch>/bits). No functional
or build change is expected. The idea is mainly to organize the
header placement for all architectures.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu,
m68k-linux-gnu, microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).
* sysdeps/unix/sysv/linux/x86/Implies: New file.
* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h: Move to ...
* sysdeps/alpha/nptl/bits/pthreadtypes.h: ... here.
* sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Move to ...
* sysdeps/powerpc/nptl/bits/pthreadtypes.h: ... here.
* sysdeps/x86/bits/pthreadtypes.h: Move to ...
* sysdeps/x86/nptl/bits/pthreadtypes.h: ... here.
Add sysdeps/x86/dl-procinfo.c for x86 version of processor capability
information to reduce duplication between i386 and x86_64 dl-procinfo.c.
* sysdeps/i386/dl-procinfo.c: Include
<sysdeps/x86/dl-procinfo.c>.
* sysdeps/x86_64/dl-procinfo.c: Likewise.
* sysdeps/x86/dl-procinfo.c: New file.
The declarations of many functions in math_private.h are not required
since __MATHDECL and __MATHDECLX, in math.h, already provide the
declarations for these functions. This patch removes the declarations
from math_private.h. It also adds the inclusion of math.h to the files
which depended on the declaration of functions in math_private.h.
Tested for powerpc64le and s390x.
* sysdeps/generic/math_private.h: Remove declarations of
many functions that are already declared in math.h.
* sysdeps/ieee754/ldbl-128/e_logl.c: Include math.h to get the
declaration for __frexpl.
* sysdeps/ieee754/ldbl-128ibm/e_logl.c: Include math.h to get
the declarations for __scalbnl and fabsl.
As the final act in this patchset, adjust the "This file is part of
the GNU C Library" message at the top of each file to indicate which
files are synced with gnulib.
* posix/bits/getopt_core.h, posix/bits/getopt_ext.h
* posix/getopt.c, posix/getopt1.c, posix/getopt_int.h:
Mention in top-of-file boilerplate that these files are shared
with gnulib.
* posix/getopt.h, posix/bits/getopt_posix.h:
Mention in top-of-file boilerplate that these files are NOT shared
with gnulib, unlike the rest of the getopt implementation.
__need_getopt is misnamed; what it really means is "we want only the
getopt features specified in POSIX, not the GNU extensions". Because
this code is shared with gnulib, it winds up being cleanest to split
getopt.h into *four* headers. getopt_core.h and getopt_ext.h will
be shared with gnulib, getopt_posix.h will be just for glibc, and
each project will have its own copy of getopt.h.
* posix/bits/getopt_core.h, posix/bits/getopt_ext.h:
New files, intended to be shared with gnulib.
* posix/bits/getopt_posix.h:
New file, not intended to be shared with gnulib.
* posix/getopt.h: Now just includes features.h,
bits/getopt_core.h, and bits/getopt_ext.h. Will
no longer be shared with gnulib.
* include/bits/getopt_core.h, include/bits/getopt_ext.h
* include/bits/getopt_posix.h: New wrappers.
* posix/Makefile: Install new headers.
* posix/unistd.h, libio/stdio.h:
Include bits/getopt_posix.h instead of getopt.h.
gnulib now has annotations on at least some functions to cater to
compilation with -Wunused-parameter. In order to follow suit cleanly,
I've added to libc-symbols.h some of the _GL_* macros that
gnulib-common.m4 puts into config.h. (I don't think they belong in
sys/cdefs.h, at least not without further thought.)
At this point all gnulib-side changes to getopt.c have been merged.
* include/libc-symbols.h: For gnulib compatibility, define
_GL_UNUSED, _GL_UNUSED_LABEL, _GL_ATTRIBUTE_PURE, and
_GL_ATTRIBUTE_CONST.
* posix/getopt.c (_getopt_initialize): Mark argc and argv
parameters with _GL_UNUSED.
In one place, glibc's getopt uses alloca to construct a linked list of
possibilities for an "ambiguous" long option. In gnulib, malloc
should be used instead. Providing for both cases complicates things a
fair bit. Instead of merging straight across, therefore, I have
chosen to rewrite it using a boolean vector instead of a linked list.
There is then only one allocation that might need freeing; in glibc it
can honor __libc_use_alloca as usual, and in gnulib we define
__libc_use_alloca to always be false, so we don't need ifdefs in the
middle of the function. This should also be slightly more efficient
in the normal case of long options being fully spelled out -- I think
most people aren't even aware they _can_ sometimes abbreviate long
options.
One interesting consequence is that the list of possibilities is now
printed in exactly the order they appear in the list of long options,
instead of the first possibility being shuffled to the end. This
shouldn't be a big deal but it did break one test that relied on the
exact text of this error message.
(The reason the previous patch was "in aid of" merging from gnulib is
I didn't want to have to make this change in two places.)
(The patch looks bigger than it really is because there's a fair bit
of reindentation and code rearrangement.)
* posix/getopt.c: When used standalone, define __libc_use_alloca
as always false and alloca to abort if called.
(process_long_option): Rewrite handling of ambiguous long options
to use a single boolean vector, not a linked list; use
__libc_use_alloca to decide whether to allocate this using alloca.
* posix/tst-getopt_long1.c: Adjust text of expected error message.
There were two copies of the bulk of the code to handle long options.
Now there is only one. (Yes, this is in aid of merging from gnulib.)
The change to bug-getopt4.c clarifies the error messages when the test
fails.
* posix/getopt.c (process_long_option): New function split out
from _getopt_internal_r.
(_getopt_internal_r): Replace both copies of the long-option
processing code with calls to process_long_option.
* posix/bug-getopt4.c (one_test): Print argv[0] in error messages.
(do_test): Differentiate argv[0] in the two subtests.
_getopt_data.__posixly_correct is completely redundant to
_getopt_data.__ordering, and some work that logically belongs in
_getopt_initialize was being done by _getopt_internal_r, making the
code harder to understand.
As a side effect, getenv will no longer be called if the first
character of the options string is '+' or '-', which is probably a
Good Thing. (Perhaps we should have a flag character that
specifically asks for the permutation behavior?)
* posix/getopt_int.h (_getopt_data): Remove __posixly_correct field.
* posix/getopt.c (_getopt_internal_r): Move some initialization code...
(_getopt_initialize): ...here. Don't set d->__posixly_correct.
For standards compliance, getopt, getopt_long, and getopt_long_only in
glibc have to take 'char *const *argv' even though they can mutate the
array. gnulib has tried to clean this up as much as possible: all the
internal functions use 'char **argv', and when used standalone, so do
getopt_long and getopt_long_only.
Also brought over are __nonnull annotations, corrections to documentation,
and apparently it is no longer necessary to worry about conflicting
prototypes for getopt. The macroification of the definitions of
getopt and __posix_getopt goes beyond what is currently in gnulib.
At this point getopt1.c and getopt_int.h are identical to their gnulib
versions.
* posix/getopt.h: Add backup definition of __nonnull for
consistency with gnulib. Define __getopt_argv_const to const
if not already defined.
(getopt): Update doc comment from gnulib. Prototype
unconditionally. Add __nonnull annotation.
(__posix_getopt): Add __nonnull annotation.
(getopt_long, getopt_long_only): Use __getopt_argv_const in
prototypes for consistency with gnulib. Add __nonnull
annotations.
* posix/getopt.c (_getopt_initialize, _getopt_internal_r)
(getopt_internal): Change 'argv' argument to type 'char **'.
Remove now-unnecessary casts.
(getopt, __posix_getopt): Eliminate repetition with a macro.
Cast 'argv' to 'char **' when calling _getopt_internal.
* posix/getopt1.c (getopt_long, getopt_long_only):
Use __getopt_argv_const for consistency with gnulib.
Cast 'argv' to 'char **' when calling _getopt_internal.
(_getopt_long_r, _getopt_long_only_r):
Change 'argv' argument to type 'char **'.
(main): Constify 'long_options'.
* posix/getopt_int.h (getopt_internal, _getopt_internal_r)
(_getopt_long_r, _getopt_long_only_r):
Change 'argv' argument to type 'char **'.
getopt can print a whole bunch of error messages, and when used
standalone (from gnulib) it uses fprintf to do that. But fprintf is a
cancellation point and getopt isn't, and also applying fprintf to a
stream in wide-character mode is not allowed.
glibc has an internal function called __fxprintf that writes a narrow
format string to a stream regardless of mode, but it only handles
ASCII format strings, and it's still a cancellation point. getopt's
messages are translated, so they might not be ASCII. So getopt has an
error message to an asprintf buffer, monkeys with internal flag bits
on stderr to disable cancellation, and then calls
__fxprintf(stderr, "%s", buffer). There isn't even a helper function,
the code is duplicated every time.
This patch fixes __fxprintf to handle arbitrary multibyte format
strings, and adds a variant __fxprintf_nocancel that does the same
thing but also isn't a cancellation point. (It still _works_ by
monkeying with internal flag bits on the FILE, but that's not really a
layering violation for code in stdio-common.) All of the #ifdef _LIBC
blocks can then be reduced to their standalone versions with a little
help from some macros at the top of the file.
I also wrote a test case to verify that getopt really isn't a
cancellation point, and I'm glad I did, because it found two bugs, one
of which wasn't even to do with cancellation (see previous patch).
* stdio-common/fxprintf.c (__fxprintf_nocancel): New function.
(locked_vfxprintf): New helper function. Handle arbitrary
multibyte strings, not just ASCII.
* include/stdio.h: Declare __fxprintf_nocancel.
* posix/getopt.c: When _LIBC is defined, define fprintf to
__fxprintf_nocancel, flockfile to _IO_flockfile, and
funlockfile to _IO_funlockfile. When neither _LIBC nor
_POSIX_THREAD_SAFE_FUNCTIONS is defined, define flockfile and
funlockfile as no-ops. (_getopt_internal_r): Remove all
internal #ifdef _LIBC blocks; the standalone error-printing
code can now be used for libc as well. Add an
flockfile/funlockfile pair around one case where the error
message is printed in several chunks. Don't use fputc.
* posix/tst-getopt-cancel.c: New test.
* posix/Makefile: Run it.
getopt_long contains an undocumented (AFAICT) feature in which, if you
put "W;" in the short-options list, then '-W foo' and '-Wfoo' are
treated as equivalent to '--foo'. This is implemented with a partial
second copy of the code for handling long options, and that code
increments optind one too many times when recovering from an ambiguous
abbreviated option, which can cause the main loop to walk past the end
of argv and crash.
I discovered this while writing a test case that tries to exercise all
of getopt's error reporting paths; I wouldn't be surprised to learn
that this feature is never used by real applications.
* posix/getopt.c (_getopt_internal_r): Don't increment
d->optind a second time when reporting ambiguous -W options.
This covers changes with little or no consequences when the code is
used in glibc.
* posix/getopt_int.h: Include getopt.h.
Use impl-namespace names for all arguments to _getopt_internal and
_getopt_internal_r.
Declare __ordering enum outside the struct.
Harmonize comments with gnulib.
* posix/getopt1.c: Simplify #ifdeffage at top of file. Remove
ELIDE_CODE logic entirely. Move inclusion of stdlib.h to
#ifdef TEST block and make unconditional. Do not define NULL.
* posix/getopt.c: Partial merge from gnulib, covering the
initial includes and global declarations, commentary, and
a couple of semantically-neutral code changes.
I'm not sure whether this is official GNU style now, but `...' quotes
haven't looked properly balanced in most people's terminal fonts since
2001ish? and gnulib has chosen to switch over to '...' quotes.
I'm merging this separately from the other changes in gnulib because
it's very mechanical.
* posix/getopt.c, posix/getopt.h, posix/getopt1.c, posix/getopt_int.h:
Use '...' instead of `...' for quotation marks inside
comments and strings.
glibc's implementation of getopt includes code to parse an environment
variable named _XXX_GNU_nonoption_argv_flags_ (where XXX is the
current process's PID in decimal); but all of it has been #ifdefed out
since 2001, with no official way to turn it back on.
According to commentary in our config.h.in, bash version 2.0 set this
environment variable to indicate argv elements that were the result of
glob expansion and therefore should not be treated as options, but the
feature was "disabled later" because "it caused problems". According
to bash's CHANGES file, "later" was release 2.01; it gives no more
detail about what the problems were.
Version 2.0 of bash was released on the last day of 1996, and version
2.01 in June of 1997. Twenty years later, I think it is safe to
assume that this environment variable isn't coming back.
* config.h.in (USE_NONOPTION_FLAGS): Remove.
* csu/init-first.c: Remove all #ifdef USE_NONOPTION_FLAGS blocks.
* sysdeps/mach/hurd/i386/init-first.c: Likewise.
* posix/getopt_int.h: Likewise.
* posix/getopt.c: Likewise. Also remove SWAP_FLAGS and the
__libc_argc and __libc_argv externs, which were only used by
#ifdef USE_NONOPTION_FLAGS blocks.
* posix/getopt_init.c: Remove file.
* posix/Makefile (routines): Remove getopt_init.
* include/getopt.h: Don't declare __getopt_initialize_environment.
* manual/getopt.texi: Remove mention of USE_NONOPTION_FLAGS in
a comment.
With the removal of divdi3 object from sparcv9-linux-gnu build, its
definition came from libgcc and its functions internall calls .udiv.
Since glibc also exports these symbols for compatibility reasons, it
will end up creating PLT calls internally in libc.so.
To avoid it, this patch uses the linker option --wrap to replace all
the internal libc.so .udiv calls to the wrapper __wrap_.udiv. Along
with strong alias in the udiv implementations, it makes linker do
local calls.
Checked on sparcv9-linux-gnu.
* sysdeps/sparc/sparc32/Makefile (libc.so-gnulib): New rule.
* sysdeps/sparc/sparc32/sparcv8/udiv.S (.udiv): Make a strong_alias
to __wrap_.udiv.
* sysdeps/sparc/sparc32/sparcv9/udiv.S (.udiv): Likewise.
* sysdeps/sparc/sparc32/udiv.S (.udiv): Likewise.
As noted in [1], divdi3 object is only exported in a handful ABIs
(i386, m68k, powerpc32, s390-32, and ia64), however it is built
for all current architectures regardless.
This patch refact the make rules for this object to so only the
aforementioned architectures that actually require it builds it.
Also, to avoid internal PLT calls to the exported symbol from the
module, glibc uses an internal header (symbol-hacks.h) which is
unrequired (and in fact breaks the build for architectures that
intend to get symbol definitions from libgcc.a). The patch also
changes it to create its own header (divdi3-symbol-hacks.h) and
adjust the architectures that require it accordingly.
I checked the build/check (with run-built-tests=no) on the
following architectures (which I think must cover all supported
ABI/builds) using GCC 6.3:
aarch64-linux-gnu
alpha-linux-gnu
arm-linux-gnueabihf
hppa-linux-gnu
ia64-linux-gnu
m68k-linux-gnu
microblaze-linux-gnu
mips64-n32-linux-gnu
mips-linux-gnu
mips64-linux-gnu
nios2-linux-gnu
powerpc-linux-gnu
powerpc-linux-gnu-power4
powerpc64-linux-gnu
powerpc64le-linux-gnu
s390x-linux-gnu
s390-linux-gnu
sh4-linux-gnu
sh4-linux-gnu-soft
sparc64-linux-gnu
sparcv9-linux-gnu
tilegx-linux-gnu
tilegx-linux-gnu-32
tilepro-linux-gnu
x86_64-linux-gnu
x86_64-linux-gnu-x32
i686-linux-gnu
I only saw one regression on sparcv9-linux-gnu (extra PLT call to
.udiv) which I address in next patch in the set. It also correctly
build SH with GCC 7.0.1 (without any regression from c89721e25d).
[1] https://sourceware.org/ml/libc-alpha/2017-03/msg00243.html
* sysdeps/i386/symbol-hacks.h: New file.
* sysdeps/m68k/symbol-hacks.h: New file.
* sysdeps/powerpc/powerpc32/symbol-hacks.h: New file.
* sysdeps/s390/s390-32/symbol-hacks.h: New file.
* sysdeps/unix/sysv/linux/i386/Makefile
[$(subdir) = csu] (sysdep_routines): New rule: divdi3 object.
[$(subdir) = csu] (sysdep-only-routines): Likewise.
[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
* sysdeps/unix/sysv/linux/m68k/Makefile
[$(subdir) = csu] (sysdep_routines): Likewise.
[$(subdir) = csu] (sysdep-only-routines): Likewise.
[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
[$(subdir) = csu] (sysdep_routines): Likewise.
[$(subdir) = csu] (sysdep-only-routines): Likewise.
[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
[$(subdir) = csu] (sysdep_routines): Likewise.
[$(subdir) = csu] (sysdep-only-routines): Likewise.
[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
* sysdeps/wordsize-32/Makefile: Remove file.
* sysdeps/wordsize-32/symbol-hacks.h: Definitions move to ...
* sysdeps/wordsize-32/divdi3-symbol-hacks.h: ... here.
May be tricky for otimized implementations to handle strings around
page boundary once, for instance, it is performed unaligned loads or
when maxlen is used as a hint for vectorized loops. The test cases
should unveil regression bugs on these cases.
To some extend do_random_tests in string/test-strnlen tests strings
placed at page end but it does not cover all cases. So this change
adds tests which consists of placing strings of varying sizes ending
at the page boundary. It also combines with different values of maxlen.
Tested on ppc64le and x86_64.
* string/test-strnlen.c (do_page_tests): New function
to check length of strings ending at the page boundary.
(test_main): Added call to the do_page_tests function.
Added strnlen POWER8 otimized for long strings. It delivers
same performance as POWER7 implementation for short strings.
This takes advantage of reasonably performing unaligned loads
and bit permutes to check the first 1-16 bytes until
quadword aligned, then checks in 64 bytes strides until unsafe,
then 16 bytes, truncating the count if need be.
Likewise, the POWER7 code is recycled for less than 32 bytes strings.
Tested on ppc64 and ppc64le.
* sysdeps/powerpc/powerpc64/multiarch/Makefile
(sysdep_routines): Add strnlen-power8.
* sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
(strnlen): Add __strnlen_power8 to list of strnlen functions.
* sysdeps/powerpc/powerpc64/multiarch/strnlen-power8.S:
New file.
* sysdeps/powerpc/powerpc64/multiarch/strnlen.c
(__strnlen): Add __strnlen_power8 to ifunc list.
* sysdeps/powerpc/powerpc64/power8/strnlen.S: New file.
This patch removes CALL_THREAD_FCT macro usage and its defition for
x86. For 32 bits it usage is only for force 16 stack alignment,
however stack is already explicit aligned in clone syscall. For
64 bits and x32 it just a function call and there is no need to
code it with inline assembly.
Checked on i686-linux-gnu, x86_64-linux-gnu, and x86_64-linux-gnu-x32.
* nptl/pthread_create.c (START_THREAD_DEFN): Remove
CALL_THREAD_FCT macro usage.
* sysdeps/i386/nptl/tls.h (CALL_THREAD_FCT): Remove definition.
* sysdeps/x86_64/nptl/tls.h (CALL_THREAD_FCT): Likewise.
* sysdeps/x86_64/32/nptl/tls.h: Remove file.
The new cond var implementation (ed19993b5b) removed all the
__ASSUME_{REQUEUE_PI,FUTEX_LOCK_PI} internal usage so there is no
need to keep defining it. This patch removes all USE_REQUEUE_PI
and __ASSUME_REQUEUE_PI. It is as follow up from BZ#18463.
Checked with a build for x86_64-linux-gnu, arm-linux-gnueabhf,
m68-linux-gnu, mips64-linux-gnu, and sparc64-linux-gnu.
* nptl/pthreadP.h (USE_REQUEUE_PI): Remove ununsed macro.
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_REQUEUE_PI): Likewise.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_REQUEUE_PI): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_REQUEUE_PI): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_REQUEUE_PI): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_REQUEUE_PI): Likewise.
This patch also clobbers r14 in TLS_LD, TLS_GD macros on 31bit.
This ensures that r14 isn't used to save and restore r12 while
r14 is clobbered by the bas-instruction.
As note:
r12 can't be added to clobber list as gcc would fail with:
error: PIC register clobbered by ‘12’ in ‘asm’
For 64bit this fix was already done in 2004 in the
commit b80af23ac6.
ChangeLog:
* sysdeps/s390/s390-32/tls-macros.h (TLS_LD, TLS_GD):
Clobber also r14.
When glibc is built with -fstack-check, trying to use posix_spawn can
lead to segfaults due to gcc internally probing stack memory too far.
The new spawn API will allocate a minimum of 1 page, but the stack
checking logic might probe a couple of pages. When it tries to walk
them, everything falls apart.
The gcc internal docs [1] state the default interval checking is one
page. Which means we need two pages (the current one, and the next
probed). No target currently defines it larger.
Further, it mentions that the default minimum stack size needed to
recover from an overflow is 4/8KiB for sjlj or 8/12KiB for others.
But some Linux targets (like mips and ppc) go up to 16KiB (and some
non-Linux targets go up to 24KiB).
Let's create each child with a minimum of 32KiB slack space to support
them all, and give us future breathing room.
No test is added as existing ones crash. Even a simple call is
enough to trigger the problem:
char *argv[] = { "/bin/ls", NULL };
posix_spawn(NULL, "/bin/ls", NULL, NULL, argv, NULL);
[1] https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gccint/Stack-Checking.html
Fixes a typo introduced in commit
be7991c070. This caused
mallopt(M_ARENA_MAX) as well as the environment variable
MALLOC_ARENA_MAX to not work as intended because it set the
wrong internal parameter.
[BZ #21338]
* malloc/malloc.c: Call do_set_arena_max for M_ARENA_MAX
instead of incorrect do_set_arena_test
The condition for declaration of long double functions in
math-finite.h was #ifdef __MATH_DECLARE_LDOUBLE before the
macroization of this file. After the macroization, it was incorreclty
changed to #if __MATH_DECLARE_LDOUBLE, which broke the build for arm.
* math/math.h: Fix check for __MATH_DECLARE_LDOUBLE.
* math/bits/math-finite.h: Likewise.
This patch fixes some test-errno-linux unexpected returns for the
tested syscalls on some older kernels (I saw it on a Linux 3.8 on
armv7l). Basically:
- inotify_add_watch: Linux v3.8 (676a0675c) removed the test to
check at least one valid bit in flags (to return EINVAL). It
was later added back in v3.9 (04df32fa1).
- quotactl: returns ENOSYS for kernels not configured with
CONFIG_QUOTA.
Checked on x86_64-linux-gnu and armv7l-linux-gnueabihf.
* sysdeps/unix/sysv/linux/test-errno-linux.c (do_test): Handle
non expected inotify_add_watch and quotactl return.
The implementation of __ieee754_rem_pio2l in ldbl-128, ldbl-128ibm,
and ldbl-96 return the type int32_t, whereas math_private.h declares
it as returning int. This patch changes the declaration to match the
declaration in thoses directories, as well as it changes the stub
implementation in math/e_rem_pio2l.c, similarly.
* math/e_rem_pio2l.c (__ieee754_rem_pio2l): Change return type
to int32_t.
* sysdeps/generic/math_private.h: Declare __ieee754_rem_pio2l
as returning int32_t.
This patch macroizes the declarations in math/bits/math-finite.h
similarly to what math/bits/mathcalls.h does. For each floating-point
type, the file is included once in math/math.h. This will reduce the
amount of repetitive boilerplate required when adding float128
versions of these declarations.
Tested for powerpc64le and s390x.
* math/math.h: Include bits/math-finite.h once per
floating-point type.
* math/bits/math-finite.h: Macroize all declarations by
floating-point type.
This patch fixes the regression added by 23d2770 for final address
overflow calculation. The subtraction of the considered size (16)
at line 120 is at wrong place, for sizes less than 16 subsequent
overflow check will not take in consideration an invalid size (since
the subtraction will be negative). Also, the lea instruction also
does not raise the carry flag (CF) that is used in subsequent jbe
to check for overflow.
The fix is to follow x86_64 logic from 3daef2c where the overflow
is first check and a sub instruction is issued. In case of resulting
negative size, CF will be set by the sub instruction and a NULL
result will be returned. The patch also add similar tests reported
in bug report.
Checked on i686-linux-gnu and x86_64-linux-gnu.
* string/test-memchr.c (do_test): Add BZ#21182 checks for address
near end of a page.
* sysdeps/i386/i686/multiarch/memchr-sse2.S (__memchr): Fix
overflow calculation.
termios.h should define IUCLC for UNIX98 and older XSI standards. The
sysdeps/unix/sysv/linux/alpha version defines it only if __USE_MISC,
so causing some conform/ tests to fail.
Other versions define it unconditionally (I* being a reserved
namespace for this header); the API should be consistent between
architectures in the absence of a clear reason for it to differ (and
given that a symbol is part of the API on two architectures, I don't
see any reason for the feature test macros required ever to differ
between those architectures), so this patch makes the alpha version
define it unconditionally as well. Two non-POSIX macros alongside it,
IMAXBEL and IUTF8, are also defined unconditionally on other
architectures, so this patch makes them consistent by defining them
unconditionally on alpha as well.
Tested (compilation only) with build-many-glibcs.py.
[BZ #21277]
* sysdeps/unix/sysv/linux/alpha/bits/termios.h (IUCLC): Define
unconditionally.
(IMAXBEL): Likewise.
(IUTF8): Likewise.
Since commit 8b9e9c3c0b, security_level replaces
is_secure. There were some old files need to be updated.
2017-03-23 Sunyeop Lee <sunyeop97@gmail.com>
* README.tunables: Updated descriptions.
* elf/dl-tunables.list: Fixed typo: SXID_NONE -> NONE.
* scripts/gen-tunables.awk: Updated the code related to the commit.
of the size and alignment is based on a trace of SPEC2006. Instead of
repeating the same copy over and over again like the existing tests, it times
several thousand different copies to more accurately estimate the overhead of
branch prediction.
* benchtests/Makefile (string-benchset): Add memcpy-random.
* benchtests/bench-memcpy-random.c: New file.
ISO C++ section 8.3.5 [dcl.fct] requires exception specifications
to appear before attribute specifiers in function declarations.
This patch fixes issues reported by stdio-common/check-installed-headers-cxx.
* stdio-common/printf.h (register_printf_modifier): Change the
order of __wur and __THROW.
(register_printf_type): Likewise.
* stdio-common/bug25.c: Include stdlib.h.
* support/tst-support_format_dns_packet.c: Include stdio.h,
stdlib.h, and string.h.
* support/tst-support_record_failure.c: Include string.h.
* support/tst-support_record_failure-2.sh: Adjust line number
expectations and correct a typo in an error message.
On Skylake server, _dl_runtime_resolve_avx512_opt is used to preserve
the first 8 vector registers. The code layout is
if only %xmm0 - %xmm7 registers are used
preserve %xmm0 - %xmm7 registers
if only %ymm0 - %ymm7 registers are used
preserve %ymm0 - %ymm7 registers
preserve %zmm0 - %zmm7 registers
Branch predication always executes the fallthrough code path to preserve
%zmm0 - %zmm7 registers speculatively, even though only %xmm0 - %xmm7
registers are used. This leads to lower CPU frequency on Skylake
server. This patch changes the fallthrough code path to preserve
%xmm0 - %xmm7 registers instead:
if whole %zmm0 - %zmm7 registers are used
preserve %zmm0 - %zmm7 registers
if only %ymm0 - %ymm7 registers are used
preserve %ymm0 - %ymm7 registers
preserve %xmm0 - %xmm7 registers
Tested on Skylake server.
[BZ #21258]
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve_opt):
Define only if _dl_runtime_resolve is defined to
_dl_runtime_resolve_sse_vex.
* sysdeps/x86_64/dl-trampoline.h (_dl_runtime_resolve_opt):
Fallthrough to _dl_runtime_resolve_sse_vex.
The test malloc/tst-interpose-nothread fails on s390x if built
with GCC 7 and glibc commit "Remove the str(n)dup inlines
from string/bits/string2.h. Although inlining"
(ae65d4f3c3) with output:
error: free: 0x3fffdffa010: invalid allocation index: 0 (not less than 0)
The destructor check_for_allocations in malloc/tst-interpose-aux.c is
called twice. One time after the test-child-process has finished successfully
and once after the test-parent-process finishes.
During the latter invocation, allocation_index == 0. GCC 7 is now inlining the
free function and calls unconditionally fail in get_header as
header->allocation_index (type == size_t) is always >= allocation_index (= 0).
Before the mentioned commit above, strdup was replaced by strlen, malloc and
memcpy. The malloc call was also inlined and allocation_index was set to one.
This patch moves the already existing compiler barrier before the invocation
of free.
ChangeLog:
* malloc/tst-interpose-aux.c (check_for_allocations):
Move compiler barrier before free.
POSIX specifies long as the type of elements of struct mq_attr. For
x32, they are __syscall_slong_t (i.e. long long). This patch XFAILs
the corresponding tests for x32 in the conformtest expectations (the
bug should not be closed without an actual fix).
Tested with build-many-glibcs.py.
[BZ #21279]
* sysdeps/unix/sysv/linux/x86_64/x32/Makefile
[$(subdir) = conform] (conformtest-xfail-conds): Update comment.
* conform/data/mqueue.h-data (mq_attr.mq_flags): XFAIL for
x86_64-x32-linux.
(mq_attr.mq_maxmsg): Likewise.
(mq_attr.mq_msgsize): Likewise.
(mq_attr.mq_curmsgs): Likewise.
MIPS o32 struct stat has the wrong type of st_rdev. This patch XFAILs
that test in the conformtest expectations for this case (the bug
should not be closed without an actual fix, however).
Tested with build-many-glibcs.py.
[BZ #21278]
* sysdeps/unix/sysv/linux/mips/mips32/Makefile
[$(subdir) = conform] (conformtest-xfail-conds): Update comment.
* conform/data/sys/stat.h-data (stat.st_rdev): XFAIL for
mips-o32-linux.
sysdeps/unix/sysv/linux/alpha/bits/termios.h defines NL2 and NL3 for
__USE_MISC || __USE_XOPEN. These should only be defined for
__USE_MISC as they are not part of any standard namespace. This patch
conditions them accordingly, matching the powerpc version of the
header (the only other one in glibc that defines these macros).
Tested (compilation only) with build-many-glibcs.py.
[BZ #21268]
* sysdeps/unix/sysv/linux/alpha/bits/termios.h (NL2): Define only
if [__USE_MISC]
(NL3): Likewise.
The ia64-specific clone2 call expects the base of the stack mapping and
the stack size as sep arguments, not an initial stack value as on other
stack-grows-down architectures. Reuse the stack-grows-up macro so we
pass in the right stack base.
Reported-by: Matt Turner <mattst88@gentoo.org>
If a link (say /proc/self/fd/0) pointing to a device, say /dev/pts/2, in a
parent mount namespace is passed to ttyname, and a /dev/pts/2 exists (in a
different devpts) in the current namespace, then it returns /dev/pts/2.
But /dev/pts/2 is NOT the current tty, it is a different file and device.
Detect this case and return ENODEV. Userspace can choose to take this as a hint
that the fd points to a tty device but to act on the fd rather than the link.
Signed-off-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>