aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2019-10-01Sync "language", "lang_name", "territory", "country_name" with CLDR/langtableMike FABIAN70-88/+206
Sync these values with CLDR and langtable as much as possible. Add missing values. If possible, take the values from CLDR, if CLDR does not have it, take it from langtable. The values from langtable which are not from CLDR are from Wikipedia or native speakers.
2019-09-30Use binutils 2.33 branch in build-many-glibcs.py.Joseph Myers2-1/+6
This patch makes build-many-glibcs.py default to binutils 2.33 branch. Tested with build-many-glibcs.py (compilers and glibcs builds). * scripts/build-many-glibcs.py (Context.checkout): Default binutils version to 2.33 branch.
2019-10-01y2038: Provide conversion helpers for struct __timespec64Lukasz Majewski2-0/+56
Those functions allow easy conversion between Y2038 safe struct __timespec64 and other time related data structures (like struct timeval or struct timespec). * include/time.h (valid_timeval_to_timespec64): Add. * include/time.h (valid_timespec_to_timespec64): Likewise. * include/time.h (valid_timespec64_to_timespec): Likewise. * include/time.h (valid_timespec64_to_timeval): Likewise.
2019-09-30Update bits/mman.h constants and tst-mman-consts.py for Linux 5.3.Joseph Myers4-1/+14
The Linux 5.3 uapi headers have some rearrangement relating to MAP_* constants, which includes the effect of adding definitions of MAP_SYNC on powerpc and sparc. This patch updates the corresponding glibc bits/mman.h headers accordingly, and updates the Linux kernel version number in tst-mman-consts.py to reflect that these constants are now current with that kernel version. Tested with build-many-glibcs.py. * sysdeps/unix/sysv/linux/powerpc/bits/mman.h [__USE_MISC] (MAP_SYNC): New macro. * sysdeps/unix/sysv/linux/sparc/bits/mman.h [__USE_MISC] (MAP_SYNC): Likewise. * sysdeps/unix/sysv/linux/tst-mman-consts.py (main): Update Linux kernel version number to 5.3.
2019-09-30Add helper script for glibc debuggingGabriel F. T. Gomes1-1/+157
This patch adds a new make rule that generates a helper script for debugging glibc test cases. The new script, debugglibc.sh, is similar to testrun.sh, in the sense that it allows the execution of the specified test case, however, it opens the test case in GDB, setting the library path the same way that testrun.sh does. The commands are based on the instructions on the wiki for glibc debugging [1,2]. By default, the script tells GDB to load the test case for symbol information, so that, when a breakpoint is hit, the call stack is displayed correctly (instead of printing lots of '??'s). For instance, after running 'make' and 'make check', one could do the following: $ ./debugglibc.sh nptl/tst-exec1 -b pthread_join Reading symbols from /home/gabriel/build/powerpc64le/glibc//elf/ld.so...done. Breakpoint 1 at 0x1444 add symbol table from file "nptl/tst-exec1" [Thread debugging using libthread_db enabled] Using host libthread_db library "/home/gabriel/build/powerpc64le/glibc//nptl_db/libthread_db.so.1". Breakpoint 1, 0x00007ffff7fb1444 in _dl_start_user () from /home/gabriel/build/powerpc64le/glibc/elf/ld.so Breakpoint 2 at 0x7ffff7f49d48: file pthread_join.c, line 23. Notice that the script will always start GDB with the program running and halted at _dl_start_user. So, in order to reach the actual breakpoint of interest, one should hit 'c', not 'r': >>> c Continuing. [New Thread 0x7ffff7d1f180 (LWP 76443)] [Switching to Thread 0x7ffff7d1f180 (LWP 76443)] Thread 2 "ld.so" hit Breakpoint 2, __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24 24 return __pthread_timedjoin_ex (threadid, thread_return, NULL, true); Then inspect the call stack with 'bt', as usual, and see symbols from both the test case and from the libraries themselves: >>> bt #0 __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24 #1 0x0000000010001f4c in tf (arg=<optimized out>) at tst-exec1.c:37 #2 0x00007ffff7f487e8 in start_thread (arg=0x7ffff7510000) at pthread_create.c:479 #3 0x00007ffff7e523a8 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:82 Tested for powerpc64le and x86_64. [1] https://sourceware.org/glibc/wiki/Debugging/Loader_Debugging [2] https://sourceware.org/glibc/wiki/Testing/Builds#Required_gdb_setup Reviewed-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Dmitry V. Levin <ldv@altlinux.org> Reviewed-by: Joseph Myers <joseph@codesourcery.com> Reviewed-by: Andreas Schwab <schwab@suse.de>
2019-09-27[powerpc] Rename fesetenv_mode to fesetenv_controlPaul A. Clarke6-6/+17
fesetenv_mode is used variously to write the FPSCR exception enable bits and rounding mode bits. These are referred to as the control bits in the POWER ISA. Change the name to be reflective of its current and expected use, and match up well with fegetenv_control.
2019-09-27[powerpc] libc_feholdsetround_noex_ppc_ctx: optimize FPSCR writePaul A. Clarke2-1/+7
libc_feholdsetround_noex_ppc_ctx currently performs: 1. Read FPSCR, save to context. 2. Create new FPSCR value: clear enables and set new rounding mode. 3. Write new value to FPSCR. Since other bits just pass through, there is no need to write them. Instead, write just the changed values (enables and rounding mode), which can be a bit more efficient.
2019-09-27[powerpc] Rename fegetenv_status to fegetenv_controlPaul A. Clarke8-9/+21
fegetenv_status is used variously to retrieve the FPSCR exception enable bits, rounding mode bits, or both. These are referred to as the control bits in the POWER ISA. FPSCR status bits are also returned by the 'mffs' and 'mffsl' instructions, but they are uniformly ignored by all uses of fegetenv_status. Change the name to be reflective of its current and expected use. Reviewed-By: Paul E Murphy <murphyp@linux.ibm.com>
2019-09-27[powerpc] __fesetround_inline optimizationsPaul A. Clarke2-3/+21
On POWER9, use more efficient means to update the 2-bit rounding mode via the 'mffscrn' instruction (instead of two 'mtfsb0/1' instructions or one 'mtfsfi' instruction that modifies 4 bits). Suggested-by: Paul E. Murphy <murphyp@linux.ibm.com> Reviewed-By: Paul E Murphy <murphyp@linux.ibm.com>
2019-09-27[powerpc] libc_feupdateenv_test: optimize FPSCR accessPaul A. Clarke3-2/+24
ROUND_TO_ODD and a couple of other places use libc_feupdateenv_test to restore the rounding mode and exception enables, preserve exception flags, and test whether given exception(s) were generated. If the exception flags haven't changed, then it is sufficient and a bit more efficient to just restore the rounding mode and enables, rather than writing the full Floating-Point Status and Control Register (FPSCR). Reviewed-by: Paul E. Murphy <murphyp@linux.ibm.com>
2019-09-27[powerpc] fenv_private.h clean upPaul A. Clarke9-117/+67
fenv_private.h includes unused functions, magic macro constants, and some replicated common code fragments. Remove unused functions, replace magic constants with constants from fenv_libc.h, and refactor replicated code. Suggested-by: Paul E. Murphy <murphyp@linux.ibm.com> Reviewed-By: Paul E Murphy <murphyp@linux.ibm.com>
2019-09-27Add TCP_TX_DELAY from Linux 5.3 to netinet/tcp.h.Joseph Myers2-0/+5
This patch adds the new TCP_TX_DELAY constant from Linux 5.3 to sysdeps/gnu/netinet/tcp.h. Tested for x86_64. * sysdeps/gnu/netinet/tcp.h (TCP_TX_DELAY): New macro.
2019-09-26y2038: Introduce struct __timespec64 - new internal glibc typeLukasz Majewski2-0/+28
This type is a glibc's "internal" type similar to struct timespec but whose tv_sec field is a __time64_t rather than a time_t, which makes it Y2038-proof and usable to pass syscalls between user code and Y2038-proof kernel. To support passing this structure to the kernel - the unnamed 32 bit padding bit-field has been introduced. The placement of it depends on the endianness of the SoC. Tested on x86_64 and ARM.
2019-09-26auto-changelog: Remove latin1 from codecsSiddhesh Poyarekar2-1/+6
Bruno Haible had pointed out that latin1 is a subset of cp1252 and is hence redundant. I forgot to remove it back then.
2019-09-25Set the expects flags to clock_nanosleepAdhemerval Zanella3-1/+4
It moves the missing CFLAGS from rt/Makefile to time/Makefile missing from 7b5af2d8f2a2b (Finish move of clock_* functions to libc. [BZ #24959]). Checked on powerpc64le-linux-gnu. * rt/Makefile (CFLAGS-clock_nanosleep.c): Move to ... * time/Makefile (CFLAGS-clock_nanosleep.c): ... here.
2019-09-25Fix tst-sigcontext-get_pc rule name from a43565ac447b1Adhemerval Zanella2-1/+7
Checked on powerpc64le-linux-gnu. * sysdeps/unix/sysv/linux/Makefile (CFLAGS-tst-sigcontextinfo-get_pc.c): Rename to CFLAGS-tst-sigcontext-get_pc.c.
2019-09-24inet/net-internal.h: Fix uninitalised clntudp_call() variableAlistair Francis2-0/+17
The total_deadline variable inside the clntudp_call() function inside sunrpc/clnt_udp.c can cause uninitalised variable warnings when building with GCC 8.3 or 9.2 on a platform with a 64-bit tv_nsec on a 32-bit architecture. To fix the warning let's use the DIAG_* macros to hide the warning. A GCC bug case has also been submitted: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91691 2019-09-24 Alistair Francis <alistair.francis@wdc.com> * inet/net-internal.h: Fix uninitalised clntudp_call() variable. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-09-24Fix vDSO initialization on arm and mipsAndreas Schwab3-5/+18
2019-09-20Script to generate ChangeLog-like output from git logSiddhesh Poyarekar5-0/+1244
Co-authored-by: Gabriel F. T. Gomes <gabriel@inconstante.net.br> Reviewed-by: Gabriel F. T. Gomes <gabriel@inconstante.net.br> Reviewed-by: Joseph Myers <joseph@codesourcery.com> The utility of a ChangeLog file has been discussed in various mailing list threads and GNU Tools Cauldrons in the past years and the general consensus is that while the file may have been very useful in the past when revision control did not exist or was not as powerful as it is today, it's current utility is fast diminishing. Further, the ChangeLog format gets in the way of modernisation of processes since it almost always results in rewriting of a commit, thus preventing use of any code review tools to automatically manage patches in the glibc project. There is consensus in the glibc community that documentation of why a change was done (i.e. a detailed description in a git commit) is more useful than what changed (i.e. a ChangeLog entry) since the latter can be deduced from the patch. The GNU community would however like to keep the option of ascertaining what changed through a ChangeLog-like output and as a compromise, it was proposed that a script be developed that generates this output. The script below is the result of these discussions. This script takes two git revisions references as input and generates the git log between those revisions in a form that resembles a ChangeLog. Its capabilities and limitations are listed in a comment in the script. On a high level it is capable of parsing C code and telling what changed at the top level, but not within constructs such as functions. Design ------ At a high level, the script analyses the raw output of a VCS, parses the source files that have changed and attempts to determine what changed. The script driver needs three distinct components to be fully functional for a repository: - A vcstocl_quirks.py file that helps it parse weird patterns in sources that may result from preprocessor defines. - A VCS plugin backend; the git backend is implemented for glibc - A programming language parser plugin. C is currently implemented. Additional programming language parsers can be added to give more detailed output for changes in those types of files. For input in languages other than those that have a parser, the script only identifies if a file has been added, removed, modified, permissions changed, etc. but cannot understand the change in content. The C Parser ------------ The C parser is capable of parsing C programs with preprocessor macros in place, as if they were part of the language. This presents some challenges with parsing code that expands macros on the fly and to help work around that, a vcstocl_quirks.py file has transformations to ease things. The C parser currently can identify macro definitions and scopes and all global and static declarations and definitions. It cannot parse (and compare) changes inside functions yet, it could be a future enhancement if the need for it arises. Testing ------- The script has been tested with the glibc repository up to glibc-2.29 and also in the past with emacs. While it would be ideal to have something like this in a repository like gnulib, that should not be a bottleneck for glibc to start using this, so this patch proposes to add these scripts into glibc. And here is (hopefully!) one of the last ChangeLog entries we'd have to write for glibc: * scripts/gitlog_to_changelog.py: New script to auto-generate ChangeLog. * scripts/vcs_to_changelog/frontend_c.py: New file. * scripts/vcs_to_changelog/misc_util.py: New file. * scripts/vcs_to_changelog/vcs_git.py: New file. * scripts/vcs_to_changelog/vcstocl_quirks.py: Likewise.
2019-09-19[powerpc] SET_RESTORE_ROUND optimizations and bug fixPaul A. Clarke3-25/+46
SET_RESTORE_ROUND brackets a block of code, temporarily setting and restoring the rounding mode and letting everything else, including exceptions generated within the block, pass through. On powerpc, the current code clears the exception enables, which will hide exceptions generated within the block. This issue was introduced by me in commit e905212627350d54b58426214b5a54ddc852b0c9. Fix this by not clearing exception enable bits in the prologue. Also, since we are no longer changing the enable bits in either the prologue or the epilogue, there is no need to test for entering/exiting non-stop mode. Also, optimize the prologue get/save/set rounding mode operations for POWER9 and later by using 'mffscrn' when possible. Suggested-by: Paul E. Murphy <murphyp@linux.ibm.com> Reviewed-by: Paul E. Murphy <murphyp@linux.ibm.com> Fixes: e905212627350d54b58426214b5a54ddc852b0c9 2019-09-19 Paul A. Clarke <pc@us.ibm.com> * sysdeps/powerpc/fpu/fenv_libc.h (fegetenv_and_set_rn): New. (__fe_mffscrn): New. * sysdeps/powerpc/fpu/fenv_private.h (libc_feholdsetround_ppc_ctx): Do not clear enable bits, remove obsolete code, use fegetenv_and_set_rn. (libc_feresetround_ppc): Remove obsolete code, use fegetenv_and_set_rn.
2019-09-19Fix building support_ptrace.c on i686-gnu.Stefan Liebler2-1/+4
On i686-gnu the build is broken: In file included from support_ptrace.c:22: ../include/sys/prctl.h:2:15: fatal error: sys/prctl.h: No such file or directory #include_next <sys/prctl.h> This patch just removes the unused prctl.h inclusion. ChangeLog: * support/support_ptrace.c: Remove inclusion of sys/prctl.h.
2019-09-19S390: Use _HP_TIMING_S390_H instead of _HP_TIMING_H.Stefan Liebler2-2/+7
Use macro _HP_TIMING_S390_H instead of _HP_TIMING_H in s390 specific hp-timing.h ChangeLog: * sysdeps/s390/hp-timing.h (_HP_TIMING_H): Undefine. (_HP_TIMING_S390_H): Define.
2019-09-18Update syscall-names.list for Linux 5.3.Joseph Myers2-2/+9
This patch updates syscall-names.list for Linux 5.3, adding two new syscalls. Tested with build-many-glibcs.py. * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel version to 5.3. (clone3): New syscall. (pidfd_open): Likewise.
2019-09-18Use Linux 5.3 in build-many-glibcs.py.Joseph Myers2-1/+6
This patch makes build-many-glibcs.py use Linux 5.3. Tested with build-many-glibcs.py (host-libraries, compilers and glibcs builds). * scripts/build-many-glibcs.py (Context.checkout): Default Linux version to 5.3.
2019-09-18S390: Add support for HP_TIMING_NOW.Stefan Liebler2-0/+46
This patch adds support for HP_TIMING_NOW if we build at least with -march=z10 -mzarch. Otherwise we are still using the generic hp-timing.h. ChangeLog: * sysdeps/s390/hp-timing.h: New file.
2019-09-18Fix RISC-V vfork build with Linux 5.3 kernel headers.Joseph Myers2-1/+11
Building glibc for RISC-V with Linux 5.3 kernel headers fails because <linux/sched.h>, included in vfork.S for CLONE_* constants, contains a structure definition not safe for inclusion in assembly code. All other architectures already avoid use of that header in vfork.S, either defining the CLONE_* constants locally or embedding the required values directly in the relevant instruction, where they implement vfork using the clone syscall (see the implementations for aarch64, ia64, mips and nios2). This patch makes the RISC-V version define the constants locally like the other architectures. Tested build for all three RISC-V configurations in build-many-glibcs.py with Linux 5.3 headers. * sysdeps/unix/sysv/linux/riscv/vfork.S: Do not include <linux/sched.h>. (CLONE_VM): New macro. (CLONE_VFORK): Likewise.
2019-09-18Add UNSUPPORTED check in elf/tst-pldd.Stefan Liebler5-19/+137
The testcase forks a child process and runs pldd with PID of this child. On systems where /proc/sys/kernel/yama/ptrace_scope differs from zero, pldd will fail with /usr/bin/pldd: cannot attach to process 3: Operation not permitted This patch checks if ptrace_scope exists, is zero "classic ptrace permissions" or one "restricted ptrace". If ptrace_scope exists and has a higher restriction, then the test is marked as UNSUPPORTED. The case "restricted ptrace" is handled by rearranging the processes involved during the test. Now we have the following process tree: -parent: do_test (performs output checks) --subprocess 1: pldd_process (becomes pldd via execve) ---subprocess 2: target_process (ptraced via pldd) ChangeLog: * elf/tst-pldd.c (do_test): Add UNSUPPORTED check. Rearrange subprocesses. (pldd_process): New function. * support/Makefile (libsupport-routines): Add support_ptrace. * support/xptrace.h: New file. * support/support_ptrace.c: Likewise.
2019-09-17sparc64: Use linux generic time implementationAdhemerval Zanella2-1/+2
There is no need to sparc64 provide an arch-specific implementation to route to POSIX one (which uses gettimeofday). Linux one already handles the case for architecture that does not have __NR_time. No semantic changes, checked against a build for sparc64-linux-gnu. * sysdeps/unix/sysv/linux/sparc/sparc64/time.c: Remove file.
2019-09-17mips: Consolidate INTERNAL_VSYSCALL_CALLAdhemerval Zanella5-36/+25
This patch consolidates the mips, mips64, and mips64-n32 INTERNAL_VSYSCALL_CALL on a single implementation. No semantic changes. I checked against a build for mips-linux-gnu, mips64-linux-gnu, and mips64-n32-linux-gnu. * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h (INTERNAL_VSYSCALL_CALL): Remove. * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (INTERNAL_VSYSCALL_CALL): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h (INTERNAL_VSYSCALL_CALL): Likewise. * sysdeps/unix/sysv/linux/mips/sysdep.h (INTERNAL_VSYSCALL_CALL): New macro.
2019-09-17powerpc: Simplify vsyscall internal macrosAdhemerval Zanella6-54/+59
This patch simplifies the powerpc internal macros for vDSO calls by: - Removing INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK, used solely on get_timebase_freq. - Adjust INTERNAL_VSYSCALL_CALL_TYPE powerpc32 to follow powerpc64 argument ordering. - Use HAVE_*_VSYSCALL instead of explicit strings. - Make powerpc libc-vdso.h include generic implementation. No semantic change expected, checked on powerpc-linux-gnu-power4, powerpc64-linux-gnu, and powerpc64le-linux-gnu. * sysdeps/unix/sysv/linux/libc-vdso.h (VDSO_IFUNC_RET): Define if not defined. * sysdeps/unix/sysv/linux/powerpc/get_timebase_freq.c (__get_timebase_freq): Remove use of INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK. (get_timebase_freq_fallback): New symbol. * sysdeps/unix/sysv/linux/powerpc/gettimeofday.c (time): Use HAVE_GETTIMEOFDAY_VSYSCALL. * sysdeps/unix/sysv/linux/powerpc/time.c (gettimeofday): Use HAVE_TIME_VSYSCALL. * sysdeps/unix/sysv/linux/powerpc/libc-vdso.h: Include generic implementation. * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h (INTERNAL_VSYSCALL_CALL_TYPE): Make calling convention similar to powerpc64. (INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK): Remove macro. * .../sysv/linux/powerpc/powerpc64/sysdep.h (INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK): Likewise. * sysdeps/unix/sysv/linux/powerpc/sysdep.h (HAVE_GETTIMEOFDAY_VSYSCALL): Define.
2019-09-17Refactor vDSO initialization codeAdhemerval Zanella35-650/+237
Linux vDSO initialization code the internal function pointers require a lot of duplicated boilerplate over different architectures. This patch aims to simplify not only the code but the required definition to enable a vDSO symbol. The changes are: 1. Consolidate all init-first.c on only one implementation and enable the symbol based on HAVE_*_VSYSCALL existence. 2. Set the HAVE_*_VSYSCALL to the architecture expected names string. 3. Add a new internal implementation, get_vdso_mangle_symbol, which returns a mangled function pointer. Currently the clock_gettime, clock_getres, gettimeofday, getcpu, and time are handled in an arch-independent way, powerpc still uses some arch-specific vDSO symbol handled in a specific init-first implementation. Checked on aarch64-linux-gnu, arm-linux-gnueabihf, i386-linux-gnu, mips64-linux-gnu, powerpc64le-linux-gnu, s390x-linux-gnu, sparc64-linux-gnu, and x86_64-linux-gnu. * sysdeps/powerpc/powerpc32/backtrace.c (is_sigtramp_address, is_sigtramp_address_rt): Use HAVE_SIGTRAMP_{RT}32 instead of SHARED. * sysdeps/powerpc/powerpc64/backtrace.c (is_sigtramp_address): Likewise. * sysdeps/unix/sysv/linux/aarch64/init-first.c: Remove file. * sysdeps/unix/sysv/linux/aarch64/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/arm/init-first.c: Likewise. * sysdeps/unix/sysv/linux/arm/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/mips/init-first.c: Likewise. * sysdeps/unix/sysv/linux/mips/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/i386/init-first.c: Likewise. * sysdeps/unix/sysv/linux/riscv/init-first.c: Likewise. * sysdeps/unix/sysv/linux/riscv/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/s390/init-first.c: Likewise. * sysdeps/unix/sysv/linux/s390/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/sparc/init-first.c: Likewise. * sysdeps/unix/sysv/linux/sparc/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/x86/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/init-first.c: Likewise. * sysdeps/unix/sysv/linux/aarch64/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Define value based on kernel exported name. * sysdeps/unix/sysv/linux/arm/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/i386/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/mips/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/powerpc/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETCPU_VSYSCALL, HAVE_TIME_VSYSCALL, HAVE_GET_TBFREQ, HAVE_SIGTRAMP_RT64, HAVE_SIGTRAMP_32, HAVE_SIGTRAMP_RT32i, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/riscv/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/s390/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/sparc/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/x86_64/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/dl-vdso.h (VDSO_NAME, VDSO_HASH): Define to invalid names if architecture does not define them. (get_vdso_mangle_symbol): New symbol. * sysdeps/unix/sysv/linux/init-first.c: New file. * sysdeps/unix/sysv/linux/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/init-first.c (gettimeofday, clock_gettime, clock_getres, getcpu, time): Remove declaration. (__libc_vdso_platform_setup_arch): Likewise and use get_vdso_mangle_symbol to setup vDSO symbols. (sigtramp_rt64, sigtramp32, sigtramp_rt32, get_tbfreq): Add attribute_hidden. * sysdeps/unix/sysv/linux/powerpc/libc-vdso.h: Likewise. * sysdeps/unix/sysv/linux/sysdep-vdso.h (VDSO_SYMBOL): Remove definition.
2019-09-17Remove PREPARE_VERSION and PREPARE_VERSION_KNOWAdhemerval Zanella34-157/+223
This patch removes the PREPARE_VERSION and PREPARE_VERSION_KNOW macro and uses a static inline function instead, get_vdso_symbol. Each architecture that supports vDSO must define the Linux version and its hash for symbol resolution (VDSO_NAME and VDSO_HASH macro respectively). It also organizes the HAVE_*_VSYSCALL for mips, powerpc, and s390 to define them on a common header. The idea is to require less code to configure and enable vDSO support for newer ports. No semantic changes are expected. Checked with a build against all affected architectures. * sysdeps/unix/make-syscalls.sh: Make vDSO call use get_vdso_symbol. * sysdeps/unix/sysv/linux/aarch64/gettimeofday.c (__gettimeofday): Use get_vdso_symbol instead of _dl_vdso_vsym. * sysdeps/unix/sysv/linux/powerpc/time.c (time): Likewise. * sysdeps/unix/sysv/linux/riscv/flush-icache.c (__lookup_riscv_flush_icache): Likewise. * sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday): Likewise. * sysdeps/unix/sysv/linux/x86/time.c (time): Likewise. * sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: Likewise. * sysdeps/unix/sysv/linux/aarch64/init-first.c: Likewise. * sysdeps/unix/sysv/linux/arm/init-first.c: Likewise. * sysdeps/unix/sysv/linux/i386/init-first.c: Likewise. * sysdeps/unix/sysv/linux/mips/init-first.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/init-first.c: Likewise. * sysdeps/unix/sysv/linux/riscv/init-first.c: Likewise. * sysdeps/unix/sysv/linux/sparc/init-first.c: Likewise. * sysdeps/unix/sysv/linux/s390/init-first.c: Likewise. * sysdeps/unix/sysv/linux/x86_64/init-first.c: Likewise. * sysdeps/unix/sysv/linux/aarch64/sysdep.h (VDSO_NAME, VDSO_HASH): Define. * sysdeps/unix/sysv/linux/arm/sysdep.h (VDSO_NAME, VDSO_HASH): Likewise. * sysdeps/unix/sysv/linux/i386/sysdep.h (VDSO_NAME, VDSO_HASH): Likewise. * sysdeps/unix/sysv/linux/riscv/sysdep.h (VDSO_NAME, VDSO_HASH): Likewise. * sysdeps/unix/sysv/linux/sparc/sysdep.h (VDSO_NAME, VDSO_HASH): Likewise. * sysdeps/unix/sysv/linux/x86_64/sysdep.h (VDSO_NAME, VDSO_HASH): Likewise. * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Remove definition. * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h (HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise. * sysdeps/unix/sysv/linux/mips/sysdep.h: New file. * sysdeps/unix/sysv/linux/powerpc/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/s390/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/dl-vdso.h (PREPARE_VERSION, PREPARE_VERSION_KNOWN, VDSO_NAME_LINUX_2_6, VDSO_HASH_LINUX_2_6, VDSO_NAME_LINUX_2_6_15, VDSO_HASH_LINUX_2_6_15, VDSO_NAME_LINUX_2_6_29, VDSO_HASH_LINUX_2_6_29, VDSO_NAME_LINUX_4_15, VDSO_HASH_LINUX_4_15): Remove defines. (get_vdso_symbol): New function.
2019-09-17Fix small error in HP_TIMING_PRINT trailing null char settingChung-Lin Tang2-1/+6
Fix a small error in the HP_TIMING_PRINT trailing zero setting; the '\0' should be set at MIN(Len,string length), instead of always at the 'Len' position. * sysdeps/generic/hp-timing-common.h (HP_TIMING_PRINT): Correct position of string null termination. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-09-14alpha: force old OSF1 syscalls for getegid, geteuid and getppid [BZ #24986]Aurelien Jarno4-0/+10
On alpha, Linux kernel 5.1 added the standard getegid, geteuid and getppid syscalls (commit ecf7e0a4ad15287). Up to now alpha was using the corresponding OSF1 syscalls through: - sysdeps/unix/alpha/getegid.S - sysdeps/unix/alpha/geteuid.S - sysdeps/unix/alpha/getppid.S When building against kernel headers >= 5.1, the glibc now use the new syscalls through sysdeps/unix/sysv/linux/syscalls.list. When it is then used with an older kernel, the corresponding 3 functions fail. A quick fix is to move the OSF1 wrappers under the sysdeps/unix/sysv/linux/alpha directory so they override the standard linux ones. A better fix would be to try the new syscalls and fallback to the old OSF1 in case the new ones fail. This can be implemented in a later commit. Changelog: [BZ #24986] * sysdeps/unix/alpha/getegid.S: Move to ... * sysdeps/unix/sysv/linux/alpha/getegid.S: ... here. * sysdeps/unix/alpha/geteuid.S: Move to ... * sysdeps/unix/sysv/linux/alpha/geteuid.S: ... here. * sysdeps/unix/alpha/getppid.S: Move to ... * sysdeps/unix/sysv/linux/alpha/getppid.S: ... here
2019-09-09Fix http: URL in 'configure'Paul Eggert3-4/+10
* configure.ac: Add URL to AC_INIT so that it generates an https: URL instead of an http: URL. * configure: Regenerate.
2019-09-09Regenerate charmap-kw.h, locfile-kw.hPaul Eggert5-35/+37
This propagates the recent http->https URL changes. Since I used gperf 3.1 to regenerate, this is also a minor internal-to-localedef API change. URL problem reported by Joseph Myers in: https://www.sourceware.org/ml/libc-alpha/2019-09/msg00143.html * locale/programs/charmap-kw.h, locale/programs/locfile-kw.h: Regenerate with gperf 3.1. * locale/programs/linereader.h (kw_hash_fct_t): * locale/programs/repertoire.c (repertoiremap_hash): 2nd arg is now size_t not unsigned, for compatibility with gperf 3.1.
2019-09-07Fix three GNU license URLs, along with trailing-newline issues.Paul Eggert3-6/+4
2019-09-07Prefer https to http for gnu.org and fsf.org URLsPaul Eggert10598-10604/+10604
Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-05Use __attribute_pure__ macro in bits/mathcalls.hGabriel F. T. Gomes1-2/+2
When the const attribute of totalorder* functions was replaced with the pure attribute, by commit ID ab41100bab12, it did not use the __attribute_pure__ macro, but the __attribute__ ((__pure__)) statement. All other uses of the pure attribute in glibc use the macro. Tested for powerpc64le.
2019-09-05locale: Avoid zero-length array in _nl_category_names [BZ #24962]Florian Weimer7-27/+38
The union wrapper is unnecessary because C allows to read any object as a sequence of chars. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-09-05math: Replace const attribute with pure in totalorder* functionsGabriel F. T. Gomes2-3/+9
Since the commit commit 42760d764649ad82f5fe45a26cbdf2c2500409f7 Author: Joseph Myers <joseph@codesourcery.com> Date: Thu Aug 15 15:18:34 2019 +0000 Make totalorder and totalordermag functions take pointer arguments. the test case math/test-totalorderl-ldbl-128ibm fails on every input pair, when compiled with -O2, which is the case for glibc test suite. Debugging showed that the test case is passing arguments incorrectly to totalorderl. This can also be inferred by the fact that compiling the test case with -O0 hides the bug. The documentation for the const attribute in GCC manual reads: Note that a function that has pointer arguments and examines the data pointed to must not be declared const if the pointed-to data might change between successive invocations of the function. In general, since a function cannot distinguish data that might change from data that cannot, const functions should never take pointer or, in C++, reference arguments. Likewise, a function that calls a non-const function usually must not be const itself. Since the pointed-to data is likely to be changed by user code between invocations of totalorder*, this patch removes the const attribute from the declarations of all totalorder functions, replacing it with the pure attribute, as suggested in the manual: The pure attribute imposes similar but looser restrictions on a function’s definition than the const attribute: pure allows the function to read any non-volatile memory, even if it changes in between successive invocations of the function. Tested for powerpc64le and x86_64.
2019-09-04y2038: Introduce the __ASSUME_TIME64_SYSCALLS defineLukasz Majewski2-0/+64
Add a macro to linux/kernel-features.h, __ASSUME_TIME64_SYSCALLS, to indicate whether the kernel can be assumed to provide a set of system calls that process 64-bit time_t. __ASSUME_TIME64_SYSCALLS does not indicate whether time_t is actually 64 bits (that's __TIMEBITS) and also does not indicate whether the 64-bit time_t system calls have "time64" suffixes on their names. Code that uses __ASSUME_TIME64_SYSCALLS will be added in subsequent patches. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_TIME64_SYSCALLS): New macro. Reviewed-by: Alistair Francis <alistair23@gmail.com> Reviewed-by: Joseph Myers <joseph@codesourcery.com> Reviewed-by: Zack Weinberg <zackw@panix.com>
2019-09-04Finish move of clock_* functions to libc. [BZ #24959]Zack Weinberg72-243/+382
In glibc 2.17, the functions clock_getcpuclockid, clock_getres, clock_gettime, clock_nanosleep, and clock_settime were moved from librt.so to libc.so, leaving compatibility stubs behind. Now that the dynamic linker no longer insists on finding versioned symbols in the same library that originally defined them, we do not need the stubs anymore, and this means we don't need GLIBC_PRIVATE __-prefix aliases for most of the functions anymore either. (clock_gettime still needs one.) For ports added before 2.17, libc.so needs to provide two symbol versions for each, the default at GLIBC_2.17 plus a compat version matching what librt had. While I'm at it, move the clock_*.c files and their tests from rt/ to time/.
2019-09-03Update Alpha libm-test-ulpsAurelien Jarno2-8/+12
Changelog: * sysdeps/alpha/fpu/libm-test-ulps: Regenerated using GCC 9.2.
2019-09-03localedef: Use initializer for flexible array member [BZ #24950]Florian Weimer3-7/+15
struct charseq used a zero-length array instead of a flexible array member. This required a strange construct to initialize struct charseq objects, and GCC 10 warns about that: cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] In file included from programs/repertoire.h:24, from programs/localedef.h:32, from programs/ld-ctype.c:35: programs/charmap.h:63:17: note: destination object declared here 63 | unsigned char bytes[0]; | ^~~~~ cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] programs/charmap.h:63:17: note: destination object declared here cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] programs/charmap.h:63:17: note: destination object declared here cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] programs/charmap.h:63:17: note: destination object declared here The change makes the object physically const, but it is not expected to be modified.
2019-09-02Add misc/tst-mntent-autofs, testing autofs "ignore" filteringFlorian Weimer3-1/+148
2019-09-02Use autofs "ignore" mount hint in getmntent_r/getmntentIan Kent2-12/+44
Historically autofs mounts were not included in mount table listings. This is the case in other SysV autofs implementations and was also the case with Linux autofs. But now that /etc/mtab is a symlink to the proc filesystem mount table the autofs mount entries appear in the mount table on Linux. Prior to the symlinking of /etc/mtab mount table it was sufficient to call mount(2) and simply not update /etc/mtab to exclude autofs mounts from mount listings. Also, with the symlinking of /etc/mtab we have seen a shift in usage toward using the proc mount tables directly. But the autofs mount entries need to be retained when coming from the proc file system for applications that need them (largely autofs file system users themselves) so filtering out these entries within the kernel itself can't be done. So it needs be done in user space. There are three reasons to omit the autofs mount entries. One is that certain types of auto-mounts have an autofs mount for every entry in their autofs mount map and these maps can be quite large. This leads to mount table listings containing a lot of unnecessary entries. Also, this change in behaviour between autofs implementations can cause problems for applications that use getmntent(3) in other OS implementations as well as Linux. Lastly, there's very little that user space can do with autofs mount entries since this must be left to the autofs mount owner, typically the automount daemon. But it can also lead to attempts to access automount managed paths resulting mounts being triggered when they aren't needed or mounts staying mounted for much longer thay they need be. While the point of this change ins't to help with these problems (and it can be quite a problem) it may be a welcome side effect. So the Linux autofs file system has been modified to accept a pseudo mount option of "ignore" (as is used in other OS implementations) so that user space can use this as a hint to skip autofs entries on reading the mount table. The Linux autofs automount daemon used getmntent(3) itself and has been modified to use the proc file system directly so that it can "ignore" mount option. The use of this mount option is opt-in and a configuration option has been added which defaults to not use this option so if there are applications that need these entries, other than autofs itself, they can be retained. Also, since this filtering is based on an added mount option earlier versions of Linux autofs iand other autofs file system users will not use the option and so won't be affected by the change.
2019-08-30hurd: Fix buildSamuel Thibault1-1/+1
* sysdeps/mach/hurd/i386/sigreturn.c (__sigreturn2): Spin-lock '&ss->lock', not 'ss'.
2019-08-30Use generic memset/memcpy/memmove in benchtestsWilco Dijkstra9-98/+91
Use the generic C memset/memcpy/memmove in benchtests since comparing against a slow byte-oriented implementation makes no sense. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> 2019-08-29 Wilco Dijkstra <wdijkstr@arm.com> * benchtests/bench-memcpy.c (simple_memcpy): Remove. (generic_memcpy): Include generic C memcpy. * benchtests/bench-memmove.c (simple_memmove): Remove. (generic_memmove): Include generic C memmove. * benchtests/bench-memset.c (simple_memset): Remove. (generic_memset): Include generic C memset. * benchtests/bench-memset-large.c (simple_memset): Remove. (generic_memset): Include generic C memset. * benchtests/bench-memset-walk.c (simple_memset): Remove. (generic_memset): Include generic C memset. * string/memcpy.c (MEMCPY): Add defines to enable redirection. * string/memset.c (MEMSET): Likewise. * sysdeps/x86_64/memcopy.h: Remove empty file.
2019-08-30nptl: Move pthread_attr_getinheritsched implementation into libcFlorian Weimer33-34/+69
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>