Commit Graph

106 Commits

Author SHA1 Message Date
Adhemerval Zanella
7eb3000f9f linux: Remove stat-check.c
The check is moved to LFS fstatat implementation (since it is the
code that actually implements the syscall).

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 08:02:16 -03:00
Adhemerval Zanella
d2fa24f239 linux: Remove overflow.h
The header is not used anywhere.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 08:01:10 -03:00
Adhemerval Zanella
f6e616435d linux: Consolidate statfs implementations
The __NR_statfs64 syscall is supported on all architectures but
aarch64, mips64, riscv64, and x86_64.  And newer ABIs also uses
the new statfs64 interface (where the struct size is used as
second argument).

So the default implementation now uses:

  1. __NR_statfs64 for non-LFS call and handle overflow directly
     There is no need to handle __NR_statfs since all architectures
     that only support are LFS only.

  2. __NR_statfs if defined or __NR_statfs64 otherwise for LFS
     call.

Alpha is the only outlier, since it is a 64-bit architecture which
provides non-LFS interface and only provides __NR_statfs64 on
newer kernels (v5.1+).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 08:00:11 -03:00
Adhemerval Zanella
1bfbaf7130 linux: Consolidate fstatfs implementations
The __NR_fstatfs64 syscall is supported on all architectures but
aarch64, mips64, riscv64, and x86_64.  And newer ABIs also uses
the new fstatfs64 interface (where the struct size is used as
first argument).

So the default implementation now uses:

  1. __NR_fstatfs64 for non-LFS call and handle overflow directly
     There is no need to handle __NR_fstatfs since all architectures
     that only support are LFS only.

  2. __NR_fstatfs if defined or __NR_fstatfs64 otherwise for LFS
     call.

Alpha is the only outlier, it is a 64-bit architecture which
provides non-LFS interface and only provides __NR_fstatfs64 on
newer kernels (5.1+).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 07:58:31 -03:00
Adhemerval Zanella
e7702cb56e linux: Set LFS statfs as default
Currently glibc has three different struct statfs{64} definitions:

  1. Non-LFS support where non-LFS and LFS struct have different
     size: alpha, arm, hppa, i686, m68k, microblaze, mips (all abis),
     powerpc32, s390, sh4, and sparc.

  2. Non-LFS support where non-LFS and LFS struct have the same
     size: csky and nios2.

  3. Only LFS support (where both struct have the same size): arc,
     ia64, powerpc64 (including LE), riscv (both 32 and 64 bits),
     s390x, sparc64, and x86 (including x32).

The STATFS_IS_STATFS64/__STATFS_MATCHES_STATFS64 does not tell apart
between 1. and 2. since for both the only difference is the struct
size (for 2. both non-LFS and LFS uses the same syscall, where for
1. the old non-LFS is used for [f]statfs).

This patch move the generic statfs.h for both csky and nios2, and
make the default definitions for newer ABIs to assume that only
LFS will be support (so there is no need to keep no-LFS and LFS
struct statfs with the same size, it will be implicit).

This patch does not change the code generation.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 07:58:09 -03:00
Adhemerval Zanella
36260d5035 linux: Set default kernel_stat.h to LFS
The XSTAT_IS_XSTAT64 and STAT_IS_KERNEL_STAT flags are now set to 1 and
STATFS_IS_STATFS64 is set to __STATFS_MATCHES_STATFS64.  This makes the
default ABI for newer ports to provide only LFS calls.

A copy of non-LFS support is provided to 32-bit ABIS with non-LFS
support (arm, csky, i386, m68k, nios2, s390, and sh).  Is also allows
to remove the 64-bit ports, which already uses the default values.

This patch does not change the code generation.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-02-11 07:58:05 -03:00
Paul Eggert
2b778ceb40 Update copyright dates with scripts/update-copyrights
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
2021-01-02 12:17:34 -08:00
Adhemerval Zanella
720480934a linux: Consolidate brk implementation
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>
2020-12-10 17:42:37 -03:00
Adhemerval Zanella
01bd62517c Remove tls.h inclusion from internal errno.h
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.
2020-11-13 12:59:19 -03:00
Adhemerval Zanella
01f33a9acc linux: Fix time64 support for futimesat
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>
2020-10-16 14:19:23 -03:00
Adhemerval Zanella
d892723830 linux: Move the struct stat{64} to struct_stat.h
The common definitions are moved to a Linux generic stat.h while the
struct stat{64} definition are moved to a arch-specific struct_stat.h
header.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-10-09 17:02:06 -03:00
Adhemerval Zanella
589260cef8 Remove mknod wrapper functions, move them to symbols
This patch removes the mknod and mknodat static wrapper and add the
symbols on the libc with the expected names.

Both the prototypes of the internal symbol linked by the static
wrappers and the inline redirectors are also removed from the installed
sys/stat.h header file.  The wrapper implementation license LGPL
exception is also removed since it is no longer statically linked to
binaries.

