about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Y2038: Include proper header to provide support for struct timeval on HURDLukasz Majewski2019-10-022-0/+4
| | | | | | | | | | | | | | | | | | The HURD requires explicit inclusion of <bits/types/struct_timeval.h> to use struct timeval in ./include/time.h. For this particular glibc port, the proper header hasn't been included before inclusion of time.h. Tested with build-many-glibcs.py with i686-gnu and x86_64-linux-gnu: build-many-glibcs.py /home/lukma/work/glibc/glibc-many-build --keep all compilers i686-gnu build-many-glibcs.py /home/lukma/work/glibc/glibc-many-build --keep all glibcs i686-gnu Also run of xcheck on x86_64: ./src/configure --prefix=/usr make PARALLELMFLAGS="-j12" && make xcheck PARALLELMFLAGS="-j12" * include/time.h: Add #include <bits/types/struct_timeval.h>
* [powerpc] No need to enter "Ignore Exceptions Mode"Paul A. Clarke2019-10-021-4/+15
| | | | | | | | | Since at least POWER8, there is no performance advantage to entering "Ignore Exceptions Mode", and doing so conditionally requires - the conditional logic, and - a system call. Make it a no-op for uses within glibc.
* Enable passing arguments to the inferior in debugglibc.shArjun Shankar2019-10-022-8/+27
| | | | | | | | | | | This patch adds the ability to run debugglibc.sh's inferior program with arguments specified on the command line. This enables convenient debugging of non-testcase programs such as iconv/iconv_prog or other dynamically linked programs. Program arguments may be passed using `--' as a separator. For example: $ ./debugglibc.sh -b iconv -- iconv/iconv_prog -f ASCII -t UTF-8 input.txt
* time: Add padding for the timespec if requiredAlistair Francis2019-10-012-0/+18
| | | | | | | | | If we are running on a 32-bit system with a 64-bit time_t we need to ensure there is padding around the tv_nsec variable. This is requried as the timespec is #defined to the __timespec64 struct. * time/bits/types/struct_timespec.h: Add padding for the timespec if required.
* Split up endian.h to minimize exposure of BYTE_ORDER.Alistair Francis2019-10-0159-274/+375
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With only two exceptions (sys/types.h and sys/param.h, both of which historically might have defined BYTE_ORDER) the public headers that include <endian.h> only want to be able to test __BYTE_ORDER against __*_ENDIAN. This patch creates a new bits/endian.h that can be included by any header that wants to be able to test __BYTE_ORDER and/or __FLOAT_WORD_ORDER against the __*_ENDIAN constants, or needs __LONG_LONG_PAIR. It only defines macros in the implementation namespace. The existing bits/endian.h (which could not be included independently of endian.h, and only defines __BYTE_ORDER and maybe __FLOAT_WORD_ORDER) is renamed to bits/endianness.h. I also took the opportunity to canonicalize the form of this header, which we are stuck with having one copy of per architecture. Since they are so short, this means git doesn’t understand that they were renamed from existing headers, sigh. endian.h itself is a nonstandard header and its only remaining use from a standard header is guarded by __USE_MISC, so I dropped the __USE_MISC conditionals from around all of the public-namespace things it defines. (This means, an application that requests strict library conformance but includes endian.h will still see the definition of BYTE_ORDER.) A few changes to specific bits/endian(ness).h variants deserve mention: - sysdeps/unix/sysv/linux/ia64/bits/endian.h is moved to sysdeps/ia64/bits/endianness.h. If I remember correctly, ia64 did have selectable endianness, but we have assembly code in sysdeps/ia64 that assumes it’s little-endian, so there is no reason to treat the ia64 endianness.h as linux-specific. - The C-SKY port does not fully support big-endian mode, the compile will error out if __CSKYBE__ is defined. - The PowerPC port had extra logic in its bits/endian.h to detect a broken compiler, which strikes me as unnecessary, so I removed it. - The only files that defined __FLOAT_WORD_ORDER always defined it to the same value as __BYTE_ORDER, so I removed those definitions. The SH bits/endian(ness).h had comments inconsistent with the actual setting of __FLOAT_WORD_ORDER, which I also removed. - I *removed* copyright boilerplate from the few bits/endian(ness).h headers that had it; these files record a single fact in a fashion dictated by an external spec, so I do not think they are copyrightable. As long as I was changing every copy of ieee754.h in the tree, I noticed that only the MIPS variant includes float.h, because it uses LDBL_MANT_DIG to decide among three different versions of ieee854_long_double. This patch makes it not include float.h when GCC’s intrinsic __LDBL_MANT_DIG__ is available. * string/endian.h: Unconditionally define LITTLE_ENDIAN, BIG_ENDIAN, PDP_ENDIAN, and BYTE_ORDER. Condition byteswapping macros only on !__ASSEMBLER__. Move the definitions of __BIG_ENDIAN, __LITTLE_ENDIAN, __PDP_ENDIAN, __FLOAT_WORD_ORDER, and __LONG_LONG_PAIR to... * string/bits/endian.h: ...this new file, which includes the renamed header bits/endianness.h for the definition of __BYTE_ORDER and possibly __FLOAT_WORD_ORDER. * string/Makefile: Install bits/endianness.h. * include/bits/endian.h: New wrapper. * bits/endian.h: Rename to bits/endianness.h. Add multiple-include guard. Rewrite the comment explaining what the machine-specific variants of this file should do. * sysdeps/unix/sysv/linux/ia64/bits/endian.h: Move to sysdeps/ia64. * sysdeps/aarch64/bits/endian.h * sysdeps/alpha/bits/endian.h * sysdeps/arm/bits/endian.h * sysdeps/csky/bits/endian.h * sysdeps/hppa/bits/endian.h * sysdeps/ia64/bits/endian.h * sysdeps/m68k/bits/endian.h * sysdeps/microblaze/bits/endian.h * sysdeps/mips/bits/endian.h * sysdeps/nios2/bits/endian.h * sysdeps/powerpc/bits/endian.h * sysdeps/riscv/bits/endian.h * sysdeps/s390/bits/endian.h * sysdeps/sh/bits/endian.h * sysdeps/sparc/bits/endian.h * sysdeps/x86/bits/endian.h: Rename to endianness.h; canonicalize form of file; remove redundant definitions of __FLOAT_WORD_ORDER. * sysdeps/powerpc/bits/endianness.h: Remove logic to check for broken compilers. * ctype/ctype.h * sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h * sysdeps/arm/nptl/bits/pthreadtypes-arch.h * sysdeps/csky/nptl/bits/pthreadtypes-arch.h * sysdeps/ia64/ieee754.h * sysdeps/ieee754/ieee754.h * sysdeps/ieee754/ldbl-128/ieee754.h * sysdeps/ieee754/ldbl-128ibm/ieee754.h * sysdeps/m68k/nptl/bits/pthreadtypes-arch.h * sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h * sysdeps/mips/ieee754/ieee754.h * sysdeps/mips/nptl/bits/pthreadtypes-arch.h * sysdeps/nios2/nptl/bits/pthreadtypes-arch.h * sysdeps/nptl/pthread.h * sysdeps/riscv/nptl/bits/pthreadtypes-arch.h * sysdeps/sh/nptl/bits/pthreadtypes-arch.h * sysdeps/sparc/sparc32/ieee754.h * sysdeps/unix/sysv/linux/generic/bits/stat.h * sysdeps/unix/sysv/linux/generic/bits/statfs.h * sysdeps/unix/sysv/linux/sys/acct.h * wctype/bits/wctype-wchar.h: Include bits/endian.h, not endian.h. * sysdeps/unix/sysv/linux/hppa/pthread.h: Don’t include endian.h. * sysdeps/mips/ieee754/ieee754.h: Use __LDBL_MANT_DIG__ in ifdefs, instead of LDBL_MANT_DIG. Only include float.h when __LDBL_MANT_DIG__ is not predefined, in which case define __LDBL_MANT_DIG__ to equal LDBL_MANT_DIG.
* Sync "language", "lang_name", "territory", "country_name" with CLDR/langtableMike FABIAN2019-10-0170-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.
* Use binutils 2.33 branch in build-many-glibcs.py.Joseph Myers2019-09-302-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.
* y2038: Provide conversion helpers for struct __timespec64Lukasz Majewski2019-10-012-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.
* Update bits/mman.h constants and tst-mman-consts.py for Linux 5.3.Joseph Myers2019-09-304-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.
* Add helper script for glibc debuggingGabriel F. T. Gomes2019-09-301-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>
* [powerpc] Rename fesetenv_mode to fesetenv_controlPaul A. Clarke2019-09-276-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.
* [powerpc] libc_feholdsetround_noex_ppc_ctx: optimize FPSCR writePaul A. Clarke2019-09-272-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.
* [powerpc] Rename fegetenv_status to fegetenv_controlPaul A. Clarke2019-09-278-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>
* [powerpc] __fesetround_inline optimizationsPaul A. Clarke2019-09-272-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>
* [powerpc] libc_feupdateenv_test: optimize FPSCR accessPaul A. Clarke2019-09-273-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>
* [powerpc] fenv_private.h clean upPaul A. Clarke2019-09-279-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>
* Add TCP_TX_DELAY from Linux 5.3 to netinet/tcp.h.Joseph Myers2019-09-272-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.
* y2038: Introduce struct __timespec64 - new internal glibc typeLukasz Majewski2019-09-262-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.
* auto-changelog: Remove latin1 from codecsSiddhesh Poyarekar2019-09-262-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.
* Set the expects flags to clock_nanosleepAdhemerval Zanella2019-09-253-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.
* Fix tst-sigcontext-get_pc rule name from a43565ac447b1Adhemerval Zanella2019-09-252-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.
* inet/net-internal.h: Fix uninitalised clntudp_call() variableAlistair Francis2019-09-242-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>
* Fix vDSO initialization on arm and mipsAndreas Schwab2019-09-243-5/+18
|
* Script to generate ChangeLog-like output from git logSiddhesh Poyarekar2019-09-205-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.
* [powerpc] SET_RESTORE_ROUND optimizations and bug fixPaul A. Clarke2019-09-193-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.
* Fix building support_ptrace.c on i686-gnu.Stefan Liebler2019-09-192-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.
* S390: Use _HP_TIMING_S390_H instead of _HP_TIMING_H.Stefan Liebler2019-09-192-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.
* Update syscall-names.list for Linux 5.3.Joseph Myers2019-09-182-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.
* Use Linux 5.3 in build-many-glibcs.py.Joseph Myers2019-09-182-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.
* S390: Add support for HP_TIMING_NOW.Stefan Liebler2019-09-182-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.
* Fix RISC-V vfork build with Linux 5.3 kernel headers.Joseph Myers2019-09-182-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.
* Add UNSUPPORTED check in elf/tst-pldd.Stefan Liebler2019-09-185-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.
* sparc64: Use linux generic time implementationAdhemerval Zanella2019-09-172-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.
* mips: Consolidate INTERNAL_VSYSCALL_CALLAdhemerval Zanella2019-09-175-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.
* powerpc: Simplify vsyscall internal macrosAdhemerval Zanella2019-09-176-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.
* Refactor vDSO initialization codeAdhemerval Zanella2019-09-1735-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.
* Remove PREPARE_VERSION and PREPARE_VERSION_KNOWAdhemerval Zanella2019-09-1734-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.
* Fix small error in HP_TIMING_PRINT trailing null char settingChung-Lin Tang2019-09-172-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>
* alpha: force old OSF1 syscalls for getegid, geteuid and getppid [BZ #24986]Aurelien Jarno2019-09-144-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
* Fix http: URL in 'configure'Paul Eggert2019-09-093-4/+10
| | | | | | * configure.ac: Add URL to AC_INIT so that it generates an https: URL instead of an http: URL. * configure: Regenerate.
* Regenerate charmap-kw.h, locfile-kw.hPaul Eggert2019-09-095-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.
* Fix three GNU license URLs, along with trailing-newline issues.Paul Eggert2019-09-073-6/+4
|
* Prefer https to http for gnu.org and fsf.org URLsPaul Eggert2019-09-0710598-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
* Use __attribute_pure__ macro in bits/mathcalls.hGabriel F. T. Gomes2019-09-051-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.
* locale: Avoid zero-length array in _nl_category_names [BZ #24962]Florian Weimer2019-09-057-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>
* math: Replace const attribute with pure in totalorder* functionsGabriel F. T. Gomes2019-09-052-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.
* y2038: Introduce the __ASSUME_TIME64_SYSCALLS defineLukasz Majewski2019-09-042-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>
* Finish move of clock_* functions to libc. [BZ #24959]Zack Weinberg2019-09-0472-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/.
* Update Alpha libm-test-ulpsAurelien Jarno2019-09-032-8/+12
| | | | | | Changelog: * sysdeps/alpha/fpu/libm-test-ulps: Regenerated using GCC 9.2.
* localedef: Use initializer for flexible array member [BZ #24950]Florian Weimer2019-09-033-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.