From 23aa045ef4565f274e6407b1e49f3c59ae379a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Jul 2026 09:22:00 +0200 Subject: [PATCH 1/7] libc: update glibc headers to 2.44 --- .../include/aarch64-linux-gnu/bits/hwcap.h | 19 +- .../aarch64-linux-gnu/bits/math-vector.h | 8 + .../aarch64-linux-gnu/bits/struct_stat.h | 127 --------- .../include/aarch64-linux-gnu/bits/timesize.h | 20 -- .../finclude/math-vector-fortran.h | 158 +++++------ .../aarch64-linux-gnu/gnu/lib-names-lp64.h | 1 + .../aarch64-linux-gnu/gnu/lib-names-lp64_be.h | 1 + .../include/arc-linux-gnu/bits/struct_stat.h | 127 --------- .../include/arc-linux-gnu/bits/timesize.h | 20 -- .../include/arc-linux-gnu/gnu/lib-names.h | 1 + .../include/csky-linux-gnu/gnu/lib-names.h | 3 +- lib/libc/include/generic-glibc/assert.h | 28 +- lib/libc/include/generic-glibc/bits/cloexec.h | 1 + .../include/generic-glibc/bits/fcntl-linux.h | 21 +- .../generic-glibc/bits/libm-simd-decl-stubs.h | 11 + .../include/generic-glibc/bits/long-double.h | 9 +- .../include/generic-glibc/bits/mathcalls.h | 1 + lib/libc/include/generic-glibc/bits/sched.h | 3 + .../include/generic-glibc/bits/struct_stat.h | 264 +++++------------- lib/libc/include/generic-glibc/bits/syscall.h | 16 +- .../include/generic-glibc/bits/timesize.h | 8 +- lib/libc/include/generic-glibc/bits/uio-ext.h | 1 + lib/libc/include/generic-glibc/dlfcn.h | 7 +- lib/libc/include/generic-glibc/elf.h | 8 +- lib/libc/include/generic-glibc/features.h | 4 +- lib/libc/include/generic-glibc/fts.h | 126 ++++++++- .../include/generic-glibc/gnu/lib-names-32.h | 1 + .../generic-glibc/gnu/lib-names-hard.h | 1 + .../generic-glibc/gnu/lib-names-n32_hard.h | 1 + .../generic-glibc/gnu/lib-names-n64_hard.h | 1 + .../generic-glibc/gnu/lib-names-o32_hard.h | 1 + .../generic-glibc/gnu/lib-names-o32_soft.h | 1 + .../generic-glibc/gnu/lib-names-soft.h | 1 + lib/libc/include/generic-glibc/netinet/in.h | 2 + lib/libc/include/generic-glibc/netinet/tcp.h | 27 +- lib/libc/include/generic-glibc/regex.h | 2 +- lib/libc/include/generic-glibc/spawn.h | 20 ++ lib/libc/include/generic-glibc/stdlib.h | 2 +- lib/libc/include/generic-glibc/sys/mount.h | 22 +- lib/libc/include/generic-glibc/sys/pidfd.h | 26 ++ .../include/loongarch-linux-gnu/bits/hwcap.h | 4 +- .../loongarch-linux-gnu/bits/long-double.h | 21 -- .../loongarch-linux-gnu/bits/struct_stat.h | 127 --------- .../loongarch-linux-gnu/bits/timesize.h | 20 -- .../loongarch-linux-gnu/bits/wordsize.h | 15 +- .../include/loongarch-linux-gnu/fpu_control.h | 9 + .../gnu/lib-names-ilp32d.h} | 6 +- .../gnu/lib-names-ilp32s.h} | 7 +- .../loongarch-linux-gnu/gnu/lib-names-lp64d.h | 1 + .../loongarch-linux-gnu/gnu/lib-names-lp64s.h | 1 + .../loongarch-linux-gnu/gnu/lib-names.h | 6 + .../gnu/stubs-ilp32d.h} | 5 + .../loongarch-linux-gnu/gnu/stubs-ilp32s.h | 38 +++ .../include/loongarch-linux-gnu/gnu/stubs.h | 6 + .../include/loongarch-linux-gnu/sys/asm.h | 38 ++- .../include/m68k-linux-gnu/gnu/lib-names.h | 1 + .../bits/long-double.h | 9 +- .../include/mips-linux-gnu/bits/struct_stat.h | 237 ++++++++++++++++ .../bits/timesize.h | 2 +- .../include/mips-linux-gnu/bits/waitstatus.h | 68 +++++ .../powerpc-linux-gnu/bits/long-double.h | 2 +- .../bits/ppc.h | 0 .../powerpc-linux-gnu/bits/struct_mutex.h | 2 +- .../powerpc-linux-gnu/gnu/lib-names-64-v2.h | 1 + .../sys/platform/ppc.h | 0 .../riscv-linux-gnu/bits/long-double.h | 21 -- .../riscv-linux-gnu/bits/struct_stat.h | 127 --------- .../include/riscv-linux-gnu/bits/timesize.h | 20 -- .../riscv-linux-gnu/gnu/lib-names-ilp32d.h | 1 + .../riscv-linux-gnu/gnu/lib-names-lp64d.h | 1 + .../include/s390x-linux-gnu/bits/elfclass.h | 7 +- .../s390x-linux-gnu/bits/environments.h | 96 ------- lib/libc/include/s390x-linux-gnu/bits/fcntl.h | 26 +- lib/libc/include/s390x-linux-gnu/bits/fenv.h | 8 +- lib/libc/include/s390x-linux-gnu/bits/link.h | 62 +--- .../s390x-linux-gnu/bits/procfs-extra.h | 75 ----- .../include/s390x-linux-gnu/bits/procfs-id.h | 30 -- .../include/s390x-linux-gnu/bits/setjmp.h | 6 - .../include/s390x-linux-gnu/bits/sigaction.h | 35 +-- .../s390x-linux-gnu/bits/struct_mutex.h | 26 +- .../s390x-linux-gnu/bits/struct_rwlock.h | 17 +- .../s390x-linux-gnu/bits/struct_stat.h | 120 +------- .../include/s390x-linux-gnu/bits/typesizes.h | 36 +-- lib/libc/include/s390x-linux-gnu/bits/utmp.h | 127 --------- lib/libc/include/s390x-linux-gnu/bits/utmpx.h | 106 ------- .../include/s390x-linux-gnu/bits/wordsize.h | 26 +- .../s390x-linux-gnu/gnu/lib-names-64.h | 27 -- .../include/s390x-linux-gnu/gnu/lib-names.h | 31 +- lib/libc/include/s390x-linux-gnu/gnu/stubs.h | 22 +- .../include/s390x-linux-gnu/sys/ucontext.h | 6 +- .../include/sparc-linux-gnu/bits/cloexec.h | 1 + .../sparc-linux-gnu/gnu/lib-names-64.h | 1 + .../gnu/stubs-64.h | 0 .../include/x86-linux-gnu/bits/struct_mutex.h | 2 +- .../include/x86-linux-gnu/gnu/lib-names-64.h | 1 + .../include/x86-linux-gnu/gnu/lib-names-x32.h | 1 + tools/process_headers.zig | 2 + 97 files changed, 1031 insertions(+), 1763 deletions(-) delete mode 100644 lib/libc/include/aarch64-linux-gnu/bits/struct_stat.h delete mode 100644 lib/libc/include/aarch64-linux-gnu/bits/timesize.h delete mode 100644 lib/libc/include/arc-linux-gnu/bits/struct_stat.h delete mode 100644 lib/libc/include/arc-linux-gnu/bits/timesize.h create mode 100644 lib/libc/include/generic-glibc/bits/cloexec.h delete mode 100644 lib/libc/include/loongarch-linux-gnu/bits/long-double.h delete mode 100644 lib/libc/include/loongarch-linux-gnu/bits/struct_stat.h delete mode 100644 lib/libc/include/loongarch-linux-gnu/bits/timesize.h rename lib/libc/include/{powerpc-linux-gnu/gnu/lib-names-32.h => loongarch-linux-gnu/gnu/lib-names-ilp32d.h} (80%) rename lib/libc/include/{powerpc-linux-gnu/gnu/lib-names-64-v1.h => loongarch-linux-gnu/gnu/lib-names-ilp32s.h} (80%) rename lib/libc/include/{powerpc-linux-gnu/gnu/stubs-64-v1.h => loongarch-linux-gnu/gnu/stubs-ilp32d.h} (71%) create mode 100644 lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32s.h rename lib/libc/include/{aarch64-linux-gnu => mips-linux-gnu}/bits/long-double.h (82%) create mode 100644 lib/libc/include/mips-linux-gnu/bits/struct_stat.h rename lib/libc/include/{s390x-linux-gnu => mips-linux-gnu}/bits/timesize.h (93%) create mode 100644 lib/libc/include/mips-linux-gnu/bits/waitstatus.h rename lib/libc/include/{generic-glibc => powerpc-linux-gnu}/bits/ppc.h (100%) rename lib/libc/include/{generic-glibc => powerpc-linux-gnu}/sys/platform/ppc.h (100%) delete mode 100644 lib/libc/include/riscv-linux-gnu/bits/long-double.h delete mode 100644 lib/libc/include/riscv-linux-gnu/bits/struct_stat.h delete mode 100644 lib/libc/include/riscv-linux-gnu/bits/timesize.h delete mode 100644 lib/libc/include/s390x-linux-gnu/bits/environments.h delete mode 100644 lib/libc/include/s390x-linux-gnu/bits/procfs-extra.h delete mode 100644 lib/libc/include/s390x-linux-gnu/bits/procfs-id.h delete mode 100644 lib/libc/include/s390x-linux-gnu/bits/utmp.h delete mode 100644 lib/libc/include/s390x-linux-gnu/bits/utmpx.h delete mode 100644 lib/libc/include/s390x-linux-gnu/gnu/lib-names-64.h create mode 100644 lib/libc/include/sparc-linux-gnu/bits/cloexec.h rename lib/libc/include/{generic-glibc => sparc-linux-gnu}/gnu/stubs-64.h (100%) diff --git a/lib/libc/include/aarch64-linux-gnu/bits/hwcap.h b/lib/libc/include/aarch64-linux-gnu/bits/hwcap.h index f4189aa1bfca6909be4967e00821932faf753c7a..ea1c9e30bc803d6c5eb0396d62a46707ca7bdddd 100644 --- a/lib/libc/include/aarch64-linux-gnu/bits/hwcap.h +++ b/lib/libc/include/aarch64-linux-gnu/bits/hwcap.h @@ -55,6 +55,21 @@ #define HWCAP_PACA (1 << 30) #define HWCAP_PACG (1UL << 31) #define HWCAP_GCS (1UL << 32) +#define HWCAP_CMPBR (1UL << 33) +#define HWCAP_FPRCVT (1UL << 34) +#define HWCAP_F8MM8 (1UL << 35) +#define HWCAP_F8MM4 (1UL << 36) +#define HWCAP_SVE_F16MM (1UL << 37) +#define HWCAP_SVE_ELTPERM (1UL << 38) +#define HWCAP_SVE_AES2 (1UL << 39) +#define HWCAP_SVE_BFSCALE (1UL << 40) +#define HWCAP_SVE2P2 (1UL << 41) +#define HWCAP_SME2P2 (1UL << 42) +#define HWCAP_SME_SBITPERM (1UL << 43) +#define HWCAP_SME_AES (1UL << 44) +#define HWCAP_SME_SFEXPA (1UL << 45) +#define HWCAP_SME_STMOP (1UL << 46) +#define HWCAP_SME_SMOP4 (1UL << 47) #define HWCAP2_DCPODP (1 << 0) #define HWCAP2_SVE2 (1 << 1) @@ -122,4 +137,6 @@ #define HWCAP2_POE (1UL << 63) #define HWCAP3_MTE_FAR (1UL << 0) -#define HWCAP3_MTE_STORE_ONLY (1UL << 1) \ No newline at end of file +#define HWCAP3_MTE_STORE_ONLY (1UL << 1) +#define HWCAP3_LSFE (1UL << 2) +#define HWCAP3_LS64 (1UL << 3) \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/bits/math-vector.h b/lib/libc/include/aarch64-linux-gnu/bits/math-vector.h index 68043a976c58a8f126799f7c386006471a4996eb..c83fbc235bcaefcba343ec5122af94a316e67c57 100644 --- a/lib/libc/include/aarch64-linux-gnu/bits/math-vector.h +++ b/lib/libc/include/aarch64-linux-gnu/bits/math-vector.h @@ -157,6 +157,10 @@ # define __DECL_SIMD_pow __DECL_SIMD_aarch64 # undef __DECL_SIMD_powf # define __DECL_SIMD_powf __DECL_SIMD_aarch64 +# undef __DECL_SIMD_powr +# define __DECL_SIMD_powr __DECL_SIMD_aarch64 +# undef __DECL_SIMD_powrf +# define __DECL_SIMD_powrf __DECL_SIMD_aarch64 # undef __DECL_SIMD_rsqrt # define __DECL_SIMD_rsqrt __DECL_SIMD_aarch64 # undef __DECL_SIMD_rsqrtf @@ -243,6 +247,7 @@ __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_log2p1f (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t); __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t); +__vpcs __f32x4_t _ZGVnN4vv_powrf (__f32x4_t, __f32x4_t); __vpcs __f32x4_t _ZGVnN4v_rsqrtf (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t); __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t); @@ -283,6 +288,7 @@ __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_log2p1 (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t); __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t); +__vpcs __f64x2_t _ZGVnN2vv_powr (__f64x2_t, __f64x2_t); __vpcs __f64x2_t _ZGVnN2v_rsqrt (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t); __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t); @@ -328,6 +334,7 @@ __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_log2p1f (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t); +__sv_f32_t _ZGVsMxvv_powrf (__sv_f32_t, __sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_rsqrtf (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t); __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t); @@ -368,6 +375,7 @@ __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_log2p1 (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t); +__sv_f64_t _ZGVsMxvv_powr (__sv_f64_t, __sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_rsqrt (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t); __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t); diff --git a/lib/libc/include/aarch64-linux-gnu/bits/struct_stat.h b/lib/libc/include/aarch64-linux-gnu/bits/struct_stat.h deleted file mode 100644 index 0462d37a6849812f485a6830a7c0dca303332636..0000000000000000000000000000000000000000 --- a/lib/libc/include/aarch64-linux-gnu/bits/struct_stat.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Definition for struct stat. - Copyright (C) 2020-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STRUCT_STAT_H -#define _BITS_STRUCT_STAT_H 1 - -#include -#include - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T -# if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T -# error "ino_t and off_t must both be the same type" -# endif -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct stat - { - __dev_t st_dev; /* Device. */ - __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -#endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/bits/timesize.h b/lib/libc/include/aarch64-linux-gnu/bits/timesize.h deleted file mode 100644 index dff2da5ed6bf30ce6f5580aee352e0958d58b623..0000000000000000000000000000000000000000 --- a/lib/libc/include/aarch64-linux-gnu/bits/timesize.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Bit size of the time_t type at glibc build time, general case. - Copyright (C) 2018-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Size in bits of the 'time_t' type of the default ABI. */ -#define __TIMESIZE 64 \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/finclude/math-vector-fortran.h b/lib/libc/include/aarch64-linux-gnu/finclude/math-vector-fortran.h index 59c7f2db4a8dfefe910714f9a659b8e61680df63..2af413c57c6ec176e65b5555ff2394df576a96c6 100644 --- a/lib/libc/include/aarch64-linux-gnu/finclude/math-vector-fortran.h +++ b/lib/libc/include/aarch64-linux-gnu/finclude/math-vector-fortran.h @@ -16,81 +16,83 @@ ! License along with the GNU C Library; if not, see ! . -!GCC$ builtin (acos) attributes simd (notinbranch) -!GCC$ builtin (acosf) attributes simd (notinbranch) -!GCC$ builtin (acosh) attributes simd (notinbranch) -!GCC$ builtin (acoshf) attributes simd (notinbranch) -!GCC$ builtin (acospi) attributes simd (notinbranch) -!GCC$ builtin (acospif) attributes simd (notinbranch) -!GCC$ builtin (asin) attributes simd (notinbranch) -!GCC$ builtin (asinf) attributes simd (notinbranch) -!GCC$ builtin (asinh) attributes simd (notinbranch) -!GCC$ builtin (asinhf) attributes simd (notinbranch) -!GCC$ builtin (asinpi) attributes simd (notinbranch) -!GCC$ builtin (asinpif) attributes simd (notinbranch) -!GCC$ builtin (atan) attributes simd (notinbranch) -!GCC$ builtin (atan2) attributes simd (notinbranch) -!GCC$ builtin (atan2f) attributes simd (notinbranch) -!GCC$ builtin (atan2pi) attributes simd (notinbranch) -!GCC$ builtin (atan2pif) attributes simd (notinbranch) -!GCC$ builtin (atanf) attributes simd (notinbranch) -!GCC$ builtin (atanh) attributes simd (notinbranch) -!GCC$ builtin (atanhf) attributes simd (notinbranch) -!GCC$ builtin (atanpi) attributes simd (notinbranch) -!GCC$ builtin (atanpif) attributes simd (notinbranch) -!GCC$ builtin (cbrt) attributes simd (notinbranch) -!GCC$ builtin (cbrtf) attributes simd (notinbranch) -!GCC$ builtin (cos) attributes simd (notinbranch) -!GCC$ builtin (cosf) attributes simd (notinbranch) -!GCC$ builtin (cosh) attributes simd (notinbranch) -!GCC$ builtin (coshf) attributes simd (notinbranch) -!GCC$ builtin (cospi) attributes simd (notinbranch) -!GCC$ builtin (cospif) attributes simd (notinbranch) -!GCC$ builtin (erf) attributes simd (notinbranch) -!GCC$ builtin (erfc) attributes simd (notinbranch) -!GCC$ builtin (erfcf) attributes simd (notinbranch) -!GCC$ builtin (erff) attributes simd (notinbranch) -!GCC$ builtin (exp) attributes simd (notinbranch) -!GCC$ builtin (exp10) attributes simd (notinbranch) -!GCC$ builtin (exp10f) attributes simd (notinbranch) -!GCC$ builtin (exp10m1) attributes simd (notinbranch) -!GCC$ builtin (exp10m1f) attributes simd (notinbranch) -!GCC$ builtin (exp2) attributes simd (notinbranch) -!GCC$ builtin (exp2f) attributes simd (notinbranch) -!GCC$ builtin (exp2m1) attributes simd (notinbranch) -!GCC$ builtin (exp2m1f) attributes simd (notinbranch) -!GCC$ builtin (expf) attributes simd (notinbranch) -!GCC$ builtin (expm1) attributes simd (notinbranch) -!GCC$ builtin (expm1f) attributes simd (notinbranch) -!GCC$ builtin (hypot) attributes simd (notinbranch) -!GCC$ builtin (hypotf) attributes simd (notinbranch) -!GCC$ builtin (log) attributes simd (notinbranch) -!GCC$ builtin (log10) attributes simd (notinbranch) -!GCC$ builtin (log10f) attributes simd (notinbranch) -!GCC$ builtin (log10p1) attributes simd (notinbranch) -!GCC$ builtin (log10p1f) attributes simd (notinbranch) -!GCC$ builtin (log1p) attributes simd (notinbranch) -!GCC$ builtin (log1pf) attributes simd (notinbranch) -!GCC$ builtin (log2) attributes simd (notinbranch) -!GCC$ builtin (log2f) attributes simd (notinbranch) -!GCC$ builtin (log2p1) attributes simd (notinbranch) -!GCC$ builtin (log2p1f) attributes simd (notinbranch) -!GCC$ builtin (logf) attributes simd (notinbranch) -!GCC$ builtin (logp1) attributes simd (notinbranch) -!GCC$ builtin (logp1f) attributes simd (notinbranch) -!GCC$ builtin (pow) attributes simd (notinbranch) -!GCC$ builtin (powf) attributes simd (notinbranch) -!GCC$ builtin (rsqrt) attributes simd (notinbranch) -!GCC$ builtin (rsqrtf) attributes simd (notinbranch) -!GCC$ builtin (sin) attributes simd (notinbranch) -!GCC$ builtin (sinf) attributes simd (notinbranch) -!GCC$ builtin (sinh) attributes simd (notinbranch) -!GCC$ builtin (sinhf) attributes simd (notinbranch) -!GCC$ builtin (sinpi) attributes simd (notinbranch) -!GCC$ builtin (sinpif) attributes simd (notinbranch) -!GCC$ builtin (tan) attributes simd (notinbranch) -!GCC$ builtin (tanf) attributes simd (notinbranch) -!GCC$ builtin (tanh) attributes simd (notinbranch) -!GCC$ builtin (tanhf) attributes simd (notinbranch) -!GCC$ builtin (tanpi) attributes simd (notinbranch) -!GCC$ builtin (tanpif) attributes simd (notinbranch) \ No newline at end of file +!GCC$ builtin (acos) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (acosf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (acosh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (acoshf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (acospi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (acospif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asin) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asinf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asinh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asinhf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asinpi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (asinpif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atan) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atan2) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atan2f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atan2pi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atan2pif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atanf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atanh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atanhf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atanpi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (atanpif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cbrt) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cbrtf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cos) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cosf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cosh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (coshf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cospi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (cospif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (erf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (erfc) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (erfcf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (erff) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp10) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp10f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp10m1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp10m1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp2) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp2f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp2m1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (exp2m1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (expf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (expm1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (expm1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (hypot) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (hypotf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log10) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log10f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log10p1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log10p1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log1p) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log1pf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log2) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log2f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log2p1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (log2p1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (logf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (logp1) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (logp1f) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (pow) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (powf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (powr) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (powrf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (rsqrt) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (rsqrtf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sin) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sinf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sinh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sinhf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sinpi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (sinpif) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tan) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tanf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tanh) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tanhf) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tanpi) attributes simd (notinbranch) if('fastmath') +!GCC$ builtin (tanpif) attributes simd (notinbranch) if('fastmath') \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64.h b/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64.h index e34eb75134323543b3d8d8807e0bc3c7a3c31abd..46acbc27479223aa3abfe70175255d2b346e9cac 100644 --- a/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64.h +++ b/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64_be.h b/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64_be.h index 2fba436ba35ca351e3c28abeda69028774654a92..ad55fcf123ad4488d626ece14689abda37598381 100644 --- a/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64_be.h +++ b/lib/libc/include/aarch64-linux-gnu/gnu/lib-names-lp64_be.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/arc-linux-gnu/bits/struct_stat.h b/lib/libc/include/arc-linux-gnu/bits/struct_stat.h deleted file mode 100644 index 0462d37a6849812f485a6830a7c0dca303332636..0000000000000000000000000000000000000000 --- a/lib/libc/include/arc-linux-gnu/bits/struct_stat.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Definition for struct stat. - Copyright (C) 2020-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STRUCT_STAT_H -#define _BITS_STRUCT_STAT_H 1 - -#include -#include - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T -# if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T -# error "ino_t and off_t must both be the same type" -# endif -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct stat - { - __dev_t st_dev; /* Device. */ - __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -#endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/arc-linux-gnu/bits/timesize.h b/lib/libc/include/arc-linux-gnu/bits/timesize.h deleted file mode 100644 index dff2da5ed6bf30ce6f5580aee352e0958d58b623..0000000000000000000000000000000000000000 --- a/lib/libc/include/arc-linux-gnu/bits/timesize.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Bit size of the time_t type at glibc build time, general case. - Copyright (C) 2018-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Size in bits of the 'time_t' type of the default ABI. */ -#define __TIMESIZE 64 \ No newline at end of file diff --git a/lib/libc/include/arc-linux-gnu/gnu/lib-names.h b/lib/libc/include/arc-linux-gnu/gnu/lib-names.h index 68bed2a1a178f5003654ea064883559b08d5242e..5e617b3a49ddd6da357923e3cfdae83ef4a189fb 100644 --- a/lib/libc/include/arc-linux-gnu/gnu/lib-names.h +++ b/lib/libc/include/arc-linux-gnu/gnu/lib-names.h @@ -25,6 +25,7 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" #endif /* gnu/lib-names.h */ \ No newline at end of file diff --git a/lib/libc/include/csky-linux-gnu/gnu/lib-names.h b/lib/libc/include/csky-linux-gnu/gnu/lib-names.h index fbe1a718fbeb97c65267676396b656897ac0b648..f63e5133babbdfd1309f38fe281c0d29c1ef8a64 100644 --- a/lib/libc/include/csky-linux-gnu/gnu/lib-names.h +++ b/lib/libc/include/csky-linux-gnu/gnu/lib-names.h @@ -31,6 +31,7 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" -#endif /* gnu/lib-names.h */ +#endif /* gnu/lib-names.h */ \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/assert.h b/lib/libc/include/generic-glibc/assert.h index 73562fec4b9cf794aeb03cc1f3e4c5988eeb42cf..11c3cec04420eb0925d865ed489f911f4e29de37 100644 --- a/lib/libc/include/generic-glibc/assert.h +++ b/lib/libc/include/generic-glibc/assert.h @@ -52,13 +52,12 @@ comma in the initializer list, can be passed to assert. This depends on support for variadic macros (added in C99 and GCC 2.95), and on support for _Bool (added in C99 and GCC 3.0) in order to - validate that only a single expression is passed as an argument, - and is currently implemented only for C. */ -#if (__GLIBC_USE (ISOC23) \ - && (defined __GNUC__ \ - ? __GNUC_PREREQ (3, 0) \ - : defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) \ - && !defined __cplusplus) + validate that only a single expression is passed as an argument. */ +#if ((__GLIBC_USE (ISOC23) \ + && (defined __GNUC__ \ + ? __GNUC_PREREQ (3, 0) \ + : defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) \ + || (defined __cplusplus && __cplusplus > 202302L)) # define __ASSERT_VARIADIC 1 #else # define __ASSERT_VARIADIC 0 @@ -108,7 +107,7 @@ extern void __assert (const char *__assertion, const char *__file, int __line) __THROW __attribute__ ((__noreturn__)) __COLD; -# if __ASSERT_VARIADIC +# if __ASSERT_VARIADIC && !defined __cplusplus /* This function is not defined and is not called outside of an unevaluated sizeof, but serves to verify that the argument to assert is a single expression. */ @@ -131,11 +130,22 @@ __END_DECLS # define __ASSERT_FILE __FILE__ # define __ASSERT_LINE __LINE__ # endif -# define assert(expr) \ +# if __ASSERT_VARIADIC +/* The first test of __VA_ARGS__ evaluates it without converting scoped + enumeration values to bool, and the second test checks that it is a + single expression without evaluating it. */ +# define assert(...) \ + ((__VA_ARGS__) \ + ? void (1 ? 1 : bool (__VA_ARGS__)) \ + : __assert_fail (#__VA_ARGS__, __ASSERT_FILE, __ASSERT_LINE, \ + __ASSERT_FUNCTION)) +# else +# define assert(expr) \ (static_cast (expr) \ ? void (0) \ : __assert_fail (#expr, __ASSERT_FILE, __ASSERT_LINE, \ __ASSERT_FUNCTION)) +# endif # elif !defined __GNUC__ || defined __STRICT_ANSI__ # if __ASSERT_VARIADIC # define assert(...) \ diff --git a/lib/libc/include/generic-glibc/bits/cloexec.h b/lib/libc/include/generic-glibc/bits/cloexec.h new file mode 100644 index 0000000000000000000000000000000000000000..030893ff8723fd0d1dfe500c88bbc290d01cc292 --- /dev/null +++ b/lib/libc/include/generic-glibc/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 02000000 \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/bits/fcntl-linux.h b/lib/libc/include/generic-glibc/bits/fcntl-linux.h index b6a2979287a93d686f1ca0b44b9faf511eea6b9f..894a22c8ba99c3a72413feca4dcf25c676177510 100644 --- a/lib/libc/include/generic-glibc/bits/fcntl-linux.h +++ b/lib/libc/include/generic-glibc/bits/fcntl-linux.h @@ -81,9 +81,7 @@ #ifndef __O_NOFOLLOW # define __O_NOFOLLOW 0400000 #endif -#ifndef __O_CLOEXEC -# define __O_CLOEXEC 02000000 -#endif +#include #ifndef __O_DIRECT # define __O_DIRECT 040000 #endif @@ -176,8 +174,8 @@ #endif #if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define F_SETOWN __F_SETOWN /* Get owner (process receiving SIGIO). */ -# define F_GETOWN __F_GETOWN /* Set owner (process receiving SIGIO). */ +# define F_SETOWN __F_SETOWN /* Set owner (process receiving SIGIO). */ +# define F_GETOWN __F_GETOWN /* Get owner (process receiving SIGIO). */ #endif #ifndef __F_SETSIG @@ -185,15 +183,15 @@ # define __F_GETSIG 11 /* Get number of signal to be sent. */ #endif #ifndef __F_SETOWN_EX -# define __F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ -# define __F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ +# define __F_SETOWN_EX 15 /* Set owner (thread receiving SIGIO). */ +# define __F_GETOWN_EX 16 /* Get owner (thread receiving SIGIO). */ #endif #ifdef __USE_GNU # define F_SETSIG __F_SETSIG /* Set number of signal to be sent. */ # define F_GETSIG __F_GETSIG /* Get number of signal to be sent. */ -# define F_SETOWN_EX __F_SETOWN_EX /* Get owner (thread receiving SIGIO). */ -# define F_GETOWN_EX __F_GETOWN_EX /* Set owner (thread receiving SIGIO). */ +# define F_SETOWN_EX __F_SETOWN_EX /* Set owner (thread receiving SIGIO). */ +# define F_GETOWN_EX __F_GETOWN_EX /* Get owner (thread receiving SIGIO). */ #endif #ifdef __USE_GNU @@ -203,7 +201,7 @@ # define F_DUPFD_QUERY 1027 /* Compare two file descriptors for sameness. */ # define F_CREATED_QUERY 1028 /* Was the file just created? */ # define F_SETPIPE_SZ 1031 /* Set pipe page size array. */ -# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */ +# define F_GETPIPE_SZ 1032 /* Get pipe page size array. */ # define F_ADD_SEALS 1033 /* Add seals to file. */ # define F_GET_SEALS 1034 /* Get seals for file. */ /* Set / get write life time hints. */ @@ -211,6 +209,8 @@ # define F_SET_RW_HINT 1036 # define F_GET_FILE_RW_HINT 1037 # define F_SET_FILE_RW_HINT 1038 +# define F_GETDELEG 1039 /* Get delegation. */ +# define F_SETDELEG 1040 /* Set delegation. */ #endif #ifdef __USE_XOPEN2K8 # define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with @@ -221,6 +221,7 @@ #define FD_CLOEXEC 1 /* Actually anything with low bit set goes */ #ifdef __USE_GNU # define FD_PIDFS_ROOT -10002 /* Root of the pidfs filesystem */ +# define FD_NSFS_ROOT -10003 /* Root of the nsfs filesystem */ #endif #ifndef F_RDLCK diff --git a/lib/libc/include/generic-glibc/bits/libm-simd-decl-stubs.h b/lib/libc/include/generic-glibc/bits/libm-simd-decl-stubs.h index d3b43f59cc01e21655c009ec365eb49b30d15e03..1ae3bf4992d67a9881cd05ea47f64dc4c752ec0c 100644 --- a/lib/libc/include/generic-glibc/bits/libm-simd-decl-stubs.h +++ b/lib/libc/include/generic-glibc/bits/libm-simd-decl-stubs.h @@ -99,6 +99,17 @@ #define __DECL_SIMD_powf64x #define __DECL_SIMD_powf128x +#define __DECL_SIMD_powr +#define __DECL_SIMD_powrf +#define __DECL_SIMD_powrl +#define __DECL_SIMD_powrf16 +#define __DECL_SIMD_powrf32 +#define __DECL_SIMD_powrf64 +#define __DECL_SIMD_powrf128 +#define __DECL_SIMD_powrf32x +#define __DECL_SIMD_powrf64x +#define __DECL_SIMD_powrf128x + #define __DECL_SIMD_acos #define __DECL_SIMD_acosf #define __DECL_SIMD_acosl diff --git a/lib/libc/include/generic-glibc/bits/long-double.h b/lib/libc/include/generic-glibc/bits/long-double.h index ebf6ac878fbf42241d0b2bcaf8c6049d08d827c5..af7784dbe6dd85cd9538b5a7b437ab45de22eeb8 100644 --- a/lib/libc/include/generic-glibc/bits/long-double.h +++ b/lib/libc/include/generic-glibc/bits/long-double.h @@ -1,4 +1,4 @@ -/* Properties of long double type. MIPS version. +/* Properties of long double type. ldbl-128 version. Copyright (C) 2016-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -16,9 +16,6 @@ License along with the GNU C Library; if not, see . */ -#include - -#if !defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32 -# define __NO_LONG_DOUBLE_MATH 1 -#endif +/* long double is distinct from double, so there is nothing to + define here. */ #define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/bits/mathcalls.h b/lib/libc/include/generic-glibc/bits/mathcalls.h index 7ff83e5acbeebe7f5fd3b1185735822e436aa5dd..740f26aed89b757cbe7f58e6d4f8570e6dfa74a3 100644 --- a/lib/libc/include/generic-glibc/bits/mathcalls.h +++ b/lib/libc/include/generic-glibc/bits/mathcalls.h @@ -197,6 +197,7 @@ __MATHCALL (compoundn,, (_Mdouble_ __x, long long int __y)); __MATHCALL (pown,, (_Mdouble_ __x, long long int __y)); /* Return X to the Y power. */ +__MATHCALL_VEC (powr,, (_Mdouble_ __x, _Mdouble_ __y)); __MATHCALL (powr,, (_Mdouble_ __x, _Mdouble_ __y)); /* Return the Yth root of X. */ diff --git a/lib/libc/include/generic-glibc/bits/sched.h b/lib/libc/include/generic-glibc/bits/sched.h index aa49876c1c353c46701b02b6f7f19b2f565e06e5..a66bfd53a14ce66651062a7ea51673c6e867e863 100644 --- a/lib/libc/include/generic-glibc/bits/sched.h +++ b/lib/libc/include/generic-glibc/bits/sched.h @@ -54,6 +54,9 @@ #define SCHED_FLAG_UTIL_CLAMP \ (SCHED_FLAG_UTIL_CLAMP_MIN | SCHED_FLAG_UTIL_CLAMP_MAX) +/* Flags for the flags argument of sched_getattr. */ +#define SCHED_GETATTR_FLAG_DL_DYNAMIC 0x01 + /* Use "" to work around incorrect macro expansion of the __has_include argument (GCC PR 80005). */ # ifdef __has_include diff --git a/lib/libc/include/generic-glibc/bits/struct_stat.h b/lib/libc/include/generic-glibc/bits/struct_stat.h index 231c875e7ab2c703e50746e2191ddc411c0878a2..0462d37a6849812f485a6830a7c0dca303332636 100644 --- a/lib/libc/include/generic-glibc/bits/struct_stat.h +++ b/lib/libc/include/generic-glibc/bits/struct_stat.h @@ -23,215 +23,105 @@ #ifndef _BITS_STRUCT_STAT_H #define _BITS_STRUCT_STAT_H 1 -#include - -#if _MIPS_SIM == _ABIO32 -/* Structure describing file characteristics. */ -struct stat - { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - unsigned long int st_dev; - long int st_pad1[3]; -# ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -# else - __ino64_t st_ino; /* File serial number. */ -# endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - unsigned long int st_rdev; /* Device number, if device. */ -# ifndef __USE_FILE_OFFSET64 - long int st_pad2[2]; - __off_t st_size; /* Size of file, in bytes. */ - /* SVR4 added this extra long to allow for expansion of off_t. */ - long int st_pad3; -# else - long int st_pad2[3]; - __off64_t st_size; /* Size of file, in bytes. */ -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. */ -# else - long int st_pad4; - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ -# endif - long int st_pad5[14]; -# endif /* __USE_TIME64_REDIRECTS */ - }; - -# ifdef __USE_LARGEFILE64 -struct stat64 - { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - unsigned long int st_dev; - long int st_pad1[3]; - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - unsigned long int st_rdev; /* Device number, if device. */ - long int st_pad2[3]; - __off64_t st_size; /* Size of file, in bytes. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - long int st_pad3; - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ - long int st_pad4[14]; -# endif /* __USE_TIME64_REDIRECTS */ - }; -# endif /* __USE_LARGEFILE64 */ - -#else /* _MIPS_SIM != _ABIO32 */ - -struct stat - { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - __dev_t st_dev; - int st_pad1[3]; /* Reserved for st_dev expansion */ -# ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; -# else - __ino64_t st_ino; -# endif - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; -# if !defined __USE_FILE_OFFSET64 - unsigned int st_pad2[2]; /* Reserved for st_rdev expansion */ - __off_t st_size; - int st_pad3; -# else - unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ - __off64_t st_size; -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; - unsigned int st_pad4; -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; -# else - __blkcnt64_t st_blocks; -# endif - int st_pad5[14]; +#include +#include + +#if defined __USE_FILE_OFFSET64 +# define __field64(type, type64, name) type64 name +#elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T +# if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T +# error "ino_t and off_t must both be the same type" # endif +# define __field64(type, type64, name) type name +#elif __BYTE_ORDER == __LITTLE_ENDIAN +# define __field64(type, type64, name) \ + type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad +#else +# define __field64(type, type64, name) \ + int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name +#endif + +struct stat + { + __dev_t st_dev; /* Device. */ + __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + __dev_t __pad1; + __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ + int __pad2; + __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ +#ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# define st_atime st_atim.tv_sec /* Backward compatibility. */ +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec +#else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +#endif + int __glibc_reserved[2]; }; +#undef __field64 + #ifdef __USE_LARGEFILE64 struct stat64 { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - __dev_t st_dev; - unsigned int st_pad1[3]; /* Reserved for st_dev expansion */ - __ino64_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ - __off64_t st_size; -# ifdef __USE_XOPEN2K8 + __dev_t st_dev; /* Device. */ + __ino64_t st_ino; /* File serial number. */ + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + __dev_t __pad1; + __off64_t st_size; /* Size of file, in bytes. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ + int __pad2; + __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ +#ifdef __USE_XOPEN2K8 /* Nanosecond resolution timestamps are stored in a format equivalent to 'struct timespec'. This is the type used whenever possible but the Unix namespace rules do not allow the identifier 'timespec' to appear in the header. Therefore we have to handle the use of this header in strictly standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +#else __time_t st_atime; /* Time of last access. */ unsigned long int st_atimensec; /* Nscecs of last access. */ __time_t st_mtime; /* Time of last modification. */ unsigned long int st_mtimensec; /* Nsecs of last modification. */ __time_t st_ctime; /* Time of last status change. */ unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; - unsigned int st_pad3; - __blkcnt64_t st_blocks; - int st_pad4[14]; -# endif /* __USE_TIME64_REDIRECTS */ -}; #endif - + int __glibc_reserved[2]; + }; #endif /* Tell code we have these members. */ #define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV +#define _STATBUF_ST_RDEV +/* Nanosecond resolution time values are supported. */ +#define _STATBUF_ST_NSEC #endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/bits/syscall.h b/lib/libc/include/generic-glibc/bits/syscall.h index 43e6645f7d238e0805be9874cadff3bfd5889520..147cc816809c06a7ab8a79cb858b50c9aa869f05 100644 --- a/lib/libc/include/generic-glibc/bits/syscall.h +++ b/lib/libc/include/generic-glibc/bits/syscall.h @@ -1,11 +1,11 @@ /* Generated at libc build time from syscall list. */ -/* The system call list corresponds to kernel 6.17. */ +/* The system call list corresponds to kernel 7.1. */ #ifndef _SYSCALL_H # error "Never use directly; include instead." #endif -#define __GLIBC_LINUX_VERSION_CODE 397568 +#define __GLIBC_LINUX_VERSION_CODE 459008 #ifdef __NR_FAST_atomic_update # define SYS_FAST_atomic_update __NR_FAST_atomic_update @@ -883,6 +883,10 @@ # define SYS_listmount __NR_listmount #endif +#ifdef __NR_listns +# define SYS_listns __NR_listns +#endif + #ifdef __NR_listxattr # define SYS_listxattr __NR_listxattr #endif @@ -1899,6 +1903,10 @@ # define SYS_rseq __NR_rseq #endif +#ifdef __NR_rseq_slice_yield +# define SYS_rseq_slice_yield __NR_rseq_slice_yield +#endif + #ifdef __NR_rt_sigaction # define SYS_rt_sigaction __NR_rt_sigaction #endif @@ -2551,6 +2559,10 @@ # define SYS_unshare __NR_unshare #endif +#ifdef __NR_uprobe +# define SYS_uprobe __NR_uprobe +#endif + #ifdef __NR_uretprobe # define SYS_uretprobe __NR_uretprobe #endif diff --git a/lib/libc/include/generic-glibc/bits/timesize.h b/lib/libc/include/generic-glibc/bits/timesize.h index 114eea77753240de1509241efac873c28a59e9d0..dff2da5ed6bf30ce6f5580aee352e0958d58b623 100644 --- a/lib/libc/include/generic-glibc/bits/timesize.h +++ b/lib/libc/include/generic-glibc/bits/timesize.h @@ -1,5 +1,5 @@ -/* Bit size of the time_t type at glibc build time, Linux/MIPS. - Copyright (C) 2021-2026 Free Software Foundation, Inc. +/* Bit size of the time_t type at glibc build time, general case. + Copyright (C) 2018-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,7 +16,5 @@ License along with the GNU C Library; if not, see . */ -#include - /* Size in bits of the 'time_t' type of the default ABI. */ -#define __TIMESIZE __WORDSIZE \ No newline at end of file +#define __TIMESIZE 64 \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/bits/uio-ext.h b/lib/libc/include/generic-glibc/bits/uio-ext.h index e65cf77f433fcc0e7b4ce718f10c093fcc1d2097..1289a864c6d7432bada85113026c2a94b66a0251 100644 --- a/lib/libc/include/generic-glibc/bits/uio-ext.h +++ b/lib/libc/include/generic-glibc/bits/uio-ext.h @@ -51,6 +51,7 @@ extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, #define RWF_ATOMIC 0x00000040 /* Write is to be issued with torn-write prevention. */ #define RWF_DONTCACHE 0x00000080 /* Uncached buffered IO. */ +#define RWF_NOSIGNAL 0x00000100 /* Do not generate SIGPIPE on error. */ __END_DECLS diff --git a/lib/libc/include/generic-glibc/dlfcn.h b/lib/libc/include/generic-glibc/dlfcn.h index f12e3d68cd4e31c856a23e1c63bd5a2d6b597146..439f09dd9e3d8a5937343cc741a7778be646439b 100644 --- a/lib/libc/include/generic-glibc/dlfcn.h +++ b/lib/libc/include/generic-glibc/dlfcn.h @@ -167,7 +167,12 @@ enum the number of program headers in the array. */ RTLD_DI_PHDR = 11, - RTLD_DI_MAX = 11 + /* Treat ARG as `const char **' and at that location, store the address + of the directory name used to expand $ORIGIN in this shared object's + dependency file names. */ + RTLD_DI_ORIGIN_PATH = 12, + + RTLD_DI_MAX = 12 }; diff --git a/lib/libc/include/generic-glibc/elf.h b/lib/libc/include/generic-glibc/elf.h index a45dea41210184770afb26e837fb86f03d226b9a..ea2eca5e6dfbd1c0a63f9a90ddca67982061d64d 100644 --- a/lib/libc/include/generic-glibc/elf.h +++ b/lib/libc/include/generic-glibc/elf.h @@ -798,7 +798,8 @@ typedef struct #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ #define NT_X86_SHSTK 0x204 /* x86 SHSTK state */ #define NT_X86_XSAVE_LAYOUT 0x205 /* XSAVE layout description. */ -#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ +#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves. This was + used in now removed s390-32 arch. */ #define NT_S390_TIMER 0x301 /* s390 timer register */ #define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */ #define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ @@ -846,6 +847,7 @@ typedef struct #define NT_RISCV_VECTOR 0x901 /* RISC-V vector registers */ #define NT_RISCV_TAGGED_ADDR_CTRL 0x902 /* RISC-V tagged address control */ +#define NT_RISCV_USER_CFI 0x903 /* RISC-V shadow stack state */ #define NT_LOONGARCH_CPUCFG 0xa00 /* LoongArch CPU config registers. */ #define NT_LOONGARCH_CSR 0xa01 /* LoongArch control and status registers. */ @@ -3470,7 +3472,9 @@ enum /* Valid values for the e_flags field. */ -#define EF_S390_HIGH_GPRS 0x00000001 /* High GPRs kernel facility needed. */ +#define EF_S390_HIGH_GPRS 0x00000001 /* High GPRs kernel facility needed. + This was used in now removed s390-32 + arch. */ /* Additional s390 relocs */ diff --git a/lib/libc/include/generic-glibc/features.h b/lib/libc/include/generic-glibc/features.h index 5ef3af3beb712cf7cbb02d380cc68ef6f1b18d4d..a248a324911cb478b02d7f95cc87f8f9d6408327 100644 --- a/lib/libc/include/generic-glibc/features.h +++ b/lib/libc/include/generic-glibc/features.h @@ -162,7 +162,7 @@ #undef __GLIBC_USE_DEPRECATED_SCANF #undef __GLIBC_USE_C23_STRTOL -/* Suppress kernel-name space pollution unless user expressedly asks +/* Suppress kernel-name space pollution unless user explicitly asks for it. */ #ifndef _LOOSE_KERNEL_NAMES # define __KERNEL_STRICT_NAMES @@ -580,4 +580,4 @@ #include -#endif /* features.h */ +#endif /* features.h */ \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/fts.h b/lib/libc/include/generic-glibc/fts.h index 97d0f4a8a299fb9f4e439232fc9e33cd851b605e..d2164aa4ee5b51b2bc8b2f46df54614b941a4dbb 100644 --- a/lib/libc/include/generic-glibc/fts.h +++ b/lib/libc/include/generic-glibc/fts.h @@ -52,7 +52,29 @@ #include #include +#include +#include +#include +enum { __I_RING_SIZE = 4 }; + +/* When ir_empty is true, the ring is empty. + Otherwise, ir_data[B..F] are defined, where B..F is the contiguous + range of indices, modulo I_RING_SIZE, from back to front, inclusive. + Undefined elements of ir_data are always set to ir_default_val. + Popping from an empty ring aborts. + Pushing onto a full ring returns the displaced value. + An empty ring has F==B and ir_empty == true. + A ring with one entry still has F==B, but now ir_empty == false. */ +struct __I_ring +{ + int ir_data[__I_RING_SIZE]; + int ir_default_val; + unsigned int ir_front; + unsigned int ir_back; + bool ir_empty; +}; +typedef struct __I_ring __I_ring; typedef struct { struct _ftsent *fts_cur; /* current node */ @@ -73,11 +95,106 @@ typedef struct { #define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ #define FTS_XDEV 0x0040 /* don't cross devices */ #define FTS_WHITEOUT 0x0080 /* return whiteout information */ -#define FTS_OPTIONMASK 0x00ff /* valid user option mask */ + + /* There are two ways to detect cycles. + The lazy way (which works only with FTS_PHYSICAL), + with which one may process a directory that is a + part of the cycle several times before detecting the cycle. + The "tight" way, whereby fts uses more memory (proportional + to number of "active" directories, aka distance from root + of current tree to current directory -- see active_dir_ht) + to detect any cycle right away. For example, du must use + this option to avoid counting disk space in a cycle multiple + times, but chown -R need not. + The default is to use the constant-memory lazy way, when possible + (see below). + + However, with FTS_LOGICAL (when following symlinks, e.g., chown -L) + using lazy cycle detection is inadequate. For example, traversing + a directory containing a symbolic link to a peer directory, it is + possible to encounter the same directory twice even though there + is no cycle: + dir + ... + slink -> dir + So, when FTS_LOGICAL is selected, we have to use a different + mode of cycle detection: FTS_TIGHT_CYCLE_CHECK. */ +#define FTS_TIGHT_CYCLE_CHECK 0x0400 + + /* Use this flag to enable semantics with which the parent + application may be made both more efficient and more robust. + Whereas the default is to visit each directory in a recursive + traversal (via chdir), using this flag makes it so the initial + working directory is never changed. Instead, these functions + perform the traversal via a virtual working directory, maintained + through the file descriptor member, fts_cwd_fd. */ +# define FTS_CWDFD 0x0800 + + /* Historically, for each directory that fts initially encounters, it would + open it, read all entries, and stat each entry, storing the results, and + then it would process the first entry. But that behavior is bad for + locality of reference, and also causes trouble with inode-simulating + file systems like FAT, CIFS, FUSE-based ones, etc., when entries from + their name/inode cache are flushed too early. + Use this flag to make fts_open and fts_read defer the stat/lstat/fststat + of each entry until it is actually processed. However, note that if you + use this option and also specify a comparison function, that function may + not examine any data via fts_statp. However, when fts_statp->st_mode is + nonzero, the S_IFMT type bits are valid, with mapped dirent.d_type data. + Of course, that happens only on file systems that provide useful + dirent.d_type data. */ +#define FTS_DEFER_STAT 0x1000 + + /* Use this flag to disable stripping of trailing slashes + from input path names during fts_open initialization. */ +#define FTS_VERBATIM 0x2000 + +#define FTS_MOUNT 0x4000 /* skip other devices */ +#define FTS_OPTIONMASK 0x7fff /* valid user option mask */ #define FTS_NAMEONLY 0x0100 /* (private) child names only */ #define FTS_STOP 0x0200 /* (private) unrecoverable error */ + int fts_options; /* fts_open options, global flags */ + + int fts_cwd_fd; /* the file descriptor on which the + virtual cwd is open, or AT_FDCWD */ + + /* Map a directory's device number to a boolean. The boolean is + true if for that file system (type determined by a single fstatfs + call per FS) st_nlink can be used to calculate the number of + sub-directory entries in a directory. + Using this table is an optimization that permits us to look up + file system type on a per-inode basis at the minimal cost of + calling fstatfs only once per traversed device. */ + struct hash_table *fts_leaf_optimization_works_ht; + + union { + /* This data structure is used if FTS_TIGHT_CYCLE_CHECK is + specified. It records the directories between a starting + point and the current directory. I.e., a directory is + recorded here IFF we have visited it once, but we have not + yet completed processing of all its entries. Every time we + visit a new directory, we add that directory to this set. + When we finish with a directory (usually by visiting it a + second time), we remove it from this set. Each entry in + this data structure is a device/inode pair. This data + structure is used to detect directory cycles efficiently and + promptly even when the depth of a hierarchy is in the tens + of thousands. */ + struct hash_table *ht; + + /* FIXME: rename these two members to have the fts_ prefix */ + /* This data structure uses a lazy cycle-detection algorithm, + as done by rm via cycle-check.c. It's the default, + but it's not appropriate for programs like du. */ + struct cycle_check_state *state; + } fts_cycle; + + /* A stack of the file descriptors corresponding to the + most-recently traversed parent directories. + Currently used only in FTS_CWDFD mode. */ + __I_ring fts_fd_ring; } FTS; #ifdef __USE_LARGEFILE64 @@ -92,6 +209,13 @@ typedef struct { int fts_nitems; /* elements in the sort array */ int (*fts_compar) (const void *, const void *); /* compare fn */ int fts_options; /* fts_open options, global flags */ + int fts_cwd_fd; + struct hash_table *fts_leaf_optimization_works_ht; + union { + struct hash_table *ht; + struct cycle_check_state *state; + } fts_cycle; + __I_ring fts_fd_ring; } FTS64; #endif diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-32.h b/lib/libc/include/generic-glibc/gnu/lib-names-32.h index 77fbbc46100d7b2fcad49cb67f4af22df471f3a3..33f2700fb049c9de98b511c395753670af4df99b 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-32.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-32.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-hard.h b/lib/libc/include/generic-glibc/gnu/lib-names-hard.h index 393a0f91f49473362cb28026ea93f876f41da4c9..80f8b2e87ee57205b72076031c8e4711617647e2 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-hard.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-hard.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-n32_hard.h b/lib/libc/include/generic-glibc/gnu/lib-names-n32_hard.h index 2d2d46e4f5c3b76030cf34eb89a95f1debf40f27..09f068b64409436bd6e070b7f4642a596bb5907d 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-n32_hard.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-n32_hard.h @@ -23,4 +23,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-n64_hard.h b/lib/libc/include/generic-glibc/gnu/lib-names-n64_hard.h index 3d545313911cc42780f3f625b29e4b6078dd4c4e..caed888c6bd100ca1c0627bd0bdfba5146140775 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-n64_hard.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-n64_hard.h @@ -23,4 +23,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-o32_hard.h b/lib/libc/include/generic-glibc/gnu/lib-names-o32_hard.h index ab69cdcb7cfa958560ef796ba6f94a50398448dd..592d60dd33b5df50b16200332cf576666c2adf58 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-o32_hard.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-o32_hard.h @@ -23,4 +23,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-o32_soft.h b/lib/libc/include/generic-glibc/gnu/lib-names-o32_soft.h index 9be4d1e62012f6c7ce0ce5ed579989a65c795c7f..5ae29e9fb109b3f2bdfe275ae1a829769d66b0fb 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-o32_soft.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-o32_soft.h @@ -23,4 +23,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/lib-names-soft.h b/lib/libc/include/generic-glibc/gnu/lib-names-soft.h index c7a71323508f709975e8cb9f792dd2f928a275a3..fa665583dd54d5e8c17f2423181476fd94412be8 100644 --- a/lib/libc/include/generic-glibc/gnu/lib-names-soft.h +++ b/lib/libc/include/generic-glibc/gnu/lib-names-soft.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/netinet/in.h b/lib/libc/include/generic-glibc/netinet/in.h index 450338576f11be16bcf50d09d016d593f9ab5ca7..68b2016cdec8019a5e061dce477e6b1a69d3443e 100644 --- a/lib/libc/include/generic-glibc/netinet/in.h +++ b/lib/libc/include/generic-glibc/netinet/in.h @@ -91,6 +91,8 @@ enum #define IPPROTO_MPLS IPPROTO_MPLS IPPROTO_ETHERNET = 143, /* Ethernet-within-IPv6 Encapsulation. */ #define IPPROTO_ETHERNET IPPROTO_ETHERNET + IPPROTO_AGGFRAG = 144, /* AGGFRAG in ESP (RFC 9347). */ +#define IPPROTO_AGGFRAG IPPROTO_AGGFRAG IPPROTO_RAW = 255, /* Raw IP packets. */ #define IPPROTO_RAW IPPROTO_RAW IPPROTO_SMC = 256, /* Shared Memory Communications. */ diff --git a/lib/libc/include/generic-glibc/netinet/tcp.h b/lib/libc/include/generic-glibc/netinet/tcp.h index 49764361e72d032438c000c278a16c8f77bbc555..ae66195fa6dc6b8181e6d4ad4092806a14295d33 100644 --- a/lib/libc/include/generic-glibc/netinet/tcp.h +++ b/lib/libc/include/generic-glibc/netinet/tcp.h @@ -80,6 +80,9 @@ as a cmsg on read. */ #define TCP_CM_INQ TCP_INQ #define TCP_TX_DELAY 37 /* Delay outgoing packets by XX usec. */ +#define TCP_RTO_MAX_MS 44 /* Max time to retransmit (msec). */ +#define TCP_RTO_MIN_US 45 /* Min time to retransmit (usec). */ +#define TCP_DELACK_MAX_US 46 /* Max delayed ack time (usec). */ #define TCP_REPAIR_ON 1 #define TCP_REPAIR_OFF 0 @@ -226,6 +229,24 @@ enum tcp_ca_state TCP_CA_Loss = 4 }; +/* Values for tcpi_ecn_mode after negotiation. */ +#define TCPI_ECN_MODE_DISABLED 0x0 +#define TCPI_ECN_MODE_RFC3168 0x1 +#define TCPI_ECN_MODE_ACCECN 0x2 +#define TCPI_ECN_MODE_PENDING 0x3 + +/* Values for tcpi_accecn_opt_seen. */ +#define TCP_ACCECN_OPT_NOT_SEEN 0x0 +#define TCP_ACCECN_OPT_EMPTY_SEEN 0x1 +#define TCP_ACCECN_OPT_COUNTER_SEEN 0x2 +#define TCP_ACCECN_OPT_FAIL_SEEN 0x3 + +/* Values for tcpi_accecn_fail_mode. */ +#define TCP_ACCECN_ACE_FAIL_SEND 0x1 +#define TCP_ACCECN_ACE_FAIL_RECV 0x2 +#define TCP_ACCECN_OPT_FAIL_SEND 0x4 +#define TCP_ACCECN_OPT_FAIL_RECV 0x8 + struct tcp_info { uint8_t tcpi_state; @@ -319,8 +340,10 @@ struct tcp_info uint32_t tcpi_received_e1_bytes; uint32_t tcpi_received_e0_bytes; uint32_t tcpi_received_ce_bytes; - uint16_t tcpi_accecn_fail_mode; - uint16_t tcpi_accecn_opt_seen; + uint32_t tcpi_ecn_mode:2, + tcpi_accecn_opt_seen:2, + tcpi_accecn_fail_mode:4, + tcpi_options2:24; }; /* Netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ diff --git a/lib/libc/include/generic-glibc/regex.h b/lib/libc/include/generic-glibc/regex.h index 29964af5b251c24a729a3326c173a0ae96455d96..5ff2fb611c92f20565163ee3430e43348665c37c 100644 --- a/lib/libc/include/generic-glibc/regex.h +++ b/lib/libc/include/generic-glibc/regex.h @@ -74,7 +74,7 @@ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ -# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) +# define RE_BACKSLASH_ESCAPE_IN_LISTS 1ul /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. diff --git a/lib/libc/include/generic-glibc/spawn.h b/lib/libc/include/generic-glibc/spawn.h index b8e1eaee8f8c1432cb21fb069d2134573536827e..265a63ca28b30e0822fe9cf86e2214ec9de3cf3e 100644 --- a/lib/libc/include/generic-glibc/spawn.h +++ b/lib/libc/include/generic-glibc/spawn.h @@ -200,6 +200,26 @@ extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t * int __fd, int __newfd) __THROW __nonnull ((1)); +#ifdef __USE_XOPEN2K24XSI + +/* Add an action changing the directory to PATH during spawn. This + affects the subsequent file actions. + Alias of posix_spawn_file_actions_addchdir_np. */ +extern int __REDIRECT_NTH (posix_spawn_file_actions_addchdir, + (posix_spawn_file_actions_t * __restrict __actions, + const char *__restrict __path), + posix_spawn_file_actions_addchdir_np); + +/* Add an action changing the directory to FD during spawn. This + affects the subsequent file actions. FD is not duplicated and must + be open when the file action is executed. + Alias of posix_spawn_file_actions_addfchdir_np. */ +extern int __REDIRECT_NTH (posix_spawn_file_actions_addfchdir, + (posix_spawn_file_actions_t *, int __fd), + posix_spawn_file_actions_addfchdir_np); + +#endif /* __USE_XOPEN2K24XSI */ + #ifdef __USE_MISC /* Add an action changing the directory to PATH during spawn. This affects the subsequent file actions. */ diff --git a/lib/libc/include/generic-glibc/stdlib.h b/lib/libc/include/generic-glibc/stdlib.h index 3ca2bb1f91bc38a0f6244c99113a3fb520f15b20..7d8d57f4cd907c77714fefe6615acf92624080cb 100644 --- a/lib/libc/include/generic-glibc/stdlib.h +++ b/lib/libc/include/generic-glibc/stdlib.h @@ -1225,4 +1225,4 @@ extern size_t memalignment (const void *__p); __END_DECLS -#endif /* stdlib.h */ +#endif /* stdlib.h */ \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/sys/mount.h b/lib/libc/include/generic-glibc/sys/mount.h index bf226f5a738b6369caba0558d98357d3cb06e975..95834f8bf77e7fb2dbcb33fdb69ea81197335d5e 100644 --- a/lib/libc/include/generic-glibc/sys/mount.h +++ b/lib/libc/include/generic-glibc/sys/mount.h @@ -21,7 +21,6 @@ #ifndef _SYS_MOUNT_H #define _SYS_MOUNT_H 1 -#include #include #include #include @@ -190,6 +189,11 @@ enum /* fsmount flags. */ #define FSMOUNT_CLOEXEC 0x00000001 +// zig patch: check target glibc version +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 +#define FSMOUNT_NAMESPACE 0x00000002 /* Create the mount in a new mount + namespace. */ +#endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 */ /* mount attributes used on fsmount. */ #define MOUNT_ATTR_RDONLY 0x00000001 /* Mount read-only. */ @@ -267,10 +271,20 @@ enum fsconfig_command #define FSOPEN_CLOEXEC 0x00000001 /* open_tree flags. */ -#define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */ -#define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ +#ifndef OPEN_TREE_CLONE +# define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */ +#endif +#define OPEN_TREE_NAMESPACE (1 << 1) /* Clone the target tree into a new mount + namespace */ +#ifndef O_CLOEXEC +# include +# define O_CLOEXEC __O_CLOEXEC +#endif +#ifndef OPEN_TREE_CLOEXEC +# define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ +#endif -#endif +#endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 36) || __GLIBC__ > 2 */ __BEGIN_DECLS diff --git a/lib/libc/include/generic-glibc/sys/pidfd.h b/lib/libc/include/generic-glibc/sys/pidfd.h index 3d9ab9430c72d2b947860d9fa6b9525a6ebc11aa..19ac5235e5868de39a7a0659b8da9d122467bb8f 100644 --- a/lib/libc/include/generic-glibc/sys/pidfd.h +++ b/lib/libc/include/generic-glibc/sys/pidfd.h @@ -64,6 +64,15 @@ #define PIDFD_INFO_EXIT (1UL << 3) /* Only returned if requested. */ #define PIDFD_INFO_COREDUMP (1UL << 4) +// zig patch: check target glibc version +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 +/* Want/got supported mask flags */ +#define PIDFD_INFO_SUPPORTED_MASK (1UL << 5) +/* Always returned if PIDFD_INFO_COREDUMP is requested. */ +#define PIDFD_INFO_COREDUMP_SIGNAL (1UL << 6) +/* Always returned if PIDFD_INFO_COREDUMP is requested. */ +#define PIDFD_INFO_COREDUMP_CODE (1UL << 7) +#endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 */ /* Value for coredump_mask in pidfd_info. Only valid if PIDFD_INFO_COREDUMP @@ -95,11 +104,28 @@ struct pidfd_info __uint32_t fsgid; __int32_t exit_code; __uint32_t coredump_mask; +// zig patch: check target glibc version +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 + __uint32_t coredump_signal; + __uint32_t coredump_code; + __uint32_t coredump_pad; + __uint64_t supported_mask; +#else __uint32_t __spare1; +#endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 */ }; /* sizeof first published struct */ #define PIDFD_INFO_SIZE_VER0 64 +// zig patch: check target glibc version +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 +/* sizeof second published struct */ +#define PIDFD_INFO_SIZE_VER1 72 +/* sizeof third published struct */ +#define PIDFD_INFO_SIZE_VER2 80 +/* sizeof fourth published struct */ +#define PIDFD_INFO_SIZE_VER3 88 +#endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 44) || __GLIBC__ > 2 */ #define PIDFD_GET_INFO _IOWR(PIDFS_IOCTL_MAGIC, 11, struct pidfd_info) diff --git a/lib/libc/include/loongarch-linux-gnu/bits/hwcap.h b/lib/libc/include/loongarch-linux-gnu/bits/hwcap.h index d6335ffaa97c3c61cd1452cd3f01b8fc0903aa9d..72f26b63da5cbca1bac2ca0cbce6d3ff5f21c398 100644 --- a/lib/libc/include/loongarch-linux-gnu/bits/hwcap.h +++ b/lib/libc/include/loongarch-linux-gnu/bits/hwcap.h @@ -36,4 +36,6 @@ #define HWCAP_LOONGARCH_LBT_ARM (1 << 11) #define HWCAP_LOONGARCH_LBT_MIPS (1 << 12) #define HWCAP_LOONGARCH_PTW (1 << 13) -#define HWCAP_LOONGARCH_LSPW (1 << 14) \ No newline at end of file +#define HWCAP_LOONGARCH_LSPW (1 << 14) +#define HWCAP_LOONGARCH_SCQ (1 << 15) +#define HWCAP_LOONGARCH_LAM_BH (1 << 16) \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/bits/long-double.h b/lib/libc/include/loongarch-linux-gnu/bits/long-double.h deleted file mode 100644 index af7784dbe6dd85cd9538b5a7b437ab45de22eeb8..0000000000000000000000000000000000000000 --- a/lib/libc/include/loongarch-linux-gnu/bits/long-double.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Properties of long double type. ldbl-128 version. - Copyright (C) 2016-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* long double is distinct from double, so there is nothing to - define here. */ -#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/bits/struct_stat.h b/lib/libc/include/loongarch-linux-gnu/bits/struct_stat.h deleted file mode 100644 index 0462d37a6849812f485a6830a7c0dca303332636..0000000000000000000000000000000000000000 --- a/lib/libc/include/loongarch-linux-gnu/bits/struct_stat.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Definition for struct stat. - Copyright (C) 2020-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STRUCT_STAT_H -#define _BITS_STRUCT_STAT_H 1 - -#include -#include - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T -# if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T -# error "ino_t and off_t must both be the same type" -# endif -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct stat - { - __dev_t st_dev; /* Device. */ - __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -#endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/bits/timesize.h b/lib/libc/include/loongarch-linux-gnu/bits/timesize.h deleted file mode 100644 index dff2da5ed6bf30ce6f5580aee352e0958d58b623..0000000000000000000000000000000000000000 --- a/lib/libc/include/loongarch-linux-gnu/bits/timesize.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Bit size of the time_t type at glibc build time, general case. - Copyright (C) 2018-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Size in bits of the 'time_t' type of the default ABI. */ -#define __TIMESIZE 64 \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/bits/wordsize.h b/lib/libc/include/loongarch-linux-gnu/bits/wordsize.h index 5038df494751b3446f652bcb4d1c5d3e721a61ec..d4d561400b42e6e7004737b99bd8d82f6dc2a4f7 100644 --- a/lib/libc/include/loongarch-linux-gnu/bits/wordsize.h +++ b/lib/libc/include/loongarch-linux-gnu/bits/wordsize.h @@ -15,5 +15,16 @@ License along with the GNU C Library; if not, see . */ -#define __WORDSIZE 64 -#define __WORDSIZE_TIME64_COMPAT32 0 \ No newline at end of file +// zig patch: handle 32-bit and 64-bit in the same header +#if __loongarch_grlen == (__SIZEOF_POINTER__ * 8) +# define __WORDSIZE __loongarch_grlen +#else +# error unsupported ABI +#endif + +#define __WORDSIZE_TIME64_COMPAT32 0 + +#if __WORDSIZE == 32 +# define __WORDSIZE32_SIZE_ULONG 0 +# define __WORDSIZE32_PTRDIFF_LONG 0 +#endif diff --git a/lib/libc/include/loongarch-linux-gnu/fpu_control.h b/lib/libc/include/loongarch-linux-gnu/fpu_control.h index 69cd4213c79b5db9e6c6ec60dc454c8177c8ba6d..2a2354d760dcfaa389df58e0a942d4a679994387 100644 --- a/lib/libc/include/loongarch-linux-gnu/fpu_control.h +++ b/lib/libc/include/loongarch-linux-gnu/fpu_control.h @@ -94,6 +94,15 @@ extern void __loongarch_fpu_setcw (fpu_control_t) __THROW; #define _FPU_GETCW(cw) __asm__ volatile ("movfcsr2gr %0,$fcsr0" : "=r"(cw)) #define _FPU_SETCW(cw) __asm__ volatile ("movgr2fcsr $fcsr0,%0" : : "r"(cw)) +#define _FPU_GET_ENABLES(cw) __asm__ volatile ("movfcsr2gr %0,$fcsr1" : "=r"(cw)) +#define _FPU_SET_ENABLES(cw) __asm__ volatile ("movgr2fcsr $fcsr1,%0" : : "r"(cw)) + +#define _FPU_GET_FLAGS_CAUSE(cw) __asm__ volatile ("movfcsr2gr %0,$fcsr2" : "=r"(cw)) +#define _FPU_SET_FLAGS_CAUSE(cw) __asm__ volatile ("movgr2fcsr $fcsr2,%0" : : "r"(cw)) + +#define _FPU_GET_RM(cw) __asm__ volatile ("movfcsr2gr %0,$fcsr3" : "=r"(cw)) +#define _FPU_SET_RM(cw) __asm__ volatile ("movgr2fcsr $fcsr3,%0" : : "r"(cw)) + /* Default control word set at startup. */ extern fpu_control_t __fpu_control; diff --git a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-32.h b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32d.h similarity index 80% rename from lib/libc/include/powerpc-linux-gnu/gnu/lib-names-32.h rename to lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32d.h index af615a3d9f90d11fa61205c10ed15dbb63cb8985..f0780d70ef3f21f2e1cefa6f15f2bbc34c5ec651 100644 --- a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-32.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32d.h @@ -1,9 +1,10 @@ /* This file is automatically generated. */ #ifndef __GNU_LIB_NAMES_H -# error "Never use directly; include instead." +# error "Never use directly; include instead." #endif -#define LD_SO "ld.so.1" +#define LD_LINUX_LOONGARCH_ILP32D_SO "ld-linux-loongarch-ilp32d.so.1" +#define LD_SO "ld-linux-loongarch-ilp32d.so.1" #define LIBANL_SO "libanl.so.1" #define LIBBROKENLOCALE_SO "libBrokenLocale.so.1" #define LIBC_MALLOC_DEBUG_SO "libc_malloc_debug.so.0" @@ -23,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v1.h b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32s.h similarity index 80% rename from lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v1.h rename to lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32s.h index 4b2c00bbd6ba2e0be21db7253984abfc9e0b8e35..012654c98f178fc1163e564175ccf9aee4521874 100644 --- a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v1.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-ilp32s.h @@ -1,10 +1,10 @@ /* This file is automatically generated. */ #ifndef __GNU_LIB_NAMES_H -# error "Never use directly; include instead." +# error "Never use directly; include instead." #endif -#define LD64_SO "ld64.so.1" -#define LD_SO "ld64.so.1" +#define LD_LINUX_LOONGARCH_ILP32S_SO "ld-linux-loongarch-ilp32s.so.1" +#define LD_SO "ld-linux-loongarch-ilp32s.so.1" #define LIBANL_SO "libanl.so.1" #define LIBBROKENLOCALE_SO "libBrokenLocale.so.1" #define LIBC_MALLOC_DEBUG_SO "libc_malloc_debug.so.0" @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64d.h b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64d.h index 8f030679c89545ea0ac048e744799051778f0b2c..000df5a7ec275335f903b9ce6a53861189deeca6 100644 --- a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64d.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64d.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64s.h b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64s.h index 7c8b796194b2f179d2dfddbd0a7040a76ba37aeb..0a812d367cac3923d148b019ece28f5698001930 100644 --- a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64s.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names-lp64s.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names.h b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names.h index c3eba41e095a1705b8478909b27017a74c8a7ff5..d7367183c2d250b519e7fc3018c51b7751930f2e 100644 --- a/lib/libc/include/loongarch-linux-gnu/gnu/lib-names.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/lib-names.h @@ -6,6 +6,12 @@ #include +#if __WORDSIZE == 32 && defined __loongarch_soft_float +# include +#endif +#if __WORDSIZE == 32 && defined __loongarch_double_float +# include +#endif #if __WORDSIZE == 64 && defined __loongarch_soft_float # include #endif diff --git a/lib/libc/include/powerpc-linux-gnu/gnu/stubs-64-v1.h b/lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32d.h similarity index 71% rename from lib/libc/include/powerpc-linux-gnu/gnu/stubs-64-v1.h rename to lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32d.h index 636dc73283f9e3508fca4713d7d911f47d284387..4c2911dd6d66a591544d5c76448086f5de7b36d5 100644 --- a/lib/libc/include/powerpc-linux-gnu/gnu/stubs-64-v1.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32d.h @@ -7,6 +7,11 @@ #error Applications may not define the macro _LIBC #endif +#define __stub___compat_bdflush +#define __stub___compat_create_module +#define __stub___compat_get_kernel_syms +#define __stub___compat_query_module +#define __stub___compat_uselib #define __stub_chflags #define __stub_fchflags #define __stub_gtty diff --git a/lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32s.h b/lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32s.h new file mode 100644 index 0000000000000000000000000000000000000000..6ce02418e69609f4642a522910708769e96d6ee9 --- /dev/null +++ b/lib/libc/include/loongarch-linux-gnu/gnu/stubs-ilp32s.h @@ -0,0 +1,38 @@ +/* This file is automatically generated. + It defines a symbol `__stub_FUNCTION' for each function + in the C library which is a stub, meaning it will fail + every time called, usually setting errno to ENOSYS. */ + +#ifdef _LIBC + #error Applications may not define the macro _LIBC +#endif + +#define __stub___compat_bdflush +#define __stub___compat_create_module +#define __stub___compat_get_kernel_syms +#define __stub___compat_query_module +#define __stub___compat_uselib +#define __stub_chflags +#define __stub_fchflags +#define __stub_feclearexcept +#define __stub_fedisableexcept +#define __stub_feenableexcept +#define __stub_fegetenv +#define __stub_fegetexcept +#define __stub_fegetexceptflag +#define __stub_fegetmode +#define __stub_fegetround +#define __stub_feholdexcept +#define __stub_feraiseexcept +#define __stub_fesetenv +#define __stub_fesetexcept +#define __stub_fesetexceptflag +#define __stub_fesetmode +#define __stub_fesetround +#define __stub_fetestexcept +#define __stub_feupdateenv +#define __stub_gtty +#define __stub_revoke +#define __stub_setlogin +#define __stub_sigreturn +#define __stub_stty \ No newline at end of file diff --git a/lib/libc/include/loongarch-linux-gnu/gnu/stubs.h b/lib/libc/include/loongarch-linux-gnu/gnu/stubs.h index ea3f10c4213c01ccc0c0dd0fd9aef9b114ddf0cd..694ca60a5bfeabaa4e0ea8b594839408d21be11d 100644 --- a/lib/libc/include/loongarch-linux-gnu/gnu/stubs.h +++ b/lib/libc/include/loongarch-linux-gnu/gnu/stubs.h @@ -4,6 +4,12 @@ #include +#if __WORDSIZE == 32 && defined __loongarch_soft_float +# include +#endif +#if __WORDSIZE == 32 && defined __loongarch_double_float +# include +#endif #if __WORDSIZE == 64 && defined __loongarch_soft_float # include #endif diff --git a/lib/libc/include/loongarch-linux-gnu/sys/asm.h b/lib/libc/include/loongarch-linux-gnu/sys/asm.h index 973feb6effa26ea10d6b1af85ce2784a32ec8135..17465154a3ebe02d36cdf4b013c23acad75a58d4 100644 --- a/lib/libc/include/loongarch-linux-gnu/sys/asm.h +++ b/lib/libc/include/loongarch-linux-gnu/sys/asm.h @@ -23,10 +23,8 @@ #include /* Macros to handle different pointer/register sizes for 32/64-bit code. */ +#if __loongarch_grlen == 64 #define SZREG 8 -#define SZFREG 8 -#define SZVREG 16 -#define SZXREG 32 #define REG_L ld.d #define REG_S st.d #define SRLI srli.d @@ -34,10 +32,38 @@ #define ADDI addi.d #define ADD add.d #define SUB sub.d -#define BSTRINS bstrins.d #define LI li.d -#define FREG_L fld.d -#define FREG_S fst.d +#define BSTRINS bstrins.d + +#elif __loongarch_grlen == 32 + +#define SZREG 4 +#define REG_L ld.w +#define REG_S st.w +#define SRLI srli.w +#define SLLI slli.w +#define ADDI addi.w +#define ADD add.w +#define SUB sub.w +#define LI li.w +#define BSTRINS bstrins.w + +#else +#error __loongarch_grlen must equal 32 or 64 +#endif + +#if __loongarch_frlen == 64 + #define SZFREG 8 + #define FREG_L fld.d + #define FREG_S fst.d +#elif __loongarch_frlen == 32 + #define SZFREG 4 + #define FREG_L fld.s + #define FREG_S fst.s +#endif + +#define SZVREG 16 +#define SZXREG 32 /* Declare leaf routine. The usage of macro LEAF/ENTRY is as follows: diff --git a/lib/libc/include/m68k-linux-gnu/gnu/lib-names.h b/lib/libc/include/m68k-linux-gnu/gnu/lib-names.h index f72e37a69b31d263771248ddb6141300af975b2e..82aba9b01dc90b844da3f9efb076aa950cc5e348 100644 --- a/lib/libc/include/m68k-linux-gnu/gnu/lib-names.h +++ b/lib/libc/include/m68k-linux-gnu/gnu/lib-names.h @@ -24,6 +24,7 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" #endif /* gnu/lib-names.h */ \ No newline at end of file diff --git a/lib/libc/include/aarch64-linux-gnu/bits/long-double.h b/lib/libc/include/mips-linux-gnu/bits/long-double.h similarity index 82% rename from lib/libc/include/aarch64-linux-gnu/bits/long-double.h rename to lib/libc/include/mips-linux-gnu/bits/long-double.h index af7784dbe6dd85cd9538b5a7b437ab45de22eeb8..ebf6ac878fbf42241d0b2bcaf8c6049d08d827c5 100644 --- a/lib/libc/include/aarch64-linux-gnu/bits/long-double.h +++ b/lib/libc/include/mips-linux-gnu/bits/long-double.h @@ -1,4 +1,4 @@ -/* Properties of long double type. ldbl-128 version. +/* Properties of long double type. MIPS version. Copyright (C) 2016-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see . */ -/* long double is distinct from double, so there is nothing to - define here. */ +#include + +#if !defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32 +# define __NO_LONG_DOUBLE_MATH 1 +#endif #define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 \ No newline at end of file diff --git a/lib/libc/include/mips-linux-gnu/bits/struct_stat.h b/lib/libc/include/mips-linux-gnu/bits/struct_stat.h new file mode 100644 index 0000000000000000000000000000000000000000..231c875e7ab2c703e50746e2191ddc411c0878a2 --- /dev/null +++ b/lib/libc/include/mips-linux-gnu/bits/struct_stat.h @@ -0,0 +1,237 @@ +/* Definition for struct stat. + Copyright (C) 2020-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#if !defined _SYS_STAT_H && !defined _FCNTL_H +# error "Never include directly; use instead." +#endif + +#ifndef _BITS_STRUCT_STAT_H +#define _BITS_STRUCT_STAT_H 1 + +#include + +#if _MIPS_SIM == _ABIO32 +/* Structure describing file characteristics. */ +struct stat + { +# ifdef __USE_TIME64_REDIRECTS +# include +# else + unsigned long int st_dev; + long int st_pad1[3]; +# ifndef __USE_FILE_OFFSET64 + __ino_t st_ino; /* File serial number. */ +# else + __ino64_t st_ino; /* File serial number. */ +# endif + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + unsigned long int st_rdev; /* Device number, if device. */ +# ifndef __USE_FILE_OFFSET64 + long int st_pad2[2]; + __off_t st_size; /* Size of file, in bytes. */ + /* SVR4 added this extra long to allow for expansion of off_t. */ + long int st_pad3; +# else + long int st_pad2[3]; + __off64_t st_size; /* Size of file, in bytes. */ +# endif +# ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# define st_atime st_atim.tv_sec /* Backward compatibility. */ +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec +# else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +# endif + __blksize_t st_blksize; /* Optimal block size for I/O. */ +# ifndef __USE_FILE_OFFSET64 + __blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. */ +# else + long int st_pad4; + __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ +# endif + long int st_pad5[14]; +# endif /* __USE_TIME64_REDIRECTS */ + }; + +# ifdef __USE_LARGEFILE64 +struct stat64 + { +# ifdef __USE_TIME64_REDIRECTS +# include +# else + unsigned long int st_dev; + long int st_pad1[3]; + __ino64_t st_ino; /* File serial number. */ + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + unsigned long int st_rdev; /* Device number, if device. */ + long int st_pad2[3]; + __off64_t st_size; /* Size of file, in bytes. */ +# ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +# endif + __blksize_t st_blksize; /* Optimal block size for I/O. */ + long int st_pad3; + __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ + long int st_pad4[14]; +# endif /* __USE_TIME64_REDIRECTS */ + }; +# endif /* __USE_LARGEFILE64 */ + +#else /* _MIPS_SIM != _ABIO32 */ + +struct stat + { +# ifdef __USE_TIME64_REDIRECTS +# include +# else + __dev_t st_dev; + int st_pad1[3]; /* Reserved for st_dev expansion */ +# ifndef __USE_FILE_OFFSET64 + __ino_t st_ino; +# else + __ino64_t st_ino; +# endif + __mode_t st_mode; + __nlink_t st_nlink; + __uid_t st_uid; + __gid_t st_gid; + __dev_t st_rdev; +# if !defined __USE_FILE_OFFSET64 + unsigned int st_pad2[2]; /* Reserved for st_rdev expansion */ + __off_t st_size; + int st_pad3; +# else + unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ + __off64_t st_size; +# endif +# ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# define st_atime st_atim.tv_sec /* Backward compatibility. */ +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec +# else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +# endif + __blksize_t st_blksize; + unsigned int st_pad4; +# ifndef __USE_FILE_OFFSET64 + __blkcnt_t st_blocks; +# else + __blkcnt64_t st_blocks; +# endif + int st_pad5[14]; +# endif + }; + +#ifdef __USE_LARGEFILE64 +struct stat64 + { +# ifdef __USE_TIME64_REDIRECTS +# include +# else + __dev_t st_dev; + unsigned int st_pad1[3]; /* Reserved for st_dev expansion */ + __ino64_t st_ino; + __mode_t st_mode; + __nlink_t st_nlink; + __uid_t st_uid; + __gid_t st_gid; + __dev_t st_rdev; + unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ + __off64_t st_size; +# ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +# endif + __blksize_t st_blksize; + unsigned int st_pad3; + __blkcnt64_t st_blocks; + int st_pad4[14]; +# endif /* __USE_TIME64_REDIRECTS */ +}; +#endif + +#endif + +/* Tell code we have these members. */ +#define _STATBUF_ST_BLKSIZE +#define _STATBUF_ST_RDEV + +#endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/timesize.h b/lib/libc/include/mips-linux-gnu/bits/timesize.h similarity index 93% rename from lib/libc/include/s390x-linux-gnu/bits/timesize.h rename to lib/libc/include/mips-linux-gnu/bits/timesize.h index 5c231fe380193665c3e791dc1c16ef284787d758..114eea77753240de1509241efac873c28a59e9d0 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/timesize.h +++ b/lib/libc/include/mips-linux-gnu/bits/timesize.h @@ -1,4 +1,4 @@ -/* Bit size of the time_t type at glibc build time, Linux/s390. +/* Bit size of the time_t type at glibc build time, Linux/MIPS. Copyright (C) 2021-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. diff --git a/lib/libc/include/mips-linux-gnu/bits/waitstatus.h b/lib/libc/include/mips-linux-gnu/bits/waitstatus.h new file mode 100644 index 0000000000000000000000000000000000000000..1b7a5a3195a98951a56088ee2e3d7b48874dd835 --- /dev/null +++ b/lib/libc/include/mips-linux-gnu/bits/waitstatus.h @@ -0,0 +1,68 @@ +/* Definitions of status bits for `wait' et al. + MIPS version, based on the generic version (bits/waitstatus.h). + + Copyright (C) 1992-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#if !defined _SYS_WAIT_H && !defined _STDLIB_H +# error "Never include directly; use instead." +#endif + + +/* On MIPS SIGRTMAX is 127, so we need to handle the status code 127 + which is impossible on other ports. */ + +/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ +#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) + +/* If WIFSIGNALED(STATUS), the terminating signal. */ +#define __WTERMSIG(status) ((status) & 0x7f) + +/* If WIFSTOPPED(STATUS), the signal that stopped the child. */ +#define __WSTOPSIG(status) __WEXITSTATUS(status) + +/* Nonzero if STATUS indicates normal termination. */ +#define __WIFEXITED(status) (__WTERMSIG(status) == 0) + +/* Nonzero if STATUS indicates termination by a signal. */ +static __inline int +__WIFSIGNALED (int __status) +{ + return ((signed char) ((__status & 0x7f) + 1) >> 1) > 0 || __status == 0x7f; +} + +/* Nonzero if STATUS indicates the child is stopped. */ +static __inline int +__WIFSTOPPED (int __status) +{ + return (__status & 0xff) == 0x7f && __status != 0x7f; +} + +/* Nonzero if STATUS indicates the child continued after a stop. We only + define this if provides the WCONTINUED flag bit. */ +#ifdef WCONTINUED +# define __WIFCONTINUED(status) ((status) == __W_CONTINUED) +#endif + +/* Nonzero if STATUS indicates the child dumped core. */ +#define __WCOREDUMP(status) ((status) & __WCOREFLAG) + +/* Macros for constructing status values. */ +#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig)) +#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f) +#define __W_CONTINUED 0xffff +#define __WCOREFLAG 0x80 \ No newline at end of file diff --git a/lib/libc/include/powerpc-linux-gnu/bits/long-double.h b/lib/libc/include/powerpc-linux-gnu/bits/long-double.h index 6c9cf2949f916b13700552fd7c1fe852fa507460..e20cbda37abca98ee6597594ff6264ae7ed8f3a7 100644 --- a/lib/libc/include/powerpc-linux-gnu/bits/long-double.h +++ b/lib/libc/include/powerpc-linux-gnu/bits/long-double.h @@ -1,5 +1,5 @@ /* Properties of long double type. ldbl-opt version. - Copyright (C) 2016-2026 Free Software Foundation, Inc. + Copyright (C) 2019-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/lib/libc/include/generic-glibc/bits/ppc.h b/lib/libc/include/powerpc-linux-gnu/bits/ppc.h similarity index 100% rename from lib/libc/include/generic-glibc/bits/ppc.h rename to lib/libc/include/powerpc-linux-gnu/bits/ppc.h diff --git a/lib/libc/include/powerpc-linux-gnu/bits/struct_mutex.h b/lib/libc/include/powerpc-linux-gnu/bits/struct_mutex.h index ebf2d50922ee0114298519286785f965771985d9..95fc7f4cc7e18960cc0aa678b866c18b3a03e9be 100644 --- a/lib/libc/include/powerpc-linux-gnu/bits/struct_mutex.h +++ b/lib/libc/include/powerpc-linux-gnu/bits/struct_mutex.h @@ -59,4 +59,4 @@ struct __pthread_mutex_s 0, 0, 0, __kind, 0, { { 0, 0 } } #endif -#endif +#endif \ No newline at end of file diff --git a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v2.h b/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v2.h index 36329b69d756c708f60be53d92609a7175acef8a..0041d62398223239ae58d9bc47f4b552610cedeb 100644 --- a/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v2.h +++ b/lib/libc/include/powerpc-linux-gnu/gnu/lib-names-64-v2.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/sys/platform/ppc.h b/lib/libc/include/powerpc-linux-gnu/sys/platform/ppc.h similarity index 100% rename from lib/libc/include/generic-glibc/sys/platform/ppc.h rename to lib/libc/include/powerpc-linux-gnu/sys/platform/ppc.h diff --git a/lib/libc/include/riscv-linux-gnu/bits/long-double.h b/lib/libc/include/riscv-linux-gnu/bits/long-double.h deleted file mode 100644 index af7784dbe6dd85cd9538b5a7b437ab45de22eeb8..0000000000000000000000000000000000000000 --- a/lib/libc/include/riscv-linux-gnu/bits/long-double.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Properties of long double type. ldbl-128 version. - Copyright (C) 2016-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* long double is distinct from double, so there is nothing to - define here. */ -#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 \ No newline at end of file diff --git a/lib/libc/include/riscv-linux-gnu/bits/struct_stat.h b/lib/libc/include/riscv-linux-gnu/bits/struct_stat.h deleted file mode 100644 index 0462d37a6849812f485a6830a7c0dca303332636..0000000000000000000000000000000000000000 --- a/lib/libc/include/riscv-linux-gnu/bits/struct_stat.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Definition for struct stat. - Copyright (C) 2020-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STRUCT_STAT_H -#define _BITS_STRUCT_STAT_H 1 - -#include -#include - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T -# if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T -# error "ino_t and off_t must both be the same type" -# endif -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct stat - { - __dev_t st_dev; /* Device. */ - __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -#endif /* _BITS_STRUCT_STAT_H */ \ No newline at end of file diff --git a/lib/libc/include/riscv-linux-gnu/bits/timesize.h b/lib/libc/include/riscv-linux-gnu/bits/timesize.h deleted file mode 100644 index dff2da5ed6bf30ce6f5580aee352e0958d58b623..0000000000000000000000000000000000000000 --- a/lib/libc/include/riscv-linux-gnu/bits/timesize.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Bit size of the time_t type at glibc build time, general case. - Copyright (C) 2018-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Size in bits of the 'time_t' type of the default ABI. */ -#define __TIMESIZE 64 \ No newline at end of file diff --git a/lib/libc/include/riscv-linux-gnu/gnu/lib-names-ilp32d.h b/lib/libc/include/riscv-linux-gnu/gnu/lib-names-ilp32d.h index 33fd7061de58a4aeca1c876789202fc51a5be641..37e0c85dd4ea29bcca29f0b710981b74e5e8e3bc 100644 --- a/lib/libc/include/riscv-linux-gnu/gnu/lib-names-ilp32d.h +++ b/lib/libc/include/riscv-linux-gnu/gnu/lib-names-ilp32d.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/riscv-linux-gnu/gnu/lib-names-lp64d.h b/lib/libc/include/riscv-linux-gnu/gnu/lib-names-lp64d.h index 0b66bda6d611e45af8ebfbaa34b5569ae01e0c87..8117af98ffff4eec5296b1d16e390402785df0d8 100644 --- a/lib/libc/include/riscv-linux-gnu/gnu/lib-names-lp64d.h +++ b/lib/libc/include/riscv-linux-gnu/gnu/lib-names-lp64d.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/elfclass.h b/lib/libc/include/s390x-linux-gnu/bits/elfclass.h index 325ca0fe4b41d0af0242fb38611aca0b39d4b525..1082cffe057afa53e293fe6aec0c117aab32723d 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/elfclass.h +++ b/lib/libc/include/s390x-linux-gnu/bits/elfclass.h @@ -27,11 +27,6 @@ #define __ELF_NATIVE_CLASS __WORDSIZE -#if __WORDSIZE == 64 /* 64 bit Linux for S/390 is exceptional as it has .hash section with 64 bit entries. */ -typedef uint64_t Elf_Symndx; -#else -/* 32 bit Linux for S/390 has normal .hash section entries with 32 bits. */ -typedef uint32_t Elf_Symndx; -#endif \ No newline at end of file +typedef uint64_t Elf_Symndx; \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/environments.h b/lib/libc/include/s390x-linux-gnu/bits/environments.h deleted file mode 100644 index 6a5d3e997c9e6592b4c5077da6e5f1d9e40d9b40..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/bits/environments.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1999-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* By default we have 32-bit wide `int', `long int', pointers and `off_t' - and all platforms support LFS. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFF32 1 -# define _XBS5_ILP32_OFFBIG 1 - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#define __ILP32_OFF32_CFLAGS "-m31" -#define __ILP32_OFFBIG_CFLAGS "-m31 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -#define __ILP32_OFF32_LDFLAGS "-m31" -#define __ILP32_OFFBIG_LDFLAGS "-m31" -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/fcntl.h b/lib/libc/include/s390x-linux-gnu/bits/fcntl.h index 1d209c616c834cb7d1e8c4220a68852418694265..65df93eaf1e48e53690ec83f9cf4c1f17b3c6026 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/fcntl.h +++ b/lib/libc/include/s390x-linux-gnu/bits/fcntl.h @@ -22,29 +22,20 @@ #include -#if __WORDSIZE == 64 /* Not necessary, files are always with 64bit off_t. */ -# define __O_LARGEFILE 0 -#endif +#define __O_LARGEFILE 0 -#if __WORDSIZE == 64 /* Not necessary, we always have 64-bit offsets. */ -# define F_GETLK64 5 /* Get record locking info. */ -# define F_SETLK64 6 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 7 /* Set record locking info (blocking). */ -#endif +#define F_GETLK64 5 /* Get record locking info. */ +#define F_SETLK64 6 /* Set record locking info (non-blocking). */ +#define F_SETLKW64 7 /* Set record locking info (blocking). */ struct flock { short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 __off_t l_start; /* Offset where the lock begins. */ __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif __pid_t l_pid; /* Process holding the lock. */ }; @@ -59,13 +50,8 @@ struct flock64 }; #endif -#if __WORDSIZE == 64 -# define __POSIX_FADV_DONTNEED 6 /* Don't need these pages. */ -# define __POSIX_FADV_NOREUSE 7 /* Data will be accessed once. */ -#else -# define __POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -# define __POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -#endif +#define __POSIX_FADV_DONTNEED 6 /* Don't need these pages. */ +#define __POSIX_FADV_NOREUSE 7 /* Data will be accessed once. */ /* Include generic Linux declarations. */ #include \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/fenv.h b/lib/libc/include/s390x-linux-gnu/bits/fenv.h index 6fb9372043231b6e4303457c2b102b56fc39e728..e53e9e1d9ab8b9b5ff63b5f3c6f959ad2253b6ed 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/fenv.h +++ b/lib/libc/include/s390x-linux-gnu/bits/fenv.h @@ -77,9 +77,9 @@ typedef struct { fexcept_t __fpc; void *__glibc_reserved; - /* The field __unused (formerly __ieee_instruction_pointer) is a relict from - commit "Remove PTRACE_PEEKUSER" (87b9b50f0d4b92248905e95a06a13c513dc45e59) - and isn't used anymore. */ + /* The field __glibc_reserved (formerly __ieee_instruction_pointer) is a + relict from commit "Remove PTRACE_PEEKUSER" + (87b9b50f0d4b92248905e95a06a13c513dc45e59) and isn't used anymore. */ } fenv_t; /* If the default argument is used we use this value. */ @@ -96,4 +96,4 @@ typedef unsigned int femode_t; /* Default floating-point control modes. */ # define FE_DFL_MODE ((const femode_t *) -1L) -#endif +#endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/link.h b/lib/libc/include/s390x-linux-gnu/bits/link.h index 96694b37a417838cb4452446e0217fd7e3d4ebed..9eeb39b381bc9292c9b5c3842c296aa9db0b74b7 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/link.h +++ b/lib/libc/include/s390x-linux-gnu/bits/link.h @@ -23,64 +23,6 @@ typedef char La_s390_vr[16]; #endif -#if __ELF_NATIVE_CLASS == 32 - -/* Registers for entry into PLT on s390-32. */ -typedef struct La_s390_32_regs -{ - uint32_t lr_r2; - uint32_t lr_r3; - uint32_t lr_r4; - uint32_t lr_r5; - uint32_t lr_r6; - double lr_fp0; - double lr_fp2; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lr_v24; - La_s390_vr lr_v25; - La_s390_vr lr_v26; - La_s390_vr lr_v27; - La_s390_vr lr_v28; - La_s390_vr lr_v29; - La_s390_vr lr_v30; - La_s390_vr lr_v31; -# endif -} La_s390_32_regs; - -/* Return values for calls from PLT on s390-32. */ -typedef struct La_s390_32_retval -{ - uint32_t lrv_r2; - uint32_t lrv_r3; - double lrv_fp0; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lrv_v24; -# endif -} La_s390_32_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_s390_32_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_s390_32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_s390_32_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_s390_32_regs *__inregs, - La_s390_32_retval *__outregs, - const char *symname); - -__END_DECLS - -#else - /* Registers for entry into PLT on s390-64. */ typedef struct La_s390_64_regs { @@ -134,6 +76,4 @@ extern unsigned int la_s390_64_gnu_pltexit (Elf64_Sym *__sym, La_s390_64_retval *__outregs, const char *__symname); -__END_DECLS - -#endif \ No newline at end of file +__END_DECLS \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/procfs-extra.h b/lib/libc/include/s390x-linux-gnu/bits/procfs-extra.h deleted file mode 100644 index 7fb00d4146dae8fca24958e976e831c961090952..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/bits/procfs-extra.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Extra sys/procfs.h definitions. S/390 version. - Copyright (C) 2000-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -# error "Never include directly; use instead." -#endif - -#if __WORDSIZE == 64 - -/* Provide 32-bit variants so that BFD can read 32-bit - core files. */ -#define ELF_NGREG32 36 -typedef unsigned int elf_greg_t32; -typedef elf_greg_t32 - elf_gregset_t32[ELF_NGREG32] __attribute__ ((__aligned__ (8))); -typedef elf_fpregset_t elf_fpregset_t32; - -struct elf_prstatus32 - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned int pr_sigpend; /* Set of pending signals. */ - unsigned int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct - { - int tv_sec, tv_usec; - } pr_utime, /* User time. */ - pr_stime, /* System time. */ - pr_cutime, /* Cumulative user time. */ - pr_cstime; /* Cumulative system time. */ - elf_gregset_t32 pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - -struct elf_prpsinfo32 - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -typedef elf_gregset_t32 prgregset32_t; -typedef elf_fpregset_t32 prfpregset32_t; - -typedef struct elf_prstatus32 prstatus32_t; -typedef struct elf_prpsinfo32 prpsinfo32_t; - -#endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/procfs-id.h b/lib/libc/include/s390x-linux-gnu/bits/procfs-id.h deleted file mode 100644 index 9e8570cfe612efd5d35867d0a70a20593fde16f9..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/bits/procfs-id.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Types of pr_uid and pr_gid in struct elf_prpsinfo. S/390 version. - Copyright (C) 2018-2026 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -# error "Never include directly; use instead." -#endif - -#if __WORDSIZE == 64 -typedef unsigned int __pr_uid_t; -typedef unsigned int __pr_gid_t; -#else -typedef unsigned short int __pr_uid_t; -typedef unsigned short int __pr_gid_t; -#endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/setjmp.h b/lib/libc/include/s390x-linux-gnu/bits/setjmp.h index 7d660921ab0295c49a77d9fb12cf4b021546d8c3..451857ec455a20350777d9bd21ed38353e7c4763 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/setjmp.h +++ b/lib/libc/include/s390x-linux-gnu/bits/setjmp.h @@ -33,13 +33,7 @@ typedef struct __s390_jmp_buf /* We save registers 6-15. */ long int __gregs[10]; -# if __WORDSIZE == 64 - /* We save fpu registers f8 - f15. */ long __fpregs[8]; -# else - /* We save fpu registers 4 and 6. */ - long __fpregs[4]; -# endif } __jmp_buf[1]; #endif diff --git a/lib/libc/include/s390x-linux-gnu/bits/sigaction.h b/lib/libc/include/s390x-linux-gnu/bits/sigaction.h index 44883efbe768731d6953e626f57588887505c712..7012eab006a3e4b42515fb7fc8c7d0c026c1dc98 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/sigaction.h +++ b/lib/libc/include/s390x-linux-gnu/bits/sigaction.h @@ -1,4 +1,4 @@ -/* Definitions for 31 & 64 bit S/390 sigaction. +/* Definitions for 64 bit S/390 sigaction. Copyright (C) 2001-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -23,9 +23,6 @@ # error "Never include directly; use instead." #endif -#include - -#if __WORDSIZE == 64 /* Structure describing the action to be taken when a signal arrives. */ struct sigaction { @@ -55,36 +52,6 @@ struct sigaction /* Additional set of signals to be blocked. */ __sigset_t sa_mask; }; -#else -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - int sa_flags; - - /* Restore handler. */ - void (*sa_restorer) (void); - }; -#endif /* Bits in `sa_flags'. */ #define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */ diff --git a/lib/libc/include/s390x-linux-gnu/bits/struct_mutex.h b/lib/libc/include/s390x-linux-gnu/bits/struct_mutex.h index 571265267c2edbc388e00aed800c03b3d2c05b2d..d7b3a380e8f2f32e96a7d8f9b3fe71c52d2bf7a4 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/struct_mutex.h +++ b/lib/libc/include/s390x-linux-gnu/bits/struct_mutex.h @@ -24,39 +24,17 @@ struct __pthread_mutex_s int __lock; unsigned int __count; int __owner; -#if __WORDSIZE == 64 unsigned int __nusers; -#endif /* KIND must stay at this position in the structure to maintain binary compatibility with static initializers. */ int __kind; -#if __WORDSIZE == 64 short __spins; short __glibc_reserved; __pthread_list_t __list; # define __PTHREAD_MUTEX_HAVE_PREV 1 -#else - unsigned int __nusers; - __extension__ union - { - struct - { - short __data_spins; - short __data_unused; - } __data; -# define __spins __data.__data_spins - __pthread_slist_t __list; - }; -# define __PTHREAD_MUTEX_HAVE_PREV 0 -#endif }; -#if __WORDSIZE == 64 -# define __PTHREAD_MUTEX_INITIALIZER(__kind) \ +#define __PTHREAD_MUTEX_INITIALIZER(__kind) \ 0, 0, 0, 0, __kind, 0, 0, { 0, 0 } -#else -# define __PTHREAD_MUTEX_INITIALIZER(__kind) \ - 0, 0, 0, __kind, 0, { { 0, 0 } } -#endif -#endif +#endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/struct_rwlock.h b/lib/libc/include/s390x-linux-gnu/bits/struct_rwlock.h index e532dcddf63eef3facc4ec0021639de7ca1b49bc..7d453256eee76416816427df60aca51e65a76466 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/struct_rwlock.h +++ b/lib/libc/include/s390x-linux-gnu/bits/struct_rwlock.h @@ -28,7 +28,6 @@ struct __pthread_rwlock_arch_t unsigned int __writers_futex; unsigned int __pad3; unsigned int __pad4; -#if __WORDSIZE == 64 int __cur_writer; int __shared; unsigned long int __pad1; @@ -36,23 +35,9 @@ struct __pthread_rwlock_arch_t /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; -# else - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - int __cur_writer; -#endif }; -#if __WORDSIZE == 64 -# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ +#define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags -#else -# define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags, 0 -#endif #endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/struct_stat.h b/lib/libc/include/s390x-linux-gnu/bits/struct_stat.h index 3d77809e22d16b08b9329cb01c33a48e61177218..47141080639b92a6607dabed7ef00d3f53143736 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/struct_stat.h +++ b/lib/libc/include/s390x-linux-gnu/bits/struct_stat.h @@ -25,7 +25,6 @@ #include -#if __WORDSIZE == 64 struct stat { __dev_t st_dev; /* Device. */ @@ -62,70 +61,8 @@ struct stat __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ long int __glibc_reserved[3]; }; -#else -struct stat - { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - __dev_t st_dev; /* Device. */ - unsigned int __pad1; -# ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -# else - __ino_t __st_ino; /* 32bit file serial number. */ -# endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; -# ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -# else - __off64_t st_size; /* Size of file, in bytes. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -# else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif -# ifndef __USE_FILE_OFFSET64 - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -# else - __ino64_t st_ino; /* File serial number. */ -# endif -# endif - }; -# endif #ifdef __USE_LARGEFILE64 -# if __WORDSIZE == 64 /* Note stat64 is the same shape as stat. */ struct stat64 { @@ -138,7 +75,7 @@ struct stat64 int __glibc_reserved0; __dev_t st_rdev; /* Device number, if device. */ __off_t st_size; /* Size of file, in bytes. */ -# ifdef __USE_XOPEN2K8 +# ifdef __USE_XOPEN2K8 /* Nanosecond resolution timestamps are stored in a format equivalent to 'struct timespec'. This is the type used whenever possible but the Unix namespace rules do not allow the @@ -148,66 +85,21 @@ struct stat64 struct timespec st_atim; /* Time of last access. */ struct timespec st_mtim; /* Time of last modification. */ struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else +# define st_atime st_atim.tv_sec /* Backward compatibility. */ +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec +# else __time_t st_atime; /* Time of last access. */ unsigned long int st_atimensec; /* Nscecs of last access. */ __time_t st_mtime; /* Time of last modification. */ unsigned long int st_mtimensec; /* Nsecs of last modification. */ __time_t st_ctime; /* Time of last status change. */ unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif +# endif __blksize_t st_blksize; /* Optimal block size for I/O. */ __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ long int __glibc_reserved[3]; }; -# else -struct stat64 - { -# ifdef __USE_TIME64_REDIRECTS -# include -# else - __dev_t st_dev; /* Device. */ - unsigned int __pad1; - - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __ino64_t st_ino; /* File serial number. */ -# endif - }; -# endif #endif /* Tell code we have these members. */ diff --git a/lib/libc/include/s390x-linux-gnu/bits/typesizes.h b/lib/libc/include/s390x-linux-gnu/bits/typesizes.h index 5302d79b87a3bcdf2e8f9052fc3404030f9a3b35..101d3a7a9867d31f59c32464807cd473ced919fd 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/typesizes.h +++ b/lib/libc/include/s390x-linux-gnu/bits/typesizes.h @@ -57,42 +57,34 @@ #define __TIMER_T_TYPE void * #define __BLKSIZE_T_TYPE __SLONGWORD_TYPE #define __FSID_T_TYPE struct { int __val[2]; } -#if defined __GNUC__ && __GNUC__ <= 2 -/* Compatibility with g++ 2.95.x. */ -#define __SSIZE_T_TYPE __SWORD_TYPE -#else -/* size_t is unsigned long int on s390 -m31. */ -#define __SSIZE_T_TYPE __SLONGWORD_TYPE -#endif + +/* With s390-32, __SSIZE_T_TYPE was __SWORD_TYPE for compatibility with + g++ 2.95.x. Afterwards __SLONGWORD_TYPE was needed as size_t was + unsigned long int on s390-32. + Now as only s390-64 exists, __SWORD_TYPE can be used as also used in the + generic version as both types result in long int. */ +#define __SSIZE_T_TYPE __SWORD_TYPE + #define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE #define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE +#define __CPU_MASK_TYPE __ULONGWORD_TYPE -#ifdef __s390x__ /* Tell the libc code that off_t and off64_t are actually the same type for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 +#define __OFF_T_MATCHES_OFF64_T 1 /* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 +#define __INO_T_MATCHES_INO64_T 1 /* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 +#define __RLIM_T_MATCHES_RLIM64_T 1 /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ -# define __STATFS_MATCHES_STATFS64 1 +#define __STATFS_MATCHES_STATFS64 1 /* And for getitimer, setitimer and rusage */ -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 - -# define __STATFS_MATCHES_STATFS64 0 - -/* And for getitimer, setitimer and rusage */ -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 -#endif +#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 /* Number of descriptors that can fit in an `fd_set'. */ #define __FD_SETSIZE 1024 diff --git a/lib/libc/include/s390x-linux-gnu/bits/utmp.h b/lib/libc/include/s390x-linux-gnu/bits/utmp.h deleted file mode 100644 index 87db119de9415b8be0386c7bca655c4046fb2e36..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/bits/utmp.h +++ /dev/null @@ -1,127 +0,0 @@ -/* The `struct utmp' type, describing entries in the utmp file. GNU version. - Copyright (C) 1993-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMP_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include -#include - - -#define UT_LINESIZE 32 -#define UT_NAMESIZE 32 -#define UT_HOSTSIZE 256 - - -/* The structure describing an entry in the database of - previous logins. */ -struct lastlog - { -#if __WORDSIZE == 32 - int64_t ll_time; -#else - __time_t ll_time; -#endif - char ll_line[UT_LINESIZE]; - char ll_host[UT_HOSTSIZE]; - }; - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmp' below. */ -struct exit_status - { - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmp -{ - short int ut_type; /* Type of login. */ - pid_t ut_pid; /* Process ID of login process. */ - char ut_line[UT_LINESIZE] - __attribute_nonstring__; /* Devicename. */ - char ut_id[4] - __attribute_nonstring__; /* Inittab ID. */ - char ut_user[UT_NAMESIZE] - __attribute_nonstring__; /* Username. */ - char ut_host[UT_HOSTSIZE] - __attribute_nonstring__; /* Hostname for remote login. */ - struct exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ -/* The ut_session and ut_tv fields must be the same size when compiled - 32- and 64-bit. This allows data files and shared memory to be - shared between 32- and 64-bit applications. */ -#if __WORDSIZE == 32 - int64_t ut_session; /* Session ID, used for windowing. */ - struct - { - int64_t tv_sec; /* Seconds. */ - int64_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - - int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - -/* Backwards compatibility hacks. */ -#define ut_name ut_user -#ifndef _NO_UT_TIME -/* We have a problem here: `ut_time' is also used otherwise. Define - _NO_UT_TIME if the compiler complains. */ -# define ut_time ut_tv.tv_sec -#endif -#define ut_xtime ut_tv.tv_sec -#define ut_addr ut_addr_v6[0] - - -/* Values for the `ut_type' field of a `struct utmp'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#define RUN_LVL 1 /* The system's runlevel. */ -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#define ACCOUNTING 9 - -/* Old Linux name for the EMPTY type. */ -#define UT_UNKNOWN EMPTY - - -/* Tell the user that we have a modern system with UT_HOST, UT_PID, - UT_TYPE, UT_ID and UT_TV fields. */ -#define _HAVE_UT_TYPE 1 -#define _HAVE_UT_PID 1 -#define _HAVE_UT_ID 1 -#define _HAVE_UT_TV 1 -#define _HAVE_UT_HOST 1 \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/utmpx.h b/lib/libc/include/s390x-linux-gnu/bits/utmpx.h deleted file mode 100644 index 00ed2f21a1c4853e7f45dafe7d8ca46a0b4b44a7..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/bits/utmpx.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Structures and definitions for the user accounting database. GNU version. - Copyright (C) 1997-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMPX_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include - - -#ifdef __USE_GNU -# include -# define _PATH_UTMPX _PATH_UTMP -# define _PATH_WTMPX _PATH_WTMP -#endif - - -#define __UT_LINESIZE 32 -#define __UT_NAMESIZE 32 -#define __UT_HOSTSIZE 256 - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmpx' below. */ -struct __exit_status - { -#ifdef __USE_GNU - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ -#else - short int __e_termination; /* Process termination status. */ - short int __e_exit; /* Process exit status. */ -#endif - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmpx -{ - short int ut_type; /* Type of login. */ - __pid_t ut_pid; /* Process ID of login process. */ - char ut_line[__UT_LINESIZE] - __attribute_nonstring__; /* Devicename. */ - char ut_id[4] - __attribute_nonstring__; /* Inittab ID. */ - char ut_user[__UT_NAMESIZE] - __attribute_nonstring__; /* Username. */ - char ut_host[__UT_HOSTSIZE] - __attribute_nonstring__; /* Hostname for remote login. */ - struct __exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ - -/* The fields ut_session and ut_tv must be the same size when compiled - 32- and 64-bit. This allows files and shared memory to be shared - between 32- and 64-bit applications. */ -#if __WORDSIZE == 32 - __int64_t ut_session; /* Session ID, used for windowing. */ - struct - { - __int64_t tv_sec; /* Seconds. */ - __int64_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - - -/* Values for the `ut_type' field of a `struct utmpx'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#ifdef __USE_GNU -# define RUN_LVL 1 /* The system's runlevel. */ -#endif -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#ifdef __USE_GNU -# define ACCOUNTING 9 /* System accounting. */ -#endif \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/bits/wordsize.h b/lib/libc/include/s390x-linux-gnu/bits/wordsize.h index 8f3304644bdb1e10ae25ea828e95df45e3d4c124..5038df494751b3446f652bcb4d1c5d3e721a61ec 100644 --- a/lib/libc/include/s390x-linux-gnu/bits/wordsize.h +++ b/lib/libc/include/s390x-linux-gnu/bits/wordsize.h @@ -1,11 +1,19 @@ -/* Determine the wordsize from the preprocessor defines. */ +/* Copyright (C) 1999-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. -#if defined __s390x__ -# define __WORDSIZE 64 -#else -# define __WORDSIZE 32 -# define __WORDSIZE32_SIZE_ULONG 1 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -#define __WORDSIZE_TIME64_COMPAT32 0 \ No newline at end of file + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#define __WORDSIZE 64 +#define __WORDSIZE_TIME64_COMPAT32 0 \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/gnu/lib-names-64.h b/lib/libc/include/s390x-linux-gnu/gnu/lib-names-64.h deleted file mode 100644 index 0df63282ccce3e8edc6f72dc3ac75bf7a29e2b5e..0000000000000000000000000000000000000000 --- a/lib/libc/include/s390x-linux-gnu/gnu/lib-names-64.h +++ /dev/null @@ -1,27 +0,0 @@ -/* This file is automatically generated. */ -#ifndef __GNU_LIB_NAMES_H -# error "Never use directly; include instead." -#endif - -#define LD64_SO "ld64.so.1" -#define LD_SO "ld64.so.1" -#define LIBANL_SO "libanl.so.1" -#define LIBBROKENLOCALE_SO "libBrokenLocale.so.1" -#define LIBC_MALLOC_DEBUG_SO "libc_malloc_debug.so.0" -#define LIBC_SO "libc.so.6" -#define LIBDL_SO "libdl.so.2" -#define LIBGCC_S_SO "libgcc_s.so.1" -#define LIBMVEC_SO "libmvec.so.1" -#define LIBM_SO "libm.so.6" -#define LIBNSL_SO "libnsl.so.1" -#define LIBNSS_COMPAT_SO "libnss_compat.so.2" -#define LIBNSS_DB_SO "libnss_db.so.2" -#define LIBNSS_DNS_SO "libnss_dns.so.2" -#define LIBNSS_FILES_SO "libnss_files.so.2" -#define LIBNSS_HESIOD_SO "libnss_hesiod.so.2" -#define LIBNSS_LDAP_SO "libnss_ldap.so.2" -#define LIBPTHREAD_SO "libpthread.so.0" -#define LIBRESOLV_SO "libresolv.so.2" -#define LIBRT_SO "librt.so.1" -#define LIBTHREAD_DB_SO "libthread_db.so.1" -#define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/gnu/lib-names.h b/lib/libc/include/s390x-linux-gnu/gnu/lib-names.h index ad6471507a48c834a5c8cbc13cd851c2e20b74b9..b76efce6d28b32d6d22ad38b1239a620cf950a8a 100644 --- a/lib/libc/include/s390x-linux-gnu/gnu/lib-names.h +++ b/lib/libc/include/s390x-linux-gnu/gnu/lib-names.h @@ -4,13 +4,28 @@ #ifndef __GNU_LIB_NAMES_H #define __GNU_LIB_NAMES_H 1 -#include - -#if __WORDSIZE == 32 -# include -#endif -#if __WORDSIZE == 64 -# include -#endif +#define LD64_SO "ld64.so.1" +#define LD_SO "ld64.so.1" +#define LIBANL_SO "libanl.so.1" +#define LIBBROKENLOCALE_SO "libBrokenLocale.so.1" +#define LIBC_MALLOC_DEBUG_SO "libc_malloc_debug.so.0" +#define LIBC_SO "libc.so.6" +#define LIBDL_SO "libdl.so.2" +#define LIBGCC_S_SO "libgcc_s.so.1" +#define LIBMVEC_SO "libmvec.so.1" +#define LIBM_SO "libm.so.6" +#define LIBNSL_SO "libnsl.so.1" +#define LIBNSS_COMPAT_SO "libnss_compat.so.2" +#define LIBNSS_DB_SO "libnss_db.so.2" +#define LIBNSS_DNS_SO "libnss_dns.so.2" +#define LIBNSS_FILES_SO "libnss_files.so.2" +#define LIBNSS_HESIOD_SO "libnss_hesiod.so.2" +#define LIBNSS_LDAP_SO "libnss_ldap.so.2" +#define LIBPTHREAD_SO "libpthread.so.0" +#define LIBRESOLV_SO "libresolv.so.2" +#define LIBRT_SO "librt.so.1" +#define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" +#define LIBUTIL_SO "libutil.so.1" #endif /* gnu/lib-names.h */ \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/gnu/stubs.h b/lib/libc/include/s390x-linux-gnu/gnu/stubs.h index 120171a87ae7a525497cffc5786ed0383b47ca33..636dc73283f9e3508fca4713d7d911f47d284387 100644 --- a/lib/libc/include/s390x-linux-gnu/gnu/stubs.h +++ b/lib/libc/include/s390x-linux-gnu/gnu/stubs.h @@ -1,12 +1,16 @@ /* This file is automatically generated. - This file selects the right generated file of `__stub_FUNCTION' macros - based on the architecture being compiled for. */ + It defines a symbol `__stub_FUNCTION' for each function + in the C library which is a stub, meaning it will fail + every time called, usually setting errno to ENOSYS. */ -#include - -#if __WORDSIZE == 32 -# include +#ifdef _LIBC + #error Applications may not define the macro _LIBC #endif -#if __WORDSIZE == 64 -# include -#endif \ No newline at end of file + +#define __stub_chflags +#define __stub_fchflags +#define __stub_gtty +#define __stub_revoke +#define __stub_setlogin +#define __stub_sigreturn +#define __stub_stty \ No newline at end of file diff --git a/lib/libc/include/s390x-linux-gnu/sys/ucontext.h b/lib/libc/include/s390x-linux-gnu/sys/ucontext.h index a766145563a3c44816cf2985502cfc5f11507948..950d26f9b433db86e9b9df218a23aff1cc3e37e8 100644 --- a/lib/libc/include/s390x-linux-gnu/sys/ucontext.h +++ b/lib/libc/include/s390x-linux-gnu/sys/ucontext.h @@ -45,11 +45,7 @@ typedef unsigned long greg_t; the register set is an array, we make gregset_t a simple array that has the same size as s390_regs. This is needed for the elf_prstatus structure. */ -#if __WORDSIZE == 64 -# define __NGREG 27 -#else -# define __NGREG 36 -#endif +#define __NGREG 27 #ifdef __USE_MISC # define NGREG __NGREG #endif diff --git a/lib/libc/include/sparc-linux-gnu/bits/cloexec.h b/lib/libc/include/sparc-linux-gnu/bits/cloexec.h new file mode 100644 index 0000000000000000000000000000000000000000..153b5491cd5cfc283387276a0c6b4b2ae6fb45d8 --- /dev/null +++ b/lib/libc/include/sparc-linux-gnu/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 0x400000 \ No newline at end of file diff --git a/lib/libc/include/sparc-linux-gnu/gnu/lib-names-64.h b/lib/libc/include/sparc-linux-gnu/gnu/lib-names-64.h index 7e53ae0eb3f6bb5ea6f99a2c1e5de7cca1491685..ca08483aab3e398663087d84f914fd0903d98232 100644 --- a/lib/libc/include/sparc-linux-gnu/gnu/lib-names-64.h +++ b/lib/libc/include/sparc-linux-gnu/gnu/lib-names-64.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/generic-glibc/gnu/stubs-64.h b/lib/libc/include/sparc-linux-gnu/gnu/stubs-64.h similarity index 100% rename from lib/libc/include/generic-glibc/gnu/stubs-64.h rename to lib/libc/include/sparc-linux-gnu/gnu/stubs-64.h diff --git a/lib/libc/include/x86-linux-gnu/bits/struct_mutex.h b/lib/libc/include/x86-linux-gnu/bits/struct_mutex.h index 13c9894ad4b3156677a2475ede4c0bc47d1df68a..70b516b1e5d32ca6c8b99c393ad62b7f086723ab 100644 --- a/lib/libc/include/x86-linux-gnu/bits/struct_mutex.h +++ b/lib/libc/include/x86-linux-gnu/bits/struct_mutex.h @@ -59,4 +59,4 @@ struct __pthread_mutex_s 0, 0, 0, __kind, 0, { { 0, 0 } } #endif -#endif +#endif \ No newline at end of file diff --git a/lib/libc/include/x86-linux-gnu/gnu/lib-names-64.h b/lib/libc/include/x86-linux-gnu/gnu/lib-names-64.h index 26bcb6482efed72a960e0f0d5f79aee819f683b4..e570e8dc72828087c96f32b08a0150a17f709224 100644 --- a/lib/libc/include/x86-linux-gnu/gnu/lib-names-64.h +++ b/lib/libc/include/x86-linux-gnu/gnu/lib-names-64.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/lib/libc/include/x86-linux-gnu/gnu/lib-names-x32.h b/lib/libc/include/x86-linux-gnu/gnu/lib-names-x32.h index 735e8e2d3907906c879428d5433b19c9f8065b24..0ac184ea85c124f89fa21819b5c36c7e16e031ad 100644 --- a/lib/libc/include/x86-linux-gnu/gnu/lib-names-x32.h +++ b/lib/libc/include/x86-linux-gnu/gnu/lib-names-x32.h @@ -24,4 +24,5 @@ #define LIBRESOLV_SO "libresolv.so.2" #define LIBRT_SO "librt.so.1" #define LIBTHREAD_DB_SO "libthread_db.so.1" +#define LIBUNWIND_SO "libunwind.so.1" #define LIBUTIL_SO "libutil.so.1" \ No newline at end of file diff --git a/tools/process_headers.zig b/tools/process_headers.zig index 3e912c742e79c4c89d242d72a3e8c7126741c3f7..976f17b18207bd12bd915a64b4318d9543e63399 100644 --- a/tools/process_headers.zig +++ b/tools/process_headers.zig @@ -36,6 +36,8 @@ const glibc_targets = [_]LibCTarget{ .{ .arch = .aarch64_be, .abi = .gnu, .dest = "aarch64-linux-gnu" }, .{ .arch = .csky, .abi = .gnueabi, .dest = "csky-linux-gnu" }, .{ .arch = .csky, .abi = .gnueabihf, .dest = "csky-linux-gnu" }, + .{ .arch = .loongarch32, .abi = .gnu, .dest = "loongarch-linux-gnu" }, + .{ .arch = .loongarch32, .abi = .gnusf, .dest = "loongarch-linux-gnu" }, .{ .arch = .loongarch64, .abi = .gnu, .dest = "loongarch-linux-gnu" }, .{ .arch = .loongarch64, .abi = .gnusf, .dest = "loongarch-linux-gnu" }, .{ .arch = .m68k, .abi = .gnu }, -- 2.54.0 From 2579b37ff6e7f08fe90cf920a83e1282e51c571e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Jul 2026 08:39:36 +0200 Subject: [PATCH 2/7] libc: update glibc abilists to 2.44 --- lib/libc/glibc/abilists | Bin 248691 -> 253117 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/libc/glibc/abilists b/lib/libc/glibc/abilists index 3dec0a31a51a74d915e94a8c647416555d175a13..16ce0e77b3a4af2e7db96148dfbd4e4857b5fce8 100644 GIT binary patch literal 253117 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 B&9DFf literal 248691 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

