mirror of
https://github.com/ziglang/zig.git
synced 2024-11-14 16:13:24 +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 = .windows, .abi = .gnu },
|
||||
.{ .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 = .m68k, .os = .linux, .abi = .gnu },
|
||||
.{ .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);
|
||||
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_name_buf = std.ArrayList(u8).init(arena);
|
||||
var opt_symbol_name: ?[]const u8 = null;
|
||||
var versions_buffer: [32]u8 = 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.
|
||||
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) {
|
||||
const sym_name = opt_symbol_name orelse n: {
|
||||
const name = mem.sliceTo(metadata.inclusions[inc_i..], 0);
|
||||
inc_i += name.len + 1;
|
||||
sym_name_buf.clearRetainingCapacity();
|
||||
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_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];
|
||||
inc_i += 1;
|
||||
const is_terminal = (targets & (1 << 31)) != 0;
|
||||
if (is_terminal) opt_symbol_name = null;
|
||||
break :n sym_name_buf.items;
|
||||
};
|
||||
const targets = try std.leb.readUleb128(u64, inc_reader);
|
||||
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.
|
||||
const ok_lib_and_target =
|
||||
(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) {
|
||||
const byte = metadata.inclusions[inc_i];
|
||||
inc_i += 1;
|
||||
const byte = try inc_reader.readByte();
|
||||
const last = (byte & 0b1000_0000) != 0;
|
||||
const ver_i = @as(u7, @truncate(byte));
|
||||
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)});
|
||||
}
|
||||
|
||||
const obj_inclusions_len = mem.readInt(u16, metadata.inclusions[inc_i..][0..2], .little);
|
||||
inc_i += 2;
|
||||
const obj_inclusions_len = try inc_reader.readInt(u16, .little);
|
||||
|
||||
sym_i = 0;
|
||||
opt_symbol_name = null;
|
||||
@ -1036,33 +1037,32 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) !voi
|
||||
versions_len = undefined;
|
||||
while (sym_i < obj_inclusions_len) : (sym_i += 1) {
|
||||
const sym_name = opt_symbol_name orelse n: {
|
||||
const name = mem.sliceTo(metadata.inclusions[inc_i..], 0);
|
||||
inc_i += name.len + 1;
|
||||
sym_name_buf.clearRetainingCapacity();
|
||||
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_len = 0;
|
||||
break :n name;
|
||||
|
||||
break :n sym_name_buf.items;
|
||||
};
|
||||
const targets = mem.readInt(u32, metadata.inclusions[inc_i..][0..4], .little);
|
||||
inc_i += 4;
|
||||
const targets = try std.leb.readUleb128(u64, inc_reader);
|
||||
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);
|
||||
inc_i += 2;
|
||||
|
||||
const lib_index = metadata.inclusions[inc_i];
|
||||
inc_i += 1;
|
||||
const is_terminal = (targets & (1 << 31)) != 0;
|
||||
if (is_terminal) opt_symbol_name = null;
|
||||
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.
|
||||
const ok_lib_and_target =
|
||||
(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) {
|
||||
const byte = metadata.inclusions[inc_i];
|
||||
inc_i += 1;
|
||||
const byte = try inc_reader.readByte();
|
||||
const last = (byte & 0b1000_0000) != 0;
|
||||
const ver_i = @as(u7, @truncate(byte));
|
||||
if (ok_lib_and_target and ver_i <= target_ver_index) {
|
||||
|
@ -209,6 +209,11 @@ const glibc_targets = [_]LibCTarget{
|
||||
.arch = MultiArch{ .specific = .loongarch64 },
|
||||
.abi = MultiAbi{ .specific = Abi.gnu },
|
||||
},
|
||||
LibCTarget{
|
||||
.name = "loongarch64-linux-gnu-lp64s",
|
||||
.arch = MultiArch{ .specific = .loongarch64 },
|
||||
.abi = MultiAbi{ .specific = Abi.gnusf },
|
||||
},
|
||||
};
|
||||
|
||||
const musl_targets = [_]LibCTarget{
|
||||
|
Loading…
Reference in New Issue
Block a user