about summary refs log tree commit diff
path: root/sysdeps/unix
Commit message (Collapse)AuthorAgeFilesLines
* Use <startup.h> in __libc_init_secureH.J. Lu2021-01-191-2/+27
| | | | | | | | | Since __libc_init_secure is called before ARCH_SETUP_TLS, it must use "int $0x80" for system calls in i386 static PIE. Add startup_getuid, startup_geteuid, startup_getgid and startup_getegid to <startup.h>. Update __libc_init_secure to use them. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* ldconfig/x86: Store ISA level in cache and aux cacheH.J. Lu2021-01-1312-81/+295
| | | | | | | | | | | Store ISA level in the portion of the unused upper 32 bits of the hwcaps field in cache and the unused pad field in aux cache. ISA level is stored and checked only for shared objects in glibc-hwcaps subdirectories. The shared objects in the default directories aren't checked since there are no fallbacks for these shared objects. Tested on x86-64-v2, x86-64-v3 and x86-64-v4 machines with --disable-hardcoded-path-in-tests and --enable-hardcoded-path-in-tests.
* Add SEGV_MTEAERR and SEGV_MTESERR from Linux 5.10.Joseph Myers2021-01-061-1/+5
| | | | | | | Linux 5.10 adds constants SEGV_MTEAERR and SEGV_MTESERR to asm-generic/siginfo.h. Add these to glibc's bits/siginfo-consts.h. Tested for x86_64.
* stdlib: Sync canonicalize with gnulib [BZ #10635] [BZ #26592] [BZ #26341] ↵Adhemerval Zanella2021-01-051-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | [BZ #24970] It sync with gnulib version ae9fb3d66. The testcase for BZ#23741 (stdlib/test-bz22786.c) is adjusted to check also for ENOMEM. The patch fixes multiple realpath issues: - Portability fixes for errno clobbering on free (BZ#10635). The function does not call free directly anymore, although it might be done through scratch_buffer_free. The free errno clobbering is being tracked by BZ#17924. - Pointer arithmetic overflows in realpath (BZ#26592). - Realpath cyclically call __alloca(path_max) to consume too much stack space (BZ#26341). - Realpath mishandles EOVERFLOW; stat not needed anyway (BZ#24970). The check is done through faccessat now. Checked on x86_64-linux-gnu and i686-linux-gnu.
* alpha: Provide wait4 for static library [BZ #27150]Adhemerval Zanella2021-01-051-0/+2
| | | | | | | | This ia regression from 09153638cfef91, versioned_symbol acts as weak_alias for !SHARED but it is undefined to avoid non versioned alias from the generic implementation. Checked with a build for alpha-linux-gnu.
* Update copyright dates not handled by scripts/update-copyrights.Paul Eggert2021-01-021-1/+1
| | | | | | | | | | | | | | I've updated copyright dates in glibc for 2021. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. As well as the usual annual updates, mainly dates in --version output (minus csu/version.c which previously had to be handled manually but is now successfully updated by update-copyrights), there is a small change to the copyright notice in NEWS which should let NEWS get updated automatically next year. Please remember to include 2021 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).
* Update copyright dates with scripts/update-copyrightsPaul Eggert2021-01-021500-1500/+1500
| | | | | | | | | | | | | | | | I used these shell commands: ../glibc/scripts/update-copyrights $PWD/../gnulib/build-aux/update-copyright (cd ../glibc && git commit -am"[this commit message]") and then ignored the output, which consisted lines saying "FOO: warning: copyright statement not found" for each of 6694 files FOO. I then removed trailing white space from benchtests/bench-pthread-locks.c and iconvdata/tst-iconv-big5-hkscs-to-2ucs4.c, to work around this diagnostic from Savannah: remote: *** pre-commit check failed ... remote: *** error: lines with trailing whitespace found remote: error: hook declined to update refs/heads/master
* aarch64: use PTR_ARG and SIZE_ARG instead of DELOUSESzabolcs Nagy2020-12-314-10/+9
| | | | | | | | | | | | | | | DELOUSE was added to asm code to make them compatible with non-LP64 ABIs, but it is an unfortunate name and the code was not compatible with ABIs where pointer and size_t are different. Glibc currently only supports the LP64 ABI so these macros are not really needed or tested, but for now the name is changed to be more meaningful instead of removing them completely. Some DELOUSE macros were dropped: clone, strlen and strnlen used it unnecessarily. The out of tree ILP32 patches are currently not maintained and will likely need a rework to rebase them on top of the time64 changes.
* powerpc: Use scv instruction on clone when availableMatheus Castanho2020-12-301-3/+30
| | | | | | | | | | clone already uses r31 to temporarily save input arguments before doing the syscall, so we use a different register to read from the TCB. We can also avoid allocating another stack frame, which is not needed since we can simply extend the usage of the red zone. Tested-by: Lucas A. M. Magalhães <lamm@linux.ibm.com> Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* powerpc: Runtime selection between sc and scv for syscallsMatheus Castanho2020-12-304-31/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux kernel v5.9 added support for system calls using the scv instruction for POWER9 and later. The new codepath provides better performance (see below) if compared to using sc. For the foreseeable future, both sc and scv mechanisms will co-exist, so this patch enables glibc to do a runtime check and use scv when it is available. Before issuing the system call to the kernel, we check hwcap2 in the TCB for PPC_FEATURE2_SCV to see if scv is supported by the kernel. If not, we fallback to sc and keep the old behavior. The kernel implements a different error return convention for scv, so when returning from a system call we need to handle the return value differently depending on the instruction we used to enter the kernel. For syscalls implemented in ASM, entry and exit are implemented by different macros (PSEUDO and PSEUDO_RET, resp.), which may be used in sequence (e.g. for templated syscalls) or with other instructions in between (e.g. clone). To avoid accessing the TCB a second time on PSEUDO_RET to check which instruction we used, the value read from hwcap2 is cached on a non-volatile register. This is not needed when using INTERNAL_SYSCALL macro, since entry and exit are bundled into the same inline asm directive. The dynamic loader may issue syscalls before the TCB has been setup so it always uses sc with no extra checks. For the static case, there is no compile-time way to determine if we are inside startup code, so we also check the value of the thread pointer before effectively accessing the TCB. For such situations in which the availability of scv cannot be determined, sc is always used. Support for scv in syscalls implemented in their own ASM file (clone and vfork) will be added later. For now simply use sc as before. Average performance over 1M calls for each syscall "type": - stat: C wrapper calling INTERNAL_SYSCALL - getpid: templated ASM syscall - syscall: call to gettid using syscall function Standard: stat : 1.573445 us / ~3619 cycles getpid : 0.164986 us / ~379 cycles syscall : 0.162743 us / ~374 cycles With scv: stat : 1.537049 us / ~3535 cycles <~ -84 cycles / -2.32% getpid : 0.109923 us / ~253 cycles <~ -126 cycles / -33.25% syscall : 0.116410 us / ~268 cycles <~ -106 cycles / -28.34% Tested on powerpc, powerpc64, powerpc64le (with and without scv) Tested-by: Lucas A. M. Magalhães <lamm@linux.ibm.com> Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* io: Remove xmknod{at} implementationsAdhemerval Zanella2020-12-292-29/+2
| | | | | | | | | | With xmknod wrapper functions removed (589260cef8), the mknod functions are now properly exported, and version is done using symbols versioning instead of the extra _MKNOD_* argument. It also allows us to consolidate Linux and Hurd mknod implementation. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* io: Remove xstat implementationsAdhemerval Zanella2020-12-291-1/+3
| | | | | | | | With xstat wrapper functions removed (8ed005daf0), the stat functions are now properly exported, and version is done using symbols versioning instead of the extra _STAT_* argument. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* aarch64: Add sysv specific enabling code for memory taggingRichard Earnshaw2020-12-214-0/+34
| | | | | | | | | | | | | | | | | | | Add various defines and stubs for enabling MTE on AArch64 sysv-like systems such as Linux. The HWCAP feature bit is copied over in the same way as other feature bits. Similarly we add a new wrapper header for mman.h to define the PROT_MTE flag that can be used with mmap and related functions. We add a new field to struct cpu_features that can be used, for example, to check whether or not certain ifunc'd routines should be bound to MTE-safe versions. Finally, if we detect that MTE should be enabled (ie via the glibc tunable); we enable MTE during startup as required. Support in the Linux kernel was added in version 5.10. Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
* linux: Add compatibility definitions to sys/prctl.h for MTERichard Earnshaw2020-12-211-0/+18
| | | | | | | | | Older versions of the Linux kernel headers obviously lack support for memory tagging, but we still want to be able to build in support when using those (obviously it can't be enabled on such systems). The linux kernel extensions are made to the platform-independent header (linux/prctl.h), so this patch takes a similar approach.
* alpha: Remove anonymous union in struct stat [BZ #27042]Matt Turner2020-12-213-63/+66
| | | | | | | | | | This is clever, but it confuses downstream detection in at least zstd and GNOME's glib. zstd has preprocessor tests for the 'st_mtime' macro, which is not provided by the path using the anonymous union; glib checks for the presence of 'st_mtimensec' in struct stat but then tries to access that field in struct statx (which might be a bug on its own). Checked with a build for alpha-linux-gnu.
* Update kernel version to 5.10 in tst-mman-consts.py.Joseph Myers2020-12-171-1/+1
| | | | | | | | This patch updates the kernel version in the test tst-mman-consts.py to 5.10. (There are no new MAP_* constants covered by this test in 5.10 that need any other header changes.) Tested with build-many-glibcs.py.
* Update syscall lists for Linux 5.10.Joseph Myers2020-12-1626-2/+28
| | | | | | | | Linux 5.10 has one new syscall, process_madvise. Update syscall-names.list and regenerate the arch-syscall.h headers with build-many-glibcs.py update-syscalls. Tested with build-many-glibcs.py.
* Fix spelling and grammar in several commentsJonny Grant2020-12-121-2/+1
|
* linux: Consolidate brk implementationAdhemerval Zanella2020-12-1036-745/+60
| | | | | | | | | | | | | | | It removes all the arch-specific assembly implementation. The outliers are alpha, where its kernel ABI explict return -ENOMEM in case of failure; and i686, where it can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. Also some ABIs exports an additional ___brk_addr symbol and to handle it an internal HAVE_INTERNAL_BRK_ADDR_SYMBOL is added. Checked on x86_64-linux-gnu, i686-linux-gnu, adn with builsd for the affected ABIs. Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* Fix parsing of /sys/devices/system/cpu/online (bug 25859)Andreas Schwab2020-12-091-2/+3
| | | | The file contains comma-separated ranges, not spaces.
* x86: Rename readelflib.cH.J. Lu2020-12-062-4/+2
| | | | | Rename linux/i386/readelflib.c to linux/x86/readelflib.c and remove x86_64/readelflib.c.
* Revert "linux: Move xmknod{at} to compat symbols"Adhemerval Zanella2020-12-022-5/+0
| | | | | | | | | | | | | This reverts commit 81b83ff61f95f30ad53d6075247af0ea61a0b16e to move __xmknod{at} back to default symbols. ABIs with default symbol version of 2.33 or newer (such as riscv32) continue to just provide the mknod* symbols. The idea is to not force static libraries built against old glibc to update against new glibcs (since they reference the the xmknod{at} symbols). Checked on x86_64-linux-gnu and i686-linux-gnu.
* Revert "linux: Move {f}xstat{at} to compat symbols"Adhemerval Zanella2020-12-0220-133/+11
| | | | | | | | | | | | | This reverts commit 20b39d59467b0c1d858e89ded8b0cebe55e22f60 to move {f}xstat{at} back to default symbols. ABIs with default symbol version of 2.33 or newer (such as riscv32) continue to just provide the stat symbols. The idea is to not force static libraries built against old glibc to update against new glibcs (since they reference the old {f}xstat{at} symbols). Checked on x86_64-linux-gnu and i686-linux-gnu.
* sh: Add sh4 fpu Implies folderAdhemerval Zanella2020-11-272-0/+2
| | | | | | | | | | | The commit 605f38177db (sh: Split BE/LE abilist) did not take in consideration the SH4 fpu support. Checked with a build for sh4-linux-gnu and manually checked that the implementations at sysdeps/sh/sh4/fpu/ are selected. John Paul Adrian Glaubitz also confirmed it fixes the build issues he encontered.
* nanosleep: Pass NULL when rem == NULL on ports with __TIMESIZE != 64Lukasz Majewski2020-11-142-2/+3
| | | | | | | | | | | | | On ports with __TIMESIZE != 64 the remaining time argument always receives pointer to struct __timespec64 instance. This is the different behavior when compared to 64 bit versions of clock_nanosleep and nanosleep functions, which receive NULL. To avoid any potential issues, we also pass NULL when *rem pointer is NULL. Reported-by: Andreas Schwab <schwab@suse.de> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
* y2038: Convert thrd_sleep to support 64 bit timeLukasz Majewski2020-11-142-0/+60
| | | | | | | | | | | | | | | The thrd_sleep function has been converted to support 64 bit time. It was also necessary to provide Linux specific copy of it to avoid problems on i686-gnu (i.e. HURD) port, which is not providing clock_nanosleep() supporting 64 bit time. The thrd_sleep is a wrapper on POSIX threads to provide C11 standard threads interface. It directly calls __clock_nanosleep64(). Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
* y2038: Convert mtx_timedlock to support 64 bit timeLukasz Majewski2020-11-142-0/+47
| | | | | | | | | | | | | | | The mtx_timedlock function has been converted to support 64 bit time. It was also necessary to provide Linux specific copy of it to avoid problems on i686-gnu (i.e. HURD) port, which is not providing pthread_mutex_timedlock() supporting 64 bit time. The mtx_timedlock is a wrapper on POSIX threads to provide C11 standard threads interface. It directly calls __pthread_mutex_timedlock64(). Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
* y2038: Convert cnd_timedwait to support 64 bit timeLukasz Majewski2020-11-142-0/+71
| | | | | | | | | | | | | | | | | | The cnd_timedwait function has been converted to support 64 bit time. It was also necessary to provide Linux specific copy of it to avoid problems on i686-gnu (i.e. HURD) port, which is not providing pthread_cond_timedwait() supporting 64 bit time. Moreover, a linux specific copy of thrd_priv.h header file has been added as well. The cnd_timedwait is a wrapper on POSIX threads to provide C11 standard threads interface. It directly calls __pthread_cond_timedwait64(). Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
* Remove obsolete defines for HPUX support from fcntl.h and update O_NONBLOCK.John David Anglin2020-11-131-4/+1
|
* Remove tls.h inclusion from internal errno.hAdhemerval Zanella2020-11-1352-59/+59
| | | | | | | | | | | | The tls.h inclusion is not really required and limits possible definition on more arch specific headers. This is a cleanup to allow inline functions on sysdep.h, more specifically on i386 and ia64 which requires to access some tls definitions its own. No semantic changes expected, checked with a build against all affected ABIs.
* nptl: Eliminate <smp.h> and __is_smpFlorian Weimer2020-11-133-78/+20
| | | | | | | | | | | Most systems are SMP, so optimizing for the UP case is no longer approriate. A dynamic check based on the kernel identification has been only implemented for i386 anyway. To disable adaptive mutexes on sh, define DEFAULT_ADAPTIVE_COUNT as zero for this architecture. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Use O_CLOEXEC in sysconf [BZ #26791]Maximilian Krüger2020-11-111-1/+1
| | | | | If sysconf is used in multithreaded processes, various filedescriptors may leak due to missing O_CLOEXEC. This commit adds the flag.
* riscv: Get cache information through sysconfZong Li2020-11-101-0/+100
| | | | | | | | Add support to query cache information on RISC-V through sysconf() function. The cache information had been added in AUX vector of RISC-V architecture in Linux kernel v.5.10-rc1. Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> Acked-by: Palmer Dabbelt <palmerdabbelt@google.com>
* linux: Allow adjtime with NULL argument [BZ #26833]Adhemerval Zanella2020-11-091-3/+8
| | | | | | | | | | | The adjtime interface allows return the amount of time remaining from any previous adjustment that has not yet been completed by passing a NULL as first argument. This was introduced with y2038 support 0308077e3a. Checked on i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* bsd unlockpt: unlockpt needs to fail with EINVAL, not ENOTTYSamuel Thibault2020-11-081-1/+6
| | | | | The EINVAL error code is mandated by POSIX, while ptsname_r returns ENOTTY, so we need to translate.
* Rearrange bsd_getpt vs bsd_openpt and implement posix_openpt on BSDSamuel Thibault2020-11-071-10/+8
| | | | | | | | | * sysdeps/unix/bsd/getpt.c (__getpt): Add oflag parameter, pass it to the _open call and rename to... (__bsd_openpt): ... new function. (__getpt): Reimplement on top of __bsd_openpt. (__posix_openpt): Replace stub with implementation on top of __bsd_openpt. (posix_openpt): Remove stub warning.
* msg: Remove redundant #include <sys/msg.h> headerLukasz Majewski2020-11-046-6/+0
| | | | | | | | | The #include <sys/msg.h> is redundant as we do not use message specific types for issuing syscalls to handle msg and shm. Only msgctl requires this header. Build tests: ./src/scripts/build-many-glibcs.py glibcs
* Hurd: Fix ftime buildAdhemerval Zanella2020-10-271-0/+54
| | | | | | | | It does not provide __clock_gettime64, the ftime y2038 support is moved to a Linux specific implementation. Checked with a build for i686-linux-gnu and on x86_64-linux and i686-linux-gnu.
* Add IP_RECVERR_RFC4884 and IPV6_RECVERR_RFC4884 from Linux 5.9.Joseph Myers2020-10-271-0/+2
| | | | | | | Add the new constants IP_RECVERR_RFC4884 and IPV6_RECVERR_RFC4884 from Linux 5.9 to bits/in.h. Tested for x86_64.
* Reinstate ftime and add deprecate message on ftime usageAdhemerval Zanella2020-10-271-0/+1
| | | | | | | This patch revert "Move ftime to a compatibility symbol" (commit 14633d3e568eb9770a7e5046eff257113e0453fb). Checked on x86_64-linux-gnu and i686-linux-gnu.
* Update kernel version to 5.9 in tst-mman-consts.py.Joseph Myers2020-10-261-1/+1
| | | | | | | | This patch updates the kernel version in the test tst-mman-consts.py to 5.9. (There are no new MAP_* constants covered by this test in 5.9 that need any other header changes.) Tested with build-many-glibcs.py.
* Update syscall lists for Linux 5.9.Joseph Myers2020-10-2326-2/+28
| | | | | | | | Linux 5.9 has one new syscall, close_range. Update syscall-names.list and regenerate the arch-syscall.h headers with build-many-glibcs.py update-syscalls. Tested with build-many-glibcs.py.
* Move vtimes to a compatibility symbolAdhemerval Zanella2020-10-191-1/+0
| | | | | | | | | | | | | | I couldn't pinpoint which standard has added it, but no other POSIX system supports it and/or no longer provide it. The 'struct vtimes' also has a lot of drawbacks due its limited internal type size. I couldn't also see find any project that actually uses this symbol, either in some dignostic way (such as sanitizer). So I think it should be safer to just move to compat symbol, instead of deprecated. The idea it to avoid new ports to export such broken interface (riscv32 for instance). Checked on x86_64-linux-gnu and i686-linux-gnu.
* y2038: linux: Provide __time64 implementationLukasz Majewski2020-10-193-3/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the glibc the time function can use vDSO (on power and x86 the USE_IFUNC_TIME is defined), time syscall or 'default' time() from ./time/time.c (as a fallback). In this patch the last function (time) has been refactored and moved to ./sysdeps/unix/sysv/linux/time.c to be Linux specific. The new __time64 explicit 64 bit function for providing 64 bit value of seconds after epoch (by internally calling __clock_gettime64) has been introduced. Moreover, a 32 bit version - __time has been refactored to internally use __time64. The __time is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary check for time_t potential overflow. The iFUNC vDSO direct call optimization has been removed from both i686 and powerpc32 (USE_IFUNC_TIME is not defined for those architectures anymore). The Linux kernel does not provide a y2038 safe implementation of time neither it plans to provide it in the future, __clock_gettime64 should be used instead. Keeping support for this optimization would require to handle another build permutation (!__ASSUME_TIME64_SYSCALLS && USE_IFUNC_TIME which adds more complexity and has limited use (since the idea is to eventually have a y2038 safe glibc build). Build tests: ./src/scripts/build-many-glibcs.py glibcs Run-time tests: - Run specific tests on ARM/x86 32bit systems (qemu): https://github.com/lmajewski/meta-y2038 and run tests: https://github.com/lmajewski/y2038-tests/commits/master Above tests were performed with Y2038 redirection applied as well as without to test proper usage of both __time64 and __time. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* linux: Add __readdir_unlockedAdhemerval Zanella2020-10-162-67/+29
| | | | | | And use it on readdir_r implementation. Checked on i686-linux-gnu.
* linux: Simplify opendir buffer allocationAdhemerval Zanella2020-10-161-33/+18
| | | | | | | | | The fallback allocation is removed, so the possible size constraint should be analyzed just once; __alloc_dir assumes that 'statp' argument is non-null, and the max_buffer_size move to close its used. Checked on x86_64-linux-gnu and i686-linux-gnu.
* linux: Move posix dir implementations to LinuxAdhemerval Zanella2020-10-1612-23/+911
| | | | | | | | | | | | | This generic implementation already expects a getdents API which is Linux specific. It also allows simplify it by assuming _DIRENT_HAVE_D_RECLEN and _DIRENT_HAVE_D_OFF support. The readdir are also expanded on each required implementation, futher fixes and improvements will make parametrize the implementation more complex. Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for all affected ABIs.
* linux: Add 64-bit time_t support for wait3Adhemerval Zanella2020-10-161-0/+44
| | | | | | | | It basically calls the 64-bit time_t wait4 internal symbol. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* Move ftime to a compatibility symbolAdhemerval Zanella2020-10-161-1/+0
| | | | | | | | | | It was made deprecated on 2.31, so it moves to compat symbol after two releases. It was also removed from exported symbol for riscv32 (since ABI will be supported on for 2.33). Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* linux: Fix time64 support for futimesatAdhemerval Zanella2020-10-162-54/+6
| | | | | | | | | | | | The generic implementation does not support time64 and the default one return overflow for invalid tv_sec with UTIME_NOW / UTIME_OMIT (which is valid since tv_sec in such cases is ignored by the kernel). Checked on x86_64-linux-gnu and i686-linux-gnu (on 5.4 and on 4.15 kernel). Reviewed-by: Lukasz Majewski <lukma@denx.de>