| author | |
| committer | |
| log | 790fc8cd98020c26b65a4af69e25c4e853d463be |
| tree | 61f4183d8f8c2b3886be1178066c38088f6b9530 |
| parent | d5c9d8529534745c9feae6b67cdc01d53f11a0d9 |
| parent | 4cc1b060ebd76a9fc5ffda8cc83ad48dc11855d7 |
| signature |
Add `loongarch64-linux-gnusf` target support28 files changed, 1267 insertions(+), 37 deletions(-)
lib/libc/glibc/abilists| Binary files a/lib/libc/glibc/abilists and b/lib/libc/glibc/abilists differ |
lib/libc/include/loongarch64-linux-gnusf/bits/endianness.h created+11| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | #ifndef _BITS_ENDIANNESS_H | |
| 2 | #define _BITS_ENDIANNESS_H 1 | |
| 3 | ||
| 4 | #ifndef _BITS_ENDIAN_H | |
| 5 | #error "Never use <bits/endianness.h> directly; include <endian.h> instead." | |
| 6 | #endif | |
| 7 | ||
| 8 | /* LoongArch is little-endian. */ | |
| 9 | #define __BYTE_ORDER __LITTLE_ENDIAN | |
| 10 | ||
| 11 | #endif /* bits/endianness.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/fcntl.h created+61| ... | ... | @@ -0,0 +1,61 @@ |
| 1 | /* O_*, F_*, FD_* bit values for the generic Linux/LoongArch ABI. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _FCNTL_H | |
| 20 | #error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | #include <bits/wordsize.h> | |
| 24 | ||
| 25 | /* In 64-bit ISA files are always with 64bit off_t and F_*LK64 are the same as | |
| 26 | non-64-bit versions. It will need to be revised for 128-bit. */ | |
| 27 | #if __WORDSIZE == 64 | |
| 28 | #define __O_LARGEFILE 0 | |
| 29 | ||
| 30 | #define F_GETLK64 5 /* Get record locking info. */ | |
| 31 | #define F_SETLK64 6 /* Set record locking info (non-blocking). */ | |
| 32 | #define F_SETLKW64 7 /* Set record locking info (blocking). */ | |
| 33 | #endif | |
| 34 | ||
| 35 | struct flock | |
| 36 | { | |
| 37 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ | |
| 38 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ | |
| 39 | #ifndef __USE_FILE_OFFSET64 | |
| 40 | __off_t l_start; /* Offset where the lock begins. */ | |
| 41 | __off_t l_len; /* Size of the locked area; zero means until EOF. */ | |
| 42 | #else | |
| 43 | __off64_t l_start; /* Offset where the lock begins. */ | |
| 44 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
| 45 | #endif | |
| 46 | __pid_t l_pid; /* Process holding the lock. */ | |
| 47 | }; | |
| 48 | ||
| 49 | #ifdef __USE_LARGEFILE64 | |
| 50 | struct flock64 | |
| 51 | { | |
| 52 | short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ | |
| 53 | short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ | |
| 54 | __off64_t l_start; /* Offset where the lock begins. */ | |
| 55 | __off64_t l_len; /* Size of the locked area; zero means until EOF. */ | |
| 56 | __pid_t l_pid; /* Process holding the lock. */ | |
| 57 | }; | |
| 58 | #endif | |
| 59 | ||
| 60 | /* Include generic Linux declarations. */ | |
| 61 | #include <bits/fcntl-linux.h> | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/fenv.h created+90| ... | ... | @@ -0,0 +1,90 @@ |
| 1 | /* Floating point environment. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _FENV_H | |
| 20 | #error "Never use <bits/fenv.h> directly; include <fenv.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | /* Define bits representing the exception. We use the bit positions | |
| 24 | of the appropriate bits in the FPU control word. */ | |
| 25 | enum | |
| 26 | { | |
| 27 | FE_INEXACT = | |
| 28 | #define FE_INEXACT 0x010000 | |
| 29 | FE_INEXACT, | |
| 30 | FE_UNDERFLOW = | |
| 31 | #define FE_UNDERFLOW 0x020000 | |
| 32 | FE_UNDERFLOW, | |
| 33 | FE_OVERFLOW = | |
| 34 | #define FE_OVERFLOW 0x040000 | |
| 35 | FE_OVERFLOW, | |
| 36 | FE_DIVBYZERO = | |
| 37 | #define FE_DIVBYZERO 0x080000 | |
| 38 | FE_DIVBYZERO, | |
| 39 | FE_INVALID = | |
| 40 | #define FE_INVALID 0x100000 | |
| 41 | FE_INVALID, | |
| 42 | }; | |
| 43 | ||
| 44 | #define FE_ALL_EXCEPT \ | |
| 45 | (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) | |
| 46 | ||
| 47 | /* The LoongArch FPU supports all of the four defined rounding modes. We | |
| 48 | use again the bit positions in the FPU control word as the values | |
| 49 | for the appropriate macros. */ | |
| 50 | enum | |
| 51 | { | |
| 52 | FE_TONEAREST = | |
| 53 | #define FE_TONEAREST 0x000 | |
| 54 | FE_TONEAREST, | |
| 55 | FE_TOWARDZERO = | |
| 56 | #define FE_TOWARDZERO 0x100 | |
| 57 | FE_TOWARDZERO, | |
| 58 | FE_UPWARD = | |
| 59 | #define FE_UPWARD 0x200 | |
| 60 | FE_UPWARD, | |
| 61 | FE_DOWNWARD = | |
| 62 | #define FE_DOWNWARD 0x300 | |
| 63 | FE_DOWNWARD | |
| 64 | }; | |
| 65 | ||
| 66 | /* Type representing exception flags. */ | |
| 67 | typedef unsigned int fexcept_t; | |
| 68 | ||
| 69 | /* Type representing floating-point environment. This function corresponds | |
| 70 | to the layout of the block written by the `fstenv'. */ | |
| 71 | typedef struct | |
| 72 | { | |
| 73 | unsigned int __fp_control_register; | |
| 74 | } fenv_t; | |
| 75 | ||
| 76 | /* If the default argument is used we use this value. */ | |
| 77 | #define FE_DFL_ENV ((const fenv_t *) -1) | |
| 78 | ||
| 79 | #ifdef __USE_GNU | |
| 80 | /* Floating-point environment where none of the exception is masked. */ | |
| 81 | #define FE_NOMASK_ENV ((const fenv_t *) -257) | |
| 82 | #endif | |
| 83 | ||
| 84 | #if __GLIBC_USE (IEC_60559_BFP_EXT_C23) | |
| 85 | /* Type representing floating-point control modes. */ | |
| 86 | typedef unsigned int femode_t; | |
| 87 | ||
| 88 | /* Default floating-point control modes. */ | |
| 89 | #define FE_DFL_MODE ((const femode_t *) -1L) | |
| 90 | #endif | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/hwcap.h created+38| ... | ... | @@ -0,0 +1,38 @@ |
| 1 | /* Defines for bits in AT_HWCAP. LoongArch64 Linux version. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <http://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #if !defined (_SYS_AUXV_H) | |
| 20 | # error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | /* The following must match the kernel's <asm/hwcap.h>. */ | |
| 24 | /* HWCAP flags */ | |
| 25 | #define HWCAP_LOONGARCH_CPUCFG (1 << 0) | |
| 26 | #define HWCAP_LOONGARCH_LAM (1 << 1) | |
| 27 | #define HWCAP_LOONGARCH_UAL (1 << 2) | |
| 28 | #define HWCAP_LOONGARCH_FPU (1 << 3) | |
| 29 | #define HWCAP_LOONGARCH_LSX (1 << 4) | |
| 30 | #define HWCAP_LOONGARCH_LASX (1 << 5) | |
| 31 | #define HWCAP_LOONGARCH_CRC32 (1 << 6) | |
| 32 | #define HWCAP_LOONGARCH_COMPLEX (1 << 7) | |
| 33 | #define HWCAP_LOONGARCH_CRYPTO (1 << 8) | |
| 34 | #define HWCAP_LOONGARCH_LVZ (1 << 9) | |
| 35 | #define HWCAP_LOONGARCH_LBT_X86 (1 << 10) | |
| 36 | #define HWCAP_LOONGARCH_LBT_ARM (1 << 11) | |
| 37 | #define HWCAP_LOONGARCH_LBT_MIPS (1 << 12) | |
| 38 | #define HWCAP_LOONGARCH_PTW (1 << 13) | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/link.h created+76| ... | ... | @@ -0,0 +1,76 @@ |
| 1 | /* Machine-specific declarations for dynamic linker interface. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _LINK_H | |
| 20 | #error "Never include <bits/link.h> directly; use <link.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | #ifndef __loongarch_soft_float | |
| 24 | typedef float La_loongarch_vr | |
| 25 | __attribute__ ((__vector_size__ (16), __aligned__ (16))); | |
| 26 | typedef float La_loongarch_xr | |
| 27 | __attribute__ ((__vector_size__ (32), __aligned__ (16))); | |
| 28 | ||
| 29 | typedef union | |
| 30 | { | |
| 31 | double fpreg[4]; | |
| 32 | La_loongarch_vr vr[2]; | |
| 33 | La_loongarch_xr xr[1]; | |
| 34 | } La_loongarch_vector __attribute__ ((__aligned__ (16))); | |
| 35 | #endif | |
| 36 | ||
| 37 | typedef struct La_loongarch_regs | |
| 38 | { | |
| 39 | unsigned long int lr_reg[8]; /* a0 - a7 */ | |
| 40 | #ifndef __loongarch_soft_float | |
| 41 | La_loongarch_vector lr_vec[8]; /* fa0 - fa7 or vr0 - vr7 or xr0 - xr7*/ | |
| 42 | #endif | |
| 43 | unsigned long int lr_ra; | |
| 44 | unsigned long int lr_sp; | |
| 45 | } La_loongarch_regs; | |
| 46 | ||
| 47 | /* Return values for calls from PLT on LoongArch. */ | |
| 48 | typedef struct La_loongarch_retval | |
| 49 | { | |
| 50 | unsigned long int lrv_a0; | |
| 51 | unsigned long int lrv_a1; | |
| 52 | #ifndef __loongarch_soft_float | |
| 53 | La_loongarch_vector lrv_vec0; | |
| 54 | La_loongarch_vector lrv_vec1; | |
| 55 | #endif | |
| 56 | } La_loongarch_retval; | |
| 57 | ||
| 58 | __BEGIN_DECLS | |
| 59 | ||
| 60 | extern ElfW (Addr) la_loongarch_gnu_pltenter (ElfW (Sym) *__sym, | |
| 61 | 					 unsigned int __ndx, | |
| 62 | 					 uintptr_t *__refcook, | |
| 63 | 					 uintptr_t *__defcook, | |
| 64 | 					 La_loongarch_regs *__regs, | |
| 65 | 					 unsigned int *__flags, | |
| 66 | 					 const char *__symname, | |
| 67 | 					 long int *__framesizep); | |
| 68 | extern unsigned int la_loongarch_gnu_pltexit (ElfW (Sym) *__sym, | |
| 69 | 					 unsigned int __ndx, | |
| 70 | 					 uintptr_t *__refcook, | |
| 71 | 					 uintptr_t *__defcook, | |
| 72 | 					 const La_loongarch_regs *__inregs, | |
| 73 | 					 La_loongarch_retval *__outregs, | |
| 74 | 					 const char *__symname); | |
| 75 | ||
| 76 | __END_DECLS | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/link_lavcurrent.h created+25| ... | ... | @@ -0,0 +1,25 @@ |
| 1 | /* Data structure for communication from the run-time dynamic linker for | |
| 2 | loaded ELF shared objects. LAV_CURRENT definition. | |
| 3 | Copyright (C) 2023-2024 Free Software Foundation, Inc. | |
| 4 | This file is part of the GNU C Library. | |
| 5 | ||
| 6 | The GNU C Library is free software; you can redistribute it and/or | |
| 7 | modify it under the terms of the GNU Lesser General Public | |
| 8 | License as published by the Free Software Foundation; either | |
| 9 | version 2.1 of the License, or (at your option) any later version. | |
| 10 | ||
| 11 | The GNU C Library is distributed in the hope that it will be useful, | |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 | Lesser General Public License for more details. | |
| 15 | ||
| 16 | You should have received a copy of the GNU Lesser General Public | |
| 17 | License along with the GNU C Library; if not, see | |
| 18 | <https://www.gnu.org/licenses/>. */ | |
| 19 | ||
| 20 | #ifndef _LINK_H | |
| 21 | # error "Never include <bits/link_lavcurrent.h> directly; use <link.h> instead." | |
| 22 | #endif | |
| 23 | ||
| 24 | /* Version numbers for la_version handshake interface. */ | |
| 25 | #define LAV_CURRENT	3 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/long-double.h created+21| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | /* Properties of long double type. ldbl-128 version. | |
| 2 | Copyright (C) 2016-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | /* long double is distinct from double, so there is nothing to | |
| 20 | define here. */ | |
| 21 | #define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/procfs.h created+52| ... | ... | @@ -0,0 +1,52 @@ |
| 1 | /* Types for registers for sys/procfs.h. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | ||
| 4 | This file is part of the GNU C Library. | |
| 5 | ||
| 6 | The GNU C Library is free software; you can redistribute it and/or | |
| 7 | modify it under the terms of the GNU Lesser General Public | |
| 8 | License as published by the Free Software Foundation; either | |
| 9 | version 2.1 of the License, or (at your option) any later version. | |
| 10 | ||
| 11 | The GNU C Library is distributed in the hope that it will be useful, | |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 | Lesser General Public License for more details. | |
| 15 | ||
| 16 | You should have received a copy of the GNU Lesser General Public | |
| 17 | License along with the GNU C Library. If not, see | |
| 18 | <https://www.gnu.org/licenses/>. */ | |
| 19 | ||
| 20 | #ifndef _SYS_PROCFS_H | |
| 21 | # error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead." | |
| 22 | #endif | |
| 23 | ||
| 24 | /* Type for a general-purpose register. */ | |
| 25 | typedef __uint64_t elf_greg_t; | |
| 26 | ||
| 27 | /* And the whole bunch of them. We could have used `struct | |
| 28 | pt_regs' directly in the typedef, but tradition says that | |
| 29 | the register set is an array, which does have some peculiar | |
| 30 | semantics, so leave it that way. */ | |
| 31 | #define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof (elf_greg_t)) | |
| 32 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | |
| 33 | ||
| 34 | #define ELF_NFPREG 34 /* 32 FPRs + 8-byte byte-vec for fcc + 4-byte FCR */ | |
| 35 | typedef union | |
| 36 | { | |
| 37 | double d; | |
| 38 | float f; | |
| 39 | } elf_fpreg_t; | |
| 40 | typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |
| 41 | ||
| 42 | typedef union | |
| 43 | { | |
| 44 | double d[2]; | |
| 45 | float f[4]; | |
| 46 | } __attribute__ ((__aligned__ (16))) elf_lsxregset_t[32]; | |
| 47 | ||
| 48 | typedef union | |
| 49 | { | |
| 50 | double d[4]; | |
| 51 | float f[8]; | |
| 52 | } __attribute__ ((__aligned__ (32))) elf_lasxregset_t[32]; | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/pthread_stack_min.h created+20| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | /* Definition of PTHREAD_STACK_MIN. LoongArch Linux version. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public License as | |
| 7 | published by the Free Software Foundation; either version 2.1 of the | |
| 8 | License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | /* Minimum size for a thread. At least two pages with 64k pages. */ | |
| 20 | #define PTHREAD_STACK_MIN	131072 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/setjmp.h created+42| ... | ... | @@ -0,0 +1,42 @@ |
| 1 | /* Define the machine-dependent type `jmp_buf'. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _LOONGARCH_BITS_SETJMP_H | |
| 20 | #define _LOONGARCH_BITS_SETJMP_H | |
| 21 | ||
| 22 | typedef struct __jmp_buf_internal_tag | |
| 23 | { | |
| 24 | /* Program counter. */ | |
| 25 | long int __pc; | |
| 26 | /* Stack pointer. */ | |
| 27 | long int __sp; | |
| 28 | /* Reserved */ | |
| 29 | long int __x; | |
| 30 | /* Frame pointer. */ | |
| 31 | long int __fp; | |
| 32 | /* Callee-saved registers. */ | |
| 33 | long int __regs[9]; | |
| 34 | ||
| 35 | #ifndef __loongarch_soft_float | |
| 36 | /* Callee-saved floating point registers. */ | |
| 37 | double __fpregs[8]; | |
| 38 | #endif | |
| 39 | ||
| 40 | } __jmp_buf[1]; | |
| 41 | ||
| 42 | #endif /* _LOONGARCH_BITS_SETJMP_H */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/shmlba.h created+24| ... | ... | @@ -0,0 +1,24 @@ |
| 1 | /* Define SHMLBA. LoongArch version. | |
| 2 | Copyright (C) 2023-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _SYS_SHM_H | |
| 20 | # error "Never use <bits/shmlba.h> directly; include <sys/shm.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | /* Segment low boundary address multiple. */ | |
| 24 | #define SHMLBA		0x10000 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/sigstack.h created+32| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | /* sigstack, sigaltstack definitions. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _BITS_SIGSTACK_H | |
| 20 | #define _BITS_SIGSTACK_H 1 | |
| 21 | ||
| 22 | #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H | |
| 23 | # error "Never include this file directly. Use <signal.h> instead" | |
| 24 | #endif | |
| 25 | ||
| 26 | /* Minimum stack size for a signal handler. */ | |
| 27 | #define MINSIGSTKSZ	4096 | |
| 28 | ||
| 29 | /* System default stack size. */ | |
| 30 | #define SIGSTKSZ	16384 | |
| 31 | ||
| 32 | #endif /* bits/sigstack.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/struct_stat.h created+127| ... | ... | @@ -0,0 +1,127 @@ |
| 1 | /* Definition for struct stat. | |
| 2 | Copyright (C) 2020-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #if !defined _SYS_STAT_H && !defined _FCNTL_H | |
| 20 | # error "Never include <bits/struct_stat.h> directly; use <sys/stat.h> instead." | |
| 21 | #endif | |
| 22 | ||
| 23 | #ifndef _BITS_STRUCT_STAT_H | |
| 24 | #define _BITS_STRUCT_STAT_H	1 | |
| 25 | ||
| 26 | #include <bits/endian.h> | |
| 27 | #include <bits/wordsize.h> | |
| 28 | ||
| 29 | #if defined __USE_FILE_OFFSET64 | |
| 30 | # define __field64(type, type64, name) type64 name | |
| 31 | #elif __WORDSIZE == 64 || defined __INO_T_MATCHES_INO64_T | |
| 32 | # if defined __INO_T_MATCHES_INO64_T && !defined __OFF_T_MATCHES_OFF64_T | |
| 33 | # error "ino_t and off_t must both be the same type" | |
| 34 | # endif | |
| 35 | # define __field64(type, type64, name) type name | |
| 36 | #elif __BYTE_ORDER == __LITTLE_ENDIAN | |
| 37 | # define __field64(type, type64, name) \ | |
| 38 | type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad | |
| 39 | #else | |
| 40 | # define __field64(type, type64, name) \ | |
| 41 | int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name | |
| 42 | #endif | |
| 43 | ||
| 44 | struct stat | |
| 45 | { | |
| 46 | __dev_t st_dev;		/* Device. */ | |
| 47 | __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ | |
| 48 | __mode_t st_mode;		/* File mode. */ | |
| 49 | __nlink_t st_nlink;		/* Link count. */ | |
| 50 | __uid_t st_uid;		/* User ID of the file's owner.	*/ | |
| 51 | __gid_t st_gid;		/* Group ID of the file's group.*/ | |
| 52 | __dev_t st_rdev;		/* Device number, if device. */ | |
| 53 | __dev_t __pad1; | |
| 54 | __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ | |
| 55 | __blksize_t st_blksize;	/* Optimal block size for I/O. */ | |
| 56 | int __pad2; | |
| 57 | __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ | |
| 58 | #ifdef __USE_XOPEN2K8 | |
| 59 | /* Nanosecond resolution timestamps are stored in a format | |
| 60 | equivalent to 'struct timespec'. This is the type used | |
| 61 | whenever possible but the Unix namespace rules do not allow the | |
| 62 | identifier 'timespec' to appear in the <sys/stat.h> header. | |
| 63 | Therefore we have to handle the use of this header in strictly | |
| 64 | standard-compliant sources special. */ | |
| 65 | struct timespec st_atim;		/* Time of last access. */ | |
| 66 | struct timespec st_mtim;		/* Time of last modification. */ | |
| 67 | struct timespec st_ctim;		/* Time of last status change. */ | |
| 68 | # define st_atime st_atim.tv_sec	/* Backward compatibility. */ | |
| 69 | # define st_mtime st_mtim.tv_sec | |
| 70 | # define st_ctime st_ctim.tv_sec | |
| 71 | #else | |
| 72 | __time_t st_atime;			/* Time of last access. */ | |
| 73 | unsigned long int st_atimensec;	/* Nscecs of last access. */ | |
| 74 | __time_t st_mtime;			/* Time of last modification. */ | |
| 75 | unsigned long int st_mtimensec;	/* Nsecs of last modification. */ | |
| 76 | __time_t st_ctime;			/* Time of last status change. */ | |
| 77 | unsigned long int st_ctimensec;	/* Nsecs of last status change. */ | |
| 78 | #endif | |
| 79 | int __glibc_reserved[2]; | |
| 80 | }; | |
| 81 | ||
| 82 | #undef __field64 | |
| 83 | ||
| 84 | #ifdef __USE_LARGEFILE64 | |
| 85 | struct stat64 | |
| 86 | { | |
| 87 | __dev_t st_dev;		/* Device. */ | |
| 88 | __ino64_t st_ino;		/* File serial number.	*/ | |
| 89 | __mode_t st_mode;		/* File mode. */ | |
| 90 | __nlink_t st_nlink;		/* Link count. */ | |
| 91 | __uid_t st_uid;		/* User ID of the file's owner.	*/ | |
| 92 | __gid_t st_gid;		/* Group ID of the file's group.*/ | |
| 93 | __dev_t st_rdev;		/* Device number, if device. */ | |
| 94 | __dev_t __pad1; | |
| 95 | __off64_t st_size;		/* Size of file, in bytes. */ | |
| 96 | __blksize_t st_blksize;	/* Optimal block size for I/O. */ | |
| 97 | int __pad2; | |
| 98 | __blkcnt64_t st_blocks;	/* Nr. 512-byte blocks allocated. */ | |
| 99 | #ifdef __USE_XOPEN2K8 | |
| 100 | /* Nanosecond resolution timestamps are stored in a format | |
| 101 | equivalent to 'struct timespec'. This is the type used | |
| 102 | whenever possible but the Unix namespace rules do not allow the | |
| 103 | identifier 'timespec' to appear in the <sys/stat.h> header. | |
| 104 | Therefore we have to handle the use of this header in strictly | |
| 105 | standard-compliant sources special. */ | |
| 106 | struct timespec st_atim;		/* Time of last access. */ | |
| 107 | struct timespec st_mtim;		/* Time of last modification. */ | |
| 108 | struct timespec st_ctim;		/* Time of last status change. */ | |
| 109 | #else | |
| 110 | __time_t st_atime;			/* Time of last access. */ | |
| 111 | unsigned long int st_atimensec;	/* Nscecs of last access. */ | |
| 112 | __time_t st_mtime;			/* Time of last modification. */ | |
| 113 | unsigned long int st_mtimensec;	/* Nsecs of last modification. */ | |
| 114 | __time_t st_ctime;			/* Time of last status change. */ | |
| 115 | unsigned long int st_ctimensec;	/* Nsecs of last status change. */ | |
| 116 | #endif | |
| 117 | int __glibc_reserved[2]; | |
| 118 | }; | |
| 119 | #endif | |
| 120 | ||
| 121 | /* Tell code we have these members. */ | |
| 122 | #define	_STATBUF_ST_BLKSIZE | |
| 123 | #define _STATBUF_ST_RDEV | |
| 124 | /* Nanosecond resolution time values are supported. */ | |
| 125 | #define _STATBUF_ST_NSEC | |
| 126 | ||
| 127 | #endif /* _BITS_STRUCT_STAT_H */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/timesize.h created+20| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | /* Bit size of the time_t type at glibc build time, general case. | |
| 2 | Copyright (C) 2018-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | /* Size in bits of the 'time_t' type of the default ABI. */ | |
| 20 | #define __TIMESIZE	64 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/bits/wordsize.h created+19| ... | ... | @@ -0,0 +1,19 @@ |
| 1 | /* Copyright (C) 1999-2024 Free Software Foundation, Inc. | |
| 2 | This file is part of the GNU C Library. | |
| 3 | ||
| 4 | The GNU C Library is free software; you can redistribute it and/or | |
| 5 | modify it under the terms of the GNU Lesser General Public | |
| 6 | License as published by the Free Software Foundation; either | |
| 7 | version 2.1 of the License, or (at your option) any later version. | |
| 8 | ||
| 9 | The GNU C Library is distributed in the hope that it will be useful, | |
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 12 | Lesser General Public License for more details. | |
| 13 | ||
| 14 | You should have received a copy of the GNU Lesser General Public | |
| 15 | License along with the GNU C Library; if not, see | |
| 16 | <https://www.gnu.org/licenses/>. */ | |
| 17 | ||
| 18 | #define __WORDSIZE			64 | |
| 19 | #define __WORDSIZE_TIME64_COMPAT32	0 | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/fpu_control.h created+119| ... | ... | @@ -0,0 +1,119 @@ |
| 1 | /* FPU control word bits. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _FPU_CONTROL_H | |
| 20 | #define _FPU_CONTROL_H | |
| 21 | ||
| 22 | /* LoongArch FPU floating point control register bits. | |
| 23 | * | |
| 24 | * 31-29 -> reserved (read as 0, can not changed by software) | |
| 25 | * 28 -> cause bit for invalid exception | |
| 26 | * 27 -> cause bit for division by zero exception | |
| 27 | * 26 -> cause bit for overflow exception | |
| 28 | * 25 -> cause bit for underflow exception | |
| 29 | * 24 -> cause bit for inexact exception | |
| 30 | * 23-21 -> reserved (read as 0, can not changed by software) | |
| 31 | * 20 -> flag invalid exception | |
| 32 | * 19 -> flag division by zero exception | |
| 33 | * 18 -> flag overflow exception | |
| 34 | * 17 -> flag underflow exception | |
| 35 | * 16 -> flag inexact exception | |
| 36 | * 9-8 -> rounding control | |
| 37 | * 7-5 -> reserved (read as 0, can not changed by software) | |
| 38 | * 4 -> enable exception for invalid exception | |
| 39 | * 3 -> enable exception for division by zero exception | |
| 40 | * 2 -> enable exception for overflow exception | |
| 41 | * 1 -> enable exception for underflow exception | |
| 42 | * 0 -> enable exception for inexact exception | |
| 43 | * | |
| 44 | * | |
| 45 | * Rounding Control: | |
| 46 | * 00 - rounding ties to even (RNE) | |
| 47 | * 01 - rounding toward zero (RZ) | |
| 48 | * 10 - rounding (up) toward plus infinity (RP) | |
| 49 | * 11 - rounding (down) toward minus infinity (RM) | |
| 50 | */ | |
| 51 | ||
| 52 | #include <features.h> | |
| 53 | ||
| 54 | #ifdef __loongarch_soft_float | |
| 55 | ||
| 56 | #define _FPU_RESERVED 0xffffffff | |
| 57 | #define _FPU_DEFAULT 0x00000000 | |
| 58 | typedef unsigned int fpu_control_t; | |
| 59 | #define _FPU_GETCW(cw) (cw) = 0 | |
| 60 | #define _FPU_SETCW(cw) (void) (cw) | |
| 61 | extern fpu_control_t __fpu_control; | |
| 62 | ||
| 63 | #else /* __loongarch_soft_float */ | |
| 64 | ||
| 65 | /* Masks for interrupts. */ | |
| 66 | #define _FPU_MASK_V 0x10 /* Invalid operation */ | |
| 67 | #define _FPU_MASK_Z 0x08 /* Division by zero */ | |
| 68 | #define _FPU_MASK_O 0x04 /* Overflow */ | |
| 69 | #define _FPU_MASK_U 0x02 /* Underflow */ | |
| 70 | #define _FPU_MASK_I 0x01 /* Inexact operation */ | |
| 71 | ||
| 72 | /* Flush denormalized numbers to zero. */ | |
| 73 | #define _FPU_FLUSH_TZ 0x1000000 | |
| 74 | ||
| 75 | /* Rounding control. */ | |
| 76 | #define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */ | |
| 77 | #define _FPU_RC_ZERO 0x100 | |
| 78 | #define _FPU_RC_UP 0x200 | |
| 79 | #define _FPU_RC_DOWN 0x300 | |
| 80 | /* Mask for rounding control. */ | |
| 81 | #define _FPU_RC_MASK 0x300 | |
| 82 | ||
| 83 | #define _FPU_RESERVED 0x0 | |
| 84 | ||
| 85 | #define _FPU_DEFAULT 0x0 | |
| 86 | #define _FPU_IEEE 0x1F | |
| 87 | ||
| 88 | /* Type of the control word. */ | |
| 89 | typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); | |
| 90 | ||
| 91 | /* Macros for accessing the hardware control word. */ | |
| 92 | extern fpu_control_t __loongarch_fpu_getcw (void) __THROW; | |
| 93 | extern void __loongarch_fpu_setcw (fpu_control_t) __THROW; | |
| 94 | #define _FPU_GETCW(cw) __asm__ volatile ("movfcsr2gr %0,$fcsr0" : "=r"(cw)) | |
| 95 | #define _FPU_SETCW(cw) __asm__ volatile ("movgr2fcsr $fcsr0,%0" : : "r"(cw)) | |
| 96 | ||
| 97 | /* Default control word set at startup. */ | |
| 98 | extern fpu_control_t __fpu_control; | |
| 99 | ||
| 100 | # define _FCLASS_SNAN (1 << 0) | |
| 101 | # define _FCLASS_QNAN (1 << 1) | |
| 102 | # define _FCLASS_MINF (1 << 2) | |
| 103 | # define _FCLASS_MNORM (1 << 3) | |
| 104 | # define _FCLASS_MSUBNORM (1 << 4) | |
| 105 | # define _FCLASS_MZERO (1 << 5) | |
| 106 | # define _FCLASS_PINF (1 << 6) | |
| 107 | # define _FCLASS_PNORM (1 << 7) | |
| 108 | # define _FCLASS_PSUBNORM (1 << 8) | |
| 109 | # define _FCLASS_PZERO (1 << 9) | |
| 110 | ||
| 111 | # define _FCLASS_ZERO (_FCLASS_MZERO | _FCLASS_PZERO) | |
| 112 | # define _FCLASS_SUBNORM (_FCLASS_MSUBNORM | _FCLASS_PSUBNORM) | |
| 113 | # define _FCLASS_NORM (_FCLASS_MNORM | _FCLASS_PNORM) | |
| 114 | # define _FCLASS_INF (_FCLASS_MINF | _FCLASS_PINF) | |
| 115 | # define _FCLASS_NAN (_FCLASS_SNAN | _FCLASS_QNAN) | |
| 116 | ||
| 117 | #endif /* __loongarch_soft_float */ | |
| 118 | ||
| 119 | #endif /* fpu_control.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names-lp64s.h created+27| ... | ... | @@ -0,0 +1,27 @@ |
| 1 | /* This file is automatically generated. */ | |
| 2 | #ifndef __GNU_LIB_NAMES_H | |
| 3 | # error "Never use <gnu/lib-names-lp64s.h> directly; include <gnu/lib-names.h> instead." | |
| 4 | #endif | |
| 5 | ||
| 6 | #define LD_LINUX_LOONGARCH_LP64S_SO "ld-linux-loongarch-lp64s.so.1" | |
| 7 | #define LD_SO "ld-linux-loongarch-lp64s.so.1" | |
| 8 | #define LIBANL_SO "libanl.so.1" | |
| 9 | #define LIBBROKENLOCALE_SO "libBrokenLocale.so.1" | |
| 10 | #define LIBC_MALLOC_DEBUG_SO "libc_malloc_debug.so.0" | |
| 11 | #define LIBC_SO "libc.so.6" | |
| 12 | #define LIBDL_SO "libdl.so.2" | |
| 13 | #define LIBGCC_S_SO "libgcc_s.so.1" | |
| 14 | #define LIBMVEC_SO "libmvec.so.1" | |
| 15 | #define LIBM_SO "libm.so.6" | |
| 16 | #define LIBNSL_SO "libnsl.so.1" | |
| 17 | #define LIBNSS_COMPAT_SO "libnss_compat.so.2" | |
| 18 | #define LIBNSS_DB_SO "libnss_db.so.2" | |
| 19 | #define LIBNSS_DNS_SO "libnss_dns.so.2" | |
| 20 | #define LIBNSS_FILES_SO "libnss_files.so.2" | |
| 21 | #define LIBNSS_HESIOD_SO "libnss_hesiod.so.2" | |
| 22 | #define LIBNSS_LDAP_SO "libnss_ldap.so.2" | |
| 23 | #define LIBPTHREAD_SO "libpthread.so.0" | |
| 24 | #define LIBRESOLV_SO "libresolv.so.2" | |
| 25 | #define LIBRT_SO "librt.so.1" | |
| 26 | #define LIBTHREAD_DB_SO "libthread_db.so.1" | |
| 27 | #define LIBUTIL_SO "libutil.so.1" | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names.h created+16| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | /* This file is automatically generated. | |
| 2 | It defines macros to allow user program to find the shared | |
| 3 | library files which come as part of GNU libc. */ | |
| 4 | #ifndef __GNU_LIB_NAMES_H | |
| 5 | #define __GNU_LIB_NAMES_H	1 | |
| 6 | ||
| 7 | #include <bits/wordsize.h> | |
| 8 | ||
| 9 | #if __WORDSIZE == 64 && defined __loongarch_soft_float | |
| 10 | # include <gnu/lib-names-lp64s.h> | |
| 11 | #endif | |
| 12 | #if __WORDSIZE == 64 && defined __loongarch_double_float | |
| 13 | # include <gnu/lib-names-lp64d.h> | |
| 14 | #endif | |
| 15 | ||
| 16 | #endif	/* gnu/lib-names.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs-lp64s.h created+38| ... | ... | @@ -0,0 +1,38 @@ |
| 1 | /* This file is automatically generated. | |
| 2 | It defines a symbol `__stub_FUNCTION' for each function | |
| 3 | in the C library which is a stub, meaning it will fail | |
| 4 | every time called, usually setting errno to ENOSYS. */ | |
| 5 | ||
| 6 | #ifdef _LIBC | |
| 7 | #error Applications may not define the macro _LIBC | |
| 8 | #endif | |
| 9 | ||
| 10 | #define __stub___compat_bdflush | |
| 11 | #define __stub___compat_create_module | |
| 12 | #define __stub___compat_get_kernel_syms | |
| 13 | #define __stub___compat_query_module | |
| 14 | #define __stub___compat_uselib | |
| 15 | #define __stub_chflags | |
| 16 | #define __stub_fchflags | |
| 17 | #define __stub_feclearexcept | |
| 18 | #define __stub_fedisableexcept | |
| 19 | #define __stub_feenableexcept | |
| 20 | #define __stub_fegetenv | |
| 21 | #define __stub_fegetexcept | |
| 22 | #define __stub_fegetexceptflag | |
| 23 | #define __stub_fegetmode | |
| 24 | #define __stub_fegetround | |
| 25 | #define __stub_feholdexcept | |
| 26 | #define __stub_feraiseexcept | |
| 27 | #define __stub_fesetenv | |
| 28 | #define __stub_fesetexcept | |
| 29 | #define __stub_fesetexceptflag | |
| 30 | #define __stub_fesetmode | |
| 31 | #define __stub_fesetround | |
| 32 | #define __stub_fetestexcept | |
| 33 | #define __stub_feupdateenv | |
| 34 | #define __stub_gtty | |
| 35 | #define __stub_revoke | |
| 36 | #define __stub_setlogin | |
| 37 | #define __stub_sigreturn | |
| 38 | #define __stub_stty | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs.h created+12| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | /* This file is automatically generated. | |
| 2 | This file selects the right generated file of `__stub_FUNCTION' macros | |
| 3 | based on the architecture being compiled for. */ | |
| 4 | ||
| 5 | #include <bits/wordsize.h> | |
| 6 | ||
| 7 | #if __WORDSIZE == 64 && defined __loongarch_soft_float | |
| 8 | # include <gnu/stubs-lp64s.h> | |
| 9 | #endif | |
| 10 | #if __WORDSIZE == 64 && defined __loongarch_double_float | |
| 11 | # include <gnu/stubs-lp64d.h> | |
| 12 | #endif | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/ieee754.h created+170| ... | ... | @@ -0,0 +1,170 @@ |
| 1 | /* Copyright (C) 1992-2024 Free Software Foundation, Inc. | |
| 2 | This file is part of the GNU C Library. | |
| 3 | ||
| 4 | The GNU C Library is free software; you can redistribute it and/or | |
| 5 | modify it under the terms of the GNU Lesser General Public | |
| 6 | License as published by the Free Software Foundation; either | |
| 7 | version 2.1 of the License, or (at your option) any later version. | |
| 8 | ||
| 9 | The GNU C Library is distributed in the hope that it will be useful, | |
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 12 | Lesser General Public License for more details. | |
| 13 | ||
| 14 | You should have received a copy of the GNU Lesser General Public | |
| 15 | License along with the GNU C Library; if not, see | |
| 16 | <https://www.gnu.org/licenses/>. */ | |
| 17 | ||
| 18 | #ifndef _IEEE754_H | |
| 19 | #define _IEEE754_H 1 | |
| 20 | ||
| 21 | #include <features.h> | |
| 22 | ||
| 23 | #include <bits/endian.h> | |
| 24 | ||
| 25 | __BEGIN_DECLS | |
| 26 | ||
| 27 | union ieee754_float | |
| 28 | { | |
| 29 | float f; | |
| 30 | ||
| 31 | /* This is the IEEE 754 single-precision format. */ | |
| 32 | struct | |
| 33 | { | |
| 34 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 35 | 	unsigned int negative:1; | |
| 36 | 	unsigned int exponent:8; | |
| 37 | 	unsigned int mantissa:23; | |
| 38 | #endif				/* Big endian. */ | |
| 39 | #if	__BYTE_ORDER == __LITTLE_ENDIAN | |
| 40 | 	unsigned int mantissa:23; | |
| 41 | 	unsigned int exponent:8; | |
| 42 | 	unsigned int negative:1; | |
| 43 | #endif				/* Little endian. */ | |
| 44 | } ieee; | |
| 45 | ||
| 46 | /* This format makes it easier to see if a NaN is a signalling NaN. */ | |
| 47 | struct | |
| 48 | { | |
| 49 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 50 | 	unsigned int negative:1; | |
| 51 | 	unsigned int exponent:8; | |
| 52 | 	unsigned int quiet_nan:1; | |
| 53 | 	unsigned int mantissa:22; | |
| 54 | #endif				/* Big endian. */ | |
| 55 | #if	__BYTE_ORDER == __LITTLE_ENDIAN | |
| 56 | 	unsigned int mantissa:22; | |
| 57 | 	unsigned int quiet_nan:1; | |
| 58 | 	unsigned int exponent:8; | |
| 59 | 	unsigned int negative:1; | |
| 60 | #endif				/* Little endian. */ | |
| 61 | } ieee_nan; | |
| 62 | }; | |
| 63 | ||
| 64 | #define IEEE754_FLOAT_BIAS	0x7f /* Added to exponent. */ | |
| 65 | ||
| 66 | ||
| 67 | union ieee754_double | |
| 68 | { | |
| 69 | double d; | |
| 70 | ||
| 71 | /* This is the IEEE 754 double-precision format. */ | |
| 72 | struct | |
| 73 | { | |
| 74 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 75 | 	unsigned int negative:1; | |
| 76 | 	unsigned int exponent:11; | |
| 77 | 	/* Together these comprise the mantissa. */ | |
| 78 | 	unsigned int mantissa0:20; | |
| 79 | 	unsigned int mantissa1:32; | |
| 80 | #endif				/* Big endian. */ | |
| 81 | #if	__BYTE_ORDER == __LITTLE_ENDIAN | |
| 82 | 	/* Together these comprise the mantissa. */ | |
| 83 | 	unsigned int mantissa1:32; | |
| 84 | 	unsigned int mantissa0:20; | |
| 85 | 	unsigned int exponent:11; | |
| 86 | 	unsigned int negative:1; | |
| 87 | #endif				/* Little endian. */ | |
| 88 | } ieee; | |
| 89 | ||
| 90 | /* This format makes it easier to see if a NaN is a signalling NaN. */ | |
| 91 | struct | |
| 92 | { | |
| 93 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 94 | 	unsigned int negative:1; | |
| 95 | 	unsigned int exponent:11; | |
| 96 | 	unsigned int quiet_nan:1; | |
| 97 | 	/* Together these comprise the mantissa. */ | |
| 98 | 	unsigned int mantissa0:19; | |
| 99 | 	unsigned int mantissa1:32; | |
| 100 | #else | |
| 101 | 	/* Together these comprise the mantissa. */ | |
| 102 | 	unsigned int mantissa1:32; | |
| 103 | 	unsigned int mantissa0:19; | |
| 104 | 	unsigned int quiet_nan:1; | |
| 105 | 	unsigned int exponent:11; | |
| 106 | 	unsigned int negative:1; | |
| 107 | #endif | |
| 108 | } ieee_nan; | |
| 109 | }; | |
| 110 | ||
| 111 | #define IEEE754_DOUBLE_BIAS	0x3ff /* Added to exponent. */ | |
| 112 | ||
| 113 | ||
| 114 | union ieee854_long_double | |
| 115 | { | |
| 116 | long double d; | |
| 117 | ||
| 118 | /* This is the IEEE 854 quad-precision format. */ | |
| 119 | struct | |
| 120 | { | |
| 121 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 122 | 	unsigned int negative:1; | |
| 123 | 	unsigned int exponent:15; | |
| 124 | 	/* Together these comprise the mantissa. */ | |
| 125 | 	unsigned int mantissa0:16; | |
| 126 | 	unsigned int mantissa1:32; | |
| 127 | 	unsigned int mantissa2:32; | |
| 128 | 	unsigned int mantissa3:32; | |
| 129 | #endif				/* Big endian. */ | |
| 130 | #if	__BYTE_ORDER == __LITTLE_ENDIAN | |
| 131 | 	/* Together these comprise the mantissa. */ | |
| 132 | 	unsigned int mantissa3:32; | |
| 133 | 	unsigned int mantissa2:32; | |
| 134 | 	unsigned int mantissa1:32; | |
| 135 | 	unsigned int mantissa0:16; | |
| 136 | 	unsigned int exponent:15; | |
| 137 | 	unsigned int negative:1; | |
| 138 | #endif				/* Little endian. */ | |
| 139 | } ieee; | |
| 140 | ||
| 141 | /* This format makes it easier to see if a NaN is a signalling NaN. */ | |
| 142 | struct | |
| 143 | { | |
| 144 | #if	__BYTE_ORDER == __BIG_ENDIAN | |
| 145 | 	unsigned int negative:1; | |
| 146 | 	unsigned int exponent:15; | |
| 147 | 	unsigned int quiet_nan:1; | |
| 148 | 	/* Together these comprise the mantissa. */ | |
| 149 | 	unsigned int mantissa0:15; | |
| 150 | 	unsigned int mantissa1:32; | |
| 151 | 	unsigned int mantissa2:32; | |
| 152 | 	unsigned int mantissa3:32; | |
| 153 | #else | |
| 154 | 	/* Together these comprise the mantissa. */ | |
| 155 | 	unsigned int mantissa3:32; | |
| 156 | 	unsigned int mantissa2:32; | |
| 157 | 	unsigned int mantissa1:32; | |
| 158 | 	unsigned int mantissa0:15; | |
| 159 | 	unsigned int quiet_nan:1; | |
| 160 | 	unsigned int exponent:15; | |
| 161 | 	unsigned int negative:1; | |
| 162 | #endif | |
| 163 | } ieee_nan; | |
| 164 | }; | |
| 165 | ||
| 166 | #define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ | |
| 167 | ||
| 168 | __END_DECLS | |
| 169 | ||
| 170 | #endif /* ieee754.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/sys/asm.h created+78| ... | ... | @@ -0,0 +1,78 @@ |
| 1 | /* Miscellaneous macros. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library. If not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _SYS_ASM_H | |
| 20 | #define _SYS_ASM_H | |
| 21 | ||
| 22 | #include <sys/regdef.h> | |
| 23 | #include <sysdeps/generic/sysdep.h> | |
| 24 | ||
| 25 | /* Macros to handle different pointer/register sizes for 32/64-bit code. */ | |
| 26 | #define SZREG 8 | |
| 27 | #define SZFREG 8 | |
| 28 | #define SZVREG 16 | |
| 29 | #define SZXREG 32 | |
| 30 | #define REG_L ld.d | |
| 31 | #define REG_S st.d | |
| 32 | #define SRLI srli.d | |
| 33 | #define SLLI slli.d | |
| 34 | #define ADDI addi.d | |
| 35 | #define ADD add.d | |
| 36 | #define SUB sub.d | |
| 37 | #define BSTRINS bstrins.d | |
| 38 | #define LI li.d | |
| 39 | #define FREG_L fld.d | |
| 40 | #define FREG_S fst.d | |
| 41 | ||
| 42 | /* Declare leaf routine. | |
| 43 | The usage of macro LEAF/ENTRY is as follows: | |
| 44 | 1. LEAF(fcn) -- the align value of fcn is .align 3 (default value) | |
| 45 | 2. LEAF(fcn, 6) -- the align value of fcn is .align 6 | |
| 46 | */ | |
| 47 | #define LEAF_IMPL(symbol, aln, ...)	\ | |
| 48 | 	.text;				\ | |
| 49 | 	.globl symbol;			\ | |
| 50 | 	.align aln;			\ | |
| 51 | 	.type symbol, @function;	\ | |
| 52 | symbol: \ | |
| 53 | 	cfi_startproc; | |
| 54 | ||
| 55 | ||
| 56 | #define LEAF(...) LEAF_IMPL(__VA_ARGS__, 3) | |
| 57 | #define ENTRY(...) LEAF(__VA_ARGS__) | |
| 58 | ||
| 59 | #define	LEAF_NO_ALIGN(symbol)		\ | |
| 60 | 	.text;				\ | |
| 61 | 	.globl	symbol;			\ | |
| 62 | 	.type	symbol, @function;	\ | |
| 63 | symbol: \ | |
| 64 | 	cfi_startproc; | |
| 65 | ||
| 66 | #define ENTRY_NO_ALIGN(symbol) LEAF_NO_ALIGN(symbol) | |
| 67 | ||
| 68 | ||
| 69 | /* Mark end of function. */ | |
| 70 | #undef END | |
| 71 | #define END(function) \ | |
| 72 | cfi_endproc; \ | |
| 73 | .size function, .- function; | |
| 74 | ||
| 75 | /* Stack alignment. */ | |
| 76 | #define ALMASK ~15 | |
| 77 | ||
| 78 | #endif /* sys/asm.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/sys/ucontext.h created+64| ... | ... | @@ -0,0 +1,64 @@ |
| 1 | /* struct ucontext definition. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | ||
| 4 | This file is part of the GNU C Library. | |
| 5 | ||
| 6 | The GNU C Library is free software; you can redistribute it and/or | |
| 7 | modify it under the terms of the GNU Lesser General Public | |
| 8 | License as published by the Free Software Foundation; either | |
| 9 | version 2.1 of the License, or (at your option) any later version. | |
| 10 | ||
| 11 | The GNU C Library is distributed in the hope that it will be useful, | |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 | Lesser General Public License for more details. | |
| 15 | ||
| 16 | You should have received a copy of the GNU Lesser General Public | |
| 17 | License along with the GNU C Library. If not, see | |
| 18 | <https://www.gnu.org/licenses/>. */ | |
| 19 | ||
| 20 | /* Don't rely on this, the interface is currently messed up and may need to | |
| 21 | be broken to be fixed. */ | |
| 22 | #ifndef _SYS_UCONTEXT_H | |
| 23 | #define _SYS_UCONTEXT_H 1 | |
| 24 | ||
| 25 | #include <features.h> | |
| 26 | ||
| 27 | #include <bits/types/sigset_t.h> | |
| 28 | #include <bits/types/stack_t.h> | |
| 29 | ||
| 30 | #ifdef __USE_MISC | |
| 31 | #define LARCH_NGREG 32 | |
| 32 | ||
| 33 | #define LARCH_REG_RA 1 | |
| 34 | #define LARCH_REG_SP 3 | |
| 35 | #define LARCH_REG_S0 23 | |
| 36 | #define LARCH_REG_S1 24 | |
| 37 | #define LARCH_REG_A0 4 | |
| 38 | #define LARCH_REG_S2 25 | |
| 39 | #define LARCH_REG_NARGS 8 | |
| 40 | ||
| 41 | typedef unsigned long int greg_t; | |
| 42 | /* Container for all general registers. */ | |
| 43 | typedef greg_t gregset_t[32]; | |
| 44 | #endif | |
| 45 | ||
| 46 | typedef struct mcontext_t | |
| 47 | { | |
| 48 | unsigned long long __pc; | |
| 49 | unsigned long long __gregs[32]; | |
| 50 | unsigned int __flags; | |
| 51 | unsigned long long __extcontext[0] __attribute__((__aligned__(16))); | |
| 52 | } mcontext_t; | |
| 53 | ||
| 54 | /* Userlevel context. */ | |
| 55 | typedef struct ucontext_t | |
| 56 | { | |
| 57 | unsigned long int __uc_flags; | |
| 58 | struct ucontext_t *uc_link; | |
| 59 | stack_t uc_stack; | |
| 60 | sigset_t uc_sigmask; | |
| 61 | mcontext_t uc_mcontext; | |
| 62 | } ucontext_t; | |
| 63 | ||
| 64 | #endif /* sys/ucontext.h */ | |
| \ No newline at end of file |
lib/libc/include/loongarch64-linux-gnusf/sys/user.h created+42| ... | ... | @@ -0,0 +1,42 @@ |
| 1 | /* struct user_regs_struct definition for LoongArch. | |
| 2 | Copyright (C) 2022-2024 Free Software Foundation, Inc. | |
| 3 | This file is part of the GNU C Library. | |
| 4 | ||
| 5 | The GNU C Library is free software; you can redistribute it and/or | |
| 6 | modify it under the terms of the GNU Lesser General Public | |
| 7 | License as published by the Free Software Foundation; either | |
| 8 | version 2.1 of the License, or (at your option) any later version. | |
| 9 | ||
| 10 | The GNU C Library is distributed in the hope that it will be useful, | |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | Lesser General Public License for more details. | |
| 14 | ||
| 15 | You should have received a copy of the GNU Lesser General Public | |
| 16 | License along with the GNU C Library; if not, see | |
| 17 | <https://www.gnu.org/licenses/>. */ | |
| 18 | ||
| 19 | #ifndef _SYS_USER_H | |
| 20 | #define _SYS_USER_H 1 | |
| 21 | ||
| 22 | #include <stdint.h> | |
| 23 | ||
| 24 | struct user_regs_struct | |
| 25 | { | |
| 26 | /* Saved main processor registers. */ | |
| 27 | uint64_t regs[32]; | |
| 28 | ||
| 29 | /* Saved special registers. */ | |
| 30 | uint64_t orig_a0; | |
| 31 | uint64_t csr_era; | |
| 32 | uint64_t csr_badv; | |
| 33 | uint64_t reserved[10]; | |
| 34 | }; | |
| 35 | ||
| 36 | struct user_fp_struct { | |
| 37 | uint64_t fpr[32]; | |
| 38 | uint64_t fcc; | |
| 39 | uint32_t fcsr; | |
| 40 | }; | |
| 41 | ||
| 42 | #endif /* _SYS_USER_H */ | |
| \ No newline at end of file |
lib/std/zig/target.zig+1| ... | ... | @@ -35,6 +35,7 @@ pub const available_libcs = [_]ArchOsAbi{ |
| 35 | 35 | .{ .arch = .x86, .os = .linux, .abi = .musl }, |
| 36 | 36 | .{ .arch = .x86, .os = .windows, .abi = .gnu }, |
| 37 | 37 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 } }, |
| 38 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 } }, | |
| 38 | 39 | .{ .arch = .loongarch64, .os = .linux, .abi = .musl }, |
| 39 | 40 | .{ .arch = .m68k, .os = .linux, .abi = .gnu }, |
| 40 | 41 | .{ .arch = .m68k, .os = .linux, .abi = .musl }, |
src/glibc.zig+37-37| ... | ... | @@ -845,12 +845,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi |
| 845 | 845 | stubs_asm.shrinkRetainingCapacity(0); |
| 846 | 846 | try stubs_asm.appendSlice(".text\n"); |
| 847 | 847 | |
| 848 | var inc_i: usize = 0; | |
| 849 | ||
| 850 | const fn_inclusions_len = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little); | |
| 851 | inc_i += 2; | |
| 852 | ||
| 853 | 848 | var sym_i: usize = 0; |
| 849 | var sym_name_buf = std.ArrayList(u8).init(arena); | |
| 854 | 850 | var opt_symbol_name: ?[]const u8 = null; |
| 855 | 851 | var versions_buffer: [32]u8 = undefined; |
| 856 | 852 | var versions_len: usize = undefined; |
| ... | ... | @@ -871,32 +867,38 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi |
| 871 | 867 | // twice, which causes a "duplicate symbol" assembler error. |
| 872 | 868 | var versions_written = std.AutoArrayHashMap(Version, void).init(arena); |
| 873 | 869 | |
| 870 | var inc_fbs = std.io.fixedBufferStream(metadata.inclusions); | |
| 871 | var inc_reader = inc_fbs.reader(); | |
| 872 | ||
| 873 | const fn_inclusions_len = try inc_reader.readInt(u16, .little); | |
| 874 | ||
| 874 | 875 | while (sym_i < fn_inclusions_len) : (sym_i += 1) { |
| 875 | 876 | const sym_name = opt_symbol_name orelse n: { |
| 876 | const name = mem.sliceTo(metadata.inclusions[inc_i..], 0); | |
| 877 | inc_i += name.len + 1; | |
| 877 | sym_name_buf.clearRetainingCapacity(); | |
| 878 | try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null); | |
| 878 | 879 | |
| 879 | opt_symbol_name = name; | |
| 880 | opt_symbol_name = sym_name_buf.items; | |
| 880 | 881 | versions_buffer = undefined; |
| 881 | 882 | versions_len = 0; |
| 882 | break :n name; | |
| 883 | ||
| 884 | break :n sym_name_buf.items; | |
| 883 | 885 | }; |
| 884 | const targets = mem.readInt(u32, metadata.inclusions[inc_i..][0..4], .little); | |
| 885 | inc_i += 4; | |
| 886 | const targets = try std.leb.readUleb128(u64, inc_reader); | |
| 887 | var lib_index = try inc_reader.readByte(); | |
| 886 | 888 | |
| 887 | const lib_index = metadata.inclusions[inc_i]; | |
| 888 | inc_i += 1; | |
| 889 | const is_terminal = (targets & (1 << 31)) != 0; | |
| 890 | if (is_terminal) opt_symbol_name = null; | |
| 889 | const is_terminal = (lib_index & (1 << 7)) != 0; | |
| 890 | if (is_terminal) { | |
| 891 | lib_index &= ~@as(u8, 1 << 7); | |
| 892 | opt_symbol_name = null; | |
| 893 | } | |
| 891 | 894 | |
| 892 | 895 | // Test whether the inclusion applies to our current library and target. |
| 893 | 896 | const ok_lib_and_target = |
| 894 | 897 | (lib_index == lib_i) and |
| 895 | ((targets & (@as(u32, 1) << @as(u5, @intCast(target_targ_index)))) != 0); | |
| 898 | ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0); | |
| 896 | 899 | |
| 897 | 900 | while (true) { |
| 898 | const byte = metadata.inclusions[inc_i]; | |
| 899 | inc_i += 1; | |
| 901 | const byte = try inc_reader.readByte(); | |
| 900 | 902 | const last = (byte & 0b1000_0000) != 0; |
| 901 | 903 | const ver_i = @as(u7, @truncate(byte)); |
| 902 | 904 | if (ok_lib_and_target and ver_i <= target_ver_index) { |
| ... | ... | @@ -1027,8 +1029,7 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi |
| 1027 | 1029 | , .{wordDirective(target)}); |
| 1028 | 1030 | } |
| 1029 | 1031 | |
| 1030 | const obj_inclusions_len = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little); | |
| 1031 | inc_i += 2; | |
| 1032 | const obj_inclusions_len = try inc_reader.readInt(u16, .little); | |
| 1032 | 1033 | |
| 1033 | 1034 | sym_i = 0; |
| 1034 | 1035 | opt_symbol_name = null; |
| ... | ... | @@ -1036,33 +1037,32 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi |
| 1036 | 1037 | versions_len = undefined; |
| 1037 | 1038 | while (sym_i < obj_inclusions_len) : (sym_i += 1) { |
| 1038 | 1039 | const sym_name = opt_symbol_name orelse n: { |
| 1039 | const name = mem.sliceTo(metadata.inclusions[inc_i..], 0); | |
| 1040 | inc_i += name.len + 1; | |
| 1040 | sym_name_buf.clearRetainingCapacity(); | |
| 1041 | try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null); | |
| 1041 | 1042 | |
| 1042 | opt_symbol_name = name; | |
| 1043 | opt_symbol_name = sym_name_buf.items; | |
| 1043 | 1044 | versions_buffer = undefined; |
| 1044 | 1045 | versions_len = 0; |
| 1045 | break :n name; | |
| 1046 | }; | |
| 1047 | const targets = mem.readInt(u32, metadata.inclusions[inc_i..][0..4], .little); | |
| 1048 | inc_i += 4; | |
| 1049 | ||
| 1050 | const size = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little); | |
| 1051 | inc_i += 2; | |
| 1052 | 1046 | |
| 1053 | const lib_index = metadata.inclusions[inc_i]; | |
| 1054 | inc_i += 1; | |
| 1055 | const is_terminal = (targets & (1 << 31)) != 0; | |
| 1056 | if (is_terminal) opt_symbol_name = null; | |
| 1047 | break :n sym_name_buf.items; | |
| 1048 | }; | |
| 1049 | const targets = try std.leb.readUleb128(u64, inc_reader); | |
| 1050 | const size = try std.leb.readUleb128(u16, inc_reader); | |
| 1051 | var lib_index = try inc_reader.readByte(); | |
| 1052 | ||
| 1053 | const is_terminal = (lib_index & (1 << 7)) != 0; | |
| 1054 | if (is_terminal) { | |
| 1055 | lib_index &= ~@as(u8, 1 << 7); | |
| 1056 | opt_symbol_name = null; | |
| 1057 | } | |
| 1057 | 1058 | |
| 1058 | 1059 | // Test whether the inclusion applies to our current library and target. |
| 1059 | 1060 | const ok_lib_and_target = |
| 1060 | 1061 | (lib_index == lib_i) and |
| 1061 | ((targets & (@as(u32, 1) << @as(u5, @intCast(target_targ_index)))) != 0); | |
| 1062 | ((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0); | |
| 1062 | 1063 | |
| 1063 | 1064 | while (true) { |
| 1064 | const byte = metadata.inclusions[inc_i]; | |
| 1065 | inc_i += 1; | |
| 1065 | const byte = try inc_reader.readByte(); | |
| 1066 | 1066 | const last = (byte & 0b1000_0000) != 0; |
| 1067 | 1067 | const ver_i = @as(u7, @truncate(byte)); |
| 1068 | 1068 | if (ok_lib_and_target and ver_i <= target_ver_index) { |
tools/process_headers.zig+5| ... | ... | @@ -209,6 +209,11 @@ const glibc_targets = [_]LibCTarget{ |
| 209 | 209 | .arch = MultiArch{ .specific = .loongarch64 }, |
| 210 | 210 | .abi = MultiAbi{ .specific = Abi.gnu }, |
| 211 | 211 | }, |
| 212 | LibCTarget{ | |
| 213 | .name = "loongarch64-linux-gnu-lp64s", | |
| 214 | .arch = MultiArch{ .specific = .loongarch64 }, | |
| 215 | .abi = MultiAbi{ .specific = Abi.gnusf }, | |
| 216 | }, | |
| 212 | 217 | }; |
| 213 | 218 | |
| 214 | 219 | const musl_targets = [_]LibCTarget{ |