Internally the _STAT_VER* definitions are moved to the arch-specific
xstatver.h file.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-10-09 17:02:06 -03:00
Adhemerval Zanella
8ed005daf0 Remove stat wrapper functions, move them to exported symbols
This patch removes the stat, stat64, lstat, lstat64, fstat, fstat64,
fstatat, and fstatat64 static wrapper and add the symbol on the libc
with the expected names.

Both the prototypes of the internal symbol linked by the static
wrappers and the inline redirectors are also removed from the installed
sys/stat.h header file.  The wrapper implementation license LGPL
exception is also removed since it is no longer statically linked to
binaries.

Internally the _STAT_VER* definitions are moved to a arch-specific
xstatver.h file.  The internal defines that redirects internals
{f}stat{at} to their {f}xstat{at} counterparts are removed for Linux
(!NO_RTLD_HIDDEN).  Hurd still requires them since {f}stat{at} pulls
extra objects that makes the loader build fail otherwise (I haven't
dig into why exactly).

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-10-09 17:02:06 -03:00
Adhemerval Zanella
4af88f96de linux: Consolidate utimes
The generic version does not have time64 support and Linux default
uses utimensat.  With hppa version gone, __ASSUME_UTIMES is not used
anymore.

Checked on x86_64-linux-gnu and i686-linux-gnu (on 5.4 and on 4.15
kernel).

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
2020-09-28 16:21:59 -03:00
Adhemerval Zanella
2315996215 Linux: Consolidate xmknod
The __NR_mknodat syscall is supported on all kernels, so the generic
implementation is used as default.

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

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-09-11 14:35:27 -03:00
Adhemerval Zanella
5f85cc2f47 linux: Consolidate fxstatat{64}
The LFS support is implemented on fxstat64.c, instead of fxstat.c for
64-bit architectures.  The fxstatat.c implements the non-LFS and it is
a no-op for !XSTAT_IS_XSTAT64.

The generic non-LFS implementation handles two cases:

  1. New kABIs which uses generic pre 64-bit time Linux ABI (csky and
     nios): it issues __NR_fstatat64 plus handle the overflow on st_ino,
     st_size, or st_blocks.  It only handles _STAT_VER_KERNEL.

  2. Old kABIs with old non-LFS support (arm, i386, hppa, m68k, mips32,
     microblaze, s390, sh, powerpc, and sparc32).  it issues
     __NR_fstatat64 and convert to non-LFS stat struct based on the
     version.

Also non-LFS mips64 is an outlier and it has its own implementation
since _STAT_VER_LINUX requires a different conversion function (it
uses the kernel_stat as the sysissues argument since its exported ABI
is different than the kernel one for both non-LFS and LFS
implementation).

The generic LFS implementation handles multiple cases:

  1. XSTAT_IS_XSTAT64 being 1:

    1.1. 64-bit kABI (aarch64, ia64, powerpc64*, s390x, riscv64, and
         x86_64): it issues __NR_newfstatat for _STAT_VER_KERNEL or
         _STAT_VER_LINUX.

    1.2. 64-bit kABI outlier (sparc64): it issuess fstatat64 with a
         temporary stat64 and convert to output stat64 based on the
         input version (and using a sparc64 specific __xstat32_conv).

    1.3. New 32-bit kABIs with only 64-bit time_t support (arc and
	 riscv32): it issues __NR_statx and covert to struct stat64.

  2. Old ABIs with XSTAT_IS_XSTAT64 being 0 (arm, csky, i386, hppa, m68k,
     microblaze, mips32, nios2, sh, powerpc32, and sparc32): it issues
     __NR_fstat64.

Also, two special cases requires specific implementations:

  1. alpha: it uses the __NR_fstatat64 syscall instead.

  2. mips64: as for non-LFS implementation its ABIs differ from
     glibc exported one, which requires an specific conversion
     function to handle the kernel_stat.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-09-11 14:35:24 -03:00
Adhemerval Zanella
5febe6a38f linux: Consolidate fxstat{64}
The LFS support is implemented on fxstat64.c, instead of fxstat.c for
64-bit architectures.  The fxstat.c implements the non-LFS and it is
a no-op for !XSTAT_IS_XSTAT64.

The generic non-LFS implementation handles two cases:

  1. New kABIs which uses generic pre 64-bit time Linux ABI (csky and
     nios): it issuess __NR_fstat64 plus handle the overflow on st_ino,
     st_size, or st_blocks.  It only handles _STAT_VER_KERNEL.

  2. Old KABIs with old non-LFS support (arm, i386, hppa, m68k,
     microblaze, s390, sh, powerpc, and sparc32).  For _STAT_VER_KERNEL
     it issues __NR_fstat, otherwise it calls __NR_fstat64 and convert
     to non-LFS stat struct and handle possible overflows on st_ino,
     st_size, or st_blocks.

Also non-LFS mips is an outlier and it has its own implementation since
_STAT_VER_LINUX requires a different conversion function (it uses the
kernel_stat as the sysissues argument since its exported ABI is
different than the kernel one for both non-LFS and LFS implementation).

