mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
Merge pull request #21499 from alexrp/loongarch-gnusf
Add `loongarch64-linux-gnusf` target support
This commit is contained in:
commit
790fc8cd98
BIN
lib/libc/glibc/abilists
vendored
BIN
lib/libc/glibc/abilists
vendored
Binary file not shown.
11
lib/libc/include/loongarch64-linux-gnusf/bits/endianness.h
vendored
Normal file
11
lib/libc/include/loongarch64-linux-gnusf/bits/endianness.h
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef _BITS_ENDIANNESS_H
|
||||||
|
#define _BITS_ENDIANNESS_H 1
|
||||||
|
|
||||||
|
#ifndef _BITS_ENDIAN_H
|
||||||
|
#error "Never use <bits/endianness.h> directly; include <endian.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* LoongArch is little-endian. */
|
||||||
|
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||||
|
|
||||||
|
#endif /* bits/endianness.h */
|
||||||
61
lib/libc/include/loongarch64-linux-gnusf/bits/fcntl.h
vendored
Normal file
61
lib/libc/include/loongarch64-linux-gnusf/bits/fcntl.h
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* O_*, F_*, FD_* bit values for the generic Linux/LoongArch ABI.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _FCNTL_H
|
||||||
|
#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <bits/wordsize.h>
|
||||||
|
|
||||||
|
/* In 64-bit ISA files are always with 64bit off_t and F_*LK64 are the same as
|
||||||
|
non-64-bit versions. It will need to be revised for 128-bit. */
|
||||||
|
#if __WORDSIZE == 64
|
||||||
|
#define __O_LARGEFILE 0
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
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'). */
|
||||||
|
#ifndef __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. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __USE_LARGEFILE64
|
||||||
|
struct flock64
|
||||||
|
{
|
||||||
|
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'). */
|
||||||
|
__off64_t l_start; /* Offset where the lock begins. */
|
||||||
|
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||||
|
__pid_t l_pid; /* Process holding the lock. */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Include generic Linux declarations. */
|
||||||
|
#include <bits/fcntl-linux.h>
|
||||||
90
lib/libc/include/loongarch64-linux-gnusf/bits/fenv.h
vendored
Normal file
90
lib/libc/include/loongarch64-linux-gnusf/bits/fenv.h
vendored
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/* Floating point environment.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _FENV_H
|
||||||
|
#error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define bits representing the exception. We use the bit positions
|
||||||
|
of the appropriate bits in the FPU control word. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FE_INEXACT =
|
||||||
|
#define FE_INEXACT 0x010000
|
||||||
|
FE_INEXACT,
|
||||||
|
FE_UNDERFLOW =
|
||||||
|
#define FE_UNDERFLOW 0x020000
|
||||||
|
FE_UNDERFLOW,
|
||||||
|
FE_OVERFLOW =
|
||||||
|
#define FE_OVERFLOW 0x040000
|
||||||
|
FE_OVERFLOW,
|
||||||
|
FE_DIVBYZERO =
|
||||||
|
#define FE_DIVBYZERO 0x080000
|
||||||
|
FE_DIVBYZERO,
|
||||||
|
FE_INVALID =
|
||||||
|
#define FE_INVALID 0x100000
|
||||||
|
FE_INVALID,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FE_ALL_EXCEPT \
|
||||||
|
(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
|
||||||
|
|
||||||
|
/* The LoongArch FPU supports all of the four defined rounding modes. We
|
||||||
|
use again the bit positions in the FPU control word as the values
|
||||||
|
for the appropriate macros. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FE_TONEAREST =
|
||||||
|
#define FE_TONEAREST 0x000
|
||||||
|
FE_TONEAREST,
|
||||||
|
FE_TOWARDZERO =
|
||||||
|
#define FE_TOWARDZERO 0x100
|
||||||
|
FE_TOWARDZERO,
|
||||||
|
FE_UPWARD =
|
||||||
|
#define FE_UPWARD 0x200
|
||||||
|
FE_UPWARD,
|
||||||
|
FE_DOWNWARD =
|
||||||
|
#define FE_DOWNWARD 0x300
|
||||||
|
FE_DOWNWARD
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Type representing exception flags. */
|
||||||
|
typedef unsigned int fexcept_t;
|
||||||
|
|
||||||
|
/* Type representing floating-point environment. This function corresponds
|
||||||
|
to the layout of the block written by the `fstenv'. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int __fp_control_register;
|
||||||
|
} fenv_t;
|
||||||
|
|
||||||
|
/* If the default argument is used we use this value. */
|
||||||
|
#define FE_DFL_ENV ((const fenv_t *) -1)
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
/* Floating-point environment where none of the exception is masked. */
|
||||||
|
#define FE_NOMASK_ENV ((const fenv_t *) -257)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GLIBC_USE (IEC_60559_BFP_EXT_C23)
|
||||||
|
/* Type representing floating-point control modes. */
|
||||||
|
typedef unsigned int femode_t;
|
||||||
|
|
||||||
|
/* Default floating-point control modes. */
|
||||||
|
#define FE_DFL_MODE ((const femode_t *) -1L)
|
||||||
|
#endif
|
||||||
38
lib/libc/include/loongarch64-linux-gnusf/bits/hwcap.h
vendored
Normal file
38
lib/libc/include/loongarch64-linux-gnusf/bits/hwcap.h
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* Defines for bits in AT_HWCAP. LoongArch64 Linux version.
|
||||||
|
Copyright (C) 2022-2024 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/>. */
|
||||||
|
|
||||||
|
#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>. */
|
||||||
|
/* HWCAP flags */
|
||||||
|
#define HWCAP_LOONGARCH_CPUCFG (1 << 0)
|
||||||
|
#define HWCAP_LOONGARCH_LAM (1 << 1)
|
||||||
|
#define HWCAP_LOONGARCH_UAL (1 << 2)
|
||||||
|
#define HWCAP_LOONGARCH_FPU (1 << 3)
|
||||||
|
#define HWCAP_LOONGARCH_LSX (1 << 4)
|
||||||
|
#define HWCAP_LOONGARCH_LASX (1 << 5)
|
||||||
|
#define HWCAP_LOONGARCH_CRC32 (1 << 6)
|
||||||
|
#define HWCAP_LOONGARCH_COMPLEX (1 << 7)
|
||||||
|
#define HWCAP_LOONGARCH_CRYPTO (1 << 8)
|
||||||
|
#define HWCAP_LOONGARCH_LVZ (1 << 9)
|
||||||
|
#define HWCAP_LOONGARCH_LBT_X86 (1 << 10)
|
||||||
|
#define HWCAP_LOONGARCH_LBT_ARM (1 << 11)
|
||||||
|
#define HWCAP_LOONGARCH_LBT_MIPS (1 << 12)
|
||||||
|
#define HWCAP_LOONGARCH_PTW (1 << 13)
|
||||||
76
lib/libc/include/loongarch64-linux-gnusf/bits/link.h
vendored
Normal file
76
lib/libc/include/loongarch64-linux-gnusf/bits/link.h
vendored
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/* Machine-specific declarations for dynamic linker interface.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _LINK_H
|
||||||
|
#error "Never include <bits/link.h> directly; use <link.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __loongarch_soft_float
|
||||||
|
typedef float La_loongarch_vr
|
||||||
|
__attribute__ ((__vector_size__ (16), __aligned__ (16)));
|
||||||
|
typedef float La_loongarch_xr
|
||||||
|
__attribute__ ((__vector_size__ (32), __aligned__ (16)));
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
double fpreg[4];
|
||||||
|
La_loongarch_vr vr[2];
|
||||||
|
La_loongarch_xr xr[1];
|
||||||
|
} La_loongarch_vector __attribute__ ((__aligned__ (16)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct La_loongarch_regs
|
||||||
|
{
|
||||||
|
unsigned long int lr_reg[8]; /* a0 - a7 */
|
||||||
|
#ifndef __loongarch_soft_float
|
||||||
|
La_loongarch_vector lr_vec[8]; /* fa0 - fa7 or vr0 - vr7 or xr0 - xr7*/
|
||||||
|
#endif
|
||||||
|
unsigned long int lr_ra;
|
||||||
|
unsigned long int lr_sp;
|
||||||
|
} La_loongarch_regs;
|
||||||
|
|
||||||
|
/* Return values for calls from PLT on LoongArch. */
|
||||||
|
typedef struct La_loongarch_retval
|
||||||
|
{
|
||||||
|
unsigned long int lrv_a0;
|
||||||
|
unsigned long int lrv_a1;
|
||||||
|
#ifndef __loongarch_soft_float
|
||||||
|
La_loongarch_vector lrv_vec0;
|
||||||
|
La_loongarch_vector lrv_vec1;
|
||||||
|
#endif
|
||||||
|
} La_loongarch_retval;
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
extern ElfW (Addr) la_loongarch_gnu_pltenter (ElfW (Sym) *__sym,
|
||||||
|
unsigned int __ndx,
|
||||||
|
uintptr_t *__refcook,
|
||||||
|
uintptr_t *__defcook,
|
||||||
|
La_loongarch_regs *__regs,
|
||||||
|
unsigned int *__flags,
|
||||||
|
const char *__symname,
|
||||||
|
long int *__framesizep);
|
||||||
|
extern unsigned int la_loongarch_gnu_pltexit (ElfW (Sym) *__sym,
|
||||||
|
unsigned int __ndx,
|
||||||
|
uintptr_t *__refcook,
|
||||||
|
uintptr_t *__defcook,
|
||||||
|
const La_loongarch_regs *__inregs,
|
||||||
|
La_loongarch_retval *__outregs,
|
||||||
|
const char *__symname);
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
25
lib/libc/include/loongarch64-linux-gnusf/bits/link_lavcurrent.h
vendored
Normal file
25
lib/libc/include/loongarch64-linux-gnusf/bits/link_lavcurrent.h
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* Data structure for communication from the run-time dynamic linker for
|
||||||
|
loaded ELF shared objects. LAV_CURRENT definition.
|
||||||
|
Copyright (C) 2023-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _LINK_H
|
||||||
|
# error "Never include <bits/link_lavcurrent.h> directly; use <link.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Version numbers for la_version handshake interface. */
|
||||||
|
#define LAV_CURRENT 3
|
||||||
21
lib/libc/include/loongarch64-linux-gnusf/bits/long-double.h
vendored
Normal file
21
lib/libc/include/loongarch64-linux-gnusf/bits/long-double.h
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* Properties of long double type. ldbl-128 version.
|
||||||
|
Copyright (C) 2016-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* long double is distinct from double, so there is nothing to
|
||||||
|
define here. */
|
||||||
|
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
|
||||||
52
lib/libc/include/loongarch64-linux-gnusf/bits/procfs.h
vendored
Normal file
52
lib/libc/include/loongarch64-linux-gnusf/bits/procfs.h
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/* Types for registers for sys/procfs.h.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_PROCFS_H
|
||||||
|
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Type for a general-purpose register. */
|
||||||
|
typedef __uint64_t elf_greg_t;
|
||||||
|
|
||||||
|
/* And the whole bunch of them. We could have used `struct
|
||||||
|
pt_regs' directly in the typedef, but tradition says that
|
||||||
|
the register set is an array, which does have some peculiar
|
||||||
|
semantics, so leave it that way. */
|
||||||
|
#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof (elf_greg_t))
|
||||||
|
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||||
|
|
||||||
|
#define ELF_NFPREG 34 /* 32 FPRs + 8-byte byte-vec for fcc + 4-byte FCR */
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
double d;
|
||||||
|
float f;
|
||||||
|
} elf_fpreg_t;
|
||||||
|
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
double d[2];
|
||||||
|
float f[4];
|
||||||
|
} __attribute__ ((__aligned__ (16))) elf_lsxregset_t[32];
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
double d[4];
|
||||||
|
float f[8];
|
||||||
|
} __attribute__ ((__aligned__ (32))) elf_lasxregset_t[32];
|
||||||
20
lib/libc/include/loongarch64-linux-gnusf/bits/pthread_stack_min.h
vendored
Normal file
20
lib/libc/include/loongarch64-linux-gnusf/bits/pthread_stack_min.h
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/* Definition of PTHREAD_STACK_MIN. LoongArch Linux version.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Minimum size for a thread. At least two pages with 64k pages. */
|
||||||
|
#define PTHREAD_STACK_MIN 131072
|
||||||
42
lib/libc/include/loongarch64-linux-gnusf/bits/setjmp.h
vendored
Normal file
42
lib/libc/include/loongarch64-linux-gnusf/bits/setjmp.h
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* Define the machine-dependent type `jmp_buf'.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _LOONGARCH_BITS_SETJMP_H
|
||||||
|
#define _LOONGARCH_BITS_SETJMP_H
|
||||||
|
|
||||||
|
typedef struct __jmp_buf_internal_tag
|
||||||
|
{
|
||||||
|
/* Program counter. */
|
||||||
|
long int __pc;
|
||||||
|
/* Stack pointer. */
|
||||||
|
long int __sp;
|
||||||
|
/* Reserved */
|
||||||
|
long int __x;
|
||||||
|
/* Frame pointer. */
|
||||||
|
long int __fp;
|
||||||
|
/* Callee-saved registers. */
|
||||||
|
long int __regs[9];
|
||||||
|
|
||||||
|
#ifndef __loongarch_soft_float
|
||||||
|
/* Callee-saved floating point registers. */
|
||||||
|
double __fpregs[8];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} __jmp_buf[1];
|
||||||
|
|
||||||
|
#endif /* _LOONGARCH_BITS_SETJMP_H */
|
||||||
24
lib/libc/include/loongarch64-linux-gnusf/bits/shmlba.h
vendored
Normal file
24
lib/libc/include/loongarch64-linux-gnusf/bits/shmlba.h
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/* Define SHMLBA. LoongArch version.
|
||||||
|
Copyright (C) 2023-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_SHM_H
|
||||||
|
# error "Never use <bits/shmlba.h> directly; include <sys/shm.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Segment low boundary address multiple. */
|
||||||
|
#define SHMLBA 0x10000
|
||||||
32
lib/libc/include/loongarch64-linux-gnusf/bits/sigstack.h
vendored
Normal file
32
lib/libc/include/loongarch64-linux-gnusf/bits/sigstack.h
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* sigstack, sigaltstack definitions.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _BITS_SIGSTACK_H
|
||||||
|
#define _BITS_SIGSTACK_H 1
|
||||||
|
|
||||||
|
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
|
||||||
|
# error "Never include this file directly. Use <signal.h> instead"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Minimum stack size for a signal handler. */
|
||||||
|
#define MINSIGSTKSZ 4096
|
||||||
|
|
||||||
|
/* System default stack size. */
|
||||||
|
#define SIGSTKSZ 16384
|
||||||
|
|
||||||
|
#endif /* bits/sigstack.h */
|
||||||
127
lib/libc/include/loongarch64-linux-gnusf/bits/struct_stat.h
vendored
Normal file
127
lib/libc/include/loongarch64-linux-gnusf/bits/struct_stat.h
vendored
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/* Definition for struct stat.
|
||||||
|
Copyright (C) 2020-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _SYS_STAT_H && !defined _FCNTL_H
|
||||||
|
# error "Never include <bits/struct_stat.h> directly; use <sys/stat.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BITS_STRUCT_STAT_H
|
||||||
|
#define _BITS_STRUCT_STAT_H 1
|
||||||
|
|
||||||
|
#include <bits/endian.h>
|
||||||
|
#include <bits/wordsize.h>
|
||||||
|
|
||||||
|
#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 <sys/stat.h> 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 <sys/stat.h> 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 */
|
||||||
20
lib/libc/include/loongarch64-linux-gnusf/bits/timesize.h
vendored
Normal file
20
lib/libc/include/loongarch64-linux-gnusf/bits/timesize.h
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/* Bit size of the time_t type at glibc build time, general case.
|
||||||
|
Copyright (C) 2018-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Size in bits of the 'time_t' type of the default ABI. */
|
||||||
|
#define __TIMESIZE 64
|
||||||
19
lib/libc/include/loongarch64-linux-gnusf/bits/wordsize.h
vendored
Normal file
19
lib/libc/include/loongarch64-linux-gnusf/bits/wordsize.h
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright (C) 1999-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define __WORDSIZE 64
|
||||||
|
#define __WORDSIZE_TIME64_COMPAT32 0
|
||||||
119
lib/libc/include/loongarch64-linux-gnusf/fpu_control.h
vendored
Normal file
119
lib/libc/include/loongarch64-linux-gnusf/fpu_control.h
vendored
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/* FPU control word bits.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _FPU_CONTROL_H
|
||||||
|
#define _FPU_CONTROL_H
|
||||||
|
|
||||||
|
/* LoongArch FPU floating point control register bits.
|
||||||
|
*
|
||||||
|
* 31-29 -> reserved (read as 0, can not changed by software)
|
||||||
|
* 28 -> cause bit for invalid exception
|
||||||
|
* 27 -> cause bit for division by zero exception
|
||||||
|
* 26 -> cause bit for overflow exception
|
||||||
|
* 25 -> cause bit for underflow exception
|
||||||
|
* 24 -> cause bit for inexact exception
|
||||||
|
* 23-21 -> reserved (read as 0, can not changed by software)
|
||||||
|
* 20 -> flag invalid exception
|
||||||
|
* 19 -> flag division by zero exception
|
||||||
|
* 18 -> flag overflow exception
|
||||||
|
* 17 -> flag underflow exception
|
||||||
|
* 16 -> flag inexact exception
|
||||||
|
* 9-8 -> rounding control
|
||||||
|
* 7-5 -> reserved (read as 0, can not changed by software)
|
||||||
|
* 4 -> enable exception for invalid exception
|
||||||
|
* 3 -> enable exception for division by zero exception
|
||||||
|
* 2 -> enable exception for overflow exception
|
||||||
|
* 1 -> enable exception for underflow exception
|
||||||
|
* 0 -> enable exception for inexact exception
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Rounding Control:
|
||||||
|
* 00 - rounding ties to even (RNE)
|
||||||
|
* 01 - rounding toward zero (RZ)
|
||||||
|
* 10 - rounding (up) toward plus infinity (RP)
|
||||||
|
* 11 - rounding (down) toward minus infinity (RM)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
#ifdef __loongarch_soft_float
|
||||||
|
|
||||||
|
#define _FPU_RESERVED 0xffffffff
|
||||||
|
#define _FPU_DEFAULT 0x00000000
|
||||||
|
typedef unsigned int fpu_control_t;
|
||||||
|
#define _FPU_GETCW(cw) (cw) = 0
|
||||||
|
#define _FPU_SETCW(cw) (void) (cw)
|
||||||
|
extern fpu_control_t __fpu_control;
|
||||||
|
|
||||||
|
#else /* __loongarch_soft_float */
|
||||||
|
|
||||||
|
/* Masks for interrupts. */
|
||||||
|
#define _FPU_MASK_V 0x10 /* Invalid operation */
|
||||||
|
#define _FPU_MASK_Z 0x08 /* Division by zero */
|
||||||
|
#define _FPU_MASK_O 0x04 /* Overflow */
|
||||||
|
#define _FPU_MASK_U 0x02 /* Underflow */
|
||||||
|
#define _FPU_MASK_I 0x01 /* Inexact operation */
|
||||||
|
|
||||||
|
/* Flush denormalized numbers to zero. */
|
||||||
|
#define _FPU_FLUSH_TZ 0x1000000
|
||||||
|
|
||||||
|
/* Rounding control. */
|
||||||
|
#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */
|
||||||
|
#define _FPU_RC_ZERO 0x100
|
||||||
|
#define _FPU_RC_UP 0x200
|
||||||
|
#define _FPU_RC_DOWN 0x300
|
||||||
|
/* Mask for rounding control. */
|
||||||
|
#define _FPU_RC_MASK 0x300
|
||||||
|
|
||||||
|
#define _FPU_RESERVED 0x0
|
||||||
|
|
||||||
|
#define _FPU_DEFAULT 0x0
|
||||||
|
#define _FPU_IEEE 0x1F
|
||||||
|
|
||||||
|
/* Type of the control word. */
|
||||||
|
typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
|
||||||
|
|
||||||
|
/* Macros for accessing the hardware control word. */
|
||||||
|
extern fpu_control_t __loongarch_fpu_getcw (void) __THROW;
|
||||||
|
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))
|
||||||
|
|
||||||
|
/* Default control word set at startup. */
|
||||||
|
extern fpu_control_t __fpu_control;
|
||||||
|
|
||||||
|
# define _FCLASS_SNAN (1 << 0)
|
||||||
|
# define _FCLASS_QNAN (1 << 1)
|
||||||
|
# define _FCLASS_MINF (1 << 2)
|
||||||
|
# define _FCLASS_MNORM (1 << 3)
|
||||||
|
# define _FCLASS_MSUBNORM (1 << 4)
|
||||||
|
# define _FCLASS_MZERO (1 << 5)
|
||||||
|
# define _FCLASS_PINF (1 << 6)
|
||||||
|
# define _FCLASS_PNORM (1 << 7)
|
||||||
|
# define _FCLASS_PSUBNORM (1 << 8)
|
||||||
|
# define _FCLASS_PZERO (1 << 9)
|
||||||
|
|
||||||
|
# define _FCLASS_ZERO (_FCLASS_MZERO | _FCLASS_PZERO)
|
||||||
|
# define _FCLASS_SUBNORM (_FCLASS_MSUBNORM | _FCLASS_PSUBNORM)
|
||||||
|
# define _FCLASS_NORM (_FCLASS_MNORM | _FCLASS_PNORM)
|
||||||
|
# define _FCLASS_INF (_FCLASS_MINF | _FCLASS_PINF)
|
||||||
|
# define _FCLASS_NAN (_FCLASS_SNAN | _FCLASS_QNAN)
|
||||||
|
|
||||||
|
#endif /* __loongarch_soft_float */
|
||||||
|
|
||||||
|
#endif /* fpu_control.h */
|
||||||
27
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names-lp64s.h
vendored
Normal file
27
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names-lp64s.h
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* This file is automatically generated. */
|
||||||
|
#ifndef __GNU_LIB_NAMES_H
|
||||||
|
# error "Never use <gnu/lib-names-lp64s.h> directly; include <gnu/lib-names.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LD_LINUX_LOONGARCH_LP64S_SO "ld-linux-loongarch-lp64s.so.1"
|
||||||
|
#define LD_SO "ld-linux-loongarch-lp64s.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"
|
||||||
16
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names.h
vendored
Normal file
16
lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names.h
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/* This file is automatically generated.
|
||||||
|
It defines macros to allow user program to find the shared
|
||||||
|
library files which come as part of GNU libc. */
|
||||||
|
#ifndef __GNU_LIB_NAMES_H
|
||||||
|
#define __GNU_LIB_NAMES_H 1
|
||||||
|
|
||||||
|
#include <bits/wordsize.h>
|
||||||
|
|
||||||
|
#if __WORDSIZE == 64 && defined __loongarch_soft_float
|
||||||
|
# include <gnu/lib-names-lp64s.h>
|
||||||
|
#endif
|
||||||
|
#if __WORDSIZE == 64 && defined __loongarch_double_float
|
||||||
|
# include <gnu/lib-names-lp64d.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* gnu/lib-names.h */
|
||||||
38
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs-lp64s.h
vendored
Normal file
38
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs-lp64s.h
vendored
Normal file
@ -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
|
||||||
12
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs.h
vendored
Normal file
12
lib/libc/include/loongarch64-linux-gnusf/gnu/stubs.h
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* This file is automatically generated.
|
||||||
|
This file selects the right generated file of `__stub_FUNCTION' macros
|
||||||
|
based on the architecture being compiled for. */
|
||||||
|
|
||||||
|
#include <bits/wordsize.h>
|
||||||
|
|
||||||
|
#if __WORDSIZE == 64 && defined __loongarch_soft_float
|
||||||
|
# include <gnu/stubs-lp64s.h>
|
||||||
|
#endif
|
||||||
|
#if __WORDSIZE == 64 && defined __loongarch_double_float
|
||||||
|
# include <gnu/stubs-lp64d.h>
|
||||||
|
#endif
|
||||||
170
lib/libc/include/loongarch64-linux-gnusf/ieee754.h
vendored
Normal file
170
lib/libc/include/loongarch64-linux-gnusf/ieee754.h
vendored
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
/* Copyright (C) 1992-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IEEE754_H
|
||||||
|
#define _IEEE754_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
#include <bits/endian.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
union ieee754_float
|
||||||
|
{
|
||||||
|
float f;
|
||||||
|
|
||||||
|
/* This is the IEEE 754 single-precision format. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:8;
|
||||||
|
unsigned int mantissa:23;
|
||||||
|
#endif /* Big endian. */
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
unsigned int mantissa:23;
|
||||||
|
unsigned int exponent:8;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif /* Little endian. */
|
||||||
|
} ieee;
|
||||||
|
|
||||||
|
/* This format makes it easier to see if a NaN is a signalling NaN. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:8;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
unsigned int mantissa:22;
|
||||||
|
#endif /* Big endian. */
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
unsigned int mantissa:22;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
unsigned int exponent:8;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif /* Little endian. */
|
||||||
|
} ieee_nan;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
|
||||||
|
|
||||||
|
|
||||||
|
union ieee754_double
|
||||||
|
{
|
||||||
|
double d;
|
||||||
|
|
||||||
|
/* This is the IEEE 754 double-precision format. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:20;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
#endif /* Big endian. */
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa0:20;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif /* Little endian. */
|
||||||
|
} ieee;
|
||||||
|
|
||||||
|
/* This format makes it easier to see if a NaN is a signalling NaN. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:19;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
#else
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa0:19;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif
|
||||||
|
} ieee_nan;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
|
||||||
|
|
||||||
|
|
||||||
|
union ieee854_long_double
|
||||||
|
{
|
||||||
|
long double d;
|
||||||
|
|
||||||
|
/* This is the IEEE 854 quad-precision format. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:15;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:16;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa2:32;
|
||||||
|
unsigned int mantissa3:32;
|
||||||
|
#endif /* Big endian. */
|
||||||
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa3:32;
|
||||||
|
unsigned int mantissa2:32;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa0:16;
|
||||||
|
unsigned int exponent:15;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif /* Little endian. */
|
||||||
|
} ieee;
|
||||||
|
|
||||||
|
/* This format makes it easier to see if a NaN is a signalling NaN. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:15;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:15;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa2:32;
|
||||||
|
unsigned int mantissa3:32;
|
||||||
|
#else
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa3:32;
|
||||||
|
unsigned int mantissa2:32;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
unsigned int mantissa0:15;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
unsigned int exponent:15;
|
||||||
|
unsigned int negative:1;
|
||||||
|
#endif
|
||||||
|
} ieee_nan;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* ieee754.h */
|
||||||
78
lib/libc/include/loongarch64-linux-gnusf/sys/asm.h
vendored
Normal file
78
lib/libc/include/loongarch64-linux-gnusf/sys/asm.h
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/* Miscellaneous macros.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_ASM_H
|
||||||
|
#define _SYS_ASM_H
|
||||||
|
|
||||||
|
#include <sys/regdef.h>
|
||||||
|
#include <sysdeps/generic/sysdep.h>
|
||||||
|
|
||||||
|
/* Macros to handle different pointer/register sizes for 32/64-bit code. */
|
||||||
|
#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
|
||||||
|
#define SLLI slli.d
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
64
lib/libc/include/loongarch64-linux-gnusf/sys/ucontext.h
vendored
Normal file
64
lib/libc/include/loongarch64-linux-gnusf/sys/ucontext.h
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* struct ucontext definition.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Don't rely on this, the interface is currently messed up and may need to
|
||||||
|
be broken to be fixed. */
|
||||||
|
#ifndef _SYS_UCONTEXT_H
|
||||||
|
#define _SYS_UCONTEXT_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
#include <bits/types/sigset_t.h>
|
||||||
|
#include <bits/types/stack_t.h>
|
||||||
|
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
#define LARCH_NGREG 32
|
||||||
|
|
||||||
|
#define LARCH_REG_RA 1
|
||||||
|
#define LARCH_REG_SP 3
|
||||||
|
#define LARCH_REG_S0 23
|
||||||
|
#define LARCH_REG_S1 24
|
||||||
|
#define LARCH_REG_A0 4
|
||||||
|
#define LARCH_REG_S2 25
|
||||||
|
#define LARCH_REG_NARGS 8
|
||||||
|
|
||||||
|
typedef unsigned long int greg_t;
|
||||||
|
/* Container for all general registers. */
|
||||||
|
typedef greg_t gregset_t[32];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct mcontext_t
|
||||||
|
{
|
||||||
|
unsigned long long __pc;
|
||||||
|
unsigned long long __gregs[32];
|
||||||
|
unsigned int __flags;
|
||||||
|
unsigned long long __extcontext[0] __attribute__((__aligned__(16)));
|
||||||
|
} mcontext_t;
|
||||||
|
|
||||||
|
/* Userlevel context. */
|
||||||
|
typedef struct ucontext_t
|
||||||
|
{
|
||||||
|
unsigned long int __uc_flags;
|
||||||
|
struct ucontext_t *uc_link;
|
||||||
|
stack_t uc_stack;
|
||||||
|
sigset_t uc_sigmask;
|
||||||
|
mcontext_t uc_mcontext;
|
||||||
|
} ucontext_t;
|
||||||
|
|
||||||
|
#endif /* sys/ucontext.h */
|
||||||
42
lib/libc/include/loongarch64-linux-gnusf/sys/user.h
vendored
Normal file
42
lib/libc/include/loongarch64-linux-gnusf/sys/user.h
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* struct user_regs_struct definition for LoongArch.
|
||||||
|
Copyright (C) 2022-2024 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
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_USER_H
|
||||||
|
#define _SYS_USER_H 1
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct user_regs_struct
|
||||||
|
{
|
||||||
|
/* Saved main processor registers. */
|
||||||
|
uint64_t regs[32];
|
||||||
|
|
||||||
|
/* Saved special registers. */
|
||||||
|
uint64_t orig_a0;
|
||||||
|
uint64_t csr_era;
|
||||||
|
uint64_t csr_badv;
|
||||||
|
uint64_t reserved[10];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct user_fp_struct {
|
||||||
|
uint64_t fpr[32];
|
||||||
|
uint64_t fcc;
|
||||||
|
uint32_t fcsr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _SYS_USER_H */
|
||||||
@ -35,6 +35,7 @@ pub const available_libcs = [_]ArchOsAbi{
|
|||||||
.{ .arch = .x86, .os = .linux, .abi = .musl },
|
.{ .arch = .x86, .os = .linux, .abi = .musl },
|
||||||
.{ .arch = .x86, .os = .windows, .abi = .gnu },
|
.{ .arch = .x86, .os = .windows, .abi = .gnu },
|
||||||
.{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 } },
|
.{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 } },
|
||||||
|
.{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 } },
|
||||||
.{ .arch = .loongarch64, .os = .linux, .abi = .musl },
|
.{ .arch = .loongarch64, .os = .linux, .abi = .musl },
|
||||||
.{ .arch = .m68k, .os = .linux, .abi = .gnu },
|
.{ .arch = .m68k, .os = .linux, .abi = .gnu },
|
||||||
.{ .arch = .m68k, .os = .linux, .abi = .musl },
|
.{ .arch = .m68k, .os = .linux, .abi = .musl },
|
||||||
|
|||||||
@ -845,12 +845,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
|
|||||||
stubs_asm.shrinkRetainingCapacity(0);
|
stubs_asm.shrinkRetainingCapacity(0);
|
||||||
try stubs_asm.appendSlice(".text\n");
|
try stubs_asm.appendSlice(".text\n");
|
||||||
|
|
||||||
var inc_i: usize = 0;
|
|
||||||
|
|
||||||
const fn_inclusions_len = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little);
|
|
||||||
inc_i += 2;
|
|
||||||
|
|
||||||
var sym_i: usize = 0;
|
var sym_i: usize = 0;
|
||||||
|
var sym_name_buf = std.ArrayList(u8).init(arena);
|
||||||
var opt_symbol_name: ?[]const u8 = null;
|
var opt_symbol_name: ?[]const u8 = null;
|
||||||
var versions_buffer: [32]u8 = undefined;
|
var versions_buffer: [32]u8 = undefined;
|
||||||
var versions_len: usize = undefined;
|
var versions_len: usize = undefined;
|
||||||
@ -871,32 +867,38 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
|
|||||||
// twice, which causes a "duplicate symbol" assembler error.
|
// twice, which causes a "duplicate symbol" assembler error.
|
||||||
var versions_written = std.AutoArrayHashMap(Version, void).init(arena);
|
var versions_written = std.AutoArrayHashMap(Version, void).init(arena);
|
||||||
|
|
||||||
|
var inc_fbs = std.io.fixedBufferStream(metadata.inclusions);
|
||||||
|
var inc_reader = inc_fbs.reader();
|
||||||
|
|
||||||
|
const fn_inclusions_len = try inc_reader.readInt(u16, .little);
|
||||||
|
|
||||||
while (sym_i < fn_inclusions_len) : (sym_i += 1) {
|
while (sym_i < fn_inclusions_len) : (sym_i += 1) {
|
||||||
const sym_name = opt_symbol_name orelse n: {
|
const sym_name = opt_symbol_name orelse n: {
|
||||||
const name = mem.sliceTo(metadata.inclusions[inc_i..], 0);
|
sym_name_buf.clearRetainingCapacity();
|
||||||
inc_i += name.len + 1;
|
try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
|
||||||
|
|
||||||
opt_symbol_name = name;
|
opt_symbol_name = sym_name_buf.items;
|
||||||
versions_buffer = undefined;
|
versions_buffer = undefined;
|
||||||
versions_len = 0;
|
versions_len = 0;
|
||||||
break :n name;
|
|
||||||
};
|
|
||||||
const targets = mem.readInt(u32, metadata.inclusions[inc_i..][0..4], .little);
|
|
||||||
inc_i += 4;
|
|
||||||
|
|
||||||
const lib_index = metadata.inclusions[inc_i];
|
break :n sym_name_buf.items;
|
||||||
inc_i += 1;
|
};
|
||||||
const is_terminal = (targets & (1 << 31)) != 0;
|
const targets = try std.leb.readUleb128(u64, inc_reader);
|
||||||
if (is_terminal) opt_symbol_name = null;
|
var lib_index = try inc_reader.readByte();
|
||||||
|
|
||||||
|
const is_terminal = (lib_index & (1 << 7)) != 0;
|
||||||
|
if (is_terminal) {
|
||||||
|
lib_index &= ~@as(u8, 1 << 7);
|
||||||
|
opt_symbol_name = null;
|
||||||
|
}
|
||||||
|
|
||||||
// Test whether the inclusion applies to our current library and target.
|
// Test whether the inclusion applies to our current library and target.
|
||||||
const ok_lib_and_target =
|
const ok_lib_and_target =
|
||||||
(lib_index == lib_i) and
|
(lib_index == lib_i) and
|
||||||
((targets & (@as(u32, 1) << @as(u5, @intCast(target_targ_index)))) != 0);
|
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const byte = metadata.inclusions[inc_i];
|
const byte = try inc_reader.readByte();
|
||||||
inc_i += 1;
|
|
||||||
const last = (byte & 0b1000_0000) != 0;
|
const last = (byte & 0b1000_0000) != 0;
|
||||||
const ver_i = @as(u7, @truncate(byte));
|
const ver_i = @as(u7, @truncate(byte));
|
||||||
if (ok_lib_and_target and ver_i <= target_ver_index) {
|
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
|
|||||||
, .{wordDirective(target)});
|
, .{wordDirective(target)});
|
||||||
}
|
}
|
||||||
|
|
||||||
const obj_inclusions_len = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little);
|
const obj_inclusions_len = try inc_reader.readInt(u16, .little);
|
||||||
inc_i += 2;
|
|
||||||
|
|
||||||
sym_i = 0;
|
sym_i = 0;
|
||||||
opt_symbol_name = null;
|
opt_symbol_name = null;
|
||||||
@ -1036,33 +1037,32 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
|
|||||||
versions_len = undefined;
|
versions_len = undefined;
|
||||||
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
|
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
|
||||||
const sym_name = opt_symbol_name orelse n: {
|
const sym_name = opt_symbol_name orelse n: {
|
||||||
const name = mem.sliceTo(metadata.inclusions[inc_i..], 0);
|
sym_name_buf.clearRetainingCapacity();
|
||||||
inc_i += name.len + 1;
|
try inc_reader.streamUntilDelimiter(sym_name_buf.writer(), 0, null);
|
||||||
|
|
||||||
opt_symbol_name = name;
|
opt_symbol_name = sym_name_buf.items;
|
||||||
versions_buffer = undefined;
|
versions_buffer = undefined;
|
||||||
versions_len = 0;
|
versions_len = 0;
|
||||||
break :n name;
|
|
||||||
|
break :n sym_name_buf.items;
|
||||||
};
|
};
|
||||||
const targets = mem.readInt(u32, metadata.inclusions[inc_i..][0..4], .little);
|
const targets = try std.leb.readUleb128(u64, inc_reader);
|
||||||
inc_i += 4;
|
const size = try std.leb.readUleb128(u16, inc_reader);
|
||||||
|
var lib_index = try inc_reader.readByte();
|
||||||
|
|
||||||
const size = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little);
|
const is_terminal = (lib_index & (1 << 7)) != 0;
|
||||||
inc_i += 2;
|
if (is_terminal) {
|
||||||
|
lib_index &= ~@as(u8, 1 << 7);
|
||||||
const lib_index = metadata.inclusions[inc_i];
|
opt_symbol_name = null;
|
||||||
inc_i += 1;
|
}
|
||||||
const is_terminal = (targets & (1 << 31)) != 0;
|
|
||||||
if (is_terminal) opt_symbol_name = null;
|
|
||||||
|
|
||||||
// Test whether the inclusion applies to our current library and target.
|
// Test whether the inclusion applies to our current library and target.
|
||||||
const ok_lib_and_target =
|
const ok_lib_and_target =
|
||||||
(lib_index == lib_i) and
|
(lib_index == lib_i) and
|
||||||
((targets & (@as(u32, 1) << @as(u5, @intCast(target_targ_index)))) != 0);
|
((targets & (@as(u64, 1) << @as(u6, @intCast(target_targ_index)))) != 0);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const byte = metadata.inclusions[inc_i];
|
const byte = try inc_reader.readByte();
|
||||||
inc_i += 1;
|
|
||||||
const last = (byte & 0b1000_0000) != 0;
|
const last = (byte & 0b1000_0000) != 0;
|
||||||
const ver_i = @as(u7, @truncate(byte));
|
const ver_i = @as(u7, @truncate(byte));
|
||||||
if (ok_lib_and_target and ver_i <= target_ver_index) {
|
if (ok_lib_and_target and ver_i <= target_ver_index) {
|
||||||
|
|||||||
@ -209,6 +209,11 @@ const glibc_targets = [_]LibCTarget{
|
|||||||
.arch = MultiArch{ .specific = .loongarch64 },
|
.arch = MultiArch{ .specific = .loongarch64 },
|
||||||
.abi = MultiAbi{ .specific = Abi.gnu },
|
.abi = MultiAbi{ .specific = Abi.gnu },
|
||||||
},
|
},
|
||||||
|
LibCTarget{
|
||||||
|
.name = "loongarch64-linux-gnu-lp64s",
|
||||||
|
.arch = MultiArch{ .specific = .loongarch64 },
|
||||||
|
.abi = MultiAbi{ .specific = Abi.gnusf },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const musl_targets = [_]LibCTarget{
|
const musl_targets = [_]LibCTarget{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user