diff options
Diffstat (limited to 'libc/sysdeps/linux/aarch64/bits')
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/fcntl.h | 29 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/fenv.h | 78 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/hwcap.h | 99 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/shm.h | 87 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/sigstack.h | 56 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/syscalls.h | 51 | ||||
| -rw-r--r-- | libc/sysdeps/linux/aarch64/bits/uClibc_arch_features.h | 3 | 
7 files changed, 373 insertions, 30 deletions
| diff --git a/libc/sysdeps/linux/aarch64/bits/fcntl.h b/libc/sysdeps/linux/aarch64/bits/fcntl.h index 80657c008..024344eec 100644 --- a/libc/sysdeps/linux/aarch64/bits/fcntl.h +++ b/libc/sysdeps/linux/aarch64/bits/fcntl.h @@ -52,6 +52,7 @@  # define O_DIRECT	0200000  # define O_NOATIME     01000000  # define O_PATH       010000000 +# define O_TMPFILE    020040000  #endif  /* For now Linux has synchronisity options for data and read operations. @@ -93,8 +94,6 @@  #ifdef __USE_GNU  # define F_SETSIG	10	/* Set number of signal to be sent.  */  # define F_GETSIG	11	/* Get number of signal to be sent.  */ -# define F_SETOWN_EX	15	/* Get owner (thread receiving SIGIO).  */ -# define F_GETOWN_EX	16	/* Set owner (thread receiving SIGIO).  */  #endif @@ -105,9 +104,9 @@  # define F_SETPIPE_SZ	1031	/* Set pipe page size array.  */  # define F_GETPIPE_SZ	1032	/* Set pipe page size array.  */  #endif -#ifdef __USE_XOPEN2K8 +#if defined __USE_XOPEN2K8 || defined __USE_GNU  # define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with -				   close-on-exit set.  */ +				   close-on-exit set on new fd.  */  #endif  /* For F_[GET|SET]FD.  */ @@ -169,25 +168,6 @@ struct flock64    };  #endif - -#ifdef __USE_GNU -/* Owner types.  */ -enum __pid_type -  { -    F_OWNER_TID = 0,		/* Kernel thread.  */ -    F_OWNER_PID,		/* Process.  */ -    F_OWNER_PGRP,		/* Process group.  */ -    F_OWNER_GID = F_OWNER_PGRP	/* Alternative, obsolete name.  */ -  }; - -/* Structure to use with F_GETOWN_EX and F_SETOWN_EX.  */ -struct f_owner_ex -  { -    enum __pid_type type;	/* Owner type of ID.  */ -    __pid_t pid;		/* ID of owner.  */ -  }; -#endif -  /* Define some more compatibility macros to be backward compatible with     BSD systems which did not managed to hide these kernel macros.  */  #ifdef	__USE_BSD @@ -309,3 +289,6 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset,  #endif	/* use GNU */  __END_DECLS + +/* Include generic Linux declarations.  */ +#include <bits/fcntl-linux.h> diff --git a/libc/sysdeps/linux/aarch64/bits/fenv.h b/libc/sysdeps/linux/aarch64/bits/fenv.h new file mode 100644 index 000000000..4febd2177 --- /dev/null +++ b/libc/sysdeps/linux/aarch64/bits/fenv.h @@ -0,0 +1,78 @@ +/* Copyright (C) 2004-2025 Free Software Foundation, Inc. + +   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 +   <https://www.gnu.org/licenses/>.  */ + +#ifndef _FENV_H +# error "Never use <bits/fenv.h> directly; include <fenv.h> instead." +#endif + +/* Define bits representing exceptions in the FPSR status word.  */ +enum +  { +    FE_INVALID = +#define FE_INVALID	1 +      FE_INVALID, +    FE_DIVBYZERO = +#define FE_DIVBYZERO	2 +      FE_DIVBYZERO, +    FE_OVERFLOW = +#define FE_OVERFLOW	4 +      FE_OVERFLOW, +    FE_UNDERFLOW = +#define FE_UNDERFLOW	8 +      FE_UNDERFLOW, +    FE_INEXACT = +#define FE_INEXACT	16 +      FE_INEXACT, +  }; + +/* Amount to shift by to convert an exception bit in FPSR to a an +   exception bit mask in FPCR.  */ +#define FE_EXCEPT_SHIFT	8 + +/* All supported exceptions.  */ +#define FE_ALL_EXCEPT	\ +	(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + +/* Define bits representing rounding modes in the FPCR Rmode field.  */ +#define FE_TONEAREST  0x000000 +#define FE_UPWARD     0x400000 +#define FE_DOWNWARD   0x800000 +#define FE_TOWARDZERO 0xc00000 + +/* Type representing exception flags. */ +typedef unsigned int fexcept_t; + +/* Type representing floating-point environment.  */ +typedef struct +  { +    unsigned int __fpcr; +    unsigned int __fpsr; +  } +fenv_t; + +/* If the default argument is used we use this value.  */ +#define FE_DFL_ENV	((const fenv_t *) -1l) + +#ifdef __USE_GNU +/* Floating-point environment where none of the exceptions are masked.  */ +# define FE_NOMASK_ENV  ((const fenv_t *) -2) +#endif + +/* Type representing floating-point control modes.  */ +typedef unsigned int femode_t; + +/* Default floating-point control modes.  */ +# define FE_DFL_MODE	((const femode_t *) -1L) diff --git a/libc/sysdeps/linux/aarch64/bits/hwcap.h b/libc/sysdeps/linux/aarch64/bits/hwcap.h new file mode 100644 index 000000000..20061f5d1 --- /dev/null +++ b/libc/sysdeps/linux/aarch64/bits/hwcap.h @@ -0,0 +1,99 @@ +/* Defines for bits in AT_HWCAP.  AArch64 Linux version. +   Copyright (C) 2016-2023 Free Software Foundation, Inc. + +   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 +   <https://www.gnu.org/licenses/>.  */ + +#if !defined (_SYS_AUXV_H) +# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead." +#endif + +/* The following must match the kernel's <asm/hwcap.h> and update the +   list together with sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c.  */ +#define HWCAP_FP		(1 << 0) +#define HWCAP_ASIMD		(1 << 1) +#define HWCAP_EVTSTRM		(1 << 2) +#define HWCAP_AES		(1 << 3) +#define HWCAP_PMULL		(1 << 4) +#define HWCAP_SHA1		(1 << 5) +#define HWCAP_SHA2		(1 << 6) +#define HWCAP_CRC32		(1 << 7) +#define HWCAP_ATOMICS		(1 << 8) +#define HWCAP_FPHP		(1 << 9) +#define HWCAP_ASIMDHP		(1 << 10) +#define HWCAP_CPUID		(1 << 11) +#define HWCAP_ASIMDRDM		(1 << 12) +#define HWCAP_JSCVT		(1 << 13) +#define HWCAP_FCMA		(1 << 14) +#define HWCAP_LRCPC		(1 << 15) +#define HWCAP_DCPOP		(1 << 16) +#define HWCAP_SHA3		(1 << 17) +#define HWCAP_SM3		(1 << 18) +#define HWCAP_SM4		(1 << 19) +#define HWCAP_ASIMDDP		(1 << 20) +#define HWCAP_SHA512		(1 << 21) +#define HWCAP_SVE		(1 << 22) +#define HWCAP_ASIMDFHM		(1 << 23) +#define HWCAP_DIT		(1 << 24) +#define HWCAP_USCAT		(1 << 25) +#define HWCAP_ILRCPC		(1 << 26) +#define HWCAP_FLAGM		(1 << 27) +#define HWCAP_SSBS		(1 << 28) +#define HWCAP_SB		(1 << 29) +#define HWCAP_PACA		(1 << 30) +#define HWCAP_PACG		(1UL << 31) + +#define HWCAP2_DCPODP		(1 << 0) +#define HWCAP2_SVE2		(1 << 1) +#define HWCAP2_SVEAES		(1 << 2) +#define HWCAP2_SVEPMULL		(1 << 3) +#define HWCAP2_SVEBITPERM	(1 << 4) +#define HWCAP2_SVESHA3		(1 << 5) +#define HWCAP2_SVESM4		(1 << 6) +#define HWCAP2_FLAGM2		(1 << 7) +#define HWCAP2_FRINT		(1 << 8) +#define HWCAP2_SVEI8MM		(1 << 9) +#define HWCAP2_SVEF32MM		(1 << 10) +#define HWCAP2_SVEF64MM		(1 << 11) +#define HWCAP2_SVEBF16		(1 << 12) +#define HWCAP2_I8MM		(1 << 13) +#define HWCAP2_BF16		(1 << 14) +#define HWCAP2_DGH		(1 << 15) +#define HWCAP2_RNG		(1 << 16) +#define HWCAP2_BTI		(1 << 17) +#define HWCAP2_MTE		(1 << 18) +#define HWCAP2_ECV		(1 << 19) +#define HWCAP2_AFP		(1 << 20) +#define HWCAP2_RPRES		(1 << 21) +#define HWCAP2_MTE3		(1 << 22) +#define HWCAP2_SME		(1 << 23) +#define HWCAP2_SME_I16I64	(1 << 24) +#define HWCAP2_SME_F64F64	(1 << 25) +#define HWCAP2_SME_I8I32	(1 << 26) +#define HWCAP2_SME_F16F32	(1 << 27) +#define HWCAP2_SME_B16F32	(1 << 28) +#define HWCAP2_SME_F32F32	(1 << 29) +#define HWCAP2_SME_FA64		(1 << 30) +#define HWCAP2_WFXT		(1UL << 31) +#define HWCAP2_EBF16		(1UL << 32) +#define HWCAP2_SVE_EBF16	(1UL << 33) +#define HWCAP2_CSSC		(1UL << 34) +#define HWCAP2_RPRFM		(1UL << 35) +#define HWCAP2_SVE2P1		(1UL << 36) +#define HWCAP2_SME2		(1UL << 37) +#define HWCAP2_SME2P1		(1UL << 38) +#define HWCAP2_SME_I16I32	(1UL << 39) +#define HWCAP2_SME_BI32I32	(1UL << 40) +#define HWCAP2_SME_B16B16	(1UL << 41) +#define HWCAP2_SME_F16F16	(1UL << 42) diff --git a/libc/sysdeps/linux/aarch64/bits/shm.h b/libc/sysdeps/linux/aarch64/bits/shm.h new file mode 100644 index 000000000..bfb603499 --- /dev/null +++ b/libc/sysdeps/linux/aarch64/bits/shm.h @@ -0,0 +1,87 @@ +/* + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB + * in this tarball. + */ + +#ifndef _SYS_SHM_H +# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." +#endif + +#include <bits/types.h> + +/* Permission flag for shmget.  */ +#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */ +#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */ + +/* Flags for `shmat'.  */ +#define SHM_RDONLY	010000		/* attach read-only else read-write */ +#define SHM_RND		020000		/* round attach address to SHMLBA */ +#define SHM_REMAP	040000		/* take-over region on attach */ + +/* Commands for `shmctl'.  */ +#define SHM_LOCK	11		/* lock segment (root only) */ +#define SHM_UNLOCK	12		/* unlock segment (root only) */ + +__BEGIN_DECLS + +/* Segment low boundary address multiple.  */ +#define SHMLBA		(__getpagesize () << 2) +extern int __getpagesize (void) __THROW __attribute__ ((__const__)); + + +/* Type to count number of attaches.  */ +typedef unsigned long int shmatt_t; + +/* Data structure describing a set of semaphores.  */ +struct shmid_ds +  { +    struct ipc_perm shm_perm;		/* operation permission struct */ +    size_t shm_segsz;			/* size of segment in bytes */ +    __time_t shm_atime;			/* time of last shmat() */ +    __time_t shm_dtime;			/* time of last shmdt() */ +    __time_t shm_ctime;			/* time of last change by shmctl() */ +    __pid_t shm_cpid;			/* pid of creator */ +    __pid_t shm_lpid;			/* pid of last shmop */ +    shmatt_t shm_nattch;		/* number of current attaches */ +    unsigned long int __uclibc_unused1; +    unsigned long int __uclibc_unused2; +  }; + +#ifdef __USE_MISC + +/* ipcs ctl commands */ +# define SHM_STAT 	13 +# define SHM_INFO 	14 + +/* shm_mode upper byte flags */ +# define SHM_DEST	01000	/* segment will be destroyed on last detach */ +# define SHM_LOCKED	02000   /* segment will not be swapped */ +# define SHM_HUGETLB	04000	/* segment is mapped via hugetlb */ +# define SHM_NORESERVE	010000	/* don't check for reservations */ + +struct	shminfo +  { +    unsigned long int shmmax; +    unsigned long int shmmin; +    unsigned long int shmmni; +    unsigned long int shmseg; +    unsigned long int shmall; +    unsigned long int __uclibc_unused1; +    unsigned long int __uclibc_unused2; +    unsigned long int __uclibc_unused3; +    unsigned long int __uclibc_unused4; +  }; + +struct shm_info +  { +    int used_ids; +    unsigned long int shm_tot;	/* total allocated shm */ +    unsigned long int shm_rss;	/* total resident shm */ +    unsigned long int shm_swp;	/* total swapped shm */ +    unsigned long int swap_attempts; +    unsigned long int swap_successes; +  }; + +#endif /* __USE_MISC */ + +__END_DECLS diff --git a/libc/sysdeps/linux/aarch64/bits/sigstack.h b/libc/sysdeps/linux/aarch64/bits/sigstack.h new file mode 100644 index 000000000..7cb89265d --- /dev/null +++ b/libc/sysdeps/linux/aarch64/bits/sigstack.h @@ -0,0 +1,56 @@ +/* sigstack, sigaltstack definitions. +   Copyright (C) 1998, 1999 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 +   <http://www.gnu.org/licenses/>.  */ + +#ifndef _SIGNAL_H +# error "Never include this file directly.  Use <signal.h> instead" +#endif + + +#if defined __UCLIBC_SUSV4_LEGACY__ || !defined __UCLIBC_STRICT_HEADERS__ +/* Structure describing a signal stack (obsolete).  */ +struct sigstack +  { +    void *ss_sp;		/* Signal stack pointer.  */ +    int ss_onstack;		/* Nonzero if executing on this stack.  */ +  }; +#endif + + +/* Possible values for `ss_flags.'.  */ +enum +{ +  SS_ONSTACK = 1, +#define SS_ONSTACK	SS_ONSTACK +  SS_DISABLE +#define SS_DISABLE	SS_DISABLE +}; + +/* Minimum stack size for a signal handler.  */ +#define MINSIGSTKSZ	5120 + +/* System default stack size.  */ +#define SIGSTKSZ	16384 + + +/* Alternate, preferred interface.  */ +typedef struct sigaltstack +  { +    void *ss_sp; +    int ss_flags; +    size_t ss_size; +  } stack_t; diff --git a/libc/sysdeps/linux/aarch64/bits/syscalls.h b/libc/sysdeps/linux/aarch64/bits/syscalls.h index 3c0d840ea..489736fe6 100644 --- a/libc/sysdeps/linux/aarch64/bits/syscalls.h +++ b/libc/sysdeps/linux/aarch64/bits/syscalls.h @@ -31,22 +31,55 @@ License along with the GNU C Library; if not, see  #ifndef __ASSEMBLER__  #include <errno.h> -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...)	\ +/* 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.  */ +#undef SYS_ify +#define SYS_ify(syscall_name)	(__NR_##syscall_name) + +/* Define a macro which expands into the inline wrapper code for a system +   call.  */ +# undef INLINE_SYSCALL +# define INLINE_SYSCALL(name, nr, args...)				\ +  ({ unsigned long _sys_result = INTERNAL_SYSCALL (name, , nr, args);	\ +     if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0))\ +       {								\ +	 __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, ));		\ +	 _sys_result = (unsigned long) -1;				\ +       }								\ +     (long) _sys_result; }) + +# undef INTERNAL_SYSCALL_DECL +# define INTERNAL_SYSCALL_DECL(err) do { } while (0) + +#define INTERNAL_SYSCALL_RAW(name, err, nr, args...)	\    ({ long _sys_result;					\       {							\ -	register long _x8 __asm__ ("x8");		\  	LOAD_ARGS_##nr (args)				\ -	_x8 = (name);					\ -							\ +	register long _x8 __asm__ ("x8") = (name);	\          __asm__ volatile (				\  		"svc       0       // syscall " # name  \ -		: "=r" (_x0) : "r"(_x8) ASM_ARGS_##nr  	\ -		: "memory"); 				\ -							\ +		: "=r" (_x0) : "r"(_x8) ASM_ARGS_##nr : "memory"); \  	_sys_result = _x0;				\       } 							\       _sys_result; }) +# undef INTERNAL_SYSCALL +# define INTERNAL_SYSCALL(name, err, nr, args...)		\ +	INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) + +# undef INTERNAL_SYSCALL_AARCH64 +# define INTERNAL_SYSCALL_AARCH64(name, err, nr, args...)	\ +	INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args) + +# undef INTERNAL_SYSCALL_ERROR_P +# define INTERNAL_SYSCALL_ERROR_P(val, err) \ +   ((unsigned long) (val) >= (unsigned long) -4095) +  +# undef INTERNAL_SYSCALL_ERRNO +# define INTERNAL_SYSCALL_ERRNO(val, err)       (-(val)) +  /* Macros for setting up inline __asm__ input regs */  # define ASM_ARGS_0  # define ASM_ARGS_1	, "r" (_x0) @@ -102,5 +135,9 @@ License along with the GNU C Library; if not, see    _x6tmp = (long) (x6);				\    _x6 = _x6tmp; +# undef INTERNAL_SYSCALL_NCS +# define INTERNAL_SYSCALL_NCS(number, err, nr, args...)	\ +		INTERNAL_SYSCALL_RAW (number, err, nr, args) +  #endif /* ! __ASSEMBLER__  */  #endif /* _BITS_SYSCALLS_H */ diff --git a/libc/sysdeps/linux/aarch64/bits/uClibc_arch_features.h b/libc/sysdeps/linux/aarch64/bits/uClibc_arch_features.h index 7cae090ec..90042e815 100644 --- a/libc/sysdeps/linux/aarch64/bits/uClibc_arch_features.h +++ b/libc/sysdeps/linux/aarch64/bits/uClibc_arch_features.h @@ -11,6 +11,9 @@  /* can your target use syscall6() for mmap ? */  #define __UCLIBC_MMAP_HAS_6_ARGS__ +/* does your target use statx */ +#undef __UCLIBC_HAVE_STATX__ +  /* does your target have a broken create_module() ? */  #define __UCLIBC_BROKEN_CREATE_MODULE__ | 