The generic LFS implementation handles multiple cases:

  1. XSTAT_IS_XSTAT64 being 1:

    1.1. 64-bit kABI (aarch64, ia64, powerpc64*, s390x, riscv64, and
	 x86_64): it issuess __NR_fstat for _STAT_VER_KERNEL or
	 _STAT_VER_LINUX.

    1.2. Old 64-bit kABI with defines __NR_fstat64 instead of __NR_fstat
         (sparc64): it issues __NR_fstat for _STAT_VER_KERNEL or
         __NR_fstat64 and convert to struct stat64.

    1.3. New 32-bit kABIs with only 64-bit time_t support (arc and
	 riscv32): it issuess __NR_statx and covert to struct stat64.

  2. Old ABIs with XSTAT_IS_XSTAT64 being 0 (arm, csky, i386, hppa,
     m68k, microblaze, mips32, nios2, sh, powerpc32, and sparc32): it
     issues __NR_fstat64.

Also, two special cases requires specific implementations:

  1. alpha: it requires to handle _STAT_VER_KERNEL64 to issues
     __NR_fstat64 and use the kernel_stat with __NR_fstat otherwise.

  2. mips64: as for non-LFS implementation its ABIs differ from
     glibc exported one, which requires an specific conversion
     function to handle the kernel_stat.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-09-11 14:35:20 -03:00
Adhemerval Zanella
4f40e6adc4 linux: Consolidate lxstat{64}
The LFS support is implemented on lxstat64.c, instead of lxstat.c for
64-bit architectures.  The xstat.c implements the non-LFS and it is
a no-op for !XSTAT_IS_XSTAT64.

The generic non-LFS implementation handles two cases:

  1. New kABIs which uses generic pre 64-bit time Linux ABI (csky and
     nios): it issues __NR_fstat64 with AT_SYMLINK_NOFOLLOW plus handles
     the possible overflow off st_ino, st_size, or st_blocks.  It only
     handles _STAT_VER_KERNEL.

  2. Old KABIs with old non-LFS support (arm, i386, hppa, m68k,
     microblaze, s390, sh, powerpc, and sparc32).  For _STAT_VER_KERNEL
     it issues __NR_lstat, otherwise it isseus __NR_lstat64 and convert
     to non-LFS stat struct and handle possible overflows on st_ino,
     st_size, or st_blocks.

Also non-LFS mips is an outlier and it has its own implementation since
_STAT_VER_LINUX requires a different conversion function (it uses the
kernel_stat as the syscall argument since its exported ABI is different
than the kernel one for both non-LFS and LFS implementation).

The generic LFS implementation handles multiple cases:

  1. XSTAT_IS_XSTAT64 being 1:

    1.1. Old 64-bit kABI (ia64, powerpc64*, s390x, sparc64, x86_64): it
         issues __NR_lstat for _STAT_VER_KERNEL or _STAT_VER_LINUX.

    1.2. Old 64-bit kABI with defines __NR_lstat64 instead of __NR_lstat
         (sparc64): it issues __NR_lstat for _STAT_VER_KERNEL or
         __NR_lstat64 and convert to struct stat64.

    1.3. New kABIs which uses generic 64-bit Linux ABI (aarch64 and
         riscv64): it issues __NR_newfstatat with AT_SYMLINK_NOFOLLOW
	 and only for _STAT_VER_KERNEL.

    1.4. New 32-bit kABIs with only 64-bit time_t support (arc and
         riscv32): it issues __NR_statx and covert to struct stat64.

  2. Old ABIs with XSTAT_IS_XSTAT64 being 0:

    2.1. New kABIs which uses generic pre 64-bit time Linux ABI (csky
	 and nios2): it issues __NR_fstatat64 for _STAT_VER_KERNEL.

    2.2. Old kABIs with old non-LFS support (arm, i386, hppa, m68k,
	 microblaze, s390, sh, mips32, powerpc32, and sparc32): it
	 issues __NR_lstat64.

Also, two special cases requires specific LFS implementations:

  1. alpha: it requires to handle _STAT_VER_KERNEL64 to issue
     __NR_lstat64 and use the kernel_stat with __NR_lstat otherwise.

  2. mips64: as for non-LFS implementation its ABIs differ from
     glibc exported one, which requires a specific conversion
     function to handle the kernel_stat.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-09-11 14:35:15 -03:00
Adhemerval Zanella
71aadfb8ae linux: Consolidate xstat{64}
The LFS support is implemented on xstat64.c, instead of xstat.c for
64-bit architectures.  The xstat.c implements the non-LFS it is
no-op for !XSTAT_IS_XSTAT64.

The generic non-LFS implementation handle two cases:

  1. New kABIs which uses generic pre 64-bit time Linux ABI (csky and
     nios): it issues __NR_fstat64 plus handle the overflow on st_ino,
     st_size, or st_blocks.  It only handles _STAT_VER_KERNEL.

  2. Old KABIs with old non-LFS support (arm, i386, hppa, m68k,
     microblaze, s390, sh, powerpc, and sparc32).  For _STAT_VER_KERNEL
     it issues __NR_stat, otherwise it issues __NR_stat64 and convert
     to non-LFS stat struct handling possible overflows on st_ino,
     st_size, or st_blocks.

