Commit Graph

33074 Commits

Author SHA1 Message Date
Aurelien Jarno
3e4226ffdf Simplify getrlimit64.c
Changelog:
	* sysdeps/unix/sysv/linux/alpha/getrlimit64.c (__old_getrlimit64):
	Drop __RLIM_T_MATCHES_RLIM64_T conditional as __old_getrlimit64 is
	never defined in that case.
2018-01-02 21:05:29 +01:00
Aurelien Jarno
d35989be87 Fix typos in getrlimit64.c and setrlimit64.c
Changelog:
	* sysdeps/unix/sysv/linux/alpha/getrlimit64.c: Fix a typo in the
	comment.
	* sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Fix a typo in the
	comment.
	(settrlimit): Rename into setrlimit.
	(__sttrlimit): Rename into __setrlimit.
2018-01-02 21:05:29 +01:00
Joseph Myers
28fd6a44cb Update powerpc-nofpu libm-test-ulps.
* sysdeps/powerpc/nofpu/libm-test-ulps: Update.
2018-01-02 18:38:45 +00:00
Joseph Myers
a4933a1562 Update ARM libm-test-ulps.
* sysdeps/arm/libm-test-ulps: Update.
2018-01-02 18:37:06 +00:00
Joseph Myers
b9256ab6bb Reduce command length in regen-ulps.
I found that "make regen-ulps" failed when building with unmodified
GNU make 4.1, and an objdir /some/where/math/ longer than about 37
characters, because the list of tests in the "for run in $^" loop
exceeded the Linux kernel's MAX_ARG_STRLEN limit (131072 bytes) on the
length of a single argument passed to a command.

Some GNU/Linux distributions have a patch to make to work around this
limit (see e.g. Debian bug 688601), but clearly this ought to work
without needing such a patch.  This patch arranges for the shell loop
to be over the test names without a $(objdir) prefix, which reduces
the space used to less than half MAX_ARG_STRLEN.

(I think we ought to aim to get rid of bits/mathinline.h completely -
filing GCC bugs for any optimizations GCC can't currently do with
-ffast-math - which would mean we could halve the number of libm tests
run because separate inline function tests would no longer be needed.
However, with a long directory name even half the number of tests
could make this command exceed MAX_ARG_STRLEN without my patch.)

Tested regen-ulps on a system where it failed before this patch.

	* math/Makefile (run-regen-ulps): Add $(objpfx) to test name here.
	(regen-ulps): Use $(libm-tests) not $^ in shell loop.