O@P!9Gk*IhH8i03!*a+wkO!% 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 Date: Wed, 29 Jul 2026 08:51:50 +0200 Subject: [PATCH 3/7] libc: update glibc crt0 code to 2.44 --- lib/libc/glibc/elf/elf.h | 8 +- lib/libc/glibc/include/libc-symbols.h | 3 +- lib/libc/glibc/sysdeps/aarch64/sysdep.h | 32 ++- lib/libc/glibc/sysdeps/arm/start.S | 27 +++ lib/libc/glibc/sysdeps/htl/libc-lockP.h | 14 ++ lib/libc/glibc/sysdeps/loongarch/start.S | 26 +- lib/libc/glibc/sysdeps/loongarch/sys/asm.h | 104 ++++++++ lib/libc/glibc/sysdeps/loongarch/sysdep.h | 94 ++++++++ lib/libc/glibc/sysdeps/mach/libc-lock.h | 20 +- .../sysdeps/s390/{s390-64 => }/start-2.33.S | 0 .../glibc/sysdeps/s390/{s390-64 => }/start.S | 0 .../glibc/sysdeps/s390/{s390-64 => }/sysdep.h | 0 .../sysdeps/unix/sysv/linux/kernel-features.h | 7 +- .../unix/sysv/linux/loongarch/sysdep.h | 31 ++- .../unix/sysv/linux/s390/bits/typesizes.h | 36 ++- .../unix/sysv/linux/s390/kernel-features.h | 3 - .../unix/sysv/linux/s390/s390-64/sysdep.h | 178 -------------- .../sysdeps/unix/sysv/linux/s390/sysdep.h | 223 +++++++++++++++--- .../sysdeps/unix/sysv/linux/s390/xstatver.h | 21 +- src/libs/glibc.zig | 4 +- 20 files changed, 541 insertions(+), 290 deletions(-) create mode 100644 lib/libc/glibc/sysdeps/loongarch/sys/asm.h create mode 100644 lib/libc/glibc/sysdeps/loongarch/sysdep.h rename lib/libc/glibc/sysdeps/s390/{s390-64 => }/start-2.33.S (100%) rename lib/libc/glibc/sysdeps/s390/{s390-64 => }/start.S (100%) rename lib/libc/glibc/sysdeps/s390/{s390-64 => }/sysdep.h (100%) delete mode 100644 lib/libc/glibc/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h diff --git a/lib/libc/glibc/elf/elf.h b/lib/libc/glibc/elf/elf.h index 46a01281cb0fb5322d5124f0443c11dea4d5b721..b482fcfb64890752fc1aa4e9d208a7b94f022d38 100644 --- a/lib/libc/glibc/elf/elf.h +++ b/lib/libc/glibc/elf/elf.h @@ -798,7 +798,8 @@ typedef struct #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ #define NT_X86_SHSTK 0x204 /* x86 SHSTK state */ #define NT_X86_XSAVE_LAYOUT 0x205 /* XSAVE layout description. */ -#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ +#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves. This was + used in now removed s390-32 arch. */ #define NT_S390_TIMER 0x301 /* s390 timer register */ #define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */ #define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ @@ -846,6 +847,7 @@ typedef struct #define NT_RISCV_VECTOR 0x901 /* RISC-V vector registers */ #define NT_RISCV_TAGGED_ADDR_CTRL 0x902 /* RISC-V tagged address control */ +#define NT_RISCV_USER_CFI 0x903 /* RISC-V shadow stack state */ #define NT_LOONGARCH_CPUCFG 0xa00 /* LoongArch CPU config registers. */ #define NT_LOONGARCH_CSR 0xa01 /* LoongArch control and status registers. */ @@ -3470,7 +3472,9 @@ enum /* Valid values for the e_flags field. */ -#define EF_S390_HIGH_GPRS 0x00000001 /* High GPRs kernel facility needed. */ +#define EF_S390_HIGH_GPRS 0x00000001 /* High GPRs kernel facility needed. + This was used in now removed s390-32 + arch. */ /* Additional s390 relocs */ diff --git a/lib/libc/glibc/include/libc-symbols.h b/lib/libc/glibc/include/libc-symbols.h index bebfc67cec098bf106bb9231bd3ff47e8f85d31f..a6aef303a22fa1a23c2a8f88f33451c803476e38 100644 --- a/lib/libc/glibc/include/libc-symbols.h +++ b/lib/libc/glibc/include/libc-symbols.h @@ -113,6 +113,7 @@ #define HAVE_LIBINTL_H 1 #define HAVE_WCTYPE_H 1 #define HAVE_ISWCTYPE 1 +#define HAVE_MEMPCPY 1 #define ENABLE_NLS 1 /* The symbols in all the user (non-_) macros are C symbols. */ @@ -682,7 +683,7 @@ for linking") /* Helper / base macros for indirect function symbols. */ #define __ifunc_resolver(type_name, name, expr, init, classifier, ...) \ - classifier inhibit_stack_protector \ + classifier \ __typeof (type_name) *name##_ifunc (__VA_ARGS__) \ { \ init (); \ diff --git a/lib/libc/glibc/sysdeps/aarch64/sysdep.h b/lib/libc/glibc/sysdeps/aarch64/sysdep.h index da4b7f3fd32c4fbd62ce777d1857baeda279dcbb..77e6564d97bb5473bc915dde142522f7ee938914 100644 --- a/lib/libc/glibc/sysdeps/aarch64/sysdep.h +++ b/lib/libc/glibc/sysdeps/aarch64/sysdep.h @@ -43,7 +43,6 @@ #define FEATURE_1_PAC 2 #define FEATURE_1_GCS 4 -/* Add a NT_GNU_PROPERTY_TYPE_0 note. */ #define GNU_PROPERTY(type, value) \ .section .note.gnu.property, "a"; \ .p2align 3; \ @@ -57,9 +56,34 @@ .word 0; \ .text -/* Add GNU property note with the supported features to all asm code - where sysdep.h is included. */ -GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC|FEATURE_1_GCS) +#ifdef __ARM_BUILDATTR64_FV +/* Add AArch64 feature bits build attributes. */ +# define FEATURE_1_AND_MARK(value) \ + .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128; \ + .if ((value) & FEATURE_1_BTI); \ + .aeabi_attribute Tag_Feature_BTI, 1; \ + .else; \ + .aeabi_attribute Tag_Feature_BTI, 0; \ + .endif; \ + .if ((value) & FEATURE_1_GCS); \ + .aeabi_attribute Tag_Feature_GCS, 1; \ + .else; \ + .aeabi_attribute Tag_Feature_GCS, 0; \ + .endif; \ + .if ((value) & FEATURE_1_PAC); \ + .aeabi_attribute Tag_Feature_PAC, 1; \ + .else; \ + .aeabi_attribute Tag_Feature_PAC, 0; \ + .endif; \ + .text +#else +/* Add a NT_GNU_PROPERTY_TYPE_0 note. */ +# define FEATURE_1_AND_MARK(value) GNU_PROPERTY (FEATURE_1_AND, value) +#endif /* __ARM_BUILDATTR64_FV */ + +/* Add marking with the supported features to all asm code where sysdep.h + is included. */ +FEATURE_1_AND_MARK (FEATURE_1_BTI | FEATURE_1_PAC | FEATURE_1_GCS) /* Define an entry point visible from C. */ #define ENTRY(name) \ diff --git a/lib/libc/glibc/sysdeps/arm/start.S b/lib/libc/glibc/sysdeps/arm/start.S index a7e62b39346d18be9d46f64048b092e7c873b068..6b154dc7d33e3450b94991e9d827a3edf85acc9f 100644 --- a/lib/libc/glibc/sysdeps/arm/start.S +++ b/lib/libc/glibc/sysdeps/arm/start.S @@ -90,6 +90,7 @@ _start: push { a1 } #ifdef PIC +# ifdef SHARED ldr sl, .L_GOT adr a4, .L_GOT add sl, sl, a4 @@ -103,6 +104,16 @@ _start: /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ /* Let the libc call main and exit with its return code. */ bl __libc_start_main(PLT) +# else + ldr a1, .L_main_rel /* Load the relative offset of __wrap_main. */ + adr a4, .L_main_rel /* Load the actual runtime address of the label. */ + add a1, a4, a1 /* Add them together to get the absolute address. */ + + mov a4, #0 /* Used to be init. */ + push { a4 } /* Used to be fini. */ + + bl __libc_start_main +# endif /* ifdef SHARED */ #else mov a4, #0 /* Used to init. */ @@ -119,14 +130,30 @@ _start: #ifdef PIC .align 2 +# ifdef SHARED .L_GOT: .word _GLOBAL_OFFSET_TABLE_ - .L_GOT .word main(GOT) +# else +.L_main_rel: + .word __wrap_main - .L_main_rel +# endif #endif .cantunwind .fnend +#if defined PIC && !defined SHARED +/* When main is not defined in the executable but in a shared library then + a wrapper is needed, because crt1.o and rcrt1.o share this code and the + latter (static PIE) must avoid GOT relocations before __libc_start_main + is called. The branch to main is turned into a PLT entry by every linker, + unlike a REL32 data relocation against main. */ + .type __wrap_main, %function +__wrap_main: + b main +#endif + /* Define a symbol for the first piece of initialized data. */ .data .globl __data_start diff --git a/lib/libc/glibc/sysdeps/htl/libc-lockP.h b/lib/libc/glibc/sysdeps/htl/libc-lockP.h index a88eea4344004d7bcacdcd6bb827547ab9a41026..e20e40f2540f0d23b4215910637196cb0ad91959 100644 --- a/lib/libc/glibc/sysdeps/htl/libc-lockP.h +++ b/lib/libc/glibc/sysdeps/htl/libc-lockP.h @@ -21,6 +21,20 @@ #include +typedef pthread_rwlock_t __libc_rwlock_t; + +#define __libc_rwlock_define(CLASS,NAME) \ + CLASS __libc_rwlock_t NAME; +#define __libc_rwlock_define_initialized(CLASS,NAME) \ + CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER; +#define __libc_rwlock_init(NAME) __pthread_rwlock_init (&(NAME), NULL) +#define __libc_rwlock_fini(NAME) ((void) 0) +#define __libc_rwlock_rdlock(NAME) __pthread_rwlock_rdlock (&(NAME)) +#define __libc_rwlock_wrlock(NAME) __pthread_rwlock_wrlock (&(NAME)) +#define __libc_rwlock_tryrdlock(NAME) __pthread_rwlock_tryrdlock (&(NAME)) +#define __libc_rwlock_trywrlock(NAME) __pthread_rwlock_trywrlock (&(NAME)) +#define __libc_rwlock_unlock(NAME) __pthread_rwlock_unlock (&(NAME)) + /* If we check for a weakly referenced symbol and then perform a normal jump to it te code generated for some platforms in case of PIC is unnecessarily slow. What would happen is that the function diff --git a/lib/libc/glibc/sysdeps/loongarch/start.S b/lib/libc/glibc/sysdeps/loongarch/start.S index 72452f5307ef430c06fd5852190c68d5f1295366..7be47a034df972d645cd6bd4a09afa0c450f5ca2 100644 --- a/lib/libc/glibc/sysdeps/loongarch/start.S +++ b/lib/libc/glibc/sysdeps/loongarch/start.S @@ -36,6 +36,7 @@ #define __ASSEMBLY__ 1 #include #include +#include /* The entry point's job is to call __libc_start_main. Per the ABI, a0 contains the address of a function to be passed to atexit. @@ -57,23 +58,32 @@ ENTRY (ENTRY_POINT) /* Terminate call stack by noting ra is undefined. Use a dummy .cfi_label to force starting the FDE. */ .cfi_label .Ldummy - cfi_undefined (1) + cfi_undefined (1) or a5, a0, zero /* rtld_fini */ - la.pcrel a0, t0, main +#if defined PIC && !defined SHARED + /* Avoid relocation in static PIE since _start is called before it + is relocated. */ + la.pcrel a0, __wrap_main +#else + LA_GOT (a0, main) +#endif + REG_L a1, sp, 0 ADDI a2, sp, SZREG - /* Adjust $sp for 16-aligned */ - BSTRINS sp, zero, 3, 0 + /* Adjust $sp for 16-bytes aligned */ + REG_ALIGN_ASM (sp, 4) move a3, zero /* used to be init */ move a4, zero /* used to be fini */ or a6, sp, zero /* stack_end */ - la.pcrel ra, t0, __libc_start_main - jirl ra, ra, 0 + CALL (__libc_start_main) + CALL (abort) - la.pcrel ra, t0, abort - jirl ra, ra, 0 +#if defined PIC && !defined SHARED +__wrap_main: + TAIL (main) +#endif END (ENTRY_POINT) diff --git a/lib/libc/glibc/sysdeps/loongarch/sys/asm.h b/lib/libc/glibc/sysdeps/loongarch/sys/asm.h new file mode 100644 index 0000000000000000000000000000000000000000..de44aacfa411fc9f6be2ddcd64acea0a75117cea --- /dev/null +++ b/lib/libc/glibc/sysdeps/loongarch/sys/asm.h @@ -0,0 +1,104 @@ +/* Miscellaneous macros. + Copyright (C) 2022-2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _SYS_ASM_H +#define _SYS_ASM_H + +#include +#include + +/* Macros to handle different pointer/register sizes for 32/64-bit code. */ +#if __loongarch_grlen == 64 +#define SZREG 8 +#define REG_L ld.d +#define REG_S st.d +#define SRLI srli.d +#define SLLI slli.d +#define ADDI addi.d +#define ADD add.d +#define SUB sub.d +#define LI li.d +#define BSTRINS bstrins.d + +#elif __loongarch_grlen == 32 + +#define SZREG 4 +#define REG_L ld.w +#define REG_S st.w +#define SRLI srli.w +#define SLLI slli.w +#define ADDI addi.w +#define ADD add.w +#define SUB sub.w +#define LI li.w +#define BSTRINS bstrins.w + +#else +#error __loongarch_grlen must equal 32 or 64 +#endif + +#if __loongarch_frlen == 64 + #define SZFREG 8 + #define FREG_L fld.d + #define FREG_S fst.d +#elif __loongarch_frlen == 32 + #define SZFREG 4 + #define FREG_L fld.s + #define FREG_S fst.s +#endif + +#define SZVREG 16 +#define SZXREG 32 + +/* Declare leaf routine. + The usage of macro LEAF/ENTRY is as follows: + 1. LEAF(fcn) -- the align value of fcn is .align 3 (default value) + 2. LEAF(fcn, 6) -- the align value of fcn is .align 6 +*/ +#define LEAF_IMPL(symbol, aln, ...) \ + .text; \ + .globl symbol; \ + .align aln; \ + .type symbol, @function; \ +symbol: \ + cfi_startproc; + + +#define LEAF(...) LEAF_IMPL(__VA_ARGS__, 3) +#define ENTRY(...) LEAF(__VA_ARGS__) + +#define LEAF_NO_ALIGN(symbol) \ + .text; \ + .globl symbol; \ + .type symbol, @function; \ +symbol: \ + cfi_startproc; + +#define ENTRY_NO_ALIGN(symbol) LEAF_NO_ALIGN(symbol) + + +/* Mark end of function. */ +#undef END +#define END(function) \ + cfi_endproc; \ + .size function, .- function; + +/* Stack alignment. */ +#define ALMASK ~15 + +#endif /* sys/asm.h */ diff --git a/lib/libc/glibc/sysdeps/loongarch/sysdep.h b/lib/libc/glibc/sysdeps/loongarch/sysdep.h new file mode 100644 index 0000000000000000000000000000000000000000..d5fc0b08633b383c8bbcb9e0213c214d9a141c3b --- /dev/null +++ b/lib/libc/glibc/sysdeps/loongarch/sysdep.h @@ -0,0 +1,94 @@ +/* Macros for LoongArch. + Copyright (C) 2026 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _LOONGARCH_SYSDEP_H +#define _LOONGARCH_SYSDEP_H + +#if __loongarch_grlen == 64 + +#define PTRLOG 3 +/* Align reg to 2^n. Used in C. */ +#define REG_ALIGN_C(reg, n) \ + "bstrins.d\t" __STRING(reg) ", $zero, (" __STRING(n) "-1), 0" + +#elif __loongarch_grlen == 32 + +#define PTRLOG 2 +#define REG_ALIGN_C(reg, n) \ + "srli.w\t" __STRING(reg)", " __STRING(reg)", " __STRING(n) "\n\t" \ + "slli.w\t" __STRING(reg)", " __STRING(reg)", " __STRING(n) + +#else +#error __loongarch_grlen must equal 32 or 64 +#endif + +#ifdef __ASSEMBLER__ + +/* Stack alignment bytes. */ +#define STACK_ALIGN 16 + +/* Macros to handle different pointer/register sizes for 32/64-bit code. */ +#if __loongarch_grlen == 64 +#define SRAI srai.d + +/* Align reg to 2^n. Used in assembly. */ +#define REG_ALIGN_ASM(reg, n) bstrins.d reg, zero, (n-1), 0 + +#define LOAD_LOCAL(reg, sym) \ + pcalau12i reg, %pc_hi20(sym); \ + ld.d reg, reg, %pc_lo12(sym); + +#define LOAD_GLOBAL(reg, sym) \ + la.got reg, sym; \ + ld.d reg, reg, 0; + +#define LA_GOT(reg, sym) la.got reg, t0, sym + +#define CALL(sym) call36 sym +#define TAIL(sym) tail36 t0, sym + +#elif __loongarch_grlen == 32 /* __loongarch_grlen == 64 */ + +#define SRAI srai.w + +/* LA32R not have bstrins.w, use srli.w and slli.w on both LA32S and LA32R. */ +#define REG_ALIGN_ASM(reg, n) \ + srli.w reg, reg, n; \ + slli.w reg, reg, n; + +#define LOAD_LOCAL(reg, sym) \ + 1: pcaddu12i reg, %pcadd_hi20(sym); \ + ld.w reg, reg, %pcadd_lo12(1b); + +#define LOAD_GLOBAL(reg, sym) \ + 1: pcaddu12i reg, %got_pcadd_hi20(sym); \ + ld.w reg, reg, %pcadd_lo12(1b); \ + ld.w reg, reg, 0; + +#define LA_GOT(reg, sym) la.got reg, sym + +#define CALL(sym) call30 sym +#define TAIL(sym) tail30 t0, sym + +#else /* __loongarch_grlen == 64 */ +#error __loongarch_grlen must equal 32 or 64 +#endif /* __loongarch_grlen == 64 */ + +#endif /* __ASSEMBLER__ */ + +#endif /* _LOONGARCH_SYSDEP_H */ diff --git a/lib/libc/glibc/sysdeps/mach/libc-lock.h b/lib/libc/glibc/sysdeps/mach/libc-lock.h index 236a24ad807ea292bb25258d64ffb5658f5ddcf5..c5c67ccf9daa2fc5a02b63321f9fcdcf4617ec59 100644 --- a/lib/libc/glibc/sysdeps/mach/libc-lock.h +++ b/lib/libc/glibc/sysdeps/mach/libc-lock.h @@ -145,16 +145,16 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #define __rtld_lock_unlock_recursive(NAME) \ __libc_lock_unlock_recursive (NAME) -/* XXX for now */ -#define __libc_rwlock_define __libc_lock_define -#define __libc_rwlock_define_initialized __libc_lock_define_initialized -#define __libc_rwlock_init __libc_lock_init -#define __libc_rwlock_fini __libc_lock_fini -#define __libc_rwlock_rdlock __libc_lock_lock -#define __libc_rwlock_wrlock __libc_lock_lock -#define __libc_rwlock_tryrdlock __libc_lock_trylock -#define __libc_rwlock_trywrlock __libc_lock_trylock -#define __libc_rwlock_unlock __libc_lock_unlock +/* XXX for now, waiting for a futex-based pthread_rwlock implementation */ +#define __mach_rwlock_define __libc_lock_define +#define __mach_rwlock_define_initialized __libc_lock_define_initialized +#define __mach_rwlock_init __libc_lock_init +#define __mach_rwlock_fini __libc_lock_fini +#define __mach_rwlock_rdlock __libc_lock_lock +#define __mach_rwlock_wrlock __libc_lock_lock +#define __mach_rwlock_tryrdlock __libc_lock_trylock +#define __mach_rwlock_trywrlock __libc_lock_trylock +#define __mach_rwlock_unlock __libc_lock_unlock struct __libc_cleanup_frame { diff --git a/lib/libc/glibc/sysdeps/s390/s390-64/start-2.33.S b/lib/libc/glibc/sysdeps/s390/start-2.33.S similarity index 100% rename from lib/libc/glibc/sysdeps/s390/s390-64/start-2.33.S rename to lib/libc/glibc/sysdeps/s390/start-2.33.S diff --git a/lib/libc/glibc/sysdeps/s390/s390-64/start.S b/lib/libc/glibc/sysdeps/s390/start.S similarity index 100% rename from lib/libc/glibc/sysdeps/s390/s390-64/start.S rename to lib/libc/glibc/sysdeps/s390/start.S diff --git a/lib/libc/glibc/sysdeps/s390/s390-64/sysdep.h b/lib/libc/glibc/sysdeps/s390/sysdep.h similarity index 100% rename from lib/libc/glibc/sysdeps/s390/s390-64/sysdep.h rename to lib/libc/glibc/sysdeps/s390/sysdep.h diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/kernel-features.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/kernel-features.h index 42318b0a6fe51b9f1c6a61ba9b298904c16493d2..d41bda5112cc96e254232ba99881bfac21be77bb 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/kernel-features.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/kernel-features.h @@ -155,7 +155,7 @@ similar to kernel: - __ASSUME_CLONE_BACKWARDS: for variant 1. - - __ASSUME_CLONE_BACKWARDS2: for variant 2 (s390). + - __ASSUME_CLONE_BACKWARDS2: for variant 2 (s390x). - __ASSUME_CLONE_BACKWARDS3: for variant 3 (microblaze). - __ASSUME_CLONE_DEFAULT: for variant 4. */ @@ -266,4 +266,9 @@ /* zig patch: don't assume kernel version */ #define __ASSUME_MSEAL 0 +/* The PIDFD_GET_INFO ioctl was introduced across all architectures in Linux + 6.13. */ +/* zig patch: don't assume kernel version */ +#define __ASSUME_PIDFD_GET_INFO 0 + #endif /* kernel-features.h */ diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/loongarch/sysdep.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/loongarch/sysdep.h index ac5b36f8c02218289d06f1f9be3dc40b42952cc1..eaa9e52575b139c33fa4f929e18a83b28d3d4d28 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/loongarch/sysdep.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/loongarch/sysdep.h @@ -19,6 +19,7 @@ #ifndef _LINUX_LOONGARCH_SYSDEP_H #define _LINUX_LOONGARCH_SYSDEP_H 1 +#include #include #include #include @@ -34,9 +35,9 @@ #undef PSEUDO #define PSEUDO(name, syscall_name, args) \ ENTRY (name); \ - li.d a7, SYS_ify (syscall_name); \ + LI a7, SYS_ify (syscall_name); \ syscall 0; \ - li.d a7, -4096; \ + LI a7, -4096; \ bltu a7, a0, .Lsyscall_error##name; #undef PSEUDO_END @@ -52,16 +53,16 @@ .Lsyscall_error##name : la t0, rtld_errno; \ sub.w a0, zero, a0; \ st.w a0, t0, 0; \ - li.d a0, -1; + LI a0, -1; #else #define SYSCALL_ERROR_HANDLER(name) \ .Lsyscall_error##name : la.tls.ie t0, errno; \ - add.d t0, tp, t0; \ + ADD t0, tp, t0; \ sub.w a0, zero, a0; \ st.w a0, t0, 0; \ - li.d a0, -1; + LI a0, -1; #endif #else @@ -74,7 +75,7 @@ #undef PSEUDO_NEORRNO #define PSEUDO_NOERRNO(name, syscall_name, args) \ ENTRY (name); \ - li.d a7, SYS_ify (syscall_name); \ + LI a7, SYS_ify (syscall_name); \ syscall 0; #undef PSEUDO_END_NOERRNO @@ -85,11 +86,17 @@ /* Performs a system call, returning the error code. */ #undef PSEUDO_ERRVAL +#if __loongarch_grlen == 64 #define PSEUDO_ERRVAL(name, syscall_name, args) \ PSEUDO_NOERRNO (name, syscall_name, args); \ slli.d a0, a0, 32; \ srai.d a0, a0, 32; /* sign_ext */ \ sub.d a0, zero, a0; +#else +#define PSEUDO_ERRVAL(name, syscall_name, args) \ + PSEUDO_NOERRNO (name, syscall_name, args); \ + sub.w a0, zero, a0; +#endif #undef PSEUDO_END_ERRVAL #define PSEUDO_END_ERRVAL(name) END (name); @@ -109,6 +116,18 @@ #undef SYS_ify #define SYS_ify(syscall_name) __NR_##syscall_name +#if __WORDSIZE == 32 +/* Workarounds for generic code needing to handle 64-bit time_t. */ +#define __NR_clock_getres __NR_clock_getres_time64 +#define __NR_futex __NR_futex_time64 +#define __NR_ppoll __NR_ppoll_time64 +#define __NR_pselect6 __NR_pselect6_time64 +#define __NR_recvmmsg __NR_recvmmsg_time64 +#define __NR_rt_sigtimedwait __NR_rt_sigtimedwait_time64 +#define __NR_semtimedop __NR_semtimedop_time64 +#define __NR_utimensat __NR_utimensat_time64 +#endif /* __WORDSIZE == 32 */ + #ifndef __ASSEMBLER__ #define VDSO_NAME "LINUX_5.10" diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/bits/typesizes.h index 826a1e425c1a2b3b1ee712643d53284412275bfa..6e2be2270f3ef2352418c9ca49af32ecd9e1f9ca 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/bits/typesizes.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/bits/typesizes.h @@ -57,42 +57,34 @@ #define __TIMER_T_TYPE void * #define __BLKSIZE_T_TYPE __SLONGWORD_TYPE #define __FSID_T_TYPE struct { int __val[2]; } -#if defined __GNUC__ && __GNUC__ <= 2 -/* Compatibility with g++ 2.95.x. */ -#define __SSIZE_T_TYPE __SWORD_TYPE -#else -/* size_t is unsigned long int on s390 -m31. */ -#define __SSIZE_T_TYPE __SLONGWORD_TYPE -#endif + +/* With s390-32, __SSIZE_T_TYPE was __SWORD_TYPE for compatibility with + g++ 2.95.x. Afterwards __SLONGWORD_TYPE was needed as size_t was + unsigned long int on s390-32. + Now as only s390-64 exists, __SWORD_TYPE can be used as also used in the + generic version as both types result in long int. */ +#define __SSIZE_T_TYPE __SWORD_TYPE + #define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE #define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE +#define __CPU_MASK_TYPE __ULONGWORD_TYPE -#ifdef __s390x__ /* Tell the libc code that off_t and off64_t are actually the same type for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 +#define __OFF_T_MATCHES_OFF64_T 1 /* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 +#define __INO_T_MATCHES_INO64_T 1 /* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 +#define __RLIM_T_MATCHES_RLIM64_T 1 /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ -# define __STATFS_MATCHES_STATFS64 1 +#define __STATFS_MATCHES_STATFS64 1 /* And for getitimer, setitimer and rusage */ -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 - -# define __STATFS_MATCHES_STATFS64 0 - -/* And for getitimer, setitimer and rusage */ -# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 -#endif +#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 /* Number of descriptors that can fit in an `fd_set'. */ #define __FD_SETSIZE 1024 diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/kernel-features.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/kernel-features.h index a955c18738ad557e51a261b279eb2e3111870924..d7af29285fc538b2deda44f9aab98e5fcb60fef1 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/kernel-features.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/kernel-features.h @@ -47,9 +47,6 @@ # undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS # undef __ASSUME_SYSVIPC_DEFAULT_IPC_64 #endif -#ifndef __s390x__ -# define __ASSUME_SYSVIPC_BROKEN_MODE_T -#endif #undef __ASSUME_CLONE_DEFAULT #define __ASSUME_CLONE_BACKWARDS2 diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h deleted file mode 100644 index 9c9e2a271f57c5ce5d2efef9fc23c36ea55da6ac..0000000000000000000000000000000000000000 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ /dev/null @@ -1,178 +0,0 @@ -/* Assembler macros for 64 bit S/390. - Copyright (C) 2001-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_S390_SYSDEP_H -#define _LINUX_S390_SYSDEP_H - -#include -#include -#include -#include -#include /* For RTLD_PRIVATE_ERRNO. */ -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -/* In newer 2.1 kernels __NR_syscall is missing so we define it here. */ -#define __NR_syscall 0 - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in gpr2 is a real error - number. Linus said he will make sure that no syscall returns a value - in -1 .. -4095 as a valid result so we can safely test with -4095. */ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lghi %r4,-4095 ; \ - clgr %r2,%r4 ; \ - jgnl SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lcgr %r2,%r2 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef SYSCALL_ERROR_LABEL -#ifndef PIC -# undef SYSCALL_ERROR_LABEL -# define SYSCALL_ERROR_LABEL syscall_error -# define SYSCALL_ERROR_HANDLER -#else -# if RTLD_PRIVATE_ERRNO -# undef SYSCALL_ERROR_LABEL -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: larl %r1,rtld_errno; \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lghi %r2,-1; \ - br %r14 -# elif defined _LIBC_REENTRANT -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# undef SYSCALL_ERROR_LABEL -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: lcr %r0,%r2; \ - larl %r1,SYSCALL_ERROR_ERRNO@indntpoff; \ - lg %r1,0(%r1); \ - ear %r2,%a0; \ - sllg %r2,%r2,32; \ - ear %r2,%a1; \ - st %r0,0(%r1,%r2); \ - lghi %r2,-1; \ - br %r14 -# else -# undef SYSCALL_ERROR_LABEL -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: larl %r1,_GLOBAL_OFFSET_TABLE_; \ - lg %r1,errno@GOT(%r1); \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lghi %r2,-1; \ - br %r14 -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - -/* Linux takes system call arguments in registers: - - syscall number 1 call-clobbered - arg 1 2 call-clobbered - arg 2 3 call-clobbered - arg 3 4 call-clobbered - arg 4 5 call-clobbered - arg 5 6 call-saved - arg 6 7 call-saved - - (Of course a function with say 3 arguments does not have entries for - arguments 4 and 5.) - For system calls with 6 parameters a stack operation is required - to load the 6th parameter to register 7. Call saved register 7 is - moved to register 0 and back to avoid an additional stack frame. - */ - -#define DO_CALL(syscall, args) \ - .if args > 5; \ - lgr %r0,%r7; \ - lg %r7,160(%r15); \ - .endif; \ - lghi %r1,SYS_ify (syscall); \ - svc 0; \ - .if args > 5; \ - lgr %r7,%r0; \ - .endif - -#define ret \ - br 14 - -#define ret_NOERRNO \ - br 14 - -#define ret_ERRVAL \ - br 14 - -#else - -# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL -# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 - -#endif /* __ASSEMBLER__ */ - -#endif /* _LINUX_S390_SYSDEP_H */ diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/sysdep.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/sysdep.h index ee2d92edff1f0ee2fb8e0a25217e35dccbd0ff30..42fb8aa4692be8cd884dc9cb076b7c62412c03f0 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/sysdep.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/sysdep.h @@ -1,5 +1,5 @@ -/* Syscall definitions, Linux s390 version. - Copyright (C) 2019-2026 Free Software Foundation, Inc. +/* Assembler macros for 64 bit S/390. + Copyright (C) 2001-2026 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -14,15 +14,163 @@ You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see - . */ + . */ -#ifndef __ASSEMBLY__ +#ifndef _LINUX_S390_SYSDEP_H +#define _LINUX_S390_SYSDEP_H + +#include +#include +#include +#include /* For RTLD_PRIVATE_ERRNO. */ +#include + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +/* In newer 2.1 kernels __NR_syscall is missing so we define it here. */ +#define __NR_syscall 0 #undef SYS_ify #define SYS_ify(syscall_name) __NR_##syscall_name -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(no, nr, args...) \ +#ifdef __ASSEMBLER__ + +/* Linux uses a negative return value to indicate syscall errors, unlike + most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be negative + even if the call succeeded. E.g., the `lseek' system call might return + a large offset. Therefore we must not anymore test for < 0, but test + for a real error by making sure the value in gpr2 is a real error + number. Linus said he will make sure that no syscall returns a value + in -1 .. -4095 as a valid result so we can safely test with -4095. */ + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args); \ + lghi %r4,-4095 ; \ + clgr %r2,%r4 ; \ + jgnl SYSCALL_ERROR_LABEL + +# undef PSEUDO_END +# define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER; \ + END (name) + +# undef PSEUDO_NOERRNO +# define PSEUDO_NOERRNO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args) + +# undef PSEUDO_END_NOERRNO +# define PSEUDO_END_NOERRNO(name) \ + SYSCALL_ERROR_HANDLER; \ + END (name) + +# undef PSEUDO_ERRVAL +# define PSEUDO_ERRVAL(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args); \ + lcgr %r2,%r2 + +# undef PSEUDO_END_ERRVAL +# define PSEUDO_END_ERRVAL(name) \ + SYSCALL_ERROR_HANDLER; \ + END (name) + +# undef SYSCALL_ERROR_LABEL +# ifndef PIC +# undef SYSCALL_ERROR_LABEL +# define SYSCALL_ERROR_LABEL syscall_error +# define SYSCALL_ERROR_HANDLER +# else +# if RTLD_PRIVATE_ERRNO +# undef SYSCALL_ERROR_LABEL +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: larl %r1,rtld_errno; \ + lcr %r2,%r2; \ + st %r2,0(%r1); \ + lghi %r2,-1; \ + br %r14 +# elif defined _LIBC_REENTRANT +# if IS_IN (libc) +# define SYSCALL_ERROR_ERRNO __libc_errno +# else +# define SYSCALL_ERROR_ERRNO errno +# endif +# undef SYSCALL_ERROR_LABEL +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: lcr %r0,%r2; \ + larl %r1,SYSCALL_ERROR_ERRNO@indntpoff; \ + lg %r1,0(%r1); \ + ear %r2,%a0; \ + sllg %r2,%r2,32; \ + ear %r2,%a1; \ + st %r0,0(%r1,%r2); \ + lghi %r2,-1; \ + br %r14 +# else +# undef SYSCALL_ERROR_LABEL +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: larl %r1,_GLOBAL_OFFSET_TABLE_; \ + lg %r1,errno@GOT(%r1); \ + lcr %r2,%r2; \ + st %r2,0(%r1); \ + lghi %r2,-1; \ + br %r14 +# endif /* _LIBC_REENTRANT */ +# endif /* PIC */ + +/* Linux takes system call arguments in registers: + + syscall number 1 call-clobbered + arg 1 2 call-clobbered + arg 2 3 call-clobbered + arg 3 4 call-clobbered + arg 4 5 call-clobbered + arg 5 6 call-saved + arg 6 7 call-saved + + (Of course a function with say 3 arguments does not have entries for + arguments 4 and 5.) + For system calls with 6 parameters a stack operation is required + to load the 6th parameter to register 7. Call saved register 7 is + moved to register 0 and back to avoid an additional stack frame. + */ + +# define DO_CALL(syscall, args) \ + .if args > 5; \ + lgr %r0,%r7; \ + lg %r7,160(%r15); \ + .endif; \ + lghi %r1,SYS_ify (syscall); \ + svc 0; \ + .if args > 5; \ + lgr %r7,%r0; \ + .endif + +# define ret \ + br 14 + +# define ret_NOERRNO \ + br 14 + +# define ret_ERRVAL \ + br 14 + +#else /* not __ASSEMBLER__ */ + +# undef INTERNAL_SYSCALL_NCS +# define INTERNAL_SYSCALL_NCS(no, nr, args...) \ ({ \ DECLARGS_##nr(args) \ register unsigned long int _nr __asm__("1") = (unsigned long int)(no); \ @@ -34,51 +182,52 @@ : "memory" ); \ _ret; }) -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, nr, args...) \ +# undef INTERNAL_SYSCALL +# define INTERNAL_SYSCALL(name, nr, args...) \ INTERNAL_SYSCALL_NCS(__NR_##name, nr, args) -#define DECLARGS_0() -#define DECLARGS_1(arg1) \ +# define DECLARGS_0() +# define DECLARGS_1(arg1) \ register unsigned long int gpr2 __asm__ ("2") = (unsigned long int)(arg1); -#define DECLARGS_2(arg1, arg2) \ +# define DECLARGS_2(arg1, arg2) \ DECLARGS_1(arg1) \ register unsigned long int gpr3 __asm__ ("3") = (unsigned long int)(arg2); -#define DECLARGS_3(arg1, arg2, arg3) \ +# define DECLARGS_3(arg1, arg2, arg3) \ DECLARGS_2(arg1, arg2) \ register unsigned long int gpr4 __asm__ ("4") = (unsigned long int)(arg3); -#define DECLARGS_4(arg1, arg2, arg3, arg4) \ +# define DECLARGS_4(arg1, arg2, arg3, arg4) \ DECLARGS_3(arg1, arg2, arg3) \ register unsigned long int gpr5 __asm__ ("5") = (unsigned long int)(arg4); -#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ +# define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ DECLARGS_4(arg1, arg2, arg3, arg4) \ register unsigned long int gpr6 __asm__ ("6") = (unsigned long int)(arg5); -#define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ +# define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ register unsigned long int gpr7 __asm__ ("7") = (unsigned long int)(arg6); -#define ASMFMT_0 -#define ASMFMT_1 , "0" (gpr2) -#define ASMFMT_2 , "0" (gpr2), "d" (gpr3) -#define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4) -#define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) -#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) -#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7) +# define ASMFMT_0 +# define ASMFMT_1 , "0" (gpr2) +# define ASMFMT_2 , "0" (gpr2), "d" (gpr3) +# define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4) +# define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) +# define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) +# define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7) -#define VDSO_NAME "LINUX_2.6.29" -#define VDSO_HASH 123718585 +# define VDSO_NAME "LINUX_2.6.29" +# define VDSO_HASH 123718585 /* List of system calls which are supported as vsyscalls. */ -#ifdef __s390x__ -#define HAVE_CLOCK_GETRES64_VSYSCALL "__kernel_clock_getres" -#define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" -#define HAVE_GETRANDOM_VSYSCALL "__kernel_getrandom" -#else -#define HAVE_CLOCK_GETRES_VSYSCALL "__kernel_clock_getres" -#define HAVE_CLOCK_GETTIME_VSYSCALL "__kernel_clock_gettime" -#endif -#define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" -#define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" - -#define HAVE_CLONE3_WRAPPER 1 -#endif +# define HAVE_CLOCK_GETRES64_VSYSCALL "__kernel_clock_getres" +# define HAVE_CLOCK_GETTIME64_VSYSCALL "__kernel_clock_gettime" +# define HAVE_GETRANDOM_VSYSCALL "__kernel_getrandom" +# define HAVE_GETTIMEOFDAY_VSYSCALL "__kernel_gettimeofday" +# define HAVE_GETCPU_VSYSCALL "__kernel_getcpu" + +# define HAVE_CLONE3_WRAPPER 1 + +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + +#endif /* __ASSEMBLER__ */ + +#endif /* _LINUX_S390_SYSDEP_H */ diff --git a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/xstatver.h b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/xstatver.h index 9923199e407ccd8c3c341695841bcc07802c0189..f24ab4a9ee158d7f0890cd228b20bf1e278d332b 100644 --- a/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/xstatver.h +++ b/lib/libc/glibc/sysdeps/unix/sysv/linux/s390/xstatver.h @@ -1,19 +1,10 @@ /* Versions of the 'struct stat' data structure used in compatibility xstat functions. */ - -#include - -#if __WORDSIZE == 64 -# define _STAT_VER_KERNEL 0 -# define _STAT_VER_LINUX 1 -# define _MKNOD_VER_LINUX 0 -#else -# define _STAT_VER_LINUX_OLD 1 -# define _STAT_VER_KERNEL 1 -# define _STAT_VER_SVR4 2 -# define _STAT_VER_LINUX 3 -# define _MKNOD_VER_LINUX 1 -# define _MKNOD_VER_SVR4 2 -#endif +#define _STAT_VER_KERNEL 0 +#define _STAT_VER_LINUX 1 #define _STAT_VER _STAT_VER_LINUX + +/* Versions of the 'xmknod' interface used in compatibility xmknod + functions. */ +#define _MKNOD_VER_LINUX 0 #define _MKNOD_VER _MKNOD_VER_LINUX diff --git a/src/libs/glibc.zig b/src/libs/glibc.zig index 59abb61f333a8baf6ce54a485ff3dcdbdefd2afc..fce076dba86d74c52756d72419ed8859633992b5 100644 --- a/src/libs/glibc.zig +++ b/src/libs/glibc.zig @@ -398,7 +398,7 @@ fn start_asm_path(comp: *Compilation, arena: Allocator, basename: []const u8) ![ try result.appendSlice("powerpc" ++ s ++ "powerpc32"); } } else if (arch == .s390x) { - try result.appendSlice("s390" ++ s ++ "s390-64"); + try result.appendSlice("s390"); } else if (arch.isLoongArch()) { try result.appendSlice("loongarch"); } else if (arch == .m68k) { @@ -607,8 +607,6 @@ fn add_include_dirs_arch( try args.append("-I"); try args.append(try path.join(arena, &[_][]const u8{ dir, "s390", nptl })); } else { - try args.append("-I"); - try args.append(try path.join(arena, &[_][]const u8{ dir, "s390" ++ s ++ "s390-64" })); try args.append("-I"); try args.append(try path.join(arena, &[_][]const u8{ dir, "s390" })); } -- 2.54.0 From 012016103d5fca2cb6961bf2b3919b09f63e592d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Jul 2026 08:41:28 +0200 Subject: [PATCH 4/7] std.zig.target: add loongarch32-linux-gnu[sf] --- lib/std/zig/target.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/std/zig/target.zig b/lib/std/zig/target.zig index e30cae2a6728a7df71e9bef14f194f6264809604..6e7eb636d3bc30cd40e402d3490ef4a5f438e219 100644 --- a/lib/std/zig/target.zig +++ b/lib/std/zig/target.zig @@ -46,6 +46,8 @@ pub const available_libcs = [_]ArchOsAbi{ .{ .arch = .csky, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 4, .minor = 20, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2-soft" }, .{ .arch = .csky, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 4, .minor = 20, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2" }, .{ .arch = .hexagon, .os = .linux, .abi = .musl, .os_ver = .{ .major = 3, .minor = 2, .patch = 102 } }, + .{ .arch = .loongarch32, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 6, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 44, .patch = 0 }, .glibc_triple = "loongarch32-linux-gnuf64" }, + .{ .arch = .loongarch32, .os = .linux, .abi = .gnusf, .os_ver = .{ .major = 6, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 44, .patch = 0 }, .glibc_triple = "loongarch32-linux-gnusf" }, .{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnuf64" }, .{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnusf" }, .{ .arch = .loongarch64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 } }, -- 2.54.0 From 31e3a75b2f62b8d59365e09fa4436a4143a1327a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Jul 2026 09:40:07 +0200 Subject: [PATCH 5/7] std.Target.DynamicLinker: define path for loongarch32-linux-gnu[f32,sf] --- lib/std/Target.zig | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 8ad977e5a528583032f075fb84b5c72fcc504d54..29440d64af025266aa10b860ffaeb69e9917c591 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -2660,12 +2660,26 @@ pub const DynamicLinker = struct { else => return none, }}), - .loongarch64 => initFmt("/lib64/ld-linux-loongarch-{s}.so.1", .{switch (abi) { - .gnu => "lp64d", - .gnuf32 => "lp64f", - .gnusf => "lp64s", - else => return none, - }}), + .loongarch32, + .loongarch64, + => |arch| initFmt("/lib{s}/ld-linux-{s}{s}.so.1", .{ + switch (arch) { + .loongarch32 => "32", + .loongarch64 => "64", + else => unreachable, + }, + switch (arch) { + .loongarch32 => "loongarch-ilp32", + .loongarch64 => "loongarch-lp64", + else => unreachable, + }, + switch (abi) { + .gnu => "d", + .gnuf32 => "f", + .gnusf => "s", + else => return none, + }, + }), .hppa, .m68k, -- 2.54.0 From b20d6761ca5117e42507b759811f4d4fab604c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Jul 2026 09:40:39 +0200 Subject: [PATCH 6/7] test: add loongarch32-linux-gnu[sf] to llvm_targets --- test/llvm_targets.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/llvm_targets.zig b/test/llvm_targets.zig index 480adbcdafe6031de71b9ee42b8d9899c1faf72d..101c56df41624bd92404ddcb47c390eceeacc8e0 100644 --- a/test/llvm_targets.zig +++ b/test/llvm_targets.zig @@ -106,9 +106,9 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none }, - // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnu }, // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnuf32 }, - // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnusf }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnusf }, // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .musl }, // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .muslf32 }, // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .muslsf }, -- 2.54.0 From b665f716f3d35b4ae1505fa4b95bea42da031785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Fri, 31 Jul 2026 23:06:09 +0200 Subject: [PATCH 7/7] test: partially disable glibc_compat on loongarch https://github.com/Vexu/arocc/issues/1096 --- test/standalone/glibc_compat/build.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/standalone/glibc_compat/build.zig b/test/standalone/glibc_compat/build.zig index 2a171c2dddab4c36fbee25c08eb5465e1b218cab..69568d72d9c1fd1b190aa482a0e1749feb7fa886 100644 --- a/test/standalone/glibc_compat/build.zig +++ b/test/standalone/glibc_compat/build.zig @@ -103,6 +103,8 @@ pub fn build(b: *std.Build) void { .{ .arch_os_abi = t }, ) catch unreachable); + if (target.result.cpu.arch.isLoongArch()) continue; // https://github.com/Vexu/arocc/issues/1096 + const glibc_ver = target.result.os.version_range.linux.glibc; // only build test if glibc version supports the architecture -- 2.54.0