Also the non-LFS mips is an outlier and it has its own implementation
since _STAT_VER_LINUX requires a different conversion function (it uses
the kernel_stat as the syscall argument since its exported ABI is
different than the kernel one for both non-LFS and LFS implementation).

The generic LFS implementation handles multiple cases:

  1. XSTAT_IS_XSTAT64 being 1:

    1.1. Old 64-bit kABI (ia64, powerpc64*, s390x, x86_64): it
         issues __NR_stat for _STAT_VER_KERNEL or _STAT_VER_LINUX.

    1.2. Old 64-bit kABI with defines __NR_stat64 instead of __NR_stat
	 (sparc64): it issues __NR_stat for _STAT_VER_KERNEL or
	 __NR_stat64 and convert to struct stat64.

    1.3. New kABIs which uses generic 64-bit Linux ABI (aarch64 and
         riscv64): it issues __NR_newfstatat and only for
         _STAT_VER_KERNEL.

    1.4. New 32-bit kABIs with only 64-bit time_t support (arc and
	 riscv32): it issues __NR_statx and covert to struct stat64.

  2. Old ABIs with XSTAT_IS_XSTAT64 being 0:

    2.1. New kABIs which uses generic pre 64-bit time Linux ABI (csky
	 and nios2): it issues __NR_fstatat64 for _STAT_VER_KERNEL.

    2.2. Old kABIs with old non-LFS support (arm, i386, hppa, m68k,
	 microblaze, s390, sh, mips32, powerpc32, and sparc32): it
	 issues __NR_stat64.

Also, two special cases requires specific LFS implementations:

  1. alpha: it requires to handle _STAT_VER_KERNEL64 to call __NR_stat64
     or use the kernel_stat with __NR_stat otherwise.

  2. mips64: as for non-LFS implementation its ABIs differ from glibc
     exported one, which requires an specific conversion function to
     handle the kernel_stat.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2020-09-11 14:35:13 -03:00
Alistair Francis
07fe93cd98 generic/typesizes.h: Add support for 32-bit arches with 64-bit types
Update the default typesizes.h to match the new kernel sizes for 32-bit
architectures with a 64-bit time_t and friends. This follows the sizes
used for RV32 which is a y2038 safe architecture added after Linux 5.1.