2018-01-02 18:33:18 +00:00
Rajalakshmi Srinivasaraghavan
4cf82d2379 Update NEWS to add cosf and sincosf optimization 2018-01-02 21:49:49 +05:30
Aurelien Jarno
6a9dd7a7c5 Remove alpha specific fmax, fmin to fix sNaN handling [BZ #22660]
Various fmax and fmin function implementations mishandle sNaN
arguments:

(a) When both arguments are NaNs, the return value should be a qNaN,
but sometimes it is an sNaN if at least one argument is an sNaN.

(b) Under TS 18661-1 semantics, if either argument is an sNaN then the
result should be a qNaN (whereas if one argument is a qNaN and the
other is not a NaN, the result should be the non-NaN argument).
Various implementations treat sNaNs like qNaNs here.

One way to fix that is to detect the sNaN and add a special case. That
said there is no FPU instruction to do that, so it requires transfering
the FP value to an integer register and testing bits. This becomes quite
complicated so it's probably better to just use the generic versions of
these functions which just do that through issignaling.

Changelog:
	[BZ #22660]
	* sysdeps/alpha/fpu/s_fmax.S: Remove file.
	* sysdeps/alpha/fpu/s_fmaxf.S: Likewise.
	* sysdeps/alpha/fpu/s_fmin.S: Likewise.
	* sysdeps/alpha/fpu/s_fminf.S: Likewise.
2018-01-02 09:56:02 +01:00
Dmitry V. Levin
b05cb613e7 linux/arm: sync sys/ptrace.h with Linux 4.15 [BZ #22433]
Clone generic linux/sys/ptrace.h, remove x86-specific PTRACE_GETFPXREGS
and PTRACE_SETFPXREGS constants, add the following arm-specific
__ptrace_request constants: PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS,
PTRACE_GET_THREAD_AREA, PTRACE_SET_SYSCALL, PTRACE_GETCRUNCHREGS,
PTRACE_SETCRUNCHREGS, PTRACE_GETVFPREGS, PTRACE_SETVFPREGS,
PTRACE_GETHBPREGS, PTRACE_SETHBPREGS, and PTRACE_GETFDPIC.

Tested with strace.

* sysdeps/unix/sysv/linux/arm/sys/ptrace.h: New file.
2018-01-01 20:37:32 +00:00
Dmitry V. Levin
dbba87d531 elf: check for rpath emptiness before making a copy of it
* elf/dl-load.c (decompose_rpath): Check for rpath emptiness before
making a copy of it.
2018-01-01 20:37:32 +00:00
Joseph Myers
66ac23dec2 Update miscellaneous files from upstream sources.
This patch updates various files from their upstream sources.  This
brings in copyright date updates for some of those files.

Tested for x86_64.

	* manual/texinfo.tex: Update to version 2017-12-26.21 with
	trailing whitespace removed.
	* scripts/config.guess: Update to version 2018-01-01.
	* scripts/config.sub: Update to version 2018-01-01.
	* scripts/move-if-change: Update from gnulib.
2018-01-01 18:05:06 +00:00
Zack Weinberg
bf800d7023 Remove accidentally-committed junk file dev/null 2017-12-31 17:12:01 -08:00
Joseph Myers
09533208fe Update copyright dates not handled by scripts/update-copyrights.
I've updated copyright dates in glibc for 2018.  This is the patch for
the changes not generated by scripts/update-copyrights and subsequent
build / regeneration of generated files.

Please remember to include 2018 in the dates for any new files added
in future (which means updating any existing uncommitted patches you
have that add new files to use the new copyright dates in them).

	* NEWS: Update copyright dates.
	* catgets/gencat.c (print_version): Likewise.
	* csu/version.c (banner): Likewise.
	* debug/catchsegv.sh: Likewise.
	* debug/pcprofiledump.c (print_version): Likewise.
	* debug/xtrace.sh (do_version): Likewise.
	* elf/ldconfig.c (print_version): Likewise.
	* elf/ldd.bash.in: Likewise.
	* elf/pldd.c (print_version): Likewise.
	* elf/sotruss.sh: Likewise.
	* elf/sprof.c (print_version): Likewise.
	* iconv/iconv_prog.c (print_version): Likewise.
	* iconv/iconvconfig.c (print_version): Likewise.
	* locale/programs/locale.c (print_version): Likewise.
	* locale/programs/localedef.c (print_version): Likewise.
	* login/programs/pt_chown.c (print_version): Likewise.
	* malloc/memusage.sh (do_version): Likewise.
	* malloc/memusagestat.c (print_version): Likewise.
	* malloc/mtrace.pl: Likewise.
	* manual/libc.texinfo: Likewise.
	* nptl/version.c (banner): Likewise.
	* nscd/nscd.c (print_version): Likewise.
	* nss/getent.c (print_version): Likewise.
	* nss/makedb.c (print_version): Likewise.
	* posix/getconf.c (main): Likewise.
	* scripts/test-installation.pl: Likewise.
	* sysdeps/unix/sysv/linux/lddlibc4.c (main): Likewise.
2018-01-01 00:41:16 +00:00
Joseph Myers
688903eb3e Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2018-01-01 00:32:25 +00:00
Zack Weinberg
4f820792a6 Correct improper-inclusion check in bits/libio-ldbl.h.
The patch which moved libio.h proper into the bits directory also
changed the name of its guard macro, and I neglected to check whether
anything depended on that name.  It turns out that there is a
conditionally-used bits header that looks at it; this broke the libgcc
build on at least sparc64-*-* and sparcv9-*-*.

	* libio/bits/libio-ldbl.h: Correct check for improper
	inclusion.  Add own multiple include guard.
2017-12-31 08:57:32 -08:00
Aurelien Jarno
3e3c904dae elf: Check for empty tokens before dynamic string token expansion [BZ #22625]
The fillin_rpath function in elf/dl-load.c loops over each RPATH or
RUNPATH tokens and interprets empty tokens as the current directory
("./"). In practice the check for empty token is done *after* the
dynamic string token expansion. The expansion process can return an
empty string for the $ORIGIN token if __libc_enable_secure is set
or if the path of the binary can not be determined (/proc not mounted).

Fix that by moving the check for empty tokens before the dynamic string
token expansion. In addition, check for NULL pointer or empty strings
return by expand_dynamic_string_token.

The above changes highlighted a bug in decompose_rpath, an empty array
is represented by the first element being NULL at the fillin_rpath
level, but by using a -1 pointer in decompose_rpath and other functions.

Changelog:
	[BZ #22625]
	* elf/dl-load.c (fillin_rpath): Check for empty tokens before dynamic
	string token expansion. Check for NULL pointer or empty string possibly
	returned by expand_dynamic_string_token.
	(decompose_rpath): Check for empty path after dynamic string
	token expansion.
2017-12-30 22:01:32 +01:00
Dmitry V. Levin
c48831d0ee linux/x86: sync sys/ptrace.h with Linux 4.14 [BZ #22433]
Clone generic linux/sys/ptrace.h, add the following x86-specific
__ptrace_request constants: PTRACE_GET_THREAD_AREA,
PTRACE_SET_THREAD_AREA, PTRACE_ARCH_PRCTL, PTRACE_SYSEMU,
PTRACE_SYSEMU_SINGLESTEP, and PTRACE_SINGLEBLOCK.

[BZ #22433]
* sysdeps/unix/sysv/linux/x86/sys/ptrace.h: New file.
2017-12-29 16:10:39 +00:00
Dmitry V. Levin
ac583f5074 linux: update sys/ptrace.h comments
* sysdeps/unix/sysv/linux/sys/ptrace.h (__ptrace_request): Add comments
about PTRACE_PEEKSIGINFO, PTRACE_GETSIGMASK, PTRACE_SETSIGMASK, and
PTRACE_SECCOMP_GET_FILTER.  Update comments about PTRACE_SINGLESTEP
and PTRACE_SYSCALL.
* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h: Likewise.
2017-12-29 16:10:39 +00:00
Dmitry V. Levin
7e21972bde linux: move a shared part of sys/ptrace.h to bits/ptrace-shared.h
Move a shared part of sys/ptrace.h which is the same on all
architectures to a separate file.

* sysdeps/unix/sysv/linux/sys/ptrace.h: Include <bits/ptrace-shared.h>.
(__ptrace_setoptions, __ptrace_eventcodes, __ptrace_peeksiginfo_args,
__ptrace_peeksiginfo_flags, ptrace): Move to ...
* sysdeps/unix/sysv/linux/bits/ptrace-shared.h: ... new file.
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
bits/ptrace-shared.h.
* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h: Include
<bits/ptrace-shared.h>.
(__ptrace_setoptions, __ptrace_eventcodes, __ptrace_peeksiginfo_args,
__ptrace_peeksiginfo_flags, ptrace): Remove.
* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sys/ptrace.h: Likewise.
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h: Likewise.
2017-12-29 16:10:39 +00:00
Aurelien Jarno
72f29e3aab scandir: fix wrong assumption about errno [BZ #17804]
malloc and realloc may set errno to ENOMEM even if they are successful.
The scandir code wrongly assume that they do not change errno, this
causes scandir to fail with ENOMEM even if malloc succeed.

The code already handles that readdir might set errno by calling
__set_errno (0) to clear the error. Move that part at the end of the
loop to also take malloc and realloc into account.

Changelog:
	[BZ #17804]
	* dirent/scandir-tail.c (SCANDIR_TAIL): Move __set_errno (0) at the
	end of the loop. Improve comments.
2017-12-29 14:45:35 +01:00
Aurelien Jarno
54e4efc287 manual: clarify errno value on success [BZ #22615]
The current glibc manual is ambiguous about the errno value on success
and suggests that it is left unchanged. Some functions might and
sometimes do change the errno value, however they never set it to 0.

This patch from Zack Weinberg clarifies this section of the manual.

Changelog:
	[BZ #22615]
	* manual/errno.texi (Checking for Errors): Explicitly say that errno
	might be set on success.
2017-12-29 14:44:57 +01:00
Aurelien Jarno
f8aa69be44 tst-realloc: do not check for errno on success [BZ #22611]
POSIX explicitly says that applications should check errno only after
failure, so the errno value can be clobbered on success as long as it
is not set to zero.

Changelog:
	[BZ #22611]
	* malloc/tst-realloc.c (do_test): Remove the test checking that errno
	is unchanged on success.
2017-12-29 14:44:57 +01:00
Dmitry V. Levin
2bd86632b7 elf: remove redundant is_path argument
is_path argument is no longer used and could be safely removed.

* elf/dl-dst.h (DL_DST_COUNT): Remove is_path argument, all callers
updated.
* elf/dl-load.c (is_dst, _dl_dst_count, _dl_dst_substitute,
expand_dynamic_string_token): Likewise.
* sysdeps/generic/ldsodefs.h (_dl_dst_count, _dl_dst_substitute): Remove
is_path argument.
2017-12-27 22:12:51 +00:00
Dmitry V. Levin
1c36e1e6a5 elf: remove redundant code from is_dst
is_dst is called either by _dl_dst_count or by _dl_dst_substitute.
_dl_dst_count is called by DL_DST_COUNT only.
DL_DST_COUNT is called either by expand_dst with is_path == 0
or by expand_dynamic_string_token.
_dl_dst_substitute is called either from expand_dst with is_path == 0
or from expand_dynamic_string_token.
The latter function is called either from _dl_map_object with is_path == 0
or from fillin_rpath with is_path == 1 and name containing no ':'.

In any case (is_path && name[i] == ':') is always false and all code
depending on it can be safely removed.

* elf/dl-load.c (is_dst): Remove checks that is_path is set and name
contains ':', and all code depending on these checks.
2017-12-27 22:12:51 +00:00
Dmitry V. Levin
97f13188c9 elf: remove redundant code from _dl_dst_substitute
There are just two users of _dl_dst_substitute: one is expand_dst that
sets is_path argument to 0, another one is expand_dynamic_string_token.
The latter function also has just two users: one is _dl_map_object that
sets is_path argument to 0, another one is fillin_rpath that sets
is_path argument to 1 and name argument contains no ':'.

In any case (is_path && name[i] == ':') is always false and all code
depending on it can be safely removed.

* elf/dl-load.c (_dl_dst_substitute): Remove checks that is_path
is set and name contains ':', and all code depending on these checks.
2017-12-27 22:12:51 +00:00
Zack Weinberg
48a8f83281 Deprecate external use of libio.h and _G_config.h.
libio.h was originally the header for a set of supported GNU
extensions, but they have not been maintained as such in many years,
they are now standing in the way of improvements to stdio, and we
don't think there are any remaining external users.  _G_config.h was
never intended for public use, but predates the bits convention.
Move both of these headers into the bits directory and provide stubs
at top level which issue deprecation warnings.

The contents of (bits/)libio.h and (bits/)_G_config.h are still
exposed to external software via stdio.h; changing that requires more
complex surgery than I have time to attempt right now.

	* libio/libio.h, libio/_G_config.h: New stub headers which issue a
	deprecation warning and then include <bits/libio.h>, <bits/_G_config.h>
	respectively.
	* libio/libio.h: Rename the original version of this file to
	libio/bits/libio.h.  Error out if not included by stdio.h or the
	stub libio.h.
	* include/libio.h: Move to include/bits.  Forward to libio/bits/libio.h.
	* sysdeps/generic/_G_config.h: Move to top-level bits/.  Error out
	if not included by bits/libio.h or the stub _G_config.h.
	* sysdeps/unix/sysv/linux/_G_config.h: Move to
	sysdeps/unix/sysv/linux/bits.  Error out if not included by
	bits/libio.h or the stub _G_config.h.
	* libio/stdio.h: Include bits/libio.h, not libio.h.
	* libio/Makefile: Install bits/libio.h and bits/_G_config.h as
	well as libio.h and _G_config.h.

	* csu/init.c, libio/fmemopen.c, libio/iolibio.h, libio/oldfmemopen.c
	* libio/strfile.h, stdio-common/vfscanf.c
	* sysdeps/pthread/flockfile.c, sysdeps/pthread/funlockfile.c
	Include stdio.h, not _G_config.h nor libio.h.
	* libio/iofgetpos.c: Also rename fgetpos64 out of the way.
	* libio/iofsetpos.c: Also rename fsetpos64 out of the way.

	* scripts/check-installed-headers.sh: Skip libio.h and _G_config.h.
2017-12-24 09:03:28 -08:00
Dmitry V. Levin
a47ad79afa getrandom: fix comment [BZ #22347]
* stdlib/getrandom.c (getrandom): Fix comment.
* sysdeps/unix/sysv/linux/getrandom.c (getrandom): Likewise.
2017-12-23 14:27:30 +00:00
Aurelien Jarno
f5c558f3ec manual: fix a typo in strtoul description [BZ #21161]
Typo reported by Vincent Lefèvre: 'retrict' -> 'restrict'.

Changelog:
	[BZ #21161]
	* manual/arith.texi (strtoul): Fix a typo.
2017-12-23 15:01:13 +01:00
Aurelien Jarno
e65a5644e6 manual: fix finite description [BZ #22596]
That way it matches the standard and the behaviour of the finite
function.

Changelog:
	[BZ #22596]
	* manual/arith.texi (finite): Fix the description of the return
	value.
2017-12-23 11:48:28 +01:00
Eric Blake
ed8ae46bed Avoid gcc warnings on cygwin
* posix/regex_internal.c (re_string_reconstruct) [!RE_ENABLE_I18N]:
* posix/regexec.c (check_arrival_add_next_nodes) [!RE_ENABLE_I18N]:
Avoid unused variable.
2017-12-22 08:01:27 -08:00
Florian Weimer
bad7a0c81f copy_file_range: New function to copy file data
The semantics are based on the Linux system call, but a very close
emulation in user space is provided.
2017-12-22 10:55:40 +01:00
Szabolcs Nagy
6cb86fd21c Add aarch64 disable-multi-arch variant to build-many-glibcs.py
aarch64 has several ifuncs now so test it without multiarch support separately.

	* scripts/build-many-glibcs.py (Context.add_all_configs): Add
	disable-multi-arch variant to aarch64-linux-gnu.
2017-12-21 10:24:14 +00:00
Joseph Myers
41d11b15a1 Update miscellaneous files from upstream sources.
This patch updates various miscellaneous files from their upstream
sources.

Tested for x86_64, including "make pdf".

	* manual/texinfo.tex: Update to version 2017-12-18.20 with
	trailing whitespace removed.
	* scripts/config.guess: Update to version 2017-12-17.
	* scripts/config.sub: Update to version 2017-11-23.
	* scripts/install-sh: Update to version 2017-09-23.17.
	* scripts/move-if-change: Update to version 2017-09-13 06:45.
2017-12-20 22:28:20 +00:00
Adhemerval Zanella
8d2d239cb7 Simplify tile assembly definitions
With tilepro removal, the uppercase instruction are not anymore
required to be defines as potentially macros.  This is a
mechanical change done by the following shell script:

---
INSNS="LD LD4U ST ST4 BNEZ BEQZ BEQZT BGTZ CMPEQI CMPEQ CMOVEQZ CMOVNEZ"

FILES=$(find sysdeps/tile sysdeps/unix/sysv/linux/tile -iname *.S)

for insn in $INSNS; do
  repl=$(echo $insn | tr '[:upper:]' '[:lower:]')
  sed -i 's/\b'$insn'\b/'$repl'/g' $FILES
done
---

Checked with a build for tilegx-linux-gnu and tilegx-linux-gnu-32 with
and without the patch, there is no difference in generated binary with
a dissassemble.

	* sysdeps/tile/__longjmp.S (__longjmp): Use lowercase instructions.
	* sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise.
	* sysdeps/tile/_mcount.S (__mcount): Likewise.
	* sysdeps/tile/crti.S (_init, _fini): Likewise.
	* sysdeps/tile/crtn.S: Likewise.
	* sysdeps/tile/dl-start.S (_start): Likewise.
	* sysdeps/tile/dl-trampoline.S: Likewise.
	* sysdeps/tile/setjmp.S (__sigsetjmp): Likewise.
	* sysdeps/tile/start.S (_start): Likewise.
	* sysdeps/unix/sysv/linux/tile/clone.S (_clone): Likewise.
	* sysdeps/unix/sysv/linux/tile/getcontext.S (__getcontext): Likewise.
	* sysdeps/unix/sysv/linux/tile/ioctl.S (__ioctl): Likewise.
	* sysdeps/unix/sysv/linux/tile/setcontext.S (__setcontext): Likewise.
	* sysdeps/unix/sysv/linux/tile/swapcontext.S (__swapcontext): Likewise.
	* sysdeps/unix/sysv/linux/tile/syscall.S (syscall): Likewise.
	* sysdeps/unix/sysv/linux/tile/vfork.S (__vfork): Likewise.
2017-12-20 16:55:26 -02:00
Adhemerval Zanella
24d1d8ec9e Simplify tilegx sysdeps folder
With tilepro support removal we can now simplify internal tile support by
moving the directory structure to avoid the unnecessary directory levels
in tile/tilegx both on generic and linux folders.

Checked with a build for tilegx-linux-gnu and tilegx-linux-gnu-32 with
and without the patch, there is no difference in generated binary with
a dissassemble.

	* stdlib/bug-getcontext.c (do_test): Remove tilepro mention in
	comment.
	* sysdeps/tile/preconfigure: Remove tilegx folder.
	* sysdeps/tile/tilegx/Implies: Move definitions to ...
	* sysdeps/tile/Implies: ... here.
	* sysdeps/tile/tilegx/Makefile: Move rules to ...
	* sysdeps/tile/Makefile: ... here.
	* sysdeps/tile/tilegx/atomic-machine.h: Move definitions to ...
	* sysdeps/tile/atomic-machine.h: ... here.  Add include guards.
	* sysdeps/tile/tilegx/bits/wordsize.h: Move to ...
	* sysdeps/tile/bits/wordsize.h: ... here.
	* sysdeps/tile/tilegx/*: Move to ...
	* sysdeps/tile/*: ... here.
	* sysdeps/tile/tilegx/tilegx32/Implies: Move to ...
	* sysdeps/tile/tilegx32/Implies: ... here.
	* sysdeps/tile/tilegx/tilegx64/Implies: Move to ...
	* sysdeps/tile/tilegx64/Implies: ... here.
	* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: Move definitions
	to ...
	* sysdeps/unix/sysv/linux/tile/Makefile: ... here.
	* sysdeps/unix/sysv/linux/tile/tilegx/*: Move to ...
	* sysdeps/unix/sysv/linux/tile/*: ... here.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/*: Move to ...
	* sysdeps/unix/sysv/linux/tile/tilegx32/*: ... here.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/*: Move to ...
	* sysdeps/unix/sysv/linux/tile/tilegx64/*: ... here.
2017-12-20 16:55:26 -02:00
Adhemerval Zanella
ed95f61149 Remove tilepro-*-linux-gnu support
As from previous discussions [1] this patch removes tileprox-*-linux-gnu
support from GLIBC.  This patch is a straigthfoward one, which just remove
tilepro specific implementation and configurations (no sysdep simplfication
or reorganization is done).

	* README: Remove tilepro-*-linux-gnu from supported architecture.
	* scripts/build-many-glibcs.py: Likewise.
	* sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise.
	* sysdeps/tile/crti.S (PREINIT_FUNCTION): Likewise.
	* sysdeps/tile/dl-machine.h (ELF_MACHINE_NAME,
	elf_machine_matches_host, elf_machine_dynamic,
	elf_machine_load_address, elf_machine_runtime_setup, reloc_howto
	howto, elf_machine_rela): Likewise
	* sysdeps/tile/dl-start.S (_start): Likewise.
	* sysdeps/tile/memcmp.c (DBLALIGN, REVBYTES): Likewise.
	* sysdeps/tile/memcopy.h (MEMCPY_OK_FOR_FWD_MEMMOVE,
	MEMCPY_OK_FOR_FWD_MEMMOVE, op_t): Likewise.
	* sysdeps/tile/nptl/pthread_spin_lock.c (TNS, CMPTNS): Likewise.
	* sysdeps/tile/nptl/pthread_spin_trylock.c (TNS): Likewise.
	* sysdeps/tile/nptl/pthread_spin_unlock.c (pthread_spin_unlock):
	Likewise.
	* sysdeps/tile/nptl/tls.h (DB_THREAD_SELF): Likewise.
	* sysdeps/tile/preconfigure: Likewise.
	* sysdeps/tile/stackguard-macros.h (STACK_CHK_GUARD,
	POINTER_CHK_GUARD): Likewise.
	* sysdeps/tile/stackinfo.h (__stackinfo_sub): Likewise.
	* sysdeps/tile/start.S (_start): Likewise.
	* sysdeps/tile/tls-macros.h (TLS_GD_OFFSET, TLS_IE_OFFSET, _TLS_LE):
	Likewise.
	* sysdeps/tile/sysdep.h (REGSIZE): Likewise.
	(LD, LD4U, ST, ST4, BNEZ, BEQZ, BEQZT, BGTZ, CMPEQI, CMPEQ, CMOVEQZ,
	CMOVNEZ): Remove.
	* sysdeps/unix/sysv/linux/tile/bits/environments.h
	(__ILP32_OFF32_CFLAGS, __ILP32_OFFBIG_CFLAGS, __ILP32_OFF32_LDFLAGS,
	__ILP32_OFFBIG_LDFLAGS, __LP64_OFF64_CFLAGS, __LP64_OFF64_LDFLAGS):
	Likewise.
	* sysdeps/tile/wordcopy.c (DBLALIGN): Likewise.
	* sysdeps/tile/tilepro/Implies: Remove file.
	* sysdeps/tile/tilepro/atomic-machine.h: Likewise.
	* sysdeps/tile/tilepro/bits/wordsize.h: Likewise.
	* sysdeps/tile/tilepro/memchr.c: Likewise.
	* sysdeps/tile/tilepro/memcpy.S: Likewise.
	* sysdeps/tile/tilepro/memset.c: Likewise.
	* sysdeps/tile/tilepro/memusage.h: Likewise.
	* sysdeps/tile/tilepro/rawmemchr.c: Likewise.
	* sysdeps/tile/tilepro/strchr.c: Likewise.
	* sysdeps/tile/tilepro/strchrnul.c: Likewise.
	* sysdeps/tile/tilepro/strlen.c: Likewise.
	* sysdeps/tile/tilepro/strrchr.c: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/Implies: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/jmp_buf-macros.h: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: Likewise.
	* sysdeps/unix/sysv/linux/tile/sysconf.c (linux_sysconf): Remove
	tilepro mention in comment.

[1] https://sourceware.org/ml/libc-alpha/2017-12/msg00038.html
2017-12-20 16:55:24 -02:00
Adhemerval Zanella
4735850f7a nptl: Consolidate pthread_{timed,try}join{_np}
This patch consolidates the pthread_join and gnu extensions to avoid
code duplication.  The function pthread_join, pthread_tryjoin_np, and
pthread_timedjoin_np are now based on pthread_timedjoin_ex.

It also fixes some inconsistencies on ESRCH, EINVAL, EDEADLK handling
(where each implementation differs from each other) and also on
clenup handler (which now always use a CAS).

Checked on i686-linux-gnu and x86_64-linux-gnu.

	* nptl/pthreadP.h (__pthread_timedjoin_np): Define.
	* nptl/pthread_join.c (pthread_join): Use __pthread_timedjoin_np.
	* nptl/pthread_tryjoin.c (pthread_tryjoin): Likewise.
	* nptl/pthread_timedjoin.c (cleanup): Use CAS on argument setting.
	(pthread_timedjoin_np): Define internal symbol and common code from
	pthread_join.
	* sysdeps/unix/sysv/linux/i386/lowlevellock.h (__lll_timedwait_tid):
	Remove superflous checks.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (__lll_timedwait_tid):
	Likewise.

Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2017-12-20 11:32:54 -02:00
Szabolcs Nagy
8bfb461e20 aarch64: update libm-test-ulps
* sysdeps/aarch64/libm-test-ulps: Update.
2017-12-20 12:07:10 +00:00
Adhemerval Zanella
4e00196912 aarch64: fix memset with --disable-multi-arch
* sysdeps/aarch64/memset.S (MEMSET): Define.
2017-12-20 12:05:32 +00:00
Florian Weimer
8a26ad2ab7 nptl: Implement pthread_self in libc.so [BZ #22635]
All binaries use TLS and thus need a properly set up TCB, so we can
simply return its address directly, instead of forwarding to the
libpthread implementation from libc.

For versioned symbols, the dynamic linker checks that the soname matches
the name supplied by the link editor, so a compatibility symbol in
libpthread is needed.

To avoid linking against the libpthread function in all cases, we would
have to bump the symbol version of libpthread in libc.so and supply a
compat symbol.  This commit does not do that because the function
implementation is so small, so the overhead by two active copies of the
same function might well be smaller than the increase in symbol table
size.
2017-12-20 11:42:04 +01:00
Arnold Robbins
5069ff3284 regex: Fix spelling in comments.
Fix the spelling in various comments throughout the
regex implementation. These changes are also present
in gnulib and will be integrated there also, see:
https://sourceware.org/ml/libc-alpha/2017-12/msg00688.html
2017-12-19 19:28:21 -08:00
Gabriel F. T. Gomes
c85e54ac6c Provide a C++ version of iseqsig (bug 22377)
In C++ mode, __MATH_TG cannot be used for defining iseqsig, because
__MATH_TG relies on __builtin_types_compatible_p, which is a C-only
builtin.  This is true when float128 is provided as an ABI-distinct type
from long double.

Moreover, the comparison macros from ISO C take two floating-point
arguments, which need not have the same type.  Choosing what underlying
function to call requires evaluating the formats of the arguments, then
selecting which is wider.  The macro __MATH_EVAL_FMT2 provides this
information, however, only the type of the macro expansion is relevant
(actually evaluating the expression would be incorrect).

This patch provides a C++ version of iseqsig, in which only the type of
__MATH_EVAL_FMT2 (__typeof or decltype) is used as a template parameter
for __iseqsig_type.  This function calls the appropriate underlying
function.

Tested for powerpc64le and x86_64.

	[BZ #22377]
	* math/Makefile [C++] (tests): Add test for iseqsig.
	* math/math.h [C++] (iseqsig): New implementation, which does
	not rely on __MATH_TG/__builtin_types_compatible_p.
	* math/test-math-iseqsig.cc: New file.
	* sysdeps/powerpc/powerpc64le/Makefile
	(CFLAGS-test-math-iseqsig.cc): New variable.
2017-12-19 23:26:59 -02:00
Dmitry V. Levin
10e93d9687 elf: remove redundant __libc_enable_secure check from fillin_rpath
There are just two users of fillin_rpath: one is decompose_rpath that
sets check_trusted argument to 0, another one is _dl_init_paths that
sets check_trusted argument to __libc_enable_secure and invokes
fillin_rpath only when LD_LIBRARY_PATH is non-empty.

Starting with commit
glibc-2.25.90-512-gf6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d,
LD_LIBRARY_PATH is ignored for __libc_enable_secure executables,
so check_trusted argument of fillin_rpath is always zero.

* elf/dl-load.c (is_trusted_path): Remove.
(fillin_rpath): Remove check_trusted argument and its use,
all callers changed.
2017-12-19 21:53:11 +00:00
H.J. Lu
ce16eb52c0 Replece LDFLAGS-* = $(no-pie-ldflag) with tst-*-no-pie = yes [BZ #22630]
After

commit 9d7a3741c9
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Dec 15 16:59:33 2017 -0800

    Add --enable-static-pie configure option to build static PIE [BZ #19574]

and

commit 00c714df39
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Dec 18 12:24:26 2017 -0800

    Pass -no-pie to GCC only if GCC defaults to PIE [BZ #22614]

$(no-pie-ldflag) is no longer effective since no-pie-ldflag is defined
to -no-pie only if GCC defaults to PIE.  When --enable-static-pie is
used to configure glibc build and GCC doesn't default to PIE. no-pie-ldflag
is undefined and these tests:

elf/Makefile:LDFLAGS-tst-dlopen-aout = $(no-pie-ldflag)
elf/Makefile:LDFLAGS-tst-prelink = $(no-pie-ldflag)
elf/Makefile:LDFLAGS-tst-main1 = $(no-pie-ldflag)
gmon/Makefile:LDFLAGS-tst-gmon := $(no-pie-ldflag)

may fail to link.  This patch replaces "-pie" with

$(if $($(@F)-no-pie),$(no-pie-ldflag),-pie)

and repleces

LDFLAGS-* = $(no-pie-ldflag)

with

tst-*-no-pie = yes

so that tst-dlopen-aout, tst-prelink, tst-main1 and tst-gmon are always
built as non-PIE, with and without --enable-static-pie, regardless if
GCC defaults to PIE or non-PIE.

Tested with build-many-glibcs.py without --enable-static-pie as well as
with --enable-static-pie for x86_64, x32 and i686.

	[BZ #22630]
	* Makeconfig (link-pie-before-libc): Replace -pie with
	$(if $($(@F)-no-pie),$(no-pie-ldflag),-pie).
	* elf/Makefile (LDFLAGS-tst-dlopen-aout): Removed.
	(tst-dlopen-aout-no-pie): New.
	(LDFLAGS-tst-prelink): Removed.
	(tst-prelink-no-pie): New.
	(LDFLAGS-tst-main1): Removed.
	(tst-main1-no-pie): New.
	* gmon/Makefile (LDFLAGS-tst-gmon): Removed.
	(tst-gmon-no-pie): New.
2017-12-19 13:53:11 -08:00
H.J. Lu
126adc89d8 Document that --enable-static-pie implies PIE
To build static PIE, all .o files are compiled with -fPIE.  Since
--enable-static-pie is designed to provide additional security hardening
benefits, it also implies that glibc programs and tests are created as
dynamic position independent executables (PIE) by default for better
security hardening.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>

	* manual/install.texi: Document that --enable-static-pie
	implies PIE.
	* INSTALL: Regenerated.
2017-12-19 13:51:16 -08:00
Bernd Edlinger
648615e13f Avoid signed shift overflow in pow (bug 21309).
As noted in bug 21309, dbl-64/e_pow.c contains signed int shifts that,
although the shift count is in the range [0, 31], shift bits into and
beyond the sign bit and so are undefined in ISO C.  Although this is
defined in GNU C, this patch from the bug cleans up the code to avoid
those shifts.

Tested for x86_64.

	[BZ #21309]
	* sysdeps/ieee754/dbl-64/e_pow.c (checkint): Make m and n
	unsigned.
2017-12-19 18:41:01 +00:00
Joseph Myers
f1e005022e Revert exp reimplementation (causes test failures).
Revert:

	2017-12-19  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/x86_64/fpu/libm-test-ulps: Update.

	2017-12-19  Patrick McGehearty  <patrick.mcgehearty@oracle.com>

	* sysdeps/ieee754/dbl-64/e_exp.c: Include <math-svid-compat.h> and
	<errno.h>.  Include "eexp.tbl".
	(half): New constant.
	(one): Likewise.
	(__ieee754_exp): Rewrite.
	(__slowexp): Remove prototype.
	* sysdeps/ieee754/dbl-64/eexp.tbl: New file.
	* sysdeps/ieee754/dbl-64/slowexp.c: Remove file.
	* sysdeps/i386/fpu/slowexp.c: Likewise.
	* sysdeps/ia64/fpu/slowexp.c: Likewise.
	* sysdeps/m68k/m680x0/fpu/slowexp.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-avx.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-fma.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c: Likewise.
	* sysdeps/generic/math_private.h (__slowexp): Remove prototype.
	* sysdeps/ieee754/dbl-64/e_pow.c: Remove mention of slowexp.c in
	comment.
	* sysdeps/powerpc/power4/fpu/Makefile [$(subdir) = math]
	(CPPFLAGS-slowexp.c): Remove variable.
	* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
	Remove slowexp-fma, slowexp-fma4 and slowexp-avx.
	(CFLAGS-slowexp-fma.c): Remove variable.
	(CFLAGS-slowexp-fma4.c): Likewise.
	(CFLAGS-slowexp-avx.c): Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_exp-avx.c (__slowexp): Do not
	define as macro.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__slowexp): Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__slowexp): Likewise.
	* math/Makefile (type-double-routines): Remove slowexp.
	* manual/probes.texi (slowexp_p6): Remove.
	(slowexp_p32): Likewise.
2017-12-19 18:11:37 +00:00
Adhemerval Zanella
e184ac3a10 glob: Silence warning about void pointer arithmetic
Sync with gnulib 0e14f025d2.

Checked on x86_64-linux-gnu.

	* lib/glob.c (glob): Use a 'char *', not a 'void *', in pointer
	arithmetic.

Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2017-12-19 15:52:12 -02:00
Adhemerval Zanella
d711a00f93 glob: pacify fuzzer for mempcpy
Problem reported by Tim Rühsen [1].  Sync with gnulib 0e14f025d2.

[1] https://lists.gnu.org/archive/html/bug-gnulib/2017-10/msg00054.html

Checked on x86_64-linux-gnu.

    * lib/glob.c (glob): Do not pass NULL to mempcpy.

Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2017-12-19 15:52:12 -02:00
Joseph Myers
6f58c10ded Update x86_64 libm-test-ulps.
* sysdeps/x86_64/fpu/libm-test-ulps: Update.
2017-12-19 17:38:41 +00:00
Patrick McGehearty
6fd0a3c6a8 Improve __ieee754_exp() performance by greater than 5x on sparc/x86.
These changes will be active for all platforms that don't provide
their own exp() routines. They will also be active for ieee754
versions of ccos, ccosh, cosh, csin, csinh, sinh, exp10, gamma, and
erf.

Typical performance gains is typically around 5x when measured on
Sparc s7 for common values between exp(1) and exp(40).

Using the glibc perf tests on sparc,
      sparc (nsec)    x86 (nsec)
      old     new     old     new
max   17629   395    5173     144
min     399    54      15      13
mean   5317   200    1349      23

The extreme max times for the old (ieee754) exp are due to the
multiprecision computation in the old algorithm when the true value is
very near 0.5 ulp away from an value representable in double
precision. The new algorithm does not take special measures for those
cases. The current glibc exp perf tests overrepresent those values.
Informal testing suggests approximately one in 200 cases might
invoke the high cost computation. The performance advantage of the new
algorithm for other values is still large but not as large as indicated
by the chart above.

Glibc correctness tests for exp() and expf() were run. Within the
test suite 3 input values were found to cause 1 bit differences (ulp)
when "FE_TONEAREST" rounding mode is set. No differences in exp() were
seen for the tested values for the other rounding modes.
Typical example:
exp(-0x1.760cd2p+0)  (-1.46113312244415283203125)
 new code:    2.31973271630014299393707e-01   0x1.db14cd799387ap-3
 old code:    2.31973271630014271638132e-01   0x1.db14cd7993879p-3
    exp    =  2.31973271630014285508337 (high precision)
Old delta: off by 0.49 ulp
New delta: off by 0.51 ulp

In addition, because ieee754_exp() is used by other routines, cexp()
showed test results with very small imaginary input values where the
imaginary portion of the result was off by 3 ulp when in upward
rounding mode, but not in the other rounding modes.  For x86, tgamma
showed a few values where the ulp increased to 6 (max ulp for tgamma
is 5). Sparc tgamma did not show these failures.  I presume the tgamma
differences are due to compiler optimization differences within the
gamma function.The gamma function is known to be difficult to compute
accurately.

	* sysdeps/ieee754/dbl-64/e_exp.c: Include <math-svid-compat.h> and
	<errno.h>.  Include "eexp.tbl".
	(half): New constant.
	(one): Likewise.
	(__ieee754_exp): Rewrite.
	(__slowexp): Remove prototype.
	* sysdeps/ieee754/dbl-64/eexp.tbl: New file.
	* sysdeps/ieee754/dbl-64/slowexp.c: Remove file.
	* sysdeps/i386/fpu/slowexp.c: Likewise.
	* sysdeps/ia64/fpu/slowexp.c: Likewise.
	* sysdeps/m68k/m680x0/fpu/slowexp.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-avx.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-fma.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c: Likewise.
	* sysdeps/generic/math_private.h (__slowexp): Remove prototype.
	* sysdeps/ieee754/dbl-64/e_pow.c: Remove mention of slowexp.c in
	comment.
	* sysdeps/powerpc/power4/fpu/Makefile [$(subdir) = math]
	(CPPFLAGS-slowexp.c): Remove variable.
	* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
	Remove slowexp-fma, slowexp-fma4 and slowexp-avx.
	(CFLAGS-slowexp-fma.c): Remove variable.
	(CFLAGS-slowexp-fma4.c): Likewise.
	(CFLAGS-slowexp-avx.c): Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_exp-avx.c (__slowexp): Do not
	define as macro.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__slowexp): Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__slowexp): Likewise.
	* math/Makefile (type-double-routines): Remove slowexp.
	* manual/probes.texi (slowexp_p6): Remove.
	(slowexp_p32): Likewise.
2017-12-19 17:27:31 +00:00