Reviewed-by: Vineet Gupta <vgupta@synopsys.com>
Tested-by: Vineet Gupta <vgupta@synopsys.com>
2020-04-29 08:30:03 -07:00
Florian Weimer
076f09afba Linux: Remove <sys/sysctl.h> and the sysctl function
Linux 5.5 remove the system call in commit
61a47c1ad3a4dc6882f01ebdc88138ac62d0df03 ("Linux: Remove
<sys/sysctl.h>").  Therefore, the compat function is just a stub that
sets ENOSYS.

Due to SHLIB_COMPAT, new ports will not add the sysctl function anymore
automatically.

x32 already lacks the sysctl function, so an empty sysctl.c file is
used to suppress it.  Otherwise, a new compat symbol would be added.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2020-04-15 17:17:32 +02:00
Alistair Francis
1c634e677f sysv: Define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64
On y2038 safe 32-bit systems the Linux kernel expects itimerval
and rusage to use a 32-bit time_t, even though the other time_t's
are 64-bit. There are currently no plans to make 64-bit time_t versions
of these structs.

There are also other occurrences where the time passed to the kernel via
timeval doesn't match the wordsize.

To handle these cases let's define a new macro
__KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64. This macro specifies if the
kernel's old_timeval matches the new timeval64. This should be 1 for
64-bit architectures except for Alpha's osf syscalls. The define should
be 0 for 32-bit architectures and Alpha's osf syscalls.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2020-04-02 09:21:05 -07:00
Florian Weimer
71691aae92 Linux: Clean up pread64/pwrite64 system call names
Linux removed the last definitions of __NR_pread and __NR_pwrite
in commit 4ba66a9760722ccbb691b8f7116cad2f791cca7b, the removal
of the blackfin port.  All architectures now define __NR_pread64 and
__NR_pwrite64 only.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-03-03 12:14:40 +01:00
Adhemerval Zanella
bc2eb9321e linux: Remove INTERNAL_SYSCALL_DECL
With all Linux ABIs using the expected Linux kABI to indicate
syscalls errors, the INTERNAL_SYSCALL_DECL is an empty declaration
on all ports.

This patch removes the 'err' argument on INTERNAL_SYSCALL* macro
and remove the INTERNAL_SYSCALL_DECL usage.

Checked with a build against all affected ABIs.
2020-02-14 21:12:45 -03:00
Lukasz Majewski
3fced064f2 y2038: Define __suseconds64_t type to be used with struct __timeval64
The __suseconds64_t type is supposed to be the 64 bit type across all
architectures.

It would be mostly used internally in the glibc - however, when passed to
Linux kernel (very unlikely), if necessary, it shall be converted to 32
bit type (i.e. __suseconds_t)

Build tests:
./src/scripts/build-many-glibcs.py glibcs

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-02-07 17:55:07 +01:00
Joseph Myers
d614a75396 Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Alistair Francis
acab05949f Define __STATFS_MATCHES_STATFS64
Add a new macro __STATFS_MATCHES_STATFS64 that specifies if fsblkcnt_t
matches fsblkcnt64_t and if fsfilcnt_t matches fsfilcnt64_t.

As we don't have the padding we also need to update the overflow checker
to not access the undefined members.
2019-10-24 09:14:26 -07:00
Alistair Francis
c82005921e sysdeps/stat: Handle 64-bit ino_t types on 32-bit hosts
On a 32-bit platform with a 64-bit ino_t type (__INO_T_MATCHES_INO64_T
defined) we want to update the stat struct to remove the padding as it
isn't required. As we don't have the padding we also need to update the
overflow checker to not access the undefined members.
2019-10-23 12:43:31 -07:00
Alistair Francis
aa706e13f4 Split up endian.h to minimize exposure of BYTE_ORDER.
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.
2019-10-01 14:54:46 -07:00
Paul Eggert
5a82c74822 Prefer https to http for gnu.org and fsf.org URLs
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-07 02:43:31 -07:00
Joseph Myers
c5f65462a2 Break lines before not after operators, batch 4.
This patch fixes further coding style issues where code should have
broken lines before operators in accordance with the GNU Coding
Standards but instead was breaking lines after them.

Tested for x86_64, and with build-many-glibcs.py.

	* stdio-common/vfscanf-internal.c (ARG): Break lines before rather
	than after operators.
	* sysdeps/mach/hurd/setitimer.c (timer_thread): Likewise.
	(setitimer_locked): Likewise.
	* sysdeps/mach/hurd/sigaction.c (__sigaction): Likewise.
	* sysdeps/mach/hurd/sigaltstack.c (__sigaltstack): Likewise.
	* sysdeps/mach/pagecopy.h (PAGE_COPY_FWD): Likewise.
	* sysdeps/mach/thread_state.h (machine_get_basic_state): Likewise.
	* sysdeps/powerpc/powerpc64/tst-ucontext-ppc64-vscr.c
	(PPC_CPU_SUPPORTED): Likewise.
	* sysdeps/unix/sysv/linux/alpha/a.out.h (N_TXTOFF): Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h
	(stat_overflow): Likewise.
	(statfs_overflow): Likewise.
	* sysdeps/unix/sysv/linux/tst-personality.c (do_test): Likewise.
	* sysdeps/unix/sysv/linux/tst-ttyname.c (eq_ttyname): Likewise.
	(eq_ttyname_r): Likewise.
	(run_chroot_tests): Likewise.
2019-03-07 20:20:25 +00:00
Joseph Myers
aa0e46636a Break further lines before not after operators.
This patch continues the process of fixing coding style to break lines
before not after operators in accordance with the GNU Coding
Standards, fixing such issues in a non-exhaustive selection of sysdeps
files that had them.

Tested for x86_64, and with build-many-glibcs.py.

	* sysdeps/arm/sysdep.h (#if condition): Break lines before rather
	than after operators.
	* sysdeps/mach/hurd/fork.c (__fork): Likewise.
	* sysdeps/mach/hurd/getcwd.c
	(__hurd_canonicalize_directory_name_internal): Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-consistent.c
	(pthread_mutex_consistent): Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-init.c (_pthread_mutex_init):
	Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-transfer-np.c
	(__pthread_mutex_transfer_np): Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-unlock.c
	(__pthread_mutex_unlock): Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex.h (ROBUST_LOCK): Likewise.
	(mtx_owned_p): Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-getrobust.c
	(pthread_mutexattr_getrobust): Likewise.
	* sysdeps/mach/hurd/i386/init-first.c (init1): Likewise.
	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
	Likewise.
	* sysdeps/mach/hurd/ioctl.c (__ioctl): Likewise.
	* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Likewise.
	* sysdeps/mach/hurd/kill.c (__kill): Likewise.
	* sysdeps/mach/hurd/mig-reply.c (__mig_get_reply_port): Likewise.
	* sysdeps/mach/hurd/ptrace.c (ptrace): Likewise.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/unix/sysv/linux/aarch64/sysdep.h (#if condition):
	Likewise.
	* sysdeps/unix/sysv/linux/alpha/ioperm.c (process_cpuinfo):
	Likewise.
	* sysdeps/unix/sysv/linux/bits/timex.h (STA_RONLY): Likewise.
	* sysdeps/unix/sysv/linux/csky/sysdep.h (#if condition): Likewise.
	* sysdeps/unix/sysv/linux/generic/____longjmp_chk.c
	(____longjmp_chk): Likewise.
	* sysdeps/unix/sysv/linux/generic/futimesat.c (futimesat):
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
	(INTERNAL_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
	(INTERNAL_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
	(__get_clockfreq_via_cpuinfo): Likewise.
2019-02-26 15:01:50 +00:00
Joseph Myers
04277e02d7 Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2019-01-01 00:11:28 +00:00
Mao Han
6bbfc5c09f Add statx conditionals for wordsize-32 *xstat.c
Linux kernel have remove stat64 family from default syscall set, new
implementations with statx is needed when __ARCH_WANT_STAT64 is not
define. This patch add conditionals for relevant functions, using statx
system call to get information and then copy to the return buf, ref to
include/linux/fs.h from linux kernel.

	* sysdeps/unix/sysv/linux/Makefile: Add statx_cp.c.
	* sysdeps/unix/sysv/linux/fxstat64.c: Add conditionals for kernel
	without stat64 system call support.
	* sysdeps/unix/sysv/linux/fxstatat64.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/statx_cp.c: New file.
	* sysdeps/unix/sysv/linux/statx_cp.c: Likewise.
	* sysdeps/unix/sysv/linux/statx_cp.h: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/statx_cp.c: Likewise.
2018-12-17 09:20:02 +08:00
Joseph Myers
2a4b25fad8 Use common bits/shm.h for more architectures.
sysdeps/unix/sysv/linux/bits/shm.h has padding after time fields in
struct shmid_ds unconditionally, and thus is only suitable for 32-bit
architectures (no 64-bit configurations use this file);
sysdeps/unix/sysv/linux/generic/bits/shm.h is substantively the same,
except that the padding is conditioned on __WORDSIZE == 32, and so it
can be used for 64-bit architectures as well.

This patch adds the conditionals to
sysdeps/unix/sysv/linux/bits/shm.h.  The linux/generic/ version is
then no longer needed and so is removed, as are the alpha and s390
versions which are also no longer needed.  The other
architecture-specific versions have different padding, layout, types
or SHMLBA definitions and so are still needed after this change.

This is essentially the same change for bits/shm.h as the bits/msq.h
patch and the bits/sem.h patch.  However, the details of the padding
variations for the architectures that aren't changed are not all the
same between msqid_ds, shmid_ds and semid_ds.

Tested with build-many-glibcs.py.

	* sysdeps/unix/sysv/linux/bits/shm.h: Include <bits/wordsize.h>.
	(struct shmid_ds): Condition padding after time fields on
	[__WORDSIZE == 32].
	* sysdeps/unix/sysv/linux/alpha/bits/shm.h: Remove file.
	* sysdeps/unix/sysv/linux/generic/bits/shm.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/shm.h: Likewise.
2018-10-10 00:56:17 +00:00
Joseph Myers
19e62f2690 Use common bits/sem.h for more architectures.
sysdeps/unix/sysv/linux/bits/sem.h has padding after time fields in
struct semid_ds unconditionally, and thus is only suitable for 32-bit
architectures (no 64-bit configurations use this file);
sysdeps/unix/sysv/linux/generic/bits/sem.h is substantively the same,
except that the padding is conditioned on __WORDSIZE == 32, and so it
can be used for 64-bit architectures as well.

This patch adds the conditionals to
sysdeps/unix/sysv/linux/bits/sem.h.  The linux/generic/ version is
then no longer needed and so is removed, as are the alpha, ia64 and
s390 versions which are also no longer needed.  The other
architecture-specific versions have different padding or types and so
are still needed after this change.

This is essentially the same change for bits/sem.h as the bits/msq.h
patch.  However, the details of the padding variations for the
architectures that aren't changed are not all the same between
msqid_ds and semid_ds.

Tested with build-many-glibcs.py.

	* sysdeps/unix/sysv/linux/bits/sem.h: Include <bits/wordsize.h>.
	(struct semid_ds): Condition padding after time fields on
	[__WORDSIZE == 32].
	* sysdeps/unix/sysv/linux/alpha/bits/sem.h: Remove file.
	* sysdeps/unix/sysv/linux/generic/bits/sem.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/sem.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/sem.h: Likewise.
2018-10-10 00:54:27 +00:00
Joseph Myers
b9c0f6c11a Use common bits/msq.h for more architectures.
sysdeps/unix/sysv/linux/bits/msq.h has padding after time fields in
struct msqid_ds unconditionally, and thus is only suitable for 32-bit
architectures (no 64-bit configurations use this file);
sysdeps/unix/sysv/linux/generic/bits/msq.h is substantively the same,
except that the padding is conditioned on __WORDSIZE == 32, and so it
can be used for 64-bit architectures as well.

This patch adds the conditionals to
sysdeps/unix/sysv/linux/bits/msq.h.  The linux/generic/ version is
then no longer needed and so is removed, as are the alpha, ia64 and
s390 versions which are also no longer needed.  The other
architecture-specific versions have different padding or types and so
are still needed after this change.

Tested with build-many-glibcs.py.

	* sysdeps/unix/sysv/linux/bits/msq.h: Include <bits/wordsize.h>.
	(struct msqid_ds): Condition padding after time fields on
	[__WORDSIZE == 32].
	* sysdeps/unix/sysv/linux/alpha/bits/msq.h: Remove file.
	* sysdeps/unix/sysv/linux/generic/bits/msq.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/msq.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/msq.h: Likewise.
2018-10-10 00:52:47 +00:00
Florian Weimer
ef939d928a __readlink_chk: Remove micro-optimization 2018-08-21 11:24:12 +02:00
Florian Weimer
88ffb39dc6 __readlink_chk: Assume HAVE_INLINED_SYSCALLS
HAVE_INLINED_SYSCALLS is always defined on Linux.
Switch to INLINE_SYSCALL_CALL as well.
2018-08-20 18:24:09 +02:00
Joseph Myers
f2857da7cd Add SHM_STAT_ANY from Linux 4.17 to bits/shm.h.
Linux 4.17 adds a SHM_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/shm.h headers.

Tested for x86_64.

	* sysdeps/unix/sysv/linux/alpha/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): New macro.
	* sysdeps/unix/sysv/linux/arm/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/generic/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/hppa/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/sh/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/x86/bits/shm.h [__USE_MISC]
	(SHM_STAT_ANY): Likewise.
2018-06-18 13:37:57 +00:00
Joseph Myers
176c7fee51 Add SEM_STAT_ANY from Linux 4.17 to bits/sem.h.
Linux 4.17 adds a SEM_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/sem.h headers.

Tested for x86_64.

	* sysdeps/unix/sysv/linux/alpha/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): New macro.
	* sysdeps/unix/sysv/linux/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/generic/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/hppa/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/x86/bits/sem.h [__USE_MISC]
	(SEM_STAT_ANY): Likewise.
2018-06-18 13:36:41 +00:00
Joseph Myers
86bf0019ed Add MSG_STAT_ANY from Linux 4.17 to bits/msq.h.
Linux 4.17 adds a MSG_STAT_ANY constant (ipcs command).  This patch
adds it to the relevant bits/msq.h headers.

Tested for x86_64.

	* sysdeps/unix/sysv/linux/alpha/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): New macro.
	* sysdeps/unix/sysv/linux/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/generic/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/hppa/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/ia64/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/s390/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
	* sysdeps/unix/sysv/linux/x86/bits/msq.h [__USE_MISC]
	(MSG_STAT_ANY): Likewise.
2018-06-18 13:34:52 +00:00
Adhemerval Zanella
cf2478d53a Deprecate ustat syscall interface
As for sysctl, ustat has been deprecated in favor of {f}statfs.  Also
some newer ports which uses generic interface builds a stub version that
returns ENOSYS.

This patch deprecates ustat interface by removing ustat.h related headers,
adding a compatibility symbol, and avoiding new ports to build and provide
the symbol.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with a
check-abi on all affected ABIs.

	* NEWS: Add ustat.h deprecation entry.
	* bits/ustat.h: Remove file.
	* misc/sys/ustat.h: Likewise.
	* misc/ustat.h: Likewise.
	* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
	* misc/Makefile (headers): Remove ustat.h and sys/ustat.h.
	* misc/ustat.c (__ustat): Rename to __old_ustat and export only in
	compatibility mode.
	* sysdeps/unix/sysv/linux/ustat.c (__ustat): Likewise.
	* sysdeps/unix/sysv/linux/mips/ustat.c: Define DEV_TO_KDEV and use
	generic Linux implementation.
2018-05-02 08:43:31 -03:00
Adhemerval Zanella
298d0e3129 Consolidate Linux getdents{64} implementation
This patch consolidates Linux getdents{64} implementation on just
the default sysdeps/unix/sysv/linux/getdents{64}{_r}.c ones.

Although this symbol is used only internally, the non-LFS version
still need to be build due the non-LFS getdirentries which requires
its semantic.

The non-LFS default implementation now uses the wordsize-32 as base
which uses getdents64 syscall plus adjustment for overflow (it allows
to use the same code for architectures that does not support non-LFS
getdents syscall).  It has two main differences to wordsize-32 one:

  - DIRENT_SET_DP_INO is added to handle alpha requirement to zero
    the padding.

  - alloca is removed by allocating a bounded temporary buffer (it
    increases stack usage by roughly 276 bytes).

The default implementation handle the Linux requirements:

  * getdents is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * getdents64 is always built and aliased to getdents for ABIs
    that define _DIRENT_MATCHES_DIRENT64 to 1.

  * A compat symbol is added for getdents64 for ABI that used to
    export the old non-LFS version.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* sysdeps/unix/sysv/linux/alpha/getdents.c: Add comments with alpha
	requirements.
	 (_DIRENT_MATCHES_DIRENT64): Undef
	* sysdeps/unix/sysv/linux/alpha/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/getdents64.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/getdents.c: Simplify implementation by
	use getdents64 syscalls as base.
	* sysdeps/unix/sysv/linux/getdents64.c: Likewise and add compatibility
	symbol if required.
	* sysdeps/unix/sysv/linux/hppa/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
	(__get_clockfreq_via_proc_openprom): Use __getdents64.
	* sysdeps/unix/sysv/linux/mips/mips64/getdents64.c: New file.
2018-04-19 08:49:52 -03:00
Joseph Myers
5f45f96ad0 Unify umount function implementations (bug 16552).
Linux kernel architectures have various arrangements for umount
syscalls.  There is a syscall that takes flags, and an older one that
does not.  Newer architectures have only the one taking flags, under
the name umount2 (or under the name umount, in the ia64 case).  Older
architectures may have both, under the names umount2 and umount (or
under the names umount and oldumount, in the alpha case).  glibc then
has several similar implementations of the umount function (no flags)
in terms of either the __umount2 function, or the corresponding
syscall, or in terms of the old syscall under either of its names.

This patch simplifies the implementations in glibc by always using the
__umount2 function to implement the umount function on all systems
using the Linux kernel.  The linux/generic implementation is moved to
sysdeps/unix/sysv/linux (without any changes to code or comments) and
all the other variants are removed.  (This will have the effect of
causing the new syscall to be used in some cases that previously used
the old one, but as discussed for previous changes, such a change to
the underlying syscalls used is OK.)

There remain two variants of how the __umount2 function is
implemented, either in umount2.S, or, for ia64, in syscalls.list.

Tested with build-many-glibcs.py.

	[BZ #16552]
	* sysdeps/unix/sysv/linux/generic/umount.c: Move to ....
	* sysdeps/unix/sysv/linux/umount.c: ... here.
	* sysdeps/unix/sysv/linux/arm/umount.c: Remove file.
	* sysdeps/unix/sysv/linux/hppa/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/ia64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/umount.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/umount.c: Likewise.
2018-03-26 21:18:28 +00:00
Samuel Thibault
4e9066bc88 Add missing start-of-file descriptive comment.
* io/futimens.c: Add missing start-of-file descriptive comment.
	* io/utime.c: Likewise.
	* misc/futimesat.c: Likewise.
	* misc/utimes.c: Likewise.
	* sysdeps/mach/hurd/futimesat.c: Likewise.
	* sysdeps/mach/hurd/utimes.c: Likewise.
	* sysdeps/posix/utime.c: Likewise.
	* sysdeps/posix/utimes.c: Likewise.
	* sysdeps/unix/sysv/linux/futimesat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/futimesat.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/utimes.c: Likewise.
	* sysdeps/unix/sysv/linux/utimes.c: Likewise.
2018-03-06 09:21:04 +01:00
Joseph Myers
688903eb3e Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2018-01-01 00:32:25 +00:00
H.J. Lu
0a587a8a98 Hide __chmod and __mkdir [BZ #18822]
Hide internal __chmod and __mkdir functions to allow direct access
within libc.so and libc.a without using GOT nor PLT.

	[BZ #18822]
	* include/sys/stat.h (__chmod): Add libc_hidden_proto.
	(__mkdir): Likewise.
	* io/chmod.c (__chmod): Add libc_hidden_def.
	* io/mkdir.c (__mkdir): Likewise.
	* sysdeps/mach/hurd/chmod.c (__chmod): Likewise.
	* sysdeps/mach/hurd/mkdir.c (__mkdir): Likewise.
	* sysdeps/unix/sysv/linux/generic/chmod.c (__chmod): Likewise.
	* sysdeps/unix/sysv/linux/generic/mkdir.c (__mkdir): Likewise.
2017-09-04 13:38:51 -07:00
Adhemerval Zanella
9b8f8593e5 Consolidate Linux fcntl implementation
This patch consolidates the fcntl Linux syscall generation on
sysdeps/unix/sysv/linux/fcntl.c.  It basically removes all the
architecture specific implementations.

Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.

	* sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/fcntl.c: New file.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
	use default implementation.
2017-06-30 15:17:26 -03:00
Adhemerval Zanella
88499a87ce posix: Consolidate Linux pause syscall
This patch consolidates the pause Linux implementation on
sysdeps/unix/sysv/linux/pause.c.  If defined the pause syscall
(__NR_pause) will be used, other ppoll with 0 arguments will be
used instead.

It has the small advantage of generic pause implementation with
uses rt_sigprocmask plus rt_sigsuspend because it requires only
one syscall and the pause is done atomically regarding signal
handling (for instance, pause may not be interrupted if the
signal arrives between the rt_sigprocmask and rt_sigsuspend
syscall).

Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
arch64-linux-gnu, arm-linux-gnueabihf, powerpc64le-linux-gnu,
sparc64-linux-gnu, and sparcv9-linux-gnu.

	* sysdeps/unix/sysv/linux/generic/pause.c: Remove file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/pause.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/kernel-features.h [__arch64__]
	(__NR_pause): Undefine.
	* sysdeps/unix/sysv/linux/pause.c: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: Remove pause from
	auto-generation list.
2017-05-18 18:06:47 -03:00