11389 lines
320 KiB
Diff
11389 lines
320 KiB
Diff
From c79112989afeadee37d64698eb4a922290b4e436 Mon Sep 17 00:00:00 2001
|
|
From: wanghongliang <wanghongliang@loongson.cn>
|
|
Date: Wed, 21 Dec 2022 14:39:59 +0800
|
|
Subject: [PATCH] LoongArch Port.
|
|
|
|
Signed-off-by: wanghongliang <wanghongliang@loongson.cn>
|
|
Change-Id: Ia618b0101a483a2e07b8ecd114130907eb8ca5db
|
|
---
|
|
config.h.in | 6 +
|
|
elf/elf.h | 71 +-
|
|
scripts/config.guess | 3 +
|
|
scripts/config.sub | 1 +
|
|
sysdeps/loongarch/Implies | 3 +
|
|
sysdeps/loongarch/Makefile | 15 +
|
|
sysdeps/loongarch/__longjmp.S | 52 +
|
|
sysdeps/loongarch/abort-instr.h | 2 +
|
|
sysdeps/loongarch/bits/endianness.h | 11 +
|
|
sysdeps/loongarch/bits/fenv.h | 90 +
|
|
sysdeps/loongarch/bits/link.h | 58 +
|
|
sysdeps/loongarch/bits/setjmp.h | 42 +
|
|
sysdeps/loongarch/bits/wordsize.h | 25 +
|
|
sysdeps/loongarch/bsd-_setjmp.c | 1 +
|
|
sysdeps/loongarch/bsd-setjmp.c | 1 +
|
|
sysdeps/loongarch/configure | 4 +
|
|
sysdeps/loongarch/configure.ac | 6 +
|
|
sysdeps/loongarch/dl-irel.h | 48 +
|
|
sysdeps/loongarch/dl-machine.h | 305 +++
|
|
sysdeps/loongarch/dl-tls.h | 46 +
|
|
sysdeps/loongarch/dl-trampoline.S | 103 +
|
|
sysdeps/loongarch/e_sqrtl.c | 39 +
|
|
sysdeps/loongarch/fpu/fclrexcpt.c | 46 +
|
|
sysdeps/loongarch/fpu/fedisblxcpt.c | 39 +
|
|
sysdeps/loongarch/fpu/feenablxcpt.c | 39 +
|
|
sysdeps/loongarch/fpu/fegetenv.c | 31 +
|
|
sysdeps/loongarch/fpu/fegetexcept.c | 32 +
|
|
sysdeps/loongarch/fpu/fegetmode.c | 27 +
|
|
sysdeps/loongarch/fpu/fegetround.c | 33 +
|
|
sysdeps/loongarch/fpu/feholdexcpt.c | 40 +
|
|
sysdeps/loongarch/fpu/fenv_libc.h | 30 +
|
|
sysdeps/loongarch/fpu/fesetenv.c | 42 +
|
|
sysdeps/loongarch/fpu/fesetexcept.c | 32 +
|
|
sysdeps/loongarch/fpu/fesetmode.c | 38 +
|
|
sysdeps/loongarch/fpu/fesetround.c | 44 +
|
|
sysdeps/loongarch/fpu/feupdateenv.c | 43 +
|
|
sysdeps/loongarch/fpu/fgetexcptflg.c | 38 +
|
|
sysdeps/loongarch/fpu/fraiseexcpt.c | 75 +
|
|
sysdeps/loongarch/fpu/fsetexcptflg.c | 41 +
|
|
sysdeps/loongarch/fpu/ftestexcept.c | 32 +
|
|
.../loongarch/fpu/math-use-builtins-sqrt.h | 4 +
|
|
sysdeps/loongarch/fpu_control.h | 102 +
|
|
sysdeps/loongarch/gccframe.h | 21 +
|
|
sysdeps/loongarch/hp-timing.h | 42 +
|
|
sysdeps/loongarch/jmpbuf-offsets.h | 22 +
|
|
sysdeps/loongarch/jmpbuf-unwind.h | 45 +
|
|
sysdeps/loongarch/ldsodefs.h | 41 +
|
|
sysdeps/loongarch/libc-start.h | 25 +
|
|
sysdeps/loongarch/libc-tls.c | 32 +
|
|
sysdeps/loongarch/linkmap.h | 4 +
|
|
sysdeps/loongarch/lp64/Implies-after | 1 +
|
|
sysdeps/loongarch/lp64/libm-test-ulps | 1411 +++++++++++
|
|
sysdeps/loongarch/lp64/libm-test-ulps-name | 1 +
|
|
sysdeps/loongarch/machine-gmon.h | 37 +
|
|
sysdeps/loongarch/math_private.h | 248 ++
|
|
sysdeps/loongarch/memusage.h | 25 +
|
|
sysdeps/loongarch/nptl/Makefile | 21 +
|
|
.../loongarch/nptl/bits/pthreadtypes-arch.h | 41 +
|
|
sysdeps/loongarch/nptl/bits/semaphore.h | 32 +
|
|
sysdeps/loongarch/nptl/bits/struct_rwlock.h | 44 +
|
|
sysdeps/loongarch/nptl/pthread-offsets.h | 15 +
|
|
sysdeps/loongarch/nptl/pthreaddef.h | 34 +
|
|
sysdeps/loongarch/nptl/tcb-offsets.sym | 6 +
|
|
sysdeps/loongarch/nptl/tls.h | 138 ++
|
|
sysdeps/loongarch/preconfigure | 52 +
|
|
sysdeps/loongarch/setjmp.S | 66 +
|
|
sysdeps/loongarch/sfp-machine.h | 102 +
|
|
sysdeps/loongarch/sotruss-lib.c | 50 +
|
|
sysdeps/loongarch/stackinfo.h | 33 +
|
|
sysdeps/loongarch/start.S | 69 +
|
|
sysdeps/loongarch/sys/asm.h | 58 +
|
|
sysdeps/loongarch/sys/ifunc.h | 30 +
|
|
sysdeps/loongarch/sys/regdef.h | 98 +
|
|
sysdeps/loongarch/tininess.h | 1 +
|
|
sysdeps/loongarch/tls-macros.h | 49 +
|
|
sysdeps/loongarch/tst-audit.h | 23 +
|
|
sysdeps/unix/sysv/linux/loongarch/Implies | 1 +
|
|
sysdeps/unix/sysv/linux/loongarch/Makefile | 10 +
|
|
.../unix/sysv/linux/loongarch/arch-syscall.h | 292 +++
|
|
.../sysv/linux/loongarch/atomic-machine.h | 196 ++
|
|
.../unix/sysv/linux/loongarch/bits/fcntl.h | 61 +
|
|
sysdeps/unix/sysv/linux/loongarch/bits/mman.h | 42 +
|
|
.../unix/sysv/linux/loongarch/bits/procfs.h | 52 +
|
|
.../linux/loongarch/bits/pthread_stack_min.h | 20 +
|
|
.../unix/sysv/linux/loongarch/bits/sigstack.h | 32 +
|
|
sysdeps/unix/sysv/linux/loongarch/clone.S | 100 +
|
|
sysdeps/unix/sysv/linux/loongarch/clone3.S | 87 +
|
|
sysdeps/unix/sysv/linux/loongarch/configure | 199 ++
|
|
.../unix/sysv/linux/loongarch/configure.ac | 27 +
|
|
sysdeps/unix/sysv/linux/loongarch/dl-static.c | 80 +
|
|
.../unix/sysv/linux/loongarch/getcontext.S | 59 +
|
|
sysdeps/unix/sysv/linux/loongarch/ldconfig.h | 30 +
|
|
.../unix/sysv/linux/loongarch/ldd-rewrite.sed | 3 +
|
|
sysdeps/unix/sysv/linux/loongarch/ldsodefs.h | 33 +
|
|
.../unix/sysv/linux/loongarch/localplt.data | 12 +
|
|
.../unix/sysv/linux/loongarch/lp64/Implies | 3 +
|
|
.../sysv/linux/loongarch/lp64/c++-types.data | 67 +
|
|
.../linux/loongarch/lp64/fpu/jmp_buf-macros.h | 44 +
|
|
.../unix/sysv/linux/loongarch/lp64/ld.abilist | 9 +
|
|
.../loongarch/lp64/libBrokenLocale.abilist | 1 +
|
|
.../sysv/linux/loongarch/lp64/libanl.abilist | 1 +
|
|
.../sysv/linux/loongarch/lp64/libc.abilist | 2135 +++++++++++++++++
|
|
.../loongarch/lp64/libc_malloc_debug.abilist | 26 +
|
|
.../linux/loongarch/lp64/libcrypt.abilist | 2 +
|
|
.../sysv/linux/loongarch/lp64/libdl.abilist | 0
|
|
.../sysv/linux/loongarch/lp64/libm.abilist | 940 ++++++++
|
|
.../linux/loongarch/lp64/libpthread.abilist | 0
|
|
.../linux/loongarch/lp64/libresolv.abilist | 55 +
|
|
.../sysv/linux/loongarch/lp64/librt.abilist | 0
|
|
.../linux/loongarch/lp64/libthread_db.abilist | 40 +
|
|
.../loongarch/lp64/nofpu/jmp_buf-macros.h | 41 +
|
|
.../unix/sysv/linux/loongarch/makecontext.c | 81 +
|
|
.../unix/sysv/linux/loongarch/register-dump.h | 61 +
|
|
.../unix/sysv/linux/loongarch/setcontext.S | 100 +
|
|
.../unix/sysv/linux/loongarch/shlib-versions | 7 +
|
|
.../sysv/linux/loongarch/sigcontextinfo.h | 32 +
|
|
.../unix/sysv/linux/loongarch/swapcontext.S | 95 +
|
|
.../unix/sysv/linux/loongarch/sys/ucontext.h | 64 +
|
|
sysdeps/unix/sysv/linux/loongarch/sys/user.h | 42 +
|
|
sysdeps/unix/sysv/linux/loongarch/syscall.c | 35 +
|
|
sysdeps/unix/sysv/linux/loongarch/sysdep.S | 53 +
|
|
sysdeps/unix/sysv/linux/loongarch/sysdep.h | 320 +++
|
|
.../sysv/linux/loongarch/ucontext-macros.h | 32 +
|
|
.../unix/sysv/linux/loongarch/ucontext_i.sym | 31 +
|
|
sysdeps/unix/sysv/linux/loongarch/vfork.S | 50 +
|
|
125 files changed, 10359 insertions(+), 1 deletion(-)
|
|
create mode 100644 sysdeps/loongarch/Implies
|
|
create mode 100644 sysdeps/loongarch/Makefile
|
|
create mode 100644 sysdeps/loongarch/__longjmp.S
|
|
create mode 100644 sysdeps/loongarch/abort-instr.h
|
|
create mode 100644 sysdeps/loongarch/bits/endianness.h
|
|
create mode 100644 sysdeps/loongarch/bits/fenv.h
|
|
create mode 100644 sysdeps/loongarch/bits/link.h
|
|
create mode 100644 sysdeps/loongarch/bits/setjmp.h
|
|
create mode 100644 sysdeps/loongarch/bits/wordsize.h
|
|
create mode 100644 sysdeps/loongarch/bsd-_setjmp.c
|
|
create mode 100644 sysdeps/loongarch/bsd-setjmp.c
|
|
create mode 100644 sysdeps/loongarch/configure
|
|
create mode 100644 sysdeps/loongarch/configure.ac
|
|
create mode 100644 sysdeps/loongarch/dl-irel.h
|
|
create mode 100644 sysdeps/loongarch/dl-machine.h
|
|
create mode 100644 sysdeps/loongarch/dl-tls.h
|
|
create mode 100644 sysdeps/loongarch/dl-trampoline.S
|
|
create mode 100644 sysdeps/loongarch/e_sqrtl.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fclrexcpt.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fedisblxcpt.c
|
|
create mode 100644 sysdeps/loongarch/fpu/feenablxcpt.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fegetenv.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fegetexcept.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fegetmode.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fegetround.c
|
|
create mode 100644 sysdeps/loongarch/fpu/feholdexcpt.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fenv_libc.h
|
|
create mode 100644 sysdeps/loongarch/fpu/fesetenv.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fesetexcept.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fesetmode.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fesetround.c
|
|
create mode 100644 sysdeps/loongarch/fpu/feupdateenv.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fgetexcptflg.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fraiseexcpt.c
|
|
create mode 100644 sysdeps/loongarch/fpu/fsetexcptflg.c
|
|
create mode 100644 sysdeps/loongarch/fpu/ftestexcept.c
|
|
create mode 100644 sysdeps/loongarch/fpu/math-use-builtins-sqrt.h
|
|
create mode 100644 sysdeps/loongarch/fpu_control.h
|
|
create mode 100644 sysdeps/loongarch/gccframe.h
|
|
create mode 100644 sysdeps/loongarch/hp-timing.h
|
|
create mode 100644 sysdeps/loongarch/jmpbuf-offsets.h
|
|
create mode 100644 sysdeps/loongarch/jmpbuf-unwind.h
|
|
create mode 100644 sysdeps/loongarch/ldsodefs.h
|
|
create mode 100644 sysdeps/loongarch/libc-start.h
|
|
create mode 100644 sysdeps/loongarch/libc-tls.c
|
|
create mode 100644 sysdeps/loongarch/linkmap.h
|
|
create mode 100644 sysdeps/loongarch/lp64/Implies-after
|
|
create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps
|
|
create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps-name
|
|
create mode 100644 sysdeps/loongarch/machine-gmon.h
|
|
create mode 100644 sysdeps/loongarch/math_private.h
|
|
create mode 100644 sysdeps/loongarch/memusage.h
|
|
create mode 100644 sysdeps/loongarch/nptl/Makefile
|
|
create mode 100644 sysdeps/loongarch/nptl/bits/pthreadtypes-arch.h
|
|
create mode 100644 sysdeps/loongarch/nptl/bits/semaphore.h
|
|
create mode 100644 sysdeps/loongarch/nptl/bits/struct_rwlock.h
|
|
create mode 100644 sysdeps/loongarch/nptl/pthread-offsets.h
|
|
create mode 100644 sysdeps/loongarch/nptl/pthreaddef.h
|
|
create mode 100644 sysdeps/loongarch/nptl/tcb-offsets.sym
|
|
create mode 100644 sysdeps/loongarch/nptl/tls.h
|
|
create mode 100644 sysdeps/loongarch/preconfigure
|
|
create mode 100644 sysdeps/loongarch/setjmp.S
|
|
create mode 100644 sysdeps/loongarch/sfp-machine.h
|
|
create mode 100644 sysdeps/loongarch/sotruss-lib.c
|
|
create mode 100644 sysdeps/loongarch/stackinfo.h
|
|
create mode 100644 sysdeps/loongarch/start.S
|
|
create mode 100644 sysdeps/loongarch/sys/asm.h
|
|
create mode 100644 sysdeps/loongarch/sys/ifunc.h
|
|
create mode 100644 sysdeps/loongarch/sys/regdef.h
|
|
create mode 100644 sysdeps/loongarch/tininess.h
|
|
create mode 100644 sysdeps/loongarch/tls-macros.h
|
|
create mode 100644 sysdeps/loongarch/tst-audit.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/Implies
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/Makefile
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/atomic-machine.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/fcntl.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/mman.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/procfs.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/pthread_stack_min.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/sigstack.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/clone.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/clone3.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure.ac
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/dl-static.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/getcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldconfig.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldsodefs.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/localplt.data
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/Implies
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libanl.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libdl.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/makecontext.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/register-dump.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/setcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/shlib-versions
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/sigcontextinfo.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/swapcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/sys/ucontext.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/sys/user.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/syscall.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/sysdep.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/ucontext-macros.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/ucontext_i.sym
|
|
create mode 100644 sysdeps/unix/sysv/linux/loongarch/vfork.S
|
|
|
|
diff --git a/config.h.in b/config.h.in
|
|
index 13101496..89596a83 100644
|
|
--- a/config.h.in
|
|
+++ b/config.h.in
|
|
@@ -144,6 +144,12 @@
|
|
/* RISC-V floating-point ABI for ld.so. */
|
|
#undef RISCV_ABI_FLEN
|
|
|
|
+/* LOONGARCH integer ABI for ld.so. */
|
|
+#undef LOONGARCH_ABI_GRLEN
|
|
+
|
|
+/* LOONGARCH floating-point ABI for ld.so. */
|
|
+#undef LOONGARCH_ABI_FRLEN
|
|
+
|
|
/* Linux specific: minimum supported kernel version. */
|
|
#undef __LINUX_KERNEL_VERSION
|
|
|
|
diff --git a/elf/elf.h b/elf/elf.h
|
|
index a64576bb..088f9764 100644
|
|
--- a/elf/elf.h
|
|
+++ b/elf/elf.h
|
|
@@ -358,8 +358,9 @@ typedef struct
|
|
|
|
#define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */
|
|
#define EM_CSKY 252 /* C-SKY */
|
|
+#define EM_LOONGARCH 258 /* LoongArch */
|
|
|
|
-#define EM_NUM 253
|
|
+#define EM_NUM 259
|
|
|
|
/* Old spellings/synonyms. */
|
|
|
|
@@ -4038,6 +4039,74 @@ enum
|
|
#define R_NDS32_TLS_TPOFF 102
|
|
#define R_NDS32_TLS_DESC 119
|
|
|
|
+/* LoongArch ELF Flags */
|
|
+#define EF_LARCH_ABI_MODIFIER_MASK 0x07
|
|
+#define EF_LARCH_ABI_SOFT_FLOAT 0x01
|
|
+#define EF_LARCH_ABI_SINGLE_FLOAT 0x02
|
|
+#define EF_LARCH_ABI_DOUBLE_FLOAT 0x03
|
|
+#define EF_LARCH_OBJABI_V1 0x40
|
|
+
|
|
+/* LoongArch specific dynamic relocations */
|
|
+#define R_LARCH_NONE 0
|
|
+#define R_LARCH_32 1
|
|
+#define R_LARCH_64 2
|
|
+#define R_LARCH_RELATIVE 3
|
|
+#define R_LARCH_COPY 4
|
|
+#define R_LARCH_JUMP_SLOT 5
|
|
+#define R_LARCH_TLS_DTPMOD32 6
|
|
+#define R_LARCH_TLS_DTPMOD64 7
|
|
+#define R_LARCH_TLS_DTPREL32 8
|
|
+#define R_LARCH_TLS_DTPREL64 9
|
|
+#define R_LARCH_TLS_TPREL32 10
|
|
+#define R_LARCH_TLS_TPREL64 11
|
|
+#define R_LARCH_IRELATIVE 12
|
|
+
|
|
+/* Reserved for future relocs that the dynamic linker must understand. */
|
|
+
|
|
+/* used by the static linker for relocating .text. */
|
|
+#define R_LARCH_MARK_LA 20
|
|
+#define R_LARCH_MARK_PCREL 21
|
|
+#define R_LARCH_SOP_PUSH_PCREL 22
|
|
+#define R_LARCH_SOP_PUSH_ABSOLUTE 23
|
|
+#define R_LARCH_SOP_PUSH_DUP 24
|
|
+#define R_LARCH_SOP_PUSH_GPREL 25
|
|
+#define R_LARCH_SOP_PUSH_TLS_TPREL 26
|
|
+#define R_LARCH_SOP_PUSH_TLS_GOT 27
|
|
+#define R_LARCH_SOP_PUSH_TLS_GD 28
|
|
+#define R_LARCH_SOP_PUSH_PLT_PCREL 29
|
|
+#define R_LARCH_SOP_ASSERT 30
|
|
+#define R_LARCH_SOP_NOT 31
|
|
+#define R_LARCH_SOP_SUB 32
|
|
+#define R_LARCH_SOP_SL 33
|
|
+#define R_LARCH_SOP_SR 34
|
|
+#define R_LARCH_SOP_ADD 35
|
|
+#define R_LARCH_SOP_AND 36
|
|
+#define R_LARCH_SOP_IF_ELSE 37
|
|
+#define R_LARCH_SOP_POP_32_S_10_5 38
|
|
+#define R_LARCH_SOP_POP_32_U_10_12 39
|
|
+#define R_LARCH_SOP_POP_32_S_10_12 40
|
|
+#define R_LARCH_SOP_POP_32_S_10_16 41
|
|
+#define R_LARCH_SOP_POP_32_S_10_16_S2 42
|
|
+#define R_LARCH_SOP_POP_32_S_5_20 43
|
|
+#define R_LARCH_SOP_POP_32_S_0_5_10_16_S2 44
|
|
+#define R_LARCH_SOP_POP_32_S_0_10_10_16_S2 45
|
|
+#define R_LARCH_SOP_POP_32_U 46
|
|
+
|
|
+/* used by the static linker for relocating non .text. */
|
|
+#define R_LARCH_ADD8 47
|
|
+#define R_LARCH_ADD16 48
|
|
+#define R_LARCH_ADD24 49
|
|
+#define R_LARCH_ADD32 50
|
|
+#define R_LARCH_ADD64 51
|
|
+#define R_LARCH_SUB8 52
|
|
+#define R_LARCH_SUB16 53
|
|
+#define R_LARCH_SUB24 54
|
|
+#define R_LARCH_SUB32 55
|
|
+#define R_LARCH_SUB64 56
|
|
+#define R_LARCH_GNU_VTINHERIT 57
|
|
+#define R_LARCH_GNU_VTENTRY 58
|
|
+
|
|
+
|
|
/* ARCompact/ARCv2 specific relocs. */
|
|
#define R_ARC_NONE 0x0
|
|
#define R_ARC_8 0x1
|
|
diff --git a/scripts/config.guess b/scripts/config.guess
|
|
index 0f9b29c8..ddbb6095 100755
|
|
--- a/scripts/config.guess
|
|
+++ b/scripts/config.guess
|
|
@@ -977,6 +977,9 @@ EOF
|
|
k1om:Linux:*:*)
|
|
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
|
|
exit ;;
|
|
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
|
|
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
|
|
+ exit ;;
|
|
m32r*:Linux:*:*)
|
|
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
|
|
exit ;;
|
|
diff --git a/scripts/config.sub b/scripts/config.sub
|
|
index a8f3f7e7..15731891 100755
|
|
--- a/scripts/config.sub
|
|
+++ b/scripts/config.sub
|
|
@@ -1182,6 +1182,7 @@ case $cpu-$vendor in
|
|
| k1om \
|
|
| le32 | le64 \
|
|
| lm32 \
|
|
+ | loongarch32 | loongarch64 | loongarchx32 \
|
|
| m32c | m32r | m32rle \
|
|
| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k | v70 | w65 \
|
|
| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip \
|
|
diff --git a/sysdeps/loongarch/Implies b/sysdeps/loongarch/Implies
|
|
new file mode 100644
|
|
index 00000000..1945b1f4
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/Implies
|
|
@@ -0,0 +1,3 @@
|
|
+ieee754/ldbl-128
|
|
+ieee754/dbl-64
|
|
+ieee754/flt-32
|
|
diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile
|
|
new file mode 100644
|
|
index 00000000..41c34496
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/Makefile
|
|
@@ -0,0 +1,15 @@
|
|
+ifeq ($(subdir),misc)
|
|
+sysdep_headers += sys/asm.h
|
|
+endif
|
|
+
|
|
+# LoongArch's assembler also needs to know about PIC as it changes the
|
|
+# definition of some assembler macros.
|
|
+ASFLAGS-.os += $(pic-ccflag)
|
|
+
|
|
+abi-variants := lp64
|
|
+
|
|
+ifeq (,$(filter $(default-abi),$(abi-variants)))
|
|
+$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
|
|
+endif
|
|
+
|
|
+abi-lp64-condition := defined __loongarch_lp64
|
|
diff --git a/sysdeps/loongarch/__longjmp.S b/sysdeps/loongarch/__longjmp.S
|
|
new file mode 100644
|
|
index 00000000..5cc1bc78
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/__longjmp.S
|
|
@@ -0,0 +1,52 @@
|
|
+/* longjmp.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/asm.h>
|
|
+
|
|
+ENTRY (__longjmp)
|
|
+ REG_L ra, a0, 0*SZREG
|
|
+ REG_L sp, a0, 1*SZREG
|
|
+ REG_L x, a0, 2*SZREG
|
|
+ REG_L fp, a0, 3*SZREG
|
|
+ REG_L s0, a0, 4*SZREG
|
|
+ REG_L s1, a0, 5*SZREG
|
|
+ REG_L s2, a0, 6*SZREG
|
|
+ REG_L s3, a0, 7*SZREG
|
|
+ REG_L s4, a0, 8*SZREG
|
|
+ REG_L s5, a0, 9*SZREG
|
|
+ REG_L s6, a0, 10*SZREG
|
|
+ REG_L s7, a0, 11*SZREG
|
|
+ REG_L s8, a0, 12*SZREG
|
|
+
|
|
+#ifndef __loongarch_soft_float
|
|
+ FREG_L $f24, a0, 13*SZREG + 0*SZFREG
|
|
+ FREG_L $f25, a0, 13*SZREG + 1*SZFREG
|
|
+ FREG_L $f26, a0, 13*SZREG + 2*SZFREG
|
|
+ FREG_L $f27, a0, 13*SZREG + 3*SZFREG
|
|
+ FREG_L $f28, a0, 13*SZREG + 4*SZFREG
|
|
+ FREG_L $f29, a0, 13*SZREG + 5*SZFREG
|
|
+ FREG_L $f30, a0, 13*SZREG + 6*SZFREG
|
|
+ FREG_L $f31, a0, 13*SZREG + 7*SZFREG
|
|
+#endif
|
|
+
|
|
+ sltui a0,a1,1
|
|
+ add.d a0, a0, a1 # a0 = (a1 == 0) ? 1 : a1
|
|
+ jirl zero,ra,0
|
|
+
|
|
+END (__longjmp)
|
|
diff --git a/sysdeps/loongarch/abort-instr.h b/sysdeps/loongarch/abort-instr.h
|
|
new file mode 100644
|
|
index 00000000..92e22edf
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/abort-instr.h
|
|
@@ -0,0 +1,2 @@
|
|
+/* An instruction which should crash any program is a breakpoint. */
|
|
+#define ABORT_INSTRUCTION asm("break 0")
|
|
diff --git a/sysdeps/loongarch/bits/endianness.h b/sysdeps/loongarch/bits/endianness.h
|
|
new file mode 100644
|
|
index 00000000..7290be7b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bits/endianness.h
|
|
@@ -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 */
|
|
diff --git a/sysdeps/loongarch/bits/fenv.h b/sysdeps/loongarch/bits/fenv.h
|
|
new file mode 100644
|
|
index 00000000..35433bec
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bits/fenv.h
|
|
@@ -0,0 +1,90 @@
|
|
+/* Floating point environment.
|
|
+ Copyright (C) 2021 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_C2X)
|
|
+/* 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
|
|
diff --git a/sysdeps/loongarch/bits/link.h b/sysdeps/loongarch/bits/link.h
|
|
new file mode 100644
|
|
index 00000000..3f2834d3
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bits/link.h
|
|
@@ -0,0 +1,58 @@
|
|
+/* Machine-specific declarations for dynamic linker interface.
|
|
+ Copyright (C) 2021 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
|
|
+
|
|
+typedef struct La_loongarch_regs
|
|
+{
|
|
+ unsigned long int lr_reg[8]; /* a0 - a7 */
|
|
+ double lr_fpreg[8]; /* fa0 - fa7 */
|
|
+ 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;
|
|
+ double lrv_fa0;
|
|
+ double lrv_fa1;
|
|
+} 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
|
|
diff --git a/sysdeps/loongarch/bits/setjmp.h b/sysdeps/loongarch/bits/setjmp.h
|
|
new file mode 100644
|
|
index 00000000..b098ac6f
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bits/setjmp.h
|
|
@@ -0,0 +1,42 @@
|
|
+/* Define the machine-dependent type `jmp_buf'.
|
|
+ Copyright (C) 2021 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 */
|
|
diff --git a/sysdeps/loongarch/bits/wordsize.h b/sysdeps/loongarch/bits/wordsize.h
|
|
new file mode 100644
|
|
index 00000000..0a83454b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bits/wordsize.h
|
|
@@ -0,0 +1,25 @@
|
|
+/* Determine the wordsize from the preprocessor defines.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#ifdef __LP64__
|
|
+#define __WORDSIZE 64
|
|
+#else
|
|
+#define __WORDSIZE 32
|
|
+#endif
|
|
+
|
|
+#define __WORDSIZE_TIME64_COMPAT32 0
|
|
diff --git a/sysdeps/loongarch/bsd-_setjmp.c b/sysdeps/loongarch/bsd-_setjmp.c
|
|
new file mode 100644
|
|
index 00000000..32f49441
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bsd-_setjmp.c
|
|
@@ -0,0 +1 @@
|
|
+/* _setjmp is implemented in setjmp.S. */
|
|
diff --git a/sysdeps/loongarch/bsd-setjmp.c b/sysdeps/loongarch/bsd-setjmp.c
|
|
new file mode 100644
|
|
index 00000000..45fd802a
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/bsd-setjmp.c
|
|
@@ -0,0 +1 @@
|
|
+/* setjmp is implemented in setjmp.S. */
|
|
diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure
|
|
new file mode 100644
|
|
index 00000000..1e5abf81
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/configure
|
|
@@ -0,0 +1,4 @@
|
|
+# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
|
|
+ # Local configure fragment for sysdeps/loongarch/elf.
|
|
+
|
|
+#AC_DEFINE(PI_STATIC_AND_HIDDEN)
|
|
diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac
|
|
new file mode 100644
|
|
index 00000000..67b46ce0
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/configure.ac
|
|
@@ -0,0 +1,6 @@
|
|
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
|
+# Local configure fragment for sysdeps/loongarch/elf.
|
|
+
|
|
+dnl It is always possible to access static and hidden symbols in an
|
|
+dnl position independent way.
|
|
+#AC_DEFINE(PI_STATIC_AND_HIDDEN)
|
|
diff --git a/sysdeps/loongarch/dl-irel.h b/sysdeps/loongarch/dl-irel.h
|
|
new file mode 100644
|
|
index 00000000..9fd106a3
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/dl-irel.h
|
|
@@ -0,0 +1,48 @@
|
|
+/* Machine-dependent ELF indirect relocation inline functions.
|
|
+ Copyright (C) 2021 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 _DL_IREL_H
|
|
+#define _DL_IREL_H
|
|
+
|
|
+#include <stdio.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#define ELF_MACHINE_IRELA 1
|
|
+
|
|
+static inline ElfW (Addr) __attribute ((always_inline))
|
|
+elf_ifunc_invoke (ElfW (Addr) addr)
|
|
+{
|
|
+ return ((ElfW (Addr) (*) (void)) (addr)) ();
|
|
+}
|
|
+
|
|
+static inline void __attribute ((always_inline))
|
|
+elf_irela (const ElfW (Rela) * reloc)
|
|
+{
|
|
+ ElfW (Addr) *const reloc_addr = (void *) reloc->r_offset;
|
|
+ const unsigned long int r_type = ELFW (R_TYPE) (reloc->r_info);
|
|
+
|
|
+ if (__glibc_likely (r_type == R_LARCH_IRELATIVE))
|
|
+ {
|
|
+ ElfW (Addr) value = elf_ifunc_invoke (reloc->r_addend);
|
|
+ *reloc_addr = value;
|
|
+ }
|
|
+ else
|
|
+ __libc_fatal ("Unexpected reloc type in static binary.\n");
|
|
+}
|
|
+
|
|
+#endif /* dl-irel.h */
|
|
diff --git a/sysdeps/loongarch/dl-machine.h b/sysdeps/loongarch/dl-machine.h
|
|
new file mode 100644
|
|
index 00000000..b6eac3ae
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/dl-machine.h
|
|
@@ -0,0 +1,305 @@
|
|
+/* Machine-dependent ELF dynamic relocation inline functions.
|
|
+ Copyright (C) 2021 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 dl_machine_h
|
|
+#define dl_machine_h
|
|
+
|
|
+#define ELF_MACHINE_NAME "LoongArch"
|
|
+
|
|
+#include <entry.h>
|
|
+#include <elf/elf.h>
|
|
+#include <sys/asm.h>
|
|
+#include <dl-tls.h>
|
|
+
|
|
+#ifndef _RTLD_PROLOGUE
|
|
+# define _RTLD_PROLOGUE(entry) \
|
|
+ ".globl\t" __STRING (entry) "\n\t" \
|
|
+ ".type\t" __STRING (entry) ", @function\n\t" \
|
|
+ CFI_STARTPROC "\n" \
|
|
+ __STRING (entry) ":\n"
|
|
+#endif
|
|
+
|
|
+#ifndef _RTLD_EPILOGUE
|
|
+# define _RTLD_EPILOGUE(entry) \
|
|
+ CFI_ENDPROC "\n\t" \
|
|
+ ".size\t" __STRING (entry) ", . - " __STRING (entry) "\n"
|
|
+#endif
|
|
+
|
|
+#define ELF_MACHINE_JMP_SLOT R_LARCH_JUMP_SLOT
|
|
+#define ELF_MACHINE_IRELATIVE R_LARCH_IRELATIVE
|
|
+
|
|
+#define elf_machine_type_class(type) \
|
|
+ ((ELF_RTYPE_CLASS_PLT *((type) == ELF_MACHINE_JMP_SLOT)) \
|
|
+ | (ELF_RTYPE_CLASS_COPY *((type) == R_LARCH_COPY)))
|
|
+
|
|
+#define ELF_MACHINE_NO_REL 1
|
|
+#define ELF_MACHINE_NO_RELA 0
|
|
+
|
|
+/* Return nonzero iff ELF header is compatible with the running host. */
|
|
+static inline int __attribute_used__
|
|
+elf_machine_matches_host (const ElfW (Ehdr) * ehdr)
|
|
+{
|
|
+ /* We can only run LoongArch binaries. */
|
|
+ if (ehdr->e_machine != EM_LOONGARCH)
|
|
+ return 0;
|
|
+
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+/* Return the run-time load address of the shared object. */
|
|
+static inline ElfW (Addr) elf_machine_load_address (void)
|
|
+{
|
|
+ extern const ElfW(Ehdr) __ehdr_start attribute_hidden;
|
|
+ return (ElfW(Addr)) &__ehdr_start;
|
|
+}
|
|
+
|
|
+/* Return the link-time address of _DYNAMIC. */
|
|
+static inline ElfW (Addr) elf_machine_dynamic (void)
|
|
+{
|
|
+ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
|
|
+ return (ElfW(Addr)) _DYNAMIC - elf_machine_load_address ();
|
|
+}
|
|
+
|
|
+/* Initial entry point code for the dynamic linker.
|
|
+ The C function `_dl_start' is the real entry point;
|
|
+ its return value is the user program's entry point. */
|
|
+
|
|
+#define RTLD_START asm (\
|
|
+ ".text\n\
|
|
+ " _RTLD_PROLOGUE (ENTRY_POINT) "\
|
|
+ .cfi_label .Ldummy \n\
|
|
+ " CFI_UNDEFINED (1) " \n\
|
|
+ or $a0, $sp, $zero \n\
|
|
+ bl _dl_start \n\
|
|
+ # Stash user entry point in s0. \n\
|
|
+ or $s0, $a0, $zero \n\
|
|
+ # Load the original argument count. \n\
|
|
+ ld.d $a1, $sp, 0 \n\
|
|
+ # Call _dl_init (struct link_map *main_map, int argc, \
|
|
+ char **argv, char **env) \n\
|
|
+ la $a0, _rtld_local \n\
|
|
+ ld.d $a0, $a0, 0 \n\
|
|
+ addi.d $a2, $sp, 8 \n\
|
|
+ slli.d $a3, $a1, 3 \n\
|
|
+ add.d $a3, $a3, $a2 \n\
|
|
+ addi.d $a3, $a3, 8 \n\
|
|
+ # Stash the stack pointer in s1.\n\
|
|
+ or $s1, $sp, $zero \n\
|
|
+ # Adjust $sp for 16-aligned \n\
|
|
+ bstrins.d $sp, $zero, 3, 0 \n\
|
|
+ # Call the function to run the initializers. \n\
|
|
+ bl _dl_init \n\
|
|
+ # Restore the stack pointer for _start.\n\
|
|
+ or $sp, $s1, $zero \n\
|
|
+ # Pass our finalizer function to _start. \n\
|
|
+ la $a0, _dl_fini \n\
|
|
+ # Jump to the user entry point. \n\
|
|
+ jirl $zero, $s0, 0 \n\
|
|
+ " _RTLD_EPILOGUE (ENTRY_POINT) "\
|
|
+ .previous");
|
|
+
|
|
+/* Names of the architecture-specific auditing callback functions. */
|
|
+#define ARCH_LA_PLTENTER loongarch_gnu_pltenter
|
|
+#define ARCH_LA_PLTEXIT loongarch_gnu_pltexit
|
|
+
|
|
+/* Bias .got.plt entry by the offset requested by the PLT header. */
|
|
+#define elf_machine_plt_value(map, reloc, value) (value)
|
|
+
|
|
+static inline ElfW (Addr)
|
|
+ elf_machine_fixup_plt (struct link_map *map, lookup_t t,
|
|
+ const ElfW (Sym) * refsym, const ElfW (Sym) * sym,
|
|
+ const ElfW (Rela) * reloc, ElfW (Addr) * reloc_addr,
|
|
+ ElfW (Addr) value)
|
|
+{
|
|
+ return *reloc_addr = value;
|
|
+}
|
|
+
|
|
+#endif /* !dl_machine_h */
|
|
+
|
|
+#ifdef RESOLVE_MAP
|
|
+
|
|
+/* Perform a relocation described by R_INFO at the location pointed to
|
|
+ by RELOC_ADDR. SYM is the relocation symbol specified by R_INFO and
|
|
+ MAP is the object containing the reloc. */
|
|
+
|
|
+auto inline void __attribute__ ((always_inline))
|
|
+elf_machine_rela (struct link_map *map,
|
|
+ const ElfW (Rela) * reloc,
|
|
+ const ElfW (Sym) * sym,
|
|
+ const struct r_found_version *version,
|
|
+ void *const reloc_addr, int skip_ifunc)
|
|
+{
|
|
+ ElfW (Addr) r_info = reloc->r_info;
|
|
+ const unsigned long int r_type = ELFW (R_TYPE) (r_info);
|
|
+ ElfW (Addr) *addr_field = (ElfW (Addr) *) reloc_addr;
|
|
+ const ElfW (Sym) *const __attribute__ ((unused)) refsym = sym;
|
|
+ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
|
|
+ ElfW (Addr) value = 0;
|
|
+ if (sym_map != NULL)
|
|
+ value = SYMBOL_ADDRESS (sym_map, sym, true) + reloc->r_addend;
|
|
+
|
|
+ if (sym != NULL
|
|
+ && __builtin_expect (ELFW (ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)
|
|
+ && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
|
|
+ && __builtin_expect (!skip_ifunc, 1))
|
|
+ value = ((ElfW (Addr) (*) (int)) value) (GLRO (dl_hwcap));
|
|
+
|
|
+ switch (r_type)
|
|
+ {
|
|
+ case R_LARCH_JUMP_SLOT:
|
|
+ case __WORDSIZE == 64 ? R_LARCH_64 : R_LARCH_32:
|
|
+ *addr_field = value;
|
|
+ break;
|
|
+
|
|
+ case R_LARCH_NONE:
|
|
+ break;
|
|
+
|
|
+#ifndef RTLD_BOOTSTRAP
|
|
+ case __WORDSIZE == 64 ? R_LARCH_TLS_DTPMOD64:
|
|
+ R_LARCH_TLS_DTPMOD32:
|
|
+ if (sym_map)
|
|
+ *addr_field = sym_map->l_tls_modid;
|
|
+ break;
|
|
+
|
|
+ case __WORDSIZE == 64 ? R_LARCH_TLS_DTPREL64:
|
|
+ R_LARCH_TLS_DTPREL32:
|
|
+ if (sym != NULL)
|
|
+ *addr_field = TLS_DTPREL_VALUE (sym) + reloc->r_addend;
|
|
+ break;
|
|
+
|
|
+ case __WORDSIZE == 64 ? R_LARCH_TLS_TPREL64:
|
|
+ R_LARCH_TLS_TPREL32:
|
|
+ if (sym != NULL)
|
|
+ {
|
|
+ CHECK_STATIC_TLS (map, sym_map);
|
|
+ *addr_field = TLS_TPREL_VALUE (sym_map, sym) + reloc->r_addend;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case R_LARCH_COPY:
|
|
+ {
|
|
+ if (__glibc_unlikely (sym == NULL))
|
|
+ /* This can happen in trace mode if an object could not be
|
|
+ found. */
|
|
+ break;
|
|
+
|
|
+ /* Handle TLS copy relocations. */
|
|
+ if (__glibc_unlikely (ELFW (ST_TYPE) (sym->st_info) == STT_TLS))
|
|
+ {
|
|
+ /* There's nothing to do if the symbol is in .tbss. */
|
|
+ if (__glibc_likely (sym->st_value
|
|
+ >= sym_map->l_tls_initimage_size))
|
|
+ break;
|
|
+ value += (ElfW (Addr)) sym_map->l_tls_initimage - sym_map->l_addr;
|
|
+ }
|
|
+
|
|
+ size_t size = sym->st_size;
|
|
+ if (__glibc_unlikely (sym->st_size != refsym->st_size))
|
|
+ {
|
|
+ const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
|
|
+ if (sym->st_size > refsym->st_size)
|
|
+ size = refsym->st_size;
|
|
+ if (sym->st_size > refsym->st_size || GLRO (dl_verbose))
|
|
+ _dl_error_printf ("\
|
|
+ %s: Symbol `%s' has different size in shared object, consider re-linking\n",
|
|
+ rtld_progname ?: "<program name unknown>",
|
|
+ strtab + refsym->st_name);
|
|
+ }
|
|
+
|
|
+ memcpy (reloc_addr, (void *) value, size);
|
|
+ break;
|
|
+ }
|
|
+ case R_LARCH_RELATIVE:
|
|
+ {
|
|
+ *addr_field = map->l_addr + reloc->r_addend;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case R_LARCH_IRELATIVE:
|
|
+ value = map->l_addr + reloc->r_addend;
|
|
+ if (__glibc_likely (!skip_ifunc))
|
|
+ value = ((ElfW (Addr) (*) (void)) value) ();
|
|
+ *addr_field = value;
|
|
+ break;
|
|
+#endif
|
|
+
|
|
+ default:
|
|
+ _dl_reloc_bad_type (map, r_type, 0);
|
|
+ break;
|
|
+ }
|
|
+}
|
|
+
|
|
+auto inline void __attribute__ ((always_inline))
|
|
+elf_machine_rela_relative (ElfW (Addr) l_addr, const ElfW (Rela) * reloc,
|
|
+ void *const reloc_addr)
|
|
+{
|
|
+ *(ElfW (Addr) *) reloc_addr = l_addr + reloc->r_addend;
|
|
+}
|
|
+
|
|
+auto inline void __attribute__ ((always_inline))
|
|
+elf_machine_lazy_rel (struct link_map *map,
|
|
+ ElfW (Addr) l_addr,
|
|
+ const ElfW (Rela) * reloc, int skip_ifunc)
|
|
+{
|
|
+ ElfW (Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset);
|
|
+ const unsigned int r_type = ELFW (R_TYPE) (reloc->r_info);
|
|
+
|
|
+ /* Check for unexpected PLT reloc type. */
|
|
+ if (__glibc_likely (r_type == R_LARCH_JUMP_SLOT))
|
|
+ {
|
|
+ if (__glibc_unlikely (map->l_mach.plt == 0))
|
|
+ {
|
|
+ if (l_addr)
|
|
+ *reloc_addr += l_addr;
|
|
+ }
|
|
+ else
|
|
+ *reloc_addr = map->l_mach.plt;
|
|
+ }
|
|
+ else
|
|
+ _dl_reloc_bad_type (map, r_type, 1);
|
|
+}
|
|
+
|
|
+/* Set up the loaded object described by L so its stub function
|
|
+ will jump to the on-demand fixup code __dl_runtime_resolve. */
|
|
+
|
|
+auto inline int __attribute__ ((always_inline))
|
|
+elf_machine_runtime_setup (struct link_map *l,
|
|
+ int lazy, int profile)
|
|
+{
|
|
+#ifndef RTLD_BOOTSTRAP
|
|
+ /* If using PLTs, fill in the first two entries of .got.plt. */
|
|
+ if (l->l_info[DT_JMPREL])
|
|
+ {
|
|
+ extern void _dl_runtime_resolve (void)
|
|
+ __attribute__ ((visibility ("hidden")));
|
|
+ ElfW (Addr) *gotplt = (ElfW (Addr) *) D_PTR (l, l_info[DT_PLTGOT]);
|
|
+ /* If a library is prelinked but we have to relocate anyway,
|
|
+ we have to be able to undo the prelinking of .got.plt.
|
|
+ The prelinker saved the address of .plt for us here. */
|
|
+ if (gotplt[1])
|
|
+ l->l_mach.plt = gotplt[1] + l->l_addr;
|
|
+ gotplt[0] = (ElfW (Addr)) & _dl_runtime_resolve;
|
|
+ gotplt[1] = (ElfW (Addr)) l;
|
|
+ }
|
|
+#endif
|
|
+
|
|
+ return lazy;
|
|
+}
|
|
+
|
|
+#endif /* RESOLVE_MAP */
|
|
diff --git a/sysdeps/loongarch/dl-tls.h b/sysdeps/loongarch/dl-tls.h
|
|
new file mode 100644
|
|
index 00000000..ee7d78a3
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/dl-tls.h
|
|
@@ -0,0 +1,46 @@
|
|
+/* Thread-local storage handling in the ELF dynamic linker.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* Type used for the representation of TLS information in the GOT. */
|
|
+typedef struct
|
|
+{
|
|
+ unsigned long int ti_module;
|
|
+ unsigned long int ti_offset;
|
|
+} tls_index;
|
|
+
|
|
+/* The thread pointer points to the first static TLS block. */
|
|
+#define TLS_TP_OFFSET 0
|
|
+
|
|
+/* Dynamic thread vector pointers point to the start of each
|
|
+ TLS block. */
|
|
+#define TLS_DTV_OFFSET 0
|
|
+
|
|
+/* Compute the value for a GOTTPREL reloc. */
|
|
+#define TLS_TPREL_VALUE(sym_map, sym) \
|
|
+ ((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET)
|
|
+
|
|
+/* Compute the value for a DTPREL reloc. */
|
|
+#define TLS_DTPREL_VALUE(sym) ((sym)->st_value - TLS_DTV_OFFSET)
|
|
+
|
|
+extern void *__tls_get_addr (tls_index *ti);
|
|
+
|
|
+#define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET)
|
|
+#define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
|
|
+
|
|
+/* Value used for dtv entries for which the allocation is delayed. */
|
|
+#define TLS_DTV_UNALLOCATED ((void *) -1l)
|
|
diff --git a/sysdeps/loongarch/dl-trampoline.S b/sysdeps/loongarch/dl-trampoline.S
|
|
new file mode 100644
|
|
index 00000000..84b1fa1f
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/dl-trampoline.S
|
|
@@ -0,0 +1,103 @@
|
|
+/* PLT trampolines.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/asm.h>
|
|
+
|
|
+/* Assembler veneer called from the PLT header code for lazy loading.
|
|
+ The PLT header passes its own args in t0-t2. */
|
|
+
|
|
+#ifdef __loongarch_soft_float
|
|
+# define FRAME_SIZE (-((-10 * SZREG) & ALMASK))
|
|
+#else
|
|
+# define FRAME_SIZE (-((-10 * SZREG - 8 * SZFREG) & ALMASK))
|
|
+#endif
|
|
+
|
|
+ENTRY (_dl_runtime_resolve)
|
|
+
|
|
+ /* Save arguments to stack. */
|
|
+#ifdef __loongarch_lp64
|
|
+ addi.d sp, sp, -FRAME_SIZE
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+ REG_S ra, sp, 9*SZREG
|
|
+ REG_S a0, sp, 1*SZREG
|
|
+ REG_S a1, sp, 2*SZREG
|
|
+ REG_S a2, sp, 3*SZREG
|
|
+ REG_S a3, sp, 4*SZREG
|
|
+ REG_S a4, sp, 5*SZREG
|
|
+ REG_S a5, sp, 6*SZREG
|
|
+ REG_S a6, sp, 7*SZREG
|
|
+ REG_S a7, sp, 8*SZREG
|
|
+
|
|
+#ifndef __loongarch_soft_float
|
|
+ FREG_S fa0, sp, 10*SZREG + 0*SZFREG
|
|
+ FREG_S fa1, sp, 10*SZREG + 1*SZFREG
|
|
+ FREG_S fa2, sp, 10*SZREG + 2*SZFREG
|
|
+ FREG_S fa3, sp, 10*SZREG + 3*SZFREG
|
|
+ FREG_S fa4, sp, 10*SZREG + 4*SZFREG
|
|
+ FREG_S fa5, sp, 10*SZREG + 5*SZFREG
|
|
+ FREG_S fa6, sp, 10*SZREG + 6*SZFREG
|
|
+ FREG_S fa7, sp, 10*SZREG + 7*SZFREG
|
|
+#endif
|
|
+
|
|
+ /* Update .got.plt and obtain runtime address of callee */
|
|
+#ifdef __loongarch_lp64
|
|
+ slli.d a1, t1, 1
|
|
+ or a0, t0, zero
|
|
+ add.d a1, a1, t1
|
|
+ la a2, _dl_fixup
|
|
+ jirl ra, a2, 0
|
|
+ or t1, v0, zero
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+ /* Restore arguments from stack. */
|
|
+ REG_L ra, sp, 9*SZREG
|
|
+ REG_L a0, sp, 1*SZREG
|
|
+ REG_L a1, sp, 2*SZREG
|
|
+ REG_L a2, sp, 3*SZREG
|
|
+ REG_L a3, sp, 4*SZREG
|
|
+ REG_L a4, sp, 5*SZREG
|
|
+ REG_L a5, sp, 6*SZREG
|
|
+ REG_L a6, sp, 7*SZREG
|
|
+ REG_L a7, sp, 8*SZREG
|
|
+
|
|
+#ifndef __loongarch_soft_float
|
|
+ FREG_L fa0, sp, 10*SZREG + 0*SZFREG
|
|
+ FREG_L fa1, sp, 10*SZREG + 1*SZFREG
|
|
+ FREG_L fa2, sp, 10*SZREG + 2*SZFREG
|
|
+ FREG_L fa3, sp, 10*SZREG + 3*SZFREG
|
|
+ FREG_L fa4, sp, 10*SZREG + 4*SZFREG
|
|
+ FREG_L fa5, sp, 10*SZREG + 5*SZFREG
|
|
+ FREG_L fa6, sp, 10*SZREG + 6*SZFREG
|
|
+ FREG_L fa7, sp, 10*SZREG + 7*SZFREG
|
|
+#endif
|
|
+
|
|
+#ifdef __loongarch_lp64
|
|
+ addi.d sp, sp, FRAME_SIZE
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+ /* Invoke the callee. */
|
|
+ jirl zero, t1, 0
|
|
+END (_dl_runtime_resolve)
|
|
diff --git a/sysdeps/loongarch/e_sqrtl.c b/sysdeps/loongarch/e_sqrtl.c
|
|
new file mode 100644
|
|
index 00000000..801af70b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/e_sqrtl.c
|
|
@@ -0,0 +1,39 @@
|
|
+/* long double square root in software floating-point emulation.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <stdlib.h>
|
|
+#include <soft-fp/soft-fp.h>
|
|
+#include <soft-fp/quad.h>
|
|
+#include <libm-alias-finite.h>
|
|
+
|
|
+long double
|
|
+__ieee754_sqrtl (const long double a)
|
|
+{
|
|
+ FP_DECL_EX;
|
|
+ FP_DECL_Q (A);
|
|
+ FP_DECL_Q (C);
|
|
+ long double c;
|
|
+
|
|
+ FP_INIT_ROUNDMODE;
|
|
+ FP_UNPACK_Q (A, a);
|
|
+ FP_SQRT_Q (C, A);
|
|
+ FP_PACK_Q (c, C);
|
|
+ FP_HANDLE_EXCEPTIONS;
|
|
+ return c;
|
|
+}
|
|
+libm_alias_finite (__ieee754_sqrtl, __sqrtl)
|
|
diff --git a/sysdeps/loongarch/fpu/fclrexcpt.c b/sysdeps/loongarch/fpu/fclrexcpt.c
|
|
new file mode 100644
|
|
index 00000000..6f77e9a3
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fclrexcpt.c
|
|
@@ -0,0 +1,46 @@
|
|
+/* Clear given exceptions in current floating-point environment.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fenv_libc.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+feclearexcept (int excepts)
|
|
+{
|
|
+ int cw;
|
|
+
|
|
+ /* Mask out unsupported bits/exceptions. */
|
|
+ excepts &= FE_ALL_EXCEPT;
|
|
+
|
|
+ /* Read the complete control word. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ /* Clear exception flag bits and cause bits. If the cause bit is not
|
|
+ cleared, the next CTC instruction (just below) will re-generate the
|
|
+ exception. */
|
|
+
|
|
+ cw &= ~(excepts | (excepts << CAUSE_SHIFT));
|
|
+
|
|
+ /* Put the new data in effect. */
|
|
+ _FPU_SETCW (cw);
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
+libm_hidden_def (feclearexcept)
|
|
diff --git a/sysdeps/loongarch/fpu/fedisblxcpt.c b/sysdeps/loongarch/fpu/fedisblxcpt.c
|
|
new file mode 100644
|
|
index 00000000..532274bc
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fedisblxcpt.c
|
|
@@ -0,0 +1,39 @@
|
|
+/* Disable floating-point exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fenv_libc.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fedisableexcept (int excepts)
|
|
+{
|
|
+ unsigned int new_exc, old_exc;
|
|
+
|
|
+ /* Get the current control word. */
|
|
+ _FPU_GETCW (new_exc);
|
|
+
|
|
+ old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT;
|
|
+
|
|
+ excepts &= FE_ALL_EXCEPT;
|
|
+
|
|
+ new_exc &= ~(excepts >> ENABLE_SHIFT);
|
|
+ _FPU_SETCW (new_exc);
|
|
+
|
|
+ return old_exc;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/feenablxcpt.c b/sysdeps/loongarch/fpu/feenablxcpt.c
|
|
new file mode 100644
|
|
index 00000000..565ebd4d
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/feenablxcpt.c
|
|
@@ -0,0 +1,39 @@
|
|
+/* Enable floating-point exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fenv_libc.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+feenableexcept (int excepts)
|
|
+{
|
|
+ unsigned int new_exc, old_exc;
|
|
+
|
|
+ /* Get the current control word. */
|
|
+ _FPU_GETCW (new_exc);
|
|
+
|
|
+ old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT;
|
|
+
|
|
+ excepts &= FE_ALL_EXCEPT;
|
|
+
|
|
+ new_exc |= excepts >> ENABLE_SHIFT;
|
|
+ _FPU_SETCW (new_exc);
|
|
+
|
|
+ return old_exc;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fegetenv.c b/sysdeps/loongarch/fpu/fegetenv.c
|
|
new file mode 100644
|
|
index 00000000..5e8c095f
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fegetenv.c
|
|
@@ -0,0 +1,31 @@
|
|
+/* Store current floating-point environment.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__fegetenv (fenv_t *envp)
|
|
+{
|
|
+ _FPU_GETCW (*envp);
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
+libm_hidden_def (__fegetenv) weak_alias (__fegetenv, fegetenv)
|
|
+libm_hidden_weak (fegetenv)
|
|
diff --git a/sysdeps/loongarch/fpu/fegetexcept.c b/sysdeps/loongarch/fpu/fegetexcept.c
|
|
new file mode 100644
|
|
index 00000000..782e9d80
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fegetexcept.c
|
|
@@ -0,0 +1,32 @@
|
|
+/* Get enabled floating-point exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fenv_libc.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fegetexcept (void)
|
|
+{
|
|
+ unsigned int exc;
|
|
+
|
|
+ /* Get the current control word. */
|
|
+ _FPU_GETCW (exc);
|
|
+
|
|
+ return (exc & ENABLE_MASK) << ENABLE_SHIFT;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fegetmode.c b/sysdeps/loongarch/fpu/fegetmode.c
|
|
new file mode 100644
|
|
index 00000000..f39c4c31
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fegetmode.c
|
|
@@ -0,0 +1,27 @@
|
|
+/* Store current floating-point control modes.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fegetmode (femode_t *modep)
|
|
+{
|
|
+ _FPU_GETCW (*modep);
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fegetround.c b/sysdeps/loongarch/fpu/fegetround.c
|
|
new file mode 100644
|
|
index 00000000..61a793a8
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fegetround.c
|
|
@@ -0,0 +1,33 @@
|
|
+/* Return current rounding direction.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__fegetround (void)
|
|
+{
|
|
+ int cw;
|
|
+
|
|
+ /* Get control word. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ return cw & _FPU_RC_MASK;
|
|
+}
|
|
+libm_hidden_def (__fegetround) weak_alias (__fegetround, fegetround)
|
|
+libm_hidden_weak (fegetround)
|
|
diff --git a/sysdeps/loongarch/fpu/feholdexcpt.c b/sysdeps/loongarch/fpu/feholdexcpt.c
|
|
new file mode 100644
|
|
index 00000000..59791ba9
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/feholdexcpt.c
|
|
@@ -0,0 +1,40 @@
|
|
+/* Store current floating-point environment and clear exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__feholdexcept (fenv_t *envp)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ /* Save the current state. */
|
|
+ _FPU_GETCW (cw);
|
|
+ envp->__fp_control_register = cw;
|
|
+
|
|
+ /* Clear all exception enable bits and flags. */
|
|
+ cw &= ~(_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I
|
|
+ | FE_ALL_EXCEPT);
|
|
+ _FPU_SETCW (cw);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+libm_hidden_def (__feholdexcept) weak_alias (__feholdexcept, feholdexcept)
|
|
+libm_hidden_weak (feholdexcept)
|
|
diff --git a/sysdeps/loongarch/fpu/fenv_libc.h b/sysdeps/loongarch/fpu/fenv_libc.h
|
|
new file mode 100644
|
|
index 00000000..60eedc93
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fenv_libc.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Internal libc stuff for floating point environment routines.
|
|
+ Copyright (C) 2021 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_LIBC_H
|
|
+#define _FENV_LIBC_H 1
|
|
+
|
|
+/* Mask for enabling exceptions and for the CAUSE bits. */
|
|
+#define ENABLE_MASK 0x0000001FU
|
|
+#define CAUSE_MASK 0x1F000000U
|
|
+
|
|
+/* Shift for FE_* flags to get up to the ENABLE bits and the CAUSE bits. */
|
|
+#define ENABLE_SHIFT 16
|
|
+#define CAUSE_SHIFT 8
|
|
+
|
|
+#endif /* _FENV_LIBC_H */
|
|
diff --git a/sysdeps/loongarch/fpu/fesetenv.c b/sysdeps/loongarch/fpu/fesetenv.c
|
|
new file mode 100644
|
|
index 00000000..2a73a17d
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fesetenv.c
|
|
@@ -0,0 +1,42 @@
|
|
+/* Install given floating-point environment.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__fesetenv (const fenv_t *envp)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ /* Read first current state to flush fpu pipeline. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ if (envp == FE_DFL_ENV)
|
|
+ _FPU_SETCW (_FPU_DEFAULT);
|
|
+ else if (envp == FE_NOMASK_ENV)
|
|
+ _FPU_SETCW (_FPU_IEEE);
|
|
+ else
|
|
+ _FPU_SETCW (envp->__fp_control_register);
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+libm_hidden_def (__fesetenv) weak_alias (__fesetenv, fesetenv)
|
|
+libm_hidden_weak (fesetenv)
|
|
diff --git a/sysdeps/loongarch/fpu/fesetexcept.c b/sysdeps/loongarch/fpu/fesetexcept.c
|
|
new file mode 100644
|
|
index 00000000..63c65e8f
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fesetexcept.c
|
|
@@ -0,0 +1,32 @@
|
|
+/* Set given exception flags.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fesetexcept (int excepts)
|
|
+{
|
|
+ fpu_control_t temp;
|
|
+
|
|
+ _FPU_GETCW (temp);
|
|
+ temp |= excepts & FE_ALL_EXCEPT;
|
|
+ _FPU_SETCW (temp);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fesetmode.c b/sysdeps/loongarch/fpu/fesetmode.c
|
|
new file mode 100644
|
|
index 00000000..8948876a
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fesetmode.c
|
|
@@ -0,0 +1,38 @@
|
|
+/* Install given floating-point control modes.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+#define FCSR_STATUS 0x1f1f0000
|
|
+
|
|
+int
|
|
+fesetmode (const femode_t *modep)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ _FPU_GETCW (cw);
|
|
+ cw &= FCSR_STATUS;
|
|
+ if (modep == FE_DFL_MODE)
|
|
+ cw |= _FPU_DEFAULT;
|
|
+ else
|
|
+ cw |= *modep & ~FCSR_STATUS;
|
|
+ _FPU_SETCW (cw);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fesetround.c b/sysdeps/loongarch/fpu/fesetround.c
|
|
new file mode 100644
|
|
index 00000000..dddac1cc
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fesetround.c
|
|
@@ -0,0 +1,44 @@
|
|
+/* Set current rounding direction.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__fesetround (int round)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ if ((round & ~_FPU_RC_MASK) != 0)
|
|
+ /* ROUND is no valid rounding mode. */
|
|
+ return 1;
|
|
+
|
|
+ /* Get current state. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ /* Set rounding bits. */
|
|
+ cw &= ~_FPU_RC_MASK;
|
|
+ cw |= round;
|
|
+ /* Set new state. */
|
|
+ _FPU_SETCW (cw);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+libm_hidden_def (__fesetround) weak_alias (__fesetround, fesetround)
|
|
+libm_hidden_weak (fesetround)
|
|
diff --git a/sysdeps/loongarch/fpu/feupdateenv.c b/sysdeps/loongarch/fpu/feupdateenv.c
|
|
new file mode 100644
|
|
index 00000000..ad147cbd
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/feupdateenv.c
|
|
@@ -0,0 +1,43 @@
|
|
+/* Install given floating-point environment and raise exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+__feupdateenv (const fenv_t *envp)
|
|
+{
|
|
+ int temp;
|
|
+
|
|
+ /* Save current exceptions. */
|
|
+ _FPU_GETCW (temp);
|
|
+ temp &= FE_ALL_EXCEPT;
|
|
+
|
|
+ /* Install new environment. */
|
|
+ __fesetenv (envp);
|
|
+
|
|
+ /* Raise the safed exception. Incidently for us the implementation
|
|
+ defined format of the values in objects of type fexcept_t is the
|
|
+ same as the ones specified using the FE_* constants. */
|
|
+ __feraiseexcept (temp);
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
+libm_hidden_def (__feupdateenv) weak_alias (__feupdateenv, feupdateenv)
|
|
+libm_hidden_weak (feupdateenv)
|
|
diff --git a/sysdeps/loongarch/fpu/fgetexcptflg.c b/sysdeps/loongarch/fpu/fgetexcptflg.c
|
|
new file mode 100644
|
|
index 00000000..85733765
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fgetexcptflg.c
|
|
@@ -0,0 +1,38 @@
|
|
+/* Store current representation for exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fegetexceptflag (fexcept_t *flagp, int excepts)
|
|
+{
|
|
+ fpu_control_t temp;
|
|
+
|
|
+ /* Get the current exceptions. */
|
|
+ _FPU_GETCW (temp);
|
|
+
|
|
+ /* We only save the relevant bits here. In particular, care has to be
|
|
+ taken with the CAUSE bits, as an inadvertent restore later on could
|
|
+ generate unexpected exceptions. */
|
|
+
|
|
+ *flagp = temp & excepts & FE_ALL_EXCEPT;
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/fraiseexcpt.c b/sysdeps/loongarch/fpu/fraiseexcpt.c
|
|
new file mode 100644
|
|
index 00000000..ac01dc70
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fraiseexcpt.c
|
|
@@ -0,0 +1,75 @@
|
|
+/* Raise given exceptions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+#include <float.h>
|
|
+
|
|
+int
|
|
+__feraiseexcept (int excepts)
|
|
+{
|
|
+ const float fp_zero = 0.0, fp_one = 1.0, fp_max = FLT_MAX, fp_min = FLT_MIN,
|
|
+ fp_1e32 = 1.0e32f, fp_two = 2.0, fp_three = 3.0;
|
|
+
|
|
+ /* Raise exceptions represented by EXPECTS. But we must raise only
|
|
+ one signal at a time. It is important that if the overflow/underflow
|
|
+ exception and the inexact exception are given at the same time,
|
|
+ the overflow/underflow exception follows the inexact exception. */
|
|
+
|
|
+ /* First: invalid exception. */
|
|
+ if (FE_INVALID & excepts)
|
|
+ __asm__ __volatile__("fdiv.s $f0,%0,%0\n\t"
|
|
+ :
|
|
+ : "f"(fp_zero)
|
|
+ : "$f0");
|
|
+
|
|
+ /* Next: division by zero. */
|
|
+ if (FE_DIVBYZERO & excepts)
|
|
+ __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t"
|
|
+ :
|
|
+ : "f"(fp_one), "f"(fp_zero)
|
|
+ : "$f0");
|
|
+
|
|
+ /* Next: overflow. */
|
|
+ if (FE_OVERFLOW & excepts)
|
|
+ /* There's no way to raise overflow without also raising inexact. */
|
|
+ __asm__ __volatile__("fadd.s $f0,%0,%1\n\t"
|
|
+ :
|
|
+ : "f"(fp_max), "f"(fp_1e32)
|
|
+ : "$f0");
|
|
+
|
|
+ /* Next: underflow. */
|
|
+ if (FE_UNDERFLOW & excepts)
|
|
+ __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t"
|
|
+ :
|
|
+ : "f"(fp_min), "f"(fp_three)
|
|
+ : "$f0");
|
|
+
|
|
+ /* Last: inexact. */
|
|
+ if (FE_INEXACT & excepts)
|
|
+ __asm__ __volatile__("fdiv.s $f0, %0, %1\n\t"
|
|
+ :
|
|
+ : "f"(fp_two), "f"(fp_three)
|
|
+ : "$f0");
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+libm_hidden_def (__feraiseexcept) weak_alias (__feraiseexcept, feraiseexcept)
|
|
+libm_hidden_weak (feraiseexcept)
|
|
diff --git a/sysdeps/loongarch/fpu/fsetexcptflg.c b/sysdeps/loongarch/fpu/fsetexcptflg.c
|
|
new file mode 100644
|
|
index 00000000..eef2faa6
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/fsetexcptflg.c
|
|
@@ -0,0 +1,41 @@
|
|
+/* Set floating-point environment exception handling.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fesetexceptflag (const fexcept_t *flagp, int excepts)
|
|
+{
|
|
+ fpu_control_t temp;
|
|
+
|
|
+ /* Get the current exceptions. */
|
|
+ _FPU_GETCW (temp);
|
|
+
|
|
+ /* Make sure the flags we want restored are legal. */
|
|
+ excepts &= FE_ALL_EXCEPT;
|
|
+
|
|
+ /* Now clear the bits called for, and copy them in from flagp. Note that
|
|
+ we ignore all non-flag bits from *flagp, so they don't matter. */
|
|
+ temp = (temp & ~excepts) | (*flagp & excepts);
|
|
+
|
|
+ _FPU_SETCW (temp);
|
|
+
|
|
+ /* Success. */
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/fpu/ftestexcept.c b/sysdeps/loongarch/fpu/ftestexcept.c
|
|
new file mode 100644
|
|
index 00000000..3abd75ee
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/ftestexcept.c
|
|
@@ -0,0 +1,32 @@
|
|
+/* Test exception in current environment.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+int
|
|
+fetestexcept (int excepts)
|
|
+{
|
|
+ int cw;
|
|
+
|
|
+ /* Get current control word. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ return cw & excepts & FE_ALL_EXCEPT;
|
|
+}
|
|
+libm_hidden_def (fetestexcept)
|
|
diff --git a/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h
|
|
new file mode 100644
|
|
index 00000000..e94c915b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h
|
|
@@ -0,0 +1,4 @@
|
|
+#define USE_SQRT_BUILTIN 1
|
|
+#define USE_SQRTF_BUILTIN 1
|
|
+#define USE_SQRTL_BUILTIN 0
|
|
+#define USE_SQRTF128_BUILTIN 0
|
|
diff --git a/sysdeps/loongarch/fpu_control.h b/sysdeps/loongarch/fpu_control.h
|
|
new file mode 100644
|
|
index 00000000..d26e27ab
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/fpu_control.h
|
|
@@ -0,0 +1,102 @@
|
|
+/* FPU control word bits.
|
|
+ Copyright (C) 2021 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,$r0" : "=r"(cw))
|
|
+#define _FPU_SETCW(cw) __asm__ volatile("movgr2fcsr $r0,%0" : : "r"(cw))
|
|
+
|
|
+/* Default control word set at startup. */
|
|
+extern fpu_control_t __fpu_control;
|
|
+
|
|
+#endif /* __loongarch_soft_float */
|
|
+
|
|
+#endif /* fpu_control.h */
|
|
diff --git a/sysdeps/loongarch/gccframe.h b/sysdeps/loongarch/gccframe.h
|
|
new file mode 100644
|
|
index 00000000..19996f3c
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/gccframe.h
|
|
@@ -0,0 +1,21 @@
|
|
+/* Definition of object in frame unwind info.
|
|
+ Copyright (C) 2021 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 FIRST_PSEUDO_REGISTER 74
|
|
+
|
|
+#include <sysdeps/generic/gccframe.h>
|
|
diff --git a/sysdeps/loongarch/hp-timing.h b/sysdeps/loongarch/hp-timing.h
|
|
new file mode 100644
|
|
index 00000000..7b36a539
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/hp-timing.h
|
|
@@ -0,0 +1,42 @@
|
|
+/* High precision, low overhead timing functions.
|
|
+ Copyright (C) 2021 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 _HP_TIMING_H
|
|
+#define _HP_TIMING_H 1
|
|
+
|
|
+/* We always assume having the timestamp register. */
|
|
+#define HP_TIMING_AVAIL (1)
|
|
+#define HP_SMALL_TIMING_AVAIL (1)
|
|
+
|
|
+/* We indeed have inlined functions. */
|
|
+#define HP_TIMING_INLINE (1)
|
|
+
|
|
+/* We use 64bit values for the times. */
|
|
+typedef unsigned long long int hp_timing_t;
|
|
+
|
|
+/* Read the stable counter. */
|
|
+#define HP_TIMING_NOW(Var) \
|
|
+ ({ \
|
|
+ unsigned long long int _count; \
|
|
+ asm volatile("rdtime.d\t%0,$r0" : "=r"(_count)); \
|
|
+ (Var) = _count; \
|
|
+ })
|
|
+
|
|
+#include <hp-timing-common.h>
|
|
+
|
|
+#endif /* hp-timing.h */
|
|
diff --git a/sysdeps/loongarch/jmpbuf-offsets.h b/sysdeps/loongarch/jmpbuf-offsets.h
|
|
new file mode 100644
|
|
index 00000000..4df42dfa
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/jmpbuf-offsets.h
|
|
@@ -0,0 +1,22 @@
|
|
+/* Private macros for accessing __jmp_buf contents.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <jmpbuf-unwind.h>
|
|
+
|
|
+/* Helper for generic ____longjmp_chk(). */
|
|
+#define JB_FRAME_ADDRESS(buf) ((void *) _jmpbuf_sp (buf))
|
|
diff --git a/sysdeps/loongarch/jmpbuf-unwind.h b/sysdeps/loongarch/jmpbuf-unwind.h
|
|
new file mode 100644
|
|
index 00000000..a37bef1d
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/jmpbuf-unwind.h
|
|
@@ -0,0 +1,45 @@
|
|
+/* Examine __jmp_buf for unwinding frames.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <setjmp.h>
|
|
+#include <stdint.h>
|
|
+#include <unwind.h>
|
|
+#include <sysdep.h>
|
|
+
|
|
+/* Test if longjmp to JMPBUF would unwind the frame
|
|
+ containing a local variable at ADDRESS. */
|
|
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
|
+ ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
|
|
+
|
|
+#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
|
+ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
|
+
|
|
+static inline uintptr_t __attribute__ ((unused)) _jmpbuf_sp (__jmp_buf regs)
|
|
+{
|
|
+ uintptr_t sp = regs[0].__sp;
|
|
+#ifdef PTR_DEMANGLE
|
|
+ PTR_DEMANGLE (sp);
|
|
+#endif
|
|
+ return sp;
|
|
+}
|
|
+
|
|
+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
|
+ ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
|
+
|
|
+/* We use the normal longjmp for unwinding. */
|
|
+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
|
diff --git a/sysdeps/loongarch/ldsodefs.h b/sysdeps/loongarch/ldsodefs.h
|
|
new file mode 100644
|
|
index 00000000..ec91f640
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/ldsodefs.h
|
|
@@ -0,0 +1,41 @@
|
|
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
|
+ Copyright (C) 2021 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_LDSODEFS_H
|
|
+#define _LOONGARCH_LDSODEFS_H 1
|
|
+
|
|
+#include <elf.h>
|
|
+
|
|
+struct La_loongarch_regs;
|
|
+struct La_loongarch_retval;
|
|
+
|
|
+#define ARCH_PLTENTER_MEMBERS \
|
|
+ ElfW (Addr) (*loongarch_gnu_pltenter) (ElfW (Sym) *, unsigned int, \
|
|
+ uintptr_t *, uintptr_t *, \
|
|
+ const struct La_loongarch_regs *, \
|
|
+ unsigned int *, const char *name, \
|
|
+ long int *framesizep);
|
|
+
|
|
+#define ARCH_PLTEXIT_MEMBERS \
|
|
+ unsigned int (*loongarch_gnu_pltexit) (ElfW (Sym) *, unsigned int, \
|
|
+ uintptr_t *, uintptr_t *, const struct La_loongarch_regs *, \
|
|
+ struct La_loongarch_retval *, const char *);
|
|
+
|
|
+#include_next <ldsodefs.h>
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/libc-start.h b/sysdeps/loongarch/libc-start.h
|
|
new file mode 100644
|
|
index 00000000..961d0b4d
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/libc-start.h
|
|
@@ -0,0 +1,25 @@
|
|
+/* LoongArch definitions for libc main startup.
|
|
+ Copyright (C) 2021 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 SHARED
|
|
+#define ARCH_SETUP_IREL()
|
|
+#define ARCH_APPLY_IREL() apply_irel ()
|
|
+#ifndef ARCH_SETUP_TLS
|
|
+#define ARCH_SETUP_TLS() __libc_setup_tls ()
|
|
+#endif
|
|
+#endif /* !SHARED */
|
|
diff --git a/sysdeps/loongarch/libc-tls.c b/sysdeps/loongarch/libc-tls.c
|
|
new file mode 100644
|
|
index 00000000..32e303ec
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/libc-tls.c
|
|
@@ -0,0 +1,32 @@
|
|
+/* Thread-local storage handling in the ELF dynamic linker.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <csu/libc-tls.c>
|
|
+#include <dl-tls.h>
|
|
+
|
|
+/* On LoongArch, linker optimizations are not required, so __tls_get_addr
|
|
+ can be called even in statically linked binaries. In this case module
|
|
+ must be always 1 and PT_TLS segment exist in the binary, otherwise it
|
|
+ would not link. */
|
|
+
|
|
+void *
|
|
+__tls_get_addr (tls_index *ti)
|
|
+{
|
|
+ dtv_t *dtv = THREAD_DTV ();
|
|
+ return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/linkmap.h b/sysdeps/loongarch/linkmap.h
|
|
new file mode 100644
|
|
index 00000000..f88ce501
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/linkmap.h
|
|
@@ -0,0 +1,4 @@
|
|
+struct link_map_machine
|
|
+{
|
|
+ ElfW (Addr) plt; /* Address of .plt. */
|
|
+};
|
|
diff --git a/sysdeps/loongarch/lp64/Implies-after b/sysdeps/loongarch/lp64/Implies-after
|
|
new file mode 100644
|
|
index 00000000..a8cae95f
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/lp64/Implies-after
|
|
@@ -0,0 +1 @@
|
|
+wordsize-64
|
|
diff --git a/sysdeps/loongarch/lp64/libm-test-ulps b/sysdeps/loongarch/lp64/libm-test-ulps
|
|
new file mode 100644
|
|
index 00000000..d0dfd076
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/lp64/libm-test-ulps
|
|
@@ -0,0 +1,1411 @@
|
|
+# Begin of automatic generation
|
|
+
|
|
+# Maximal error of functions:
|
|
+Function: "acos":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "acos_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "acos_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "acos_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "acosh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "acosh_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "acosh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "acosh_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "asin":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "asin_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "asin_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "asin_upward":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "asinh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "asinh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "asinh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "asinh_upward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "atan":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "atan2":
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atan2_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atan2_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "atan2_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atan_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atan_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "atan_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atanh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "atanh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "atanh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "atanh_upward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "cabs":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cabs_downward":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cabs_towardzero":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cabs_upward":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "cacos":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "cacos":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cacos_downward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "cacos_downward":
|
|
+double: 5
|
|
+float: 3
|
|
+ldouble: 6
|
|
+
|
|
+Function: Real part of "cacos_towardzero":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "cacos_towardzero":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Real part of "cacos_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "cacos_upward":
|
|
+double: 5
|
|
+float: 5
|
|
+ldouble: 7
|
|
+
|
|
+Function: Real part of "cacosh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "cacosh":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cacosh_downward":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "cacosh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: Real part of "cacosh_towardzero":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "cacosh_towardzero":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "cacosh_upward":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 6
|
|
+
|
|
+Function: Imaginary part of "cacosh_upward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "carg":
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "carg_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "carg_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "carg_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "casin":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "casin":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "casin_downward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "casin_downward":
|
|
+double: 5
|
|
+float: 3
|
|
+ldouble: 6
|
|
+
|
|
+Function: Real part of "casin_towardzero":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "casin_towardzero":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Real part of "casin_upward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "casin_upward":
|
|
+double: 5
|
|
+float: 5
|
|
+ldouble: 7
|
|
+
|
|
+Function: Real part of "casinh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "casinh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "casinh_downward":
|
|
+double: 5
|
|
+float: 3
|
|
+ldouble: 6
|
|
+
|
|
+Function: Imaginary part of "casinh_downward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "casinh_towardzero":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "casinh_towardzero":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "casinh_upward":
|
|
+double: 5
|
|
+float: 5
|
|
+ldouble: 7
|
|
+
|
|
+Function: Imaginary part of "casinh_upward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "catan":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "catan":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "catan_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "catan_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "catan_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "catan_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "catan_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "catan_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "catanh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "catanh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "catanh_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "catanh_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "catanh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "catanh_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "catanh_upward":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "catanh_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "cbrt":
|
|
+double: 4
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cbrt_downward":
|
|
+double: 4
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cbrt_towardzero":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cbrt_upward":
|
|
+double: 5
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "ccos":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "ccos":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "ccos_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "ccos_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "ccos_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "ccos_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "ccos_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "ccos_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "ccosh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "ccosh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "ccosh_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "ccosh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "ccosh_towardzero":
|
|
+double: 2
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "ccosh_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "ccosh_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "ccosh_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cexp":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "cexp":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "cexp_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "cexp_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cexp_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "cexp_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cexp_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "cexp_upward":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "clog":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "clog":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "clog10":
|
|
+double: 3
|
|
+float: 4
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "clog10":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "clog10_downward":
|
|
+double: 5
|
|
+float: 5
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "clog10_downward":
|
|
+double: 2
|
|
+float: 4
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "clog10_towardzero":
|
|
+double: 5
|
|
+float: 6
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "clog10_towardzero":
|
|
+double: 2
|
|
+float: 4
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "clog10_upward":
|
|
+double: 6
|
|
+float: 5
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "clog10_upward":
|
|
+double: 2
|
|
+float: 4
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "clog_downward":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "clog_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "clog_towardzero":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "clog_towardzero":
|
|
+double: 1
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "clog_upward":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "clog_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "cos":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "cos_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "cos_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "cos_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "cosh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "cosh_downward":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "cosh_towardzero":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "cosh_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "cpow":
|
|
+double: 2
|
|
+float: 5
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "cpow":
|
|
+float: 2
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "cpow_downward":
|
|
+double: 5
|
|
+float: 8
|
|
+ldouble: 6
|
|
+
|
|
+Function: Imaginary part of "cpow_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cpow_towardzero":
|
|
+double: 5
|
|
+float: 8
|
|
+ldouble: 6
|
|
+
|
|
+Function: Imaginary part of "cpow_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "cpow_upward":
|
|
+double: 4
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "cpow_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csin":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "csin":
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "csin_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csin_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csin_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csin_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csin_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csin_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "csinh":
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Imaginary part of "csinh":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: Real part of "csinh_downward":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csinh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csinh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csinh_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csinh_upward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "csinh_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csqrt":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Imaginary part of "csqrt":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: Real part of "csqrt_downward":
|
|
+double: 5
|
|
+float: 4
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "csqrt_downward":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "csqrt_towardzero":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "csqrt_towardzero":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "csqrt_upward":
|
|
+double: 5
|
|
+float: 4
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "csqrt_upward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "ctan":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "ctan":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "ctan_downward":
|
|
+double: 6
|
|
+float: 5
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "ctan_downward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Real part of "ctan_towardzero":
|
|
+double: 5
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: Imaginary part of "ctan_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Real part of "ctan_upward":
|
|
+double: 2
|
|
+float: 4
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "ctan_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Real part of "ctanh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Imaginary part of "ctanh":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "ctanh_downward":
|
|
+double: 4
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "ctanh_downward":
|
|
+double: 6
|
|
+float: 5
|
|
+ldouble: 4
|
|
+
|
|
+Function: Real part of "ctanh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "ctanh_towardzero":
|
|
+double: 5
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: Real part of "ctanh_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 5
|
|
+
|
|
+Function: Imaginary part of "ctanh_upward":
|
|
+double: 2
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "erf":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "erf_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "erf_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "erf_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "erfc":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "erfc_downward":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 5
|
|
+
|
|
+Function: "erfc_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "erfc_upward":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 5
|
|
+
|
|
+Function: "exp":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "exp10":
|
|
+double: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "exp10_downward":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "exp10_towardzero":
|
|
+double: 3
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "exp10_upward":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "exp2":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "exp2_downward":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "exp2_towardzero":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "exp2_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "exp_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+
|
|
+Function: "exp_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+
|
|
+Function: "exp_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+
|
|
+Function: "expm1":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "expm1_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "expm1_towardzero":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 4
|
|
+
|
|
+Function: "expm1_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "gamma":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "gamma_downward":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 8
|
|
+
|
|
+Function: "gamma_towardzero":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "gamma_upward":
|
|
+double: 4
|
|
+float: 5
|
|
+ldouble: 8
|
|
+
|
|
+Function: "hypot":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "hypot_downward":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "hypot_towardzero":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "hypot_upward":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "j0":
|
|
+double: 3
|
|
+float: 9
|
|
+ldouble: 2
|
|
+
|
|
+Function: "j0_downward":
|
|
+double: 6
|
|
+float: 9
|
|
+ldouble: 9
|
|
+
|
|
+Function: "j0_towardzero":
|
|
+double: 7
|
|
+float: 9
|
|
+ldouble: 9
|
|
+
|
|
+Function: "j0_upward":
|
|
+double: 9
|
|
+float: 9
|
|
+ldouble: 7
|
|
+
|
|
+Function: "j1":
|
|
+double: 4
|
|
+float: 9
|
|
+ldouble: 4
|
|
+
|
|
+Function: "j1_downward":
|
|
+double: 3
|
|
+float: 8
|
|
+ldouble: 4
|
|
+
|
|
+Function: "j1_towardzero":
|
|
+double: 4
|
|
+float: 8
|
|
+ldouble: 4
|
|
+
|
|
+Function: "j1_upward":
|
|
+double: 9
|
|
+float: 9
|
|
+ldouble: 3
|
|
+
|
|
+Function: "jn":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 7
|
|
+
|
|
+Function: "jn_downward":
|
|
+double: 4
|
|
+float: 5
|
|
+ldouble: 8
|
|
+
|
|
+Function: "jn_towardzero":
|
|
+double: 4
|
|
+float: 5
|
|
+ldouble: 8
|
|
+
|
|
+Function: "jn_upward":
|
|
+double: 5
|
|
+float: 4
|
|
+ldouble: 7
|
|
+
|
|
+Function: "lgamma":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "lgamma_downward":
|
|
+double: 4
|
|
+float: 4
|
|
+ldouble: 8
|
|
+
|
|
+Function: "lgamma_towardzero":
|
|
+double: 4
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "lgamma_upward":
|
|
+double: 4
|
|
+float: 5
|
|
+ldouble: 8
|
|
+
|
|
+Function: "log":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log10":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "log10_downward":
|
|
+double: 2
|
|
+float: 3
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log10_towardzero":
|
|
+double: 2
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log10_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log1p":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "log1p_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "log1p_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "log1p_upward":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "log2":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "log2_downward":
|
|
+double: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: "log2_towardzero":
|
|
+double: 2
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log2_upward":
|
|
+double: 3
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log_downward":
|
|
+ldouble: 1
|
|
+
|
|
+Function: "log_towardzero":
|
|
+ldouble: 2
|
|
+
|
|
+Function: "log_upward":
|
|
+double: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "pow":
|
|
+double: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "pow_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "pow_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "pow_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "sin":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "sin_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sin_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "sin_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sincos":
|
|
+double: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "sincos_downward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sincos_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 2
|
|
+
|
|
+Function: "sincos_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sinh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "sinh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sinh_towardzero":
|
|
+double: 3
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "sinh_upward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "tan":
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "tan_downward":
|
|
+double: 1
|
|
+float: 2
|
|
+ldouble: 1
|
|
+
|
|
+Function: "tan_towardzero":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "tan_upward":
|
|
+double: 1
|
|
+float: 1
|
|
+ldouble: 1
|
|
+
|
|
+Function: "tanh":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 2
|
|
+
|
|
+Function: "tanh_downward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 4
|
|
+
|
|
+Function: "tanh_towardzero":
|
|
+double: 2
|
|
+float: 2
|
|
+ldouble: 3
|
|
+
|
|
+Function: "tanh_upward":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 3
|
|
+
|
|
+Function: "tgamma":
|
|
+double: 9
|
|
+float: 8
|
|
+ldouble: 4
|
|
+
|
|
+Function: "tgamma_downward":
|
|
+double: 9
|
|
+float: 7
|
|
+ldouble: 5
|
|
+
|
|
+Function: "tgamma_towardzero":
|
|
+double: 9
|
|
+float: 7
|
|
+ldouble: 5
|
|
+
|
|
+Function: "tgamma_upward":
|
|
+double: 9
|
|
+float: 8
|
|
+ldouble: 4
|
|
+
|
|
+Function: "y0":
|
|
+double: 2
|
|
+float: 8
|
|
+ldouble: 3
|
|
+
|
|
+Function: "y0_downward":
|
|
+double: 3
|
|
+float: 8
|
|
+ldouble: 7
|
|
+
|
|
+Function: "y0_towardzero":
|
|
+double: 3
|
|
+float: 8
|
|
+ldouble: 3
|
|
+
|
|
+Function: "y0_upward":
|
|
+double: 2
|
|
+float: 8
|
|
+ldouble: 4
|
|
+
|
|
+Function: "y1":
|
|
+double: 3
|
|
+float: 9
|
|
+ldouble: 5
|
|
+
|
|
+Function: "y1_downward":
|
|
+double: 6
|
|
+float: 8
|
|
+ldouble: 5
|
|
+
|
|
+Function: "y1_towardzero":
|
|
+double: 3
|
|
+float: 9
|
|
+ldouble: 2
|
|
+
|
|
+Function: "y1_upward":
|
|
+double: 6
|
|
+float: 9
|
|
+ldouble: 5
|
|
+
|
|
+Function: "yn":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "yn_downward":
|
|
+double: 3
|
|
+float: 4
|
|
+ldouble: 5
|
|
+
|
|
+Function: "yn_towardzero":
|
|
+double: 3
|
|
+float: 3
|
|
+ldouble: 5
|
|
+
|
|
+Function: "yn_upward":
|
|
+double: 4
|
|
+float: 5
|
|
+ldouble: 5
|
|
+
|
|
+# end of automatic generation
|
|
diff --git a/sysdeps/loongarch/lp64/libm-test-ulps-name b/sysdeps/loongarch/lp64/libm-test-ulps-name
|
|
new file mode 100644
|
|
index 00000000..ce02281e
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/lp64/libm-test-ulps-name
|
|
@@ -0,0 +1 @@
|
|
+LoongArch 64-bit
|
|
diff --git a/sysdeps/loongarch/machine-gmon.h b/sysdeps/loongarch/machine-gmon.h
|
|
new file mode 100644
|
|
index 00000000..d330fd6e
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/machine-gmon.h
|
|
@@ -0,0 +1,37 @@
|
|
+/* LoongArch definitions for profiling support.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* Accept 'frompc' address as argument from the function that calls
|
|
+ _mcount for profiling. Use __builtin_return_address (0)
|
|
+ for the 'selfpc' address. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+
|
|
+static void mcount_internal (unsigned long int frompc,
|
|
+ unsigned long int selfpc);
|
|
+
|
|
+#define _MCOUNT_DECL(frompc, selfpc) \
|
|
+ static inline void mcount_internal (unsigned long int frompc, \
|
|
+ unsigned long int selfpc)
|
|
+
|
|
+#define MCOUNT \
|
|
+ void _mcount (void *frompc) \
|
|
+ { \
|
|
+ mcount_internal ((unsigned long int) frompc, \
|
|
+ (unsigned long int) RETURN_ADDRESS (0)); \
|
|
+ }
|
|
diff --git a/sysdeps/loongarch/math_private.h b/sysdeps/loongarch/math_private.h
|
|
new file mode 100644
|
|
index 00000000..5665624b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/math_private.h
|
|
@@ -0,0 +1,248 @@
|
|
+/* Internal math stuff.
|
|
+ Copyright (C) 2021 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_MATH_PRIVATE_H
|
|
+#define LOONGARCH_MATH_PRIVATE_H 1
|
|
+
|
|
+/* Inline functions to speed up the math library implementation. The
|
|
+ default versions of these routines are in generic/math_private.h
|
|
+ and call fesetround, feholdexcept, etc. These routines use inlined
|
|
+ code instead. */
|
|
+
|
|
+#ifdef __loongarch_hard_float
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fenv_libc.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+#define _FPU_MASK_ALL \
|
|
+ (_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I \
|
|
+ | FE_ALL_EXCEPT)
|
|
+
|
|
+static __always_inline void
|
|
+libc_feholdexcept_loongarch (fenv_t *envp)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ /* Save the current state. */
|
|
+ _FPU_GETCW (cw);
|
|
+ envp->__fp_control_register = cw;
|
|
+
|
|
+ /* Clear all exception enable bits and flags. */
|
|
+ cw &= ~(_FPU_MASK_ALL);
|
|
+ _FPU_SETCW (cw);
|
|
+}
|
|
+#define libc_feholdexcept libc_feholdexcept_loongarch
|
|
+#define libc_feholdexceptf libc_feholdexcept_loongarch
|
|
+#define libc_feholdexceptl libc_feholdexcept_loongarch
|
|
+
|
|
+static __always_inline void
|
|
+libc_fesetround_loongarch (int round)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ /* Get current state. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ /* Set rounding bits. */
|
|
+ cw &= ~_FPU_RC_MASK;
|
|
+ cw |= round;
|
|
+
|
|
+ /* Set new state. */
|
|
+ _FPU_SETCW (cw);
|
|
+}
|
|
+#define libc_fesetround libc_fesetround_loongarch
|
|
+#define libc_fesetroundf libc_fesetround_loongarch
|
|
+#define libc_fesetroundl libc_fesetround_loongarch
|
|
+
|
|
+static __always_inline void
|
|
+libc_feholdexcept_setround_loongarch (fenv_t *envp, int round)
|
|
+{
|
|
+ fpu_control_t cw;
|
|
+
|
|
+ /* Save the current state. */
|
|
+ _FPU_GETCW (cw);
|
|
+ envp->__fp_control_register = cw;
|
|
+
|
|
+ /* Clear all exception enable bits and flags. */
|
|
+ cw &= ~(_FPU_MASK_ALL);
|
|
+
|
|
+ /* Set rounding bits. */
|
|
+ cw &= ~_FPU_RC_MASK;
|
|
+ cw |= round;
|
|
+
|
|
+ /* Set new state. */
|
|
+ _FPU_SETCW (cw);
|
|
+}
|
|
+#define libc_feholdexcept_setround libc_feholdexcept_setround_loongarch
|
|
+#define libc_feholdexcept_setroundf libc_feholdexcept_setround_loongarch
|
|
+#define libc_feholdexcept_setroundl libc_feholdexcept_setround_loongarch
|
|
+
|
|
+#define libc_feholdsetround libc_feholdexcept_setround_loongarch
|
|
+#define libc_feholdsetroundf libc_feholdexcept_setround_loongarch
|
|
+#define libc_feholdsetroundl libc_feholdexcept_setround_loongarch
|
|
+
|
|
+static __always_inline void
|
|
+libc_fesetenv_loongarch (fenv_t *envp)
|
|
+{
|
|
+ fpu_control_t cw __attribute__ ((unused));
|
|
+
|
|
+ /* Read current state to flush fpu pipeline. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ _FPU_SETCW (envp->__fp_control_register);
|
|
+}
|
|
+#define libc_fesetenv libc_fesetenv_loongarch
|
|
+#define libc_fesetenvf libc_fesetenv_loongarch
|
|
+#define libc_fesetenvl libc_fesetenv_loongarch
|
|
+
|
|
+static __always_inline int
|
|
+libc_feupdateenv_test_loongarch (fenv_t *envp, int excepts)
|
|
+{
|
|
+ /* int ret = fetestexcept (excepts); feupdateenv (envp); return ret; */
|
|
+ int cw, temp;
|
|
+
|
|
+ /* Get current control word. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ /* Set flag bits (which are accumulative), and *also* set the
|
|
+ cause bits. The setting of the cause bits is what actually causes
|
|
+ the hardware to generate the exception, if the corresponding enable
|
|
+ bit is set as well. */
|
|
+ temp = cw & FE_ALL_EXCEPT;
|
|
+ temp |= envp->__fp_control_register | (temp << CAUSE_SHIFT);
|
|
+
|
|
+ /* Set new state. */
|
|
+ _FPU_SETCW (temp);
|
|
+
|
|
+ return cw & excepts & FE_ALL_EXCEPT;
|
|
+}
|
|
+#define libc_feupdateenv_test libc_feupdateenv_test_loongarch
|
|
+#define libc_feupdateenv_testf libc_feupdateenv_test_loongarch
|
|
+#define libc_feupdateenv_testl libc_feupdateenv_test_loongarch
|
|
+
|
|
+static __always_inline void
|
|
+libc_feupdateenv_loongarch (fenv_t *envp)
|
|
+{
|
|
+ libc_feupdateenv_test_loongarch (envp, 0);
|
|
+}
|
|
+#define libc_feupdateenv libc_feupdateenv_loongarch
|
|
+#define libc_feupdateenvf libc_feupdateenv_loongarch
|
|
+#define libc_feupdateenvl libc_feupdateenv_loongarch
|
|
+
|
|
+#define libc_feresetround libc_feupdateenv_loongarch
|
|
+#define libc_feresetroundf libc_feupdateenv_loongarch
|
|
+#define libc_feresetroundl libc_feupdateenv_loongarch
|
|
+
|
|
+static __always_inline int
|
|
+libc_fetestexcept_loongarch (int excepts)
|
|
+{
|
|
+ int cw;
|
|
+
|
|
+ /* Get current control word. */
|
|
+ _FPU_GETCW (cw);
|
|
+
|
|
+ return cw & excepts & FE_ALL_EXCEPT;
|
|
+}
|
|
+#define libc_fetestexcept libc_fetestexcept_loongarch
|
|
+#define libc_fetestexceptf libc_fetestexcept_loongarch
|
|
+#define libc_fetestexceptl libc_fetestexcept_loongarch
|
|
+
|
|
+/* Enable support for rounding mode context. */
|
|
+#define HAVE_RM_CTX 1
|
|
+
|
|
+static __always_inline void
|
|
+libc_feholdexcept_setround_loongarch_ctx (struct rm_ctx *ctx, int round)
|
|
+{
|
|
+ fpu_control_t old, new;
|
|
+
|
|
+ /* Save the current state. */
|
|
+ _FPU_GETCW (old);
|
|
+ ctx->env.__fp_control_register = old;
|
|
+
|
|
+ /* Clear all exception enable bits and flags. */
|
|
+ new = old & ~(_FPU_MASK_ALL);
|
|
+
|
|
+ /* Set rounding bits. */
|
|
+ new = (new & ~_FPU_RC_MASK) | round;
|
|
+
|
|
+ if (__glibc_unlikely (new != old))
|
|
+ {
|
|
+ _FPU_SETCW (new);
|
|
+ ctx->updated_status = true;
|
|
+ }
|
|
+ else
|
|
+ ctx->updated_status = false;
|
|
+}
|
|
+#define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_loongarch_ctx
|
|
+#define libc_feholdexcept_setroundf_ctx \
|
|
+ libc_feholdexcept_setround_loongarch_ctx
|
|
+#define libc_feholdexcept_setroundl_ctx \
|
|
+ libc_feholdexcept_setround_loongarch_ctx
|
|
+
|
|
+static __always_inline void
|
|
+libc_fesetenv_loongarch_ctx (struct rm_ctx *ctx)
|
|
+{
|
|
+ libc_fesetenv_loongarch (&ctx->env);
|
|
+}
|
|
+#define libc_fesetenv_ctx libc_fesetenv_loongarch_ctx
|
|
+#define libc_fesetenvf_ctx libc_fesetenv_loongarch_ctx
|
|
+#define libc_fesetenvl_ctx libc_fesetenv_loongarch_ctx
|
|
+
|
|
+static __always_inline void
|
|
+libc_feupdateenv_loongarch_ctx (struct rm_ctx *ctx)
|
|
+{
|
|
+ if (__glibc_unlikely (ctx->updated_status))
|
|
+ libc_feupdateenv_test_loongarch (&ctx->env, 0);
|
|
+}
|
|
+#define libc_feupdateenv_ctx libc_feupdateenv_loongarch_ctx
|
|
+#define libc_feupdateenvf_ctx libc_feupdateenv_loongarch_ctx
|
|
+#define libc_feupdateenvl_ctx libc_feupdateenv_loongarch_ctx
|
|
+#define libc_feresetround_ctx libc_feupdateenv_loongarch_ctx
|
|
+#define libc_feresetroundf_ctx libc_feupdateenv_loongarch_ctx
|
|
+#define libc_feresetroundl_ctx libc_feupdateenv_loongarch_ctx
|
|
+
|
|
+static __always_inline void
|
|
+libc_feholdsetround_loongarch_ctx (struct rm_ctx *ctx, int round)
|
|
+{
|
|
+ fpu_control_t old, new;
|
|
+
|
|
+ /* Save the current state. */
|
|
+ _FPU_GETCW (old);
|
|
+ ctx->env.__fp_control_register = old;
|
|
+
|
|
+ /* Set rounding bits. */
|
|
+ new = (old & ~_FPU_RC_MASK) | round;
|
|
+
|
|
+ if (__glibc_unlikely (new != old))
|
|
+ {
|
|
+ _FPU_SETCW (new);
|
|
+ ctx->updated_status = true;
|
|
+ }
|
|
+ else
|
|
+ ctx->updated_status = false;
|
|
+}
|
|
+#define libc_feholdsetround_ctx libc_feholdsetround_loongarch_ctx
|
|
+#define libc_feholdsetroundf_ctx libc_feholdsetround_loongarch_ctx
|
|
+#define libc_feholdsetroundl_ctx libc_feholdsetround_loongarch_ctx
|
|
+
|
|
+#endif
|
|
+
|
|
+#include_next <math_private.h>
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/memusage.h b/sysdeps/loongarch/memusage.h
|
|
new file mode 100644
|
|
index 00000000..bdf24bb2
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/memusage.h
|
|
@@ -0,0 +1,25 @@
|
|
+/* Machine-specific definitions for memory usage profiling.
|
|
+ Copyright (C) 2021 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 GETSP() \
|
|
+ ({ \
|
|
+ register uintptr_t stack_ptr asm("$sp"); \
|
|
+ stack_ptr; \
|
|
+ })
|
|
+
|
|
+#include <sysdeps/generic/memusage.h>
|
|
diff --git a/sysdeps/loongarch/nptl/Makefile b/sysdeps/loongarch/nptl/Makefile
|
|
new file mode 100644
|
|
index 00000000..86d57110
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/Makefile
|
|
@@ -0,0 +1,21 @@
|
|
+# Makefile for sysdeps/loongarch/nptl.
|
|
+# Copyright (C) 2021 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/>.
|
|
+
|
|
+ifeq ($(subdir),csu)
|
|
+gen-as-const-headers += tcb-offsets.sym
|
|
+endif
|
|
diff --git a/sysdeps/loongarch/nptl/bits/pthreadtypes-arch.h b/sysdeps/loongarch/nptl/bits/pthreadtypes-arch.h
|
|
new file mode 100644
|
|
index 00000000..e57f122a
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/bits/pthreadtypes-arch.h
|
|
@@ -0,0 +1,41 @@
|
|
+/* Machine-specific pthread type layouts.
|
|
+ Copyright (C) 2021 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_PTHREADTYPES_ARCH_H
|
|
+#define _BITS_PTHREADTYPES_ARCH_H 1
|
|
+
|
|
+#include <bits/endian.h>
|
|
+
|
|
+#ifdef __loongarch_lp64
|
|
+#define __SIZEOF_PTHREAD_ATTR_T 56
|
|
+#define __SIZEOF_PTHREAD_MUTEX_T 40
|
|
+#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
|
|
+#define __SIZEOF_PTHREAD_COND_T 48
|
|
+#define __SIZEOF_PTHREAD_CONDATTR_T 4
|
|
+#define __SIZEOF_PTHREAD_RWLOCK_T 56
|
|
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
|
|
+#define __SIZEOF_PTHREAD_BARRIER_T 32
|
|
+#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+#define __LOCK_ALIGNMENT
|
|
+#define __ONCE_ALIGNMENT
|
|
+
|
|
+#endif /* bits/pthreadtypes.h */
|
|
diff --git a/sysdeps/loongarch/nptl/bits/semaphore.h b/sysdeps/loongarch/nptl/bits/semaphore.h
|
|
new file mode 100644
|
|
index 00000000..510f3b0e
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/bits/semaphore.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* POSIX semaphore type layout
|
|
+ Copyright (C) 2021 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 _SEMAPHORE_H
|
|
+#error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
|
|
+#endif
|
|
+
|
|
+#define __SIZEOF_SEM_T (4 * __SIZEOF_POINTER__)
|
|
+
|
|
+/* Value returned if `sem_open' failed. */
|
|
+#define SEM_FAILED ((sem_t *) 0)
|
|
+
|
|
+typedef union
|
|
+{
|
|
+ char __size[__SIZEOF_SEM_T];
|
|
+ long int __align;
|
|
+} sem_t;
|
|
diff --git a/sysdeps/loongarch/nptl/bits/struct_rwlock.h b/sysdeps/loongarch/nptl/bits/struct_rwlock.h
|
|
new file mode 100644
|
|
index 00000000..12b6a469
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/bits/struct_rwlock.h
|
|
@@ -0,0 +1,44 @@
|
|
+/* LoongArch internal rwlock struct definitions.
|
|
+ Copyright (C) 2021 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 _RWLOCK_INTERNAL_H
|
|
+#define _RWLOCK_INTERNAL_H
|
|
+
|
|
+/* There is a lot of padding in this structure. While it's not strictly
|
|
+ necessary on LoongArch, we're going to leave it in to be on the safe side in
|
|
+ case it's needed in the future. Most other architectures have the padding,
|
|
+ so this gives us the same extensibility as everyone else has. */
|
|
+struct __pthread_rwlock_arch_t
|
|
+{
|
|
+ unsigned int __readers;
|
|
+ unsigned int __writers;
|
|
+ unsigned int __wrphase_futex;
|
|
+ unsigned int __writers_futex;
|
|
+ unsigned int __pad3;
|
|
+ unsigned int __pad4;
|
|
+ int __cur_writer;
|
|
+ int __shared;
|
|
+ unsigned long int __pad1;
|
|
+ unsigned long int __pad2;
|
|
+ unsigned int __flags;
|
|
+};
|
|
+
|
|
+#define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/nptl/pthread-offsets.h b/sysdeps/loongarch/nptl/pthread-offsets.h
|
|
new file mode 100644
|
|
index 00000000..415c3c11
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/pthread-offsets.h
|
|
@@ -0,0 +1,15 @@
|
|
+#if __WORDSIZE == 64
|
|
+#define __PTHREAD_MUTEX_KIND_OFFSET 16
|
|
+#else
|
|
+#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
|
+#endif
|
|
+
|
|
+#if __WORDSIZE == 64
|
|
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET 48
|
|
+#else
|
|
+#if __BYTE_ORDER == __BIG_ENDIAN
|
|
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET 27
|
|
+#else
|
|
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET 24
|
|
+#endif
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/nptl/pthreaddef.h b/sysdeps/loongarch/nptl/pthreaddef.h
|
|
new file mode 100644
|
|
index 00000000..674ba844
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/pthreaddef.h
|
|
@@ -0,0 +1,34 @@
|
|
+/* pthread machine parameter definitions.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* Default stack size. */
|
|
+#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
|
|
+
|
|
+/* Minimum guard size. */
|
|
+#define ARCH_MIN_GUARD_SIZE 0
|
|
+
|
|
+/* Required stack pointer alignment at beginning. */
|
|
+#define STACK_ALIGN 16
|
|
+
|
|
+/* Minimal stack size after allocating thread descriptor and guard size. */
|
|
+#define MINIMAL_REST_STACK 2048
|
|
+
|
|
+#define TCB_ALIGNMENT 16
|
|
+
|
|
+/* Location of current stack frame. */
|
|
+#define CURRENT_STACK_FRAME __builtin_frame_address (0)
|
|
diff --git a/sysdeps/loongarch/nptl/tcb-offsets.sym b/sysdeps/loongarch/nptl/tcb-offsets.sym
|
|
new file mode 100644
|
|
index 00000000..7d0c7596
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/tcb-offsets.sym
|
|
@@ -0,0 +1,6 @@
|
|
+#include <sysdep.h>
|
|
+#include <tls.h>
|
|
+
|
|
+#define thread_offsetof(mem) (long)(offsetof (struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
|
|
+
|
|
+MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
|
diff --git a/sysdeps/loongarch/nptl/tls.h b/sysdeps/loongarch/nptl/tls.h
|
|
new file mode 100644
|
|
index 00000000..3b17e0b7
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/nptl/tls.h
|
|
@@ -0,0 +1,138 @@
|
|
+/* Definition for thread-local data handling.
|
|
+ Copyright (C) 2021 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_TLS_H
|
|
+#define _LOONGARCH_TLS_H 1
|
|
+
|
|
+#include <dl-sysdep.h>
|
|
+
|
|
+#ifndef __ASSEMBLER__
|
|
+#include <stdbool.h>
|
|
+#include <stddef.h>
|
|
+#include <stdint.h>
|
|
+#include <dl-dtv.h>
|
|
+
|
|
+register void *__thread_self asm("$tp"); /* FIXME */
|
|
+#define READ_THREAD_POINTER() ({ __thread_self; })
|
|
+
|
|
+/* Get system call information. */
|
|
+#include <sysdep.h>
|
|
+
|
|
+/* The TP points to the start of the thread blocks. */
|
|
+#define TLS_DTV_AT_TP 1
|
|
+#define TLS_TCB_AT_TP 0
|
|
+
|
|
+/* Get the thread descriptor definition. */
|
|
+#include <nptl/descr.h>
|
|
+
|
|
+typedef struct
|
|
+{
|
|
+ dtv_t *dtv;
|
|
+ void *private;
|
|
+} tcbhead_t;
|
|
+
|
|
+/* This is the size of the initial TCB. Because our TCB is before the thread
|
|
+ pointer, we don't need this. */
|
|
+#define TLS_INIT_TCB_SIZE 0
|
|
+
|
|
+/* Alignment requirements for the initial TCB. */
|
|
+#define TLS_INIT_TCB_ALIGN __alignof__(struct pthread)
|
|
+
|
|
+/* This is the size of the TCB. Because our TCB is before the thread
|
|
+ pointer, we don't need this. */
|
|
+#define TLS_TCB_SIZE 0
|
|
+
|
|
+/* Alignment requirements for the TCB. */
|
|
+#define TLS_TCB_ALIGN __alignof__(struct pthread)
|
|
+
|
|
+/* This is the size we need before TCB - actually, it includes the TCB. */
|
|
+#define TLS_PRE_TCB_SIZE \
|
|
+ (sizeof (struct pthread) \
|
|
+ + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1)))
|
|
+
|
|
+/* The thread pointer tp points to the end of the TCB.
|
|
+ The pthread_descr structure is immediately in front of the TCB. */
|
|
+#define TLS_TCB_OFFSET 0
|
|
+
|
|
+/* Install the dtv pointer. The pointer passed is to the element with
|
|
+ index -1 which contain the length. */
|
|
+#define INSTALL_DTV(tcbp, dtvp) (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1)
|
|
+
|
|
+/* Install new dtv for current thread. */
|
|
+#define INSTALL_NEW_DTV(dtv) (THREAD_DTV () = (dtv))
|
|
+
|
|
+/* Return dtv of given thread descriptor. */
|
|
+#define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))[-1].dtv)
|
|
+
|
|
+/* Code to initially initialize the thread pointer. */
|
|
+#define TLS_INIT_TP(tcbp) \
|
|
+ ({ \
|
|
+ __thread_self = (char *) tcbp + TLS_TCB_OFFSET; \
|
|
+ NULL; \
|
|
+ })
|
|
+
|
|
+/* Return the address of the dtv for the current thread. */
|
|
+#define THREAD_DTV() \
|
|
+ (((tcbhead_t *) (READ_THREAD_POINTER () - TLS_TCB_OFFSET))[-1].dtv)
|
|
+
|
|
+/* Return the thread descriptor for the current thread. */
|
|
+#define THREAD_SELF \
|
|
+ ((struct pthread *) (READ_THREAD_POINTER () - TLS_TCB_OFFSET \
|
|
+ - TLS_PRE_TCB_SIZE))
|
|
+
|
|
+/* Value passed to 'clone' for initialization of the thread register. */
|
|
+#define TLS_DEFINE_INIT_TP(tp, pd) \
|
|
+ void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE
|
|
+
|
|
+/* Informs libthread_db that the thread pointer is register 2, which is used
|
|
+ * to know how to do THREAD_SELF. */
|
|
+#define DB_THREAD_SELF \
|
|
+ REGISTER (64, 64, 2 * 8, -TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
|
|
+
|
|
+/* Access to data in the thread descriptor is easy. */
|
|
+# include <tcb-access.h>
|
|
+
|
|
+/* l_tls_offset == 0 is perfectly valid, so we have to use some different
|
|
+ value to mean unset l_tls_offset. */
|
|
+#define NO_TLS_OFFSET -1
|
|
+
|
|
+/* Get and set the global scope generation counter in struct pthread. */
|
|
+#define THREAD_GSCOPE_IN_TCB 1
|
|
+#define THREAD_GSCOPE_FLAG_UNUSED 0
|
|
+#define THREAD_GSCOPE_FLAG_USED 1
|
|
+#define THREAD_GSCOPE_FLAG_WAIT 2
|
|
+#define THREAD_GSCOPE_RESET_FLAG() \
|
|
+ do \
|
|
+ { \
|
|
+ int __res = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
|
+ THREAD_GSCOPE_FLAG_UNUSED); \
|
|
+ if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
|
+ lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
|
+ } \
|
|
+ while (0)
|
|
+#define THREAD_GSCOPE_SET_FLAG() \
|
|
+ do \
|
|
+ { \
|
|
+ THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \
|
|
+ atomic_write_barrier (); \
|
|
+ } \
|
|
+ while (0)
|
|
+
|
|
+#endif /* __ASSEMBLER__ */
|
|
+
|
|
+#endif /* tls.h */
|
|
diff --git a/sysdeps/loongarch/preconfigure b/sysdeps/loongarch/preconfigure
|
|
new file mode 100644
|
|
index 00000000..2e3abb9e
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/preconfigure
|
|
@@ -0,0 +1,52 @@
|
|
+# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
|
|
+# Local preconfigure fragment for sysdeps/loongarch
|
|
+
|
|
+case "$machine" in
|
|
+loongarch*)
|
|
+
|
|
+ abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'`
|
|
+ float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'`
|
|
+
|
|
+ with_fp_cond="!defined __loongarch_soft_float"
|
|
+
|
|
+ case "$float_abi" in
|
|
+ soft)
|
|
+ abi_flen=0
|
|
+ as_fn_error 1 "loongarch does not yet support soft floating-point ABI!!" "$LINENO" 5
|
|
+ ;;
|
|
+ single)
|
|
+ as_fn_error 1 "glibc does not yet support the single floating-point ABI!!" "$LINENO" 5
|
|
+ ;;
|
|
+ double)
|
|
+ abi_flen=64
|
|
+ ;;
|
|
+ *)
|
|
+ as_fn_error 1 "Unable to determine floating-point ABI!!" "$LINENO" 5
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case "$abi" in
|
|
+ ilp32)
|
|
+ as_fn_error 1 "loongarch does not yet support ilp32 ABI!!" "$LINENO" 5
|
|
+ ;;
|
|
+ lp64)
|
|
+ grlen=64
|
|
+ machine=loongarch/lp64
|
|
+ ;;
|
|
+ *)
|
|
+ as_fn_error 1 "Unable to determine GRLEN!!" "$LINENO" 5
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define LOONGARCH_ABI_GRLEN $grlen
|
|
+_ACEOF
|
|
+
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define LOONGARCH_ABI_FRLEN $abi_flen
|
|
+_ACEOF
|
|
+
|
|
+
|
|
+ base_machine=loongarch
|
|
+ ;;
|
|
+esac
|
|
diff --git a/sysdeps/loongarch/setjmp.S b/sysdeps/loongarch/setjmp.S
|
|
new file mode 100644
|
|
index 00000000..00ea14b2
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/setjmp.S
|
|
@@ -0,0 +1,66 @@
|
|
+/* setjmp for LoongArch.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/asm.h>
|
|
+
|
|
+ENTRY (_setjmp)
|
|
+ li.w a1,0
|
|
+ b HIDDEN_JUMPTARGET (__sigsetjmp)
|
|
+END (_setjmp)
|
|
+
|
|
+ENTRY (setjmp)
|
|
+ li.w a1,1
|
|
+END (setjmp)
|
|
+
|
|
+ENTRY (__sigsetjmp)
|
|
+ REG_S ra, a0, 0*SZREG
|
|
+ REG_S sp, a0, 1*SZREG
|
|
+ REG_S x, a0, 2*SZREG
|
|
+ REG_S fp, a0, 3*SZREG
|
|
+ REG_S s0, a0, 4*SZREG
|
|
+ REG_S s1, a0, 5*SZREG
|
|
+ REG_S s2, a0, 6*SZREG
|
|
+ REG_S s3, a0, 7*SZREG
|
|
+ REG_S s4, a0, 8*SZREG
|
|
+ REG_S s5, a0, 9*SZREG
|
|
+ REG_S s6, a0, 10*SZREG
|
|
+ REG_S s7, a0, 11*SZREG
|
|
+ REG_S s8, a0, 12*SZREG
|
|
+
|
|
+#ifndef __loongarch_soft_float
|
|
+ FREG_S $f24, a0, 13*SZREG + 0*SZFREG
|
|
+ FREG_S $f25, a0, 13*SZREG + 1*SZFREG
|
|
+ FREG_S $f26, a0, 13*SZREG + 2*SZFREG
|
|
+ FREG_S $f27, a0, 13*SZREG + 3*SZFREG
|
|
+ FREG_S $f28, a0, 13*SZREG + 4*SZFREG
|
|
+ FREG_S $f29, a0, 13*SZREG + 5*SZFREG
|
|
+ FREG_S $f30, a0, 13*SZREG + 6*SZFREG
|
|
+ FREG_S $f31, a0, 13*SZREG + 7*SZFREG
|
|
+#endif
|
|
+
|
|
+#if !IS_IN (libc) && IS_IN(rtld)
|
|
+ li.w v0, 0
|
|
+ jirl zero,ra,0
|
|
+#else
|
|
+ b __sigjmp_save
|
|
+#endif
|
|
+END (__sigsetjmp)
|
|
+
|
|
+hidden_def (__sigsetjmp)
|
|
+weak_alias (_setjmp, __GI__setjmp)
|
|
diff --git a/sysdeps/loongarch/sfp-machine.h b/sysdeps/loongarch/sfp-machine.h
|
|
new file mode 100644
|
|
index 00000000..61f11dd0
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/sfp-machine.h
|
|
@@ -0,0 +1,102 @@
|
|
+/* LoongArch softfloat definitions
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <fenv.h>
|
|
+#include <fpu_control.h>
|
|
+
|
|
+#define _FP_W_TYPE_SIZE 64
|
|
+#define _FP_W_TYPE unsigned long long
|
|
+#define _FP_WS_TYPE signed long long
|
|
+#define _FP_I_TYPE long long
|
|
+
|
|
+#define _FP_MUL_MEAT_S(R, X, Y) _FP_MUL_MEAT_1_imm (_FP_WFRACBITS_S, R, X, Y)
|
|
+#define _FP_MUL_MEAT_D(R, X, Y) \
|
|
+ _FP_MUL_MEAT_1_wide (_FP_WFRACBITS_D, R, X, Y, umul_ppmm)
|
|
+#define _FP_MUL_MEAT_Q(R, X, Y) \
|
|
+ _FP_MUL_MEAT_2_wide_3mul (_FP_WFRACBITS_Q, R, X, Y, umul_ppmm)
|
|
+
|
|
+#define _FP_MUL_MEAT_DW_S(R, X, Y) \
|
|
+ _FP_MUL_MEAT_DW_1_imm (_FP_WFRACBITS_S, R, X, Y)
|
|
+#define _FP_MUL_MEAT_DW_D(R, X, Y) \
|
|
+ _FP_MUL_MEAT_DW_1_wide (_FP_WFRACBITS_D, R, X, Y, umul_ppmm)
|
|
+#define _FP_MUL_MEAT_DW_Q(R, X, Y) \
|
|
+ _FP_MUL_MEAT_DW_2_wide_3mul (_FP_WFRACBITS_Q, R, X, Y, umul_ppmm)
|
|
+
|
|
+#define _FP_DIV_MEAT_S(R, X, Y) \
|
|
+ _FP_DIV_MEAT_1_imm (S, R, X, Y, _FP_DIV_HELP_imm)
|
|
+#define _FP_DIV_MEAT_D(R, X, Y) _FP_DIV_MEAT_1_udiv_norm (D, R, X, Y)
|
|
+#define _FP_DIV_MEAT_Q(R, X, Y) _FP_DIV_MEAT_2_udiv (Q, R, X, Y)
|
|
+
|
|
+#define _FP_NANFRAC_S _FP_QNANBIT_S
|
|
+#define _FP_NANFRAC_D _FP_QNANBIT_D
|
|
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
|
|
+
|
|
+#define _FP_NANSIGN_S 0
|
|
+#define _FP_NANSIGN_D 0
|
|
+#define _FP_NANSIGN_Q 0
|
|
+
|
|
+#define _FP_KEEPNANFRACP 1
|
|
+#define _FP_QNANNEGATEDP 0
|
|
+
|
|
+/* NaN payloads should be preserved for NAN2008. */
|
|
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
|
|
+ do \
|
|
+ { \
|
|
+ R##_s = X##_s; \
|
|
+ _FP_FRAC_COPY_##wc (R, X); \
|
|
+ R##_c = FP_CLS_NAN; \
|
|
+ } \
|
|
+ while (0)
|
|
+
|
|
+#define _FP_DECL_EX fpu_control_t _fcw
|
|
+
|
|
+#define FP_ROUNDMODE (_fcw & 0x300)
|
|
+
|
|
+#define FP_RND_NEAREST FE_TONEAREST
|
|
+#define FP_RND_ZERO FE_TOWARDZERO
|
|
+#define FP_RND_PINF FE_UPWARD
|
|
+#define FP_RND_MINF FE_DOWNWARD
|
|
+
|
|
+#define FP_EX_INVALID FE_INVALID
|
|
+#define FP_EX_OVERFLOW FE_OVERFLOW
|
|
+#define FP_EX_UNDERFLOW FE_UNDERFLOW
|
|
+#define FP_EX_DIVZERO FE_DIVBYZERO
|
|
+#define FP_EX_INEXACT FE_INEXACT
|
|
+
|
|
+#define _FP_TININESS_AFTER_ROUNDING 1
|
|
+
|
|
+#ifdef __loongarch_hard_float
|
|
+#define FP_INIT_ROUNDMODE \
|
|
+ do \
|
|
+ { \
|
|
+ _FPU_GETCW (_fcw); \
|
|
+ } \
|
|
+ while (0)
|
|
+
|
|
+#define FP_HANDLE_EXCEPTIONS \
|
|
+ do \
|
|
+ { \
|
|
+ if (__builtin_expect (_fex, 0)) \
|
|
+ _FPU_SETCW (_fcw | _fex | (_fex << 8)); \
|
|
+ } \
|
|
+ while (0)
|
|
+#define FP_TRAPPING_EXCEPTIONS ((_fcw << 16) & 0x1f0000)
|
|
+#else
|
|
+#define FP_INIT_ROUNDMODE _fcw = FP_RND_NEAREST
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/sotruss-lib.c b/sysdeps/loongarch/sotruss-lib.c
|
|
new file mode 100644
|
|
index 00000000..8a7a438b
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/sotruss-lib.c
|
|
@@ -0,0 +1,50 @@
|
|
+/* Override generic sotruss-lib.c to define actual functions for LoongArch.
|
|
+ Copyright (C) 2021 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 HAVE_ARCH_PLTENTER
|
|
+#define HAVE_ARCH_PLTEXIT
|
|
+
|
|
+#include <elf/sotruss-lib.c>
|
|
+
|
|
+ElfW (Addr)
|
|
+la_loongarch_gnu_pltenter (ElfW (Sym) * sym __attribute__ ((unused)),
|
|
+ unsigned int ndx __attribute__ ((unused)),
|
|
+ uintptr_t *refcook, uintptr_t *defcook,
|
|
+ La_loongarch_regs *regs, unsigned int *flags,
|
|
+ const char *symname, long int *framesizep)
|
|
+{
|
|
+ print_enter (refcook, defcook, symname, regs->lr_reg[0], regs->lr_reg[1],
|
|
+ regs->lr_reg[2], *flags);
|
|
+
|
|
+ /* No need to copy anything, we will not need the parameters in any case. */
|
|
+ *framesizep = 0;
|
|
+
|
|
+ return sym->st_value;
|
|
+}
|
|
+
|
|
+unsigned int
|
|
+la_loongarch_gnu_pltexit (ElfW (Sym) * sym, unsigned int ndx,
|
|
+ uintptr_t *refcook, uintptr_t *defcook,
|
|
+ const struct La_loongarch_regs *inregs,
|
|
+ struct La_loongarch_retval *outregs,
|
|
+ const char *symname)
|
|
+{
|
|
+ print_exit (refcook, defcook, symname, outregs->lrv_a0);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/loongarch/stackinfo.h b/sysdeps/loongarch/stackinfo.h
|
|
new file mode 100644
|
|
index 00000000..a990a471
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/stackinfo.h
|
|
@@ -0,0 +1,33 @@
|
|
+/* Stack environment definitions for LoongArch.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* This file contains a bit of information about the stack allocation
|
|
+ of the processor. */
|
|
+
|
|
+#ifndef _STACKINFO_H
|
|
+#define _STACKINFO_H 1
|
|
+
|
|
+#include <elf.h>
|
|
+
|
|
+/* On LoongArch the stack grows down. */
|
|
+#define _STACK_GROWS_DOWN 1
|
|
+
|
|
+/* Default to a non-executable stack. */
|
|
+#define DEFAULT_STACK_PERMS (PF_R | PF_W)
|
|
+
|
|
+#endif /* stackinfo.h */
|
|
diff --git a/sysdeps/loongarch/start.S b/sysdeps/loongarch/start.S
|
|
new file mode 100644
|
|
index 00000000..0deda78a
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/start.S
|
|
@@ -0,0 +1,69 @@
|
|
+/* Startup code compliant to the ELF LoongArch ABI.
|
|
+ Copyright (C) 2021 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 __ASSEMBLY__ 1
|
|
+#include <entry.h>
|
|
+#include <sys/asm.h>
|
|
+
|
|
+/* The entry point's job is to call __libc_start_main. Per the ABI,
|
|
+ a0 contains the address of a function to be passed to atexit.
|
|
+ __libc_start_main wants this in a5. */
|
|
+
|
|
+/*
|
|
+int
|
|
+__libc_start_main (int (*main) (int, char **, char **),
|
|
+ int argc,
|
|
+ char **argv,
|
|
+ __typeof (main) init,
|
|
+ void (*fini) (void),
|
|
+ void (*rtld_fini) (void),
|
|
+ void *stack_end);
|
|
+ */
|
|
+
|
|
+ENTRY (ENTRY_POINT)
|
|
+
|
|
+/* Terminate call stack by noting ra is undefined. Use a dummy
|
|
+ .cfi_label to force starting the FDE. */
|
|
+ .cfi_label .Ldummy
|
|
+ cfi_undefined (1)
|
|
+ or a5, a0, zero /* rtld_fini */
|
|
+
|
|
+/* We must get symbol main through GOT table, since main may not be local.
|
|
+ For instance: googletest defines main in dynamic library. */
|
|
+ la.got a0, t0, main
|
|
+#ifdef __loongarch_lp64
|
|
+ ld.d a1, sp, 0
|
|
+ addi.d a2, sp, SZREG
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+ /* Adjust $sp for 16-aligned */
|
|
+ srli.d sp, sp, 4
|
|
+ slli.d sp, sp, 4
|
|
+
|
|
+ move a3, zero /* used to be init */
|
|
+ move a4, zero /* used to be fini */
|
|
+ or a6, sp, zero /* stack_end */
|
|
+
|
|
+ la.got ra, t0, __libc_start_main
|
|
+ jirl ra, ra, 0
|
|
+
|
|
+ la.got ra, t0, abort
|
|
+ jirl ra, ra, 0
|
|
+END (ENTRY_POINT)
|
|
diff --git a/sysdeps/loongarch/sys/asm.h b/sysdeps/loongarch/sys/asm.h
|
|
new file mode 100644
|
|
index 00000000..1133f761
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/sys/asm.h
|
|
@@ -0,0 +1,58 @@
|
|
+/* Miscellaneous macros.
|
|
+ Copyright (C) 2021 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. */
|
|
+#ifdef __loongarch_lp64
|
|
+#define PTRLOG 3
|
|
+#define SZREG 8
|
|
+#define SZFREG 8
|
|
+#define REG_L ld.d
|
|
+#define REG_S st.d
|
|
+#define FREG_L fld.d
|
|
+#define FREG_S fst.d
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+/* Declare leaf routine. */
|
|
+#define LEAF(symbol) \
|
|
+ .text; \
|
|
+ .globl symbol; \
|
|
+ .align 3; \
|
|
+ cfi_startproc; \
|
|
+ .type symbol, @function; \
|
|
+ symbol:
|
|
+
|
|
+#define ENTRY(symbol) LEAF (symbol)
|
|
+
|
|
+/* Mark end of function. */
|
|
+#undef END
|
|
+#define END(function) \
|
|
+ cfi_endproc; \
|
|
+ .size function, .- function;
|
|
+
|
|
+/* Stack alignment. */
|
|
+#define ALMASK ~15
|
|
+
|
|
+#endif /* sys/asm.h */
|
|
diff --git a/sysdeps/loongarch/sys/ifunc.h b/sysdeps/loongarch/sys/ifunc.h
|
|
new file mode 100644
|
|
index 00000000..461df20c
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/sys/ifunc.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Definitions used by LoongArch indirect function resolvers.
|
|
+ Copyright (C) 2022 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_IFUNC_H
|
|
+#define _SYS_IFUNC_H
|
|
+
|
|
+struct __ifunc_arg_t
|
|
+{
|
|
+ unsigned long _size; /* Size of the struct, so it can grow. */
|
|
+ unsigned long _hwcap;
|
|
+};
|
|
+
|
|
+typedef struct __ifunc_arg_t __ifunc_arg_t;
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/loongarch/sys/regdef.h b/sysdeps/loongarch/sys/regdef.h
|
|
new file mode 100644
|
|
index 00000000..f53447db
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/sys/regdef.h
|
|
@@ -0,0 +1,98 @@
|
|
+/* Register Macro definitions
|
|
+ Copyright (C) 2021 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_REGDEF_H
|
|
+#define _SYS_REGDEF_H
|
|
+
|
|
+#ifdef __loongarch_lp64
|
|
+#define zero $r0
|
|
+#define ra $r1
|
|
+#define tp $r2
|
|
+#define sp $r3
|
|
+#define a0 $r4
|
|
+#define a1 $r5
|
|
+#define a2 $r6
|
|
+#define a3 $r7
|
|
+#define a4 $r8
|
|
+#define a5 $r9
|
|
+#define a6 $r10
|
|
+#define a7 $r11
|
|
+#define v0 $r4
|
|
+#define v1 $r5
|
|
+#define t0 $r12
|
|
+#define t1 $r13
|
|
+#define t2 $r14
|
|
+#define t3 $r15
|
|
+#define t4 $r16
|
|
+#define t5 $r17
|
|
+#define t6 $r18
|
|
+#define t7 $r19
|
|
+#define t8 $r20
|
|
+#define x $r21
|
|
+#define fp $r22
|
|
+#define s0 $r23
|
|
+#define s1 $r24
|
|
+#define s2 $r25
|
|
+#define s3 $r26
|
|
+#define s4 $r27
|
|
+#define s5 $r28
|
|
+#define s6 $r29
|
|
+#define s7 $r30
|
|
+#define s8 $r31
|
|
+
|
|
+#define fa0 $f0
|
|
+#define fa1 $f1
|
|
+#define fa2 $f2
|
|
+#define fa3 $f3
|
|
+#define fa4 $f4
|
|
+#define fa5 $f5
|
|
+#define fa6 $f6
|
|
+#define fa7 $f7
|
|
+#define fv0 $f0
|
|
+#define fv1 $f1
|
|
+#define ft0 $f8
|
|
+#define ft1 $f9
|
|
+#define ft2 $f10
|
|
+#define ft3 $f11
|
|
+#define ft4 $f12
|
|
+#define ft5 $f13
|
|
+#define ft6 $f14
|
|
+#define ft7 $f15
|
|
+#define ft8 $f16
|
|
+#define ft9 $f17
|
|
+#define ft10 $f18
|
|
+#define ft11 $f19
|
|
+#define ft12 $f20
|
|
+#define ft13 $f21
|
|
+#define ft14 $f22
|
|
+#define ft15 $f23
|
|
+#define fs0 $f24
|
|
+#define fs1 $f25
|
|
+#define fs2 $f26
|
|
+#define fs3 $f27
|
|
+#define fs4 $f28
|
|
+#define fs5 $f29
|
|
+#define fs6 $f30
|
|
+#define fs7 $f31
|
|
+
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+#endif /* _SYS_REGDEF_H */
|
|
diff --git a/sysdeps/loongarch/tininess.h b/sysdeps/loongarch/tininess.h
|
|
new file mode 100644
|
|
index 00000000..90956c35
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/tininess.h
|
|
@@ -0,0 +1 @@
|
|
+#define TININESS_AFTER_ROUNDING 1
|
|
diff --git a/sysdeps/loongarch/tls-macros.h b/sysdeps/loongarch/tls-macros.h
|
|
new file mode 100644
|
|
index 00000000..af5eb6b7
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/tls-macros.h
|
|
@@ -0,0 +1,49 @@
|
|
+/* Macros to support TLS testing in times of missing compiler support.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sys/cdefs.h>
|
|
+#include <sys/asm.h>
|
|
+#include <sysdep.h>
|
|
+#include "dl-tls.h"
|
|
+
|
|
+#define TLS_GD(x) \
|
|
+ ({ \
|
|
+ void *__result; \
|
|
+ asm("la.tls.gd %0, " #x "\n\t" : "=r"(__result)); \
|
|
+ __tls_get_addr (__result); \
|
|
+ })
|
|
+
|
|
+#define TLS_LD(x) TLS_GD (x)
|
|
+
|
|
+#define TLS_IE(x) \
|
|
+ ({ \
|
|
+ void *__result; \
|
|
+ asm("la.tls.ie %0, " #x "\n\t" \
|
|
+ "add.d %0, %0, $tp\n\t" \
|
|
+ : "=r"(__result)); \
|
|
+ __result; \
|
|
+ })
|
|
+
|
|
+#define TLS_LE(x) \
|
|
+ ({ \
|
|
+ void *__result; \
|
|
+ asm("la.tls.le %0, " #x "\n\t" \
|
|
+ "add.d %0, %0, $tp\n\t" \
|
|
+ : "=r"(__result)); \
|
|
+ __result; \
|
|
+ })
|
|
diff --git a/sysdeps/loongarch/tst-audit.h b/sysdeps/loongarch/tst-audit.h
|
|
new file mode 100644
|
|
index 00000000..de120d8a
|
|
--- /dev/null
|
|
+++ b/sysdeps/loongarch/tst-audit.h
|
|
@@ -0,0 +1,23 @@
|
|
+/* Definitions for testing PLT entry/exit auditing.
|
|
+ Copyright (C) 2021 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 pltenter la_loongarch_gnu_pltenter
|
|
+#define pltexit la_loongarch_gnu_pltexit
|
|
+#define La_regs La_loongarch_regs
|
|
+#define La_retval La_loongarch_retval
|
|
+#define int_retval lrv_a0
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/Implies b/sysdeps/unix/sysv/linux/loongarch/Implies
|
|
new file mode 100644
|
|
index 00000000..e52b1ac3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/Implies
|
|
@@ -0,0 +1 @@
|
|
+loongarch/nptl
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/Makefile b/sysdeps/unix/sysv/linux/loongarch/Makefile
|
|
new file mode 100644
|
|
index 00000000..e205ce83
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/Makefile
|
|
@@ -0,0 +1,10 @@
|
|
+ifeq ($(subdir),elf)
|
|
+ifeq ($(build-shared),yes)
|
|
+# This is needed for DSO loading from static binaries.
|
|
+sysdep-dl-routines += dl-static
|
|
+endif
|
|
+endif
|
|
+
|
|
+ifeq ($(subdir),stdlib)
|
|
+gen-as-const-headers += ucontext_i.sym
|
|
+endif
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h b/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
|
new file mode 100644
|
|
index 00000000..c1ff6cb6
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
|
@@ -0,0 +1,292 @@
|
|
+/* AUTOGENERATED by update-syscall-lists.py. */
|
|
+#define __NR_accept 202
|
|
+#define __NR_accept4 242
|
|
+#define __NR_acct 89
|
|
+#define __NR_add_key 217
|
|
+#define __NR_adjtimex 171
|
|
+#define __NR_bind 200
|
|
+#define __NR_bpf 280
|
|
+#define __NR_brk 214
|
|
+#define __NR_capget 90
|
|
+#define __NR_capset 91
|
|
+#define __NR_chdir 49
|
|
+#define __NR_chroot 51
|
|
+#define __NR_clock_adjtime 266
|
|
+#define __NR_clock_getres 114
|
|
+#define __NR_clock_gettime 113
|
|
+#define __NR_clock_nanosleep 115
|
|
+#define __NR_clock_settime 112
|
|
+#define __NR_clone 220
|
|
+#define __NR_clone3 435
|
|
+#define __NR_close 57
|
|
+#define __NR_close_range 436
|
|
+#define __NR_connect 203
|
|
+#define __NR_copy_file_range 285
|
|
+#define __NR_delete_module 106
|
|
+#define __NR_dup 23
|
|
+#define __NR_dup3 24
|
|
+#define __NR_epoll_create1 20
|
|
+#define __NR_epoll_ctl 21
|
|
+#define __NR_epoll_pwait 22
|
|
+#define __NR_eventfd2 19
|
|
+#define __NR_execve 221
|
|
+#define __NR_execveat 281
|
|
+#define __NR_exit 93
|
|
+#define __NR_exit_group 94
|
|
+#define __NR_faccessat 48
|
|
+#define __NR_faccessat2 439
|
|
+#define __NR_fadvise64 223
|
|
+#define __NR_fallocate 47
|
|
+#define __NR_fanotify_init 262
|
|
+#define __NR_fanotify_mark 263
|
|
+#define __NR_fchdir 50
|
|
+#define __NR_fchmod 52
|
|
+#define __NR_fchmodat 53
|
|
+#define __NR_fchown 55
|
|
+#define __NR_fchownat 54
|
|
+#define __NR_fcntl 25
|
|
+#define __NR_fdatasync 83
|
|
+#define __NR_fgetxattr 10
|
|
+#define __NR_finit_module 273
|
|
+#define __NR_flistxattr 13
|
|
+#define __NR_flock 32
|
|
+#define __NR_fremovexattr 16
|
|
+#define __NR_fsconfig 431
|
|
+#define __NR_fsetxattr 7
|
|
+#define __NR_fsmount 432
|
|
+#define __NR_fsopen 430
|
|
+#define __NR_fspick 433
|
|
+#define __NR_fstatfs 44
|
|
+#define __NR_fsync 82
|
|
+#define __NR_ftruncate 46
|
|
+#define __NR_futex 98
|
|
+#define __NR_get_mempolicy 236
|
|
+#define __NR_get_robust_list 100
|
|
+#define __NR_getcpu 168
|
|
+#define __NR_getcwd 17
|
|
+#define __NR_getdents64 61
|
|
+#define __NR_getegid 177
|
|
+#define __NR_geteuid 175
|
|
+#define __NR_getgid 176
|
|
+#define __NR_getgroups 158
|
|
+#define __NR_getitimer 102
|
|
+#define __NR_getpeername 205
|
|
+#define __NR_getpgid 155
|
|
+#define __NR_getpid 172
|
|
+#define __NR_getppid 173
|
|
+#define __NR_getpriority 141
|
|
+#define __NR_getrandom 278
|
|
+#define __NR_getresgid 150
|
|
+#define __NR_getresuid 148
|
|
+#define __NR_getrusage 165
|
|
+#define __NR_getsid 156
|
|
+#define __NR_getsockname 204
|
|
+#define __NR_getsockopt 209
|
|
+#define __NR_gettid 178
|
|
+#define __NR_gettimeofday 169
|
|
+#define __NR_getuid 174
|
|
+#define __NR_getxattr 8
|
|
+#define __NR_init_module 105
|
|
+#define __NR_inotify_add_watch 27
|
|
+#define __NR_inotify_init1 26
|
|
+#define __NR_inotify_rm_watch 28
|
|
+#define __NR_io_cancel 3
|
|
+#define __NR_io_destroy 1
|
|
+#define __NR_io_getevents 4
|
|
+#define __NR_io_pgetevents 292
|
|
+#define __NR_io_setup 0
|
|
+#define __NR_io_submit 2
|
|
+#define __NR_io_uring_enter 426
|
|
+#define __NR_io_uring_register 427
|
|
+#define __NR_io_uring_setup 425
|
|
+#define __NR_ioctl 29
|
|
+#define __NR_ioprio_get 31
|
|
+#define __NR_ioprio_set 30
|
|
+#define __NR_kcmp 272
|
|
+#define __NR_kexec_file_load 294
|
|
+#define __NR_kexec_load 104
|
|
+#define __NR_keyctl 219
|
|
+#define __NR_kill 129
|
|
+#define __NR_lgetxattr 9
|
|
+#define __NR_linkat 37
|
|
+#define __NR_listen 201
|
|
+#define __NR_listxattr 11
|
|
+#define __NR_llistxattr 12
|
|
+#define __NR_lookup_dcookie 18
|
|
+#define __NR_lremovexattr 15
|
|
+#define __NR_lseek 62
|
|
+#define __NR_lsetxattr 6
|
|
+#define __NR_madvise 233
|
|
+#define __NR_mbind 235
|
|
+#define __NR_membarrier 283
|
|
+#define __NR_memfd_create 279
|
|
+#define __NR_migrate_pages 238
|
|
+#define __NR_mincore 232
|
|
+#define __NR_mkdirat 34
|
|
+#define __NR_mknodat 33
|
|
+#define __NR_mlock 228
|
|
+#define __NR_mlock2 284
|
|
+#define __NR_mlockall 230
|
|
+#define __NR_mmap 222
|
|
+#define __NR_mount 40
|
|
+#define __NR_move_mount 429
|
|
+#define __NR_move_pages 239
|
|
+#define __NR_mprotect 226
|
|
+#define __NR_mq_getsetattr 185
|
|
+#define __NR_mq_notify 184
|
|
+#define __NR_mq_open 180
|
|
+#define __NR_mq_timedreceive 183
|
|
+#define __NR_mq_timedsend 182
|
|
+#define __NR_mq_unlink 181
|
|
+#define __NR_mremap 216
|
|
+#define __NR_msgctl 187
|
|
+#define __NR_msgget 186
|
|
+#define __NR_msgrcv 188
|
|
+#define __NR_msgsnd 189
|
|
+#define __NR_msync 227
|
|
+#define __NR_munlock 229
|
|
+#define __NR_munlockall 231
|
|
+#define __NR_munmap 215
|
|
+#define __NR_name_to_handle_at 264
|
|
+#define __NR_nanosleep 101
|
|
+#define __NR_nfsservctl 42
|
|
+#define __NR_open_by_handle_at 265
|
|
+#define __NR_open_tree 428
|
|
+#define __NR_openat 56
|
|
+#define __NR_openat2 437
|
|
+#define __NR_perf_event_open 241
|
|
+#define __NR_personality 92
|
|
+#define __NR_pidfd_getfd 438
|
|
+#define __NR_pidfd_open 434
|
|
+#define __NR_pidfd_send_signal 424
|
|
+#define __NR_pipe2 59
|
|
+#define __NR_pivot_root 41
|
|
+#define __NR_pkey_alloc 289
|
|
+#define __NR_pkey_free 290
|
|
+#define __NR_pkey_mprotect 288
|
|
+#define __NR_ppoll 73
|
|
+#define __NR_prctl 167
|
|
+#define __NR_pread64 67
|
|
+#define __NR_preadv 69
|
|
+#define __NR_preadv2 286
|
|
+#define __NR_prlimit64 261
|
|
+#define __NR_process_madvise 440
|
|
+#define __NR_process_vm_readv 270
|
|
+#define __NR_process_vm_writev 271
|
|
+#define __NR_pselect6 72
|
|
+#define __NR_ptrace 117
|
|
+#define __NR_pwrite64 68
|
|
+#define __NR_pwritev 70
|
|
+#define __NR_pwritev2 287
|
|
+#define __NR_quotactl 60
|
|
+#define __NR_read 63
|
|
+#define __NR_readahead 213
|
|
+#define __NR_readlinkat 78
|
|
+#define __NR_readv 65
|
|
+#define __NR_reboot 142
|
|
+#define __NR_recvfrom 207
|
|
+#define __NR_recvmmsg 243
|
|
+#define __NR_recvmsg 212
|
|
+#define __NR_remap_file_pages 234
|
|
+#define __NR_removexattr 14
|
|
+#define __NR_renameat2 276
|
|
+#define __NR_request_key 218
|
|
+#define __NR_restart_syscall 128
|
|
+#define __NR_rseq 293
|
|
+#define __NR_rt_sigaction 134
|
|
+#define __NR_rt_sigpending 136
|
|
+#define __NR_rt_sigprocmask 135
|
|
+#define __NR_rt_sigqueueinfo 138
|
|
+#define __NR_rt_sigreturn 139
|
|
+#define __NR_rt_sigsuspend 133
|
|
+#define __NR_rt_sigtimedwait 137
|
|
+#define __NR_rt_tgsigqueueinfo 240
|
|
+#define __NR_sched_get_priority_max 125
|
|
+#define __NR_sched_get_priority_min 126
|
|
+#define __NR_sched_getaffinity 123
|
|
+#define __NR_sched_getattr 275
|
|
+#define __NR_sched_getparam 121
|
|
+#define __NR_sched_getscheduler 120
|
|
+#define __NR_sched_rr_get_interval 127
|
|
+#define __NR_sched_setaffinity 122
|
|
+#define __NR_sched_setattr 274
|
|
+#define __NR_sched_setparam 118
|
|
+#define __NR_sched_setscheduler 119
|
|
+#define __NR_sched_yield 124
|
|
+#define __NR_seccomp 277
|
|
+#define __NR_semctl 191
|
|
+#define __NR_semget 190
|
|
+#define __NR_semop 193
|
|
+#define __NR_semtimedop 192
|
|
+#define __NR_sendfile 71
|
|
+#define __NR_sendmmsg 269
|
|
+#define __NR_sendmsg 211
|
|
+#define __NR_sendto 206
|
|
+#define __NR_set_mempolicy 237
|
|
+#define __NR_set_robust_list 99
|
|
+#define __NR_set_tid_address 96
|
|
+#define __NR_setdomainname 162
|
|
+#define __NR_setfsgid 152
|
|
+#define __NR_setfsuid 151
|
|
+#define __NR_setgid 144
|
|
+#define __NR_setgroups 159
|
|
+#define __NR_sethostname 161
|
|
+#define __NR_setitimer 103
|
|
+#define __NR_setns 268
|
|
+#define __NR_setpgid 154
|
|
+#define __NR_setpriority 140
|
|
+#define __NR_setregid 143
|
|
+#define __NR_setresgid 149
|
|
+#define __NR_setresuid 147
|
|
+#define __NR_setreuid 145
|
|
+#define __NR_setsid 157
|
|
+#define __NR_setsockopt 208
|
|
+#define __NR_settimeofday 170
|
|
+#define __NR_setuid 146
|
|
+#define __NR_setxattr 5
|
|
+#define __NR_shmat 196
|
|
+#define __NR_shmctl 195
|
|
+#define __NR_shmdt 197
|
|
+#define __NR_shmget 194
|
|
+#define __NR_shutdown 210
|
|
+#define __NR_sigaltstack 132
|
|
+#define __NR_signalfd4 74
|
|
+#define __NR_socket 198
|
|
+#define __NR_socketpair 199
|
|
+#define __NR_splice 76
|
|
+#define __NR_statfs 43
|
|
+#define __NR_statx 291
|
|
+#define __NR_swapoff 225
|
|
+#define __NR_swapon 224
|
|
+#define __NR_symlinkat 36
|
|
+#define __NR_sync 81
|
|
+#define __NR_sync_file_range 84
|
|
+#define __NR_syncfs 267
|
|
+#define __NR_sysinfo 179
|
|
+#define __NR_syslog 116
|
|
+#define __NR_tee 77
|
|
+#define __NR_tgkill 131
|
|
+#define __NR_timer_create 107
|
|
+#define __NR_timer_delete 111
|
|
+#define __NR_timer_getoverrun 109
|
|
+#define __NR_timer_gettime 108
|
|
+#define __NR_timer_settime 110
|
|
+#define __NR_timerfd_create 85
|
|
+#define __NR_timerfd_gettime 87
|
|
+#define __NR_timerfd_settime 86
|
|
+#define __NR_times 153
|
|
+#define __NR_tkill 130
|
|
+#define __NR_truncate 45
|
|
+#define __NR_umask 166
|
|
+#define __NR_umount2 39
|
|
+#define __NR_uname 160
|
|
+#define __NR_unlinkat 35
|
|
+#define __NR_unshare 97
|
|
+#define __NR_userfaultfd 282
|
|
+#define __NR_utimensat 88
|
|
+#define __NR_vhangup 58
|
|
+#define __NR_vmsplice 75
|
|
+#define __NR_wait4 260
|
|
+#define __NR_waitid 95
|
|
+#define __NR_write 64
|
|
+#define __NR_writev 66
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/atomic-machine.h b/sysdeps/unix/sysv/linux/loongarch/atomic-machine.h
|
|
new file mode 100644
|
|
index 00000000..dbae608e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/atomic-machine.h
|
|
@@ -0,0 +1,196 @@
|
|
+/* Atomic operations.
|
|
+ Copyright (C) 2021 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 _LINUX_LOONGARCH_BITS_ATOMIC_H
|
|
+#define _LINUX_LOONGARCH_BITS_ATOMIC_H 1
|
|
+
|
|
+#include <stdint.h>
|
|
+
|
|
+typedef int32_t atomic32_t;
|
|
+typedef uint32_t uatomic32_t;
|
|
+
|
|
+typedef int64_t atomic64_t;
|
|
+typedef uint64_t uatomic64_t;
|
|
+
|
|
+typedef intptr_t atomicptr_t;
|
|
+typedef uintptr_t uatomicptr_t;
|
|
+typedef intmax_t atomic_max_t;
|
|
+typedef uintmax_t uatomic_max_t;
|
|
+
|
|
+#define atomic_full_barrier() __sync_synchronize ()
|
|
+
|
|
+#ifdef __LP64__
|
|
+#define __HAVE_64B_ATOMICS 1
|
|
+#endif
|
|
+#define USE_ATOMIC_COMPILER_BUILTINS 1
|
|
+#define ATOMIC_EXCHANGE_USES_CAS 0
|
|
+
|
|
+/* Compare and exchange.
|
|
+ For all "bool" routines, we return FALSE if exchange succesful. */
|
|
+
|
|
+#define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ __oldval; \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ __oldval; \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ __oldval; \
|
|
+ })
|
|
+
|
|
+#define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \
|
|
+ ({ \
|
|
+ typeof (*mem) __oldval = (oldval); \
|
|
+ __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, model, \
|
|
+ __ATOMIC_RELAXED); \
|
|
+ __oldval; \
|
|
+ })
|
|
+
|
|
+/* Atomic compare and exchange. */
|
|
+
|
|
+#define atomic_compare_and_exchange_bool_acq(mem, new, old) \
|
|
+ __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, mem, new, old, \
|
|
+ __ATOMIC_ACQUIRE)
|
|
+
|
|
+#define atomic_compare_and_exchange_val_acq(mem, new, old) \
|
|
+ __atomic_val_bysize (__arch_compare_and_exchange_val, int, mem, new, old, \
|
|
+ __ATOMIC_ACQUIRE)
|
|
+
|
|
+#define atomic_compare_and_exchange_val_rel(mem, new, old) \
|
|
+ __atomic_val_bysize (__arch_compare_and_exchange_val, int, mem, new, old, \
|
|
+ __ATOMIC_RELEASE)
|
|
+
|
|
+/* Atomic exchange (without compare). */
|
|
+
|
|
+#define __arch_exchange_8_int(mem, newval, model) \
|
|
+ __atomic_exchange_n (mem, newval, model)
|
|
+
|
|
+#define __arch_exchange_16_int(mem, newval, model) \
|
|
+ __atomic_exchange_n (mem, newval, model)
|
|
+
|
|
+#define __arch_exchange_32_int(mem, newval, model) \
|
|
+ __atomic_exchange_n (mem, newval, model)
|
|
+
|
|
+#define __arch_exchange_64_int(mem, newval, model) \
|
|
+ __atomic_exchange_n (mem, newval, model)
|
|
+
|
|
+#define atomic_exchange_acq(mem, value) \
|
|
+ __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE)
|
|
+
|
|
+#define atomic_exchange_rel(mem, value) \
|
|
+ __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE)
|
|
+
|
|
+/* Atomically add value and return the previous (unincremented) value. */
|
|
+
|
|
+#define __arch_exchange_and_add_8_int(mem, value, model) \
|
|
+ __atomic_fetch_add (mem, value, model)
|
|
+
|
|
+#define __arch_exchange_and_add_16_int(mem, value, model) \
|
|
+ __atomic_fetch_add (mem, value, model)
|
|
+
|
|
+#define __arch_exchange_and_add_32_int(mem, value, model) \
|
|
+ __atomic_fetch_add (mem, value, model)
|
|
+
|
|
+#define __arch_exchange_and_add_64_int(mem, value, model) \
|
|
+ __atomic_fetch_add (mem, value, model)
|
|
+
|
|
+#define atomic_exchange_and_add_acq(mem, value) \
|
|
+ __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \
|
|
+ __ATOMIC_ACQUIRE)
|
|
+
|
|
+#define atomic_exchange_and_add_rel(mem, value) \
|
|
+ __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \
|
|
+ __ATOMIC_RELEASE)
|
|
+
|
|
+/* Miscellaneous. */
|
|
+
|
|
+#define asm_amo(which, mem, value) \
|
|
+ ({ \
|
|
+ __atomic_check_size (mem); \
|
|
+ typeof (*mem) __tmp; \
|
|
+ if (sizeof (__tmp) == 4) \
|
|
+ asm volatile(which ".w" \
|
|
+ "\t%0, %z2, %1" \
|
|
+ : "=&r"(__tmp), "+ZB"(*(mem)) \
|
|
+ : "rJ"(value)); \
|
|
+ else if (sizeof (__tmp) == 8) \
|
|
+ asm volatile(which ".d" \
|
|
+ "\t%0, %z2, %1" \
|
|
+ : "=&r"(__tmp), "+ZB"(*(mem)) \
|
|
+ : "rJ"(value)); \
|
|
+ else \
|
|
+ abort (); \
|
|
+ __tmp; \
|
|
+ })
|
|
+
|
|
+#define atomic_max(mem, value) asm_amo ("ammax_db", mem, value)
|
|
+#define atomic_min(mem, value) asm_amo ("ammin_db", mem, value)
|
|
+
|
|
+#define atomic_bit_test_set(mem, bit) \
|
|
+ ({ \
|
|
+ typeof (*mem) __mask = (typeof (*mem)) 1 << (bit); \
|
|
+ asm_amo ("amor_db", mem, __mask) & __mask; \
|
|
+ })
|
|
+
|
|
+#define catomic_exchange_and_add(mem, value) \
|
|
+ atomic_exchange_and_add (mem, value)
|
|
+#define catomic_max(mem, value) atomic_max (mem, value)
|
|
+
|
|
+#endif /* bits/atomic.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/fcntl.h b/sysdeps/unix/sysv/linux/loongarch/bits/fcntl.h
|
|
new file mode 100644
|
|
index 00000000..a39985e1
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/fcntl.h
|
|
@@ -0,0 +1,61 @@
|
|
+/* O_*, F_*, FD_* bit values for the generic Linux/LoongArch ABI.
|
|
+ Copyright (C) 2021 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>
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/mman.h b/sysdeps/unix/sysv/linux/loongarch/bits/mman.h
|
|
new file mode 100644
|
|
index 00000000..1f2f76fc
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/mman.h
|
|
@@ -0,0 +1,42 @@
|
|
+/* Definitions for POSIX memory map interface.
|
|
+ Copyright (C) 2021 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_MMAN_H
|
|
+#error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
|
+#endif
|
|
+
|
|
+#ifdef __USE_MISC
|
|
+#define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
|
|
+#define MAP_DENYWRITE 0x00800 /* ETXTBSY. */
|
|
+#define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
|
|
+#define MAP_LOCKED 0x02000 /* Lock the mapping. */
|
|
+#define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
|
|
+#define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
|
|
+#define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
|
|
+#define MAP_STACK 0x20000 /* Allocation is for a stack. */
|
|
+#define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
|
|
+#define MAP_SYNC \
|
|
+ 0x80000 /* Perform synchronous page \
|
|
+ faults for the mapping. */
|
|
+#define MAP_FIXED_NOREPLACE \
|
|
+ 0x100000 /* MAP_FIXED but do not unmap \
|
|
+ underlying mapping. */
|
|
+#endif
|
|
+
|
|
+/* Include generic Linux declarations. */
|
|
+#include <bits/mman-linux.h>
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/procfs.h b/sysdeps/unix/sysv/linux/loongarch/bits/procfs.h
|
|
new file mode 100644
|
|
index 00000000..2db777b3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/procfs.h
|
|
@@ -0,0 +1,52 @@
|
|
+/* Types for registers for sys/procfs.h.
|
|
+ Copyright (C) 2022 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];
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/loongarch/bits/pthread_stack_min.h
|
|
new file mode 100644
|
|
index 00000000..ccab36ca
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/pthread_stack_min.h
|
|
@@ -0,0 +1,20 @@
|
|
+/* Definition of PTHREAD_STACK_MIN. LoongArch Linux version.
|
|
+ Copyright (C) 2021 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
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/sigstack.h b/sysdeps/unix/sysv/linux/loongarch/bits/sigstack.h
|
|
new file mode 100644
|
|
index 00000000..d59632de
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/sigstack.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* sigstack, sigaltstack definitions.
|
|
+ Copyright (C) 1998-2021 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 */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/clone.S b/sysdeps/unix/sysv/linux/loongarch/clone.S
|
|
new file mode 100644
|
|
index 00000000..d2bed244
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/clone.S
|
|
@@ -0,0 +1,100 @@
|
|
+/* The clone syscall wrapper.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* clone() is even more special than fork() as it mucks with stacks
|
|
+ and invokes a function in the right context after its all over. */
|
|
+
|
|
+#include <sys/asm.h>
|
|
+#include <sysdep.h>
|
|
+#define _ERRNO_H 1
|
|
+#include <bits/errno.h>
|
|
+#include <tls.h>
|
|
+#include "tcb-offsets.h"
|
|
+
|
|
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
|
|
+ void *parent_tidptr, void *tls, void *child_tidptr) */
|
|
+
|
|
+ENTRY (__clone)
|
|
+
|
|
+ /* Align stack to 16 or 8 bytes per the ABI. */
|
|
+#ifdef __loongarch_lp64
|
|
+ bstrins.d a1, zero, 3, 0
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+ /* Sanity check arguments. */
|
|
+ beqz a0, L (invalid) /* No NULL function pointers. */
|
|
+ beqz a1, L (invalid) /* No NULL stack pointers. */
|
|
+
|
|
+ addi.d a1, a1, -16 /* Reserve argument save space. */
|
|
+ st.d a0, a1, 0 /* Save function pointer. */
|
|
+ st.d a3, a1, SZREG /* Save argument pointer. */
|
|
+
|
|
+ /* The syscall expects the args to be in different slots. */
|
|
+ or a0, a2, zero
|
|
+ or a2, a4, zero
|
|
+ or a3, a6, zero
|
|
+ or a4, a5, zero
|
|
+
|
|
+ /* Do the system call. */
|
|
+ li.d a7,__NR_clone
|
|
+ syscall 0
|
|
+
|
|
+ blt a0, zero ,L (error)
|
|
+ beqz a0,L (thread_start)
|
|
+
|
|
+ /* Successful return from the parent. */
|
|
+ ret
|
|
+
|
|
+L (invalid):
|
|
+ li.d a0, -EINVAL
|
|
+
|
|
+ /* Something bad happened -- no child created. */
|
|
+L (error):
|
|
+ b __syscall_error
|
|
+
|
|
+END (__clone)
|
|
+
|
|
+/* Load up the arguments to the function. Put this block of code in
|
|
+ its own function so that we can terminate the stack trace with our
|
|
+ debug info. */
|
|
+ENTRY (__thread_start)
|
|
+L (thread_start):
|
|
+
|
|
+/* Terminate call stack by noting ra is undefined. Use a dummy
|
|
+ .cfi_label to force starting the FDE. */
|
|
+ .cfi_label .Ldummy
|
|
+ cfi_undefined (1)
|
|
+
|
|
+ /* Restore the arg for user's function. */
|
|
+ ld.d a1, sp, 0 /* Function pointer. */
|
|
+ ld.d a0, sp, SZREG /* Argument pointer. */
|
|
+
|
|
+ /* Call the user's function. */
|
|
+ jirl ra, a1, 0
|
|
+
|
|
+ /* Call exit with the function's return value. */
|
|
+ li.d a7, __NR_exit
|
|
+ syscall 0
|
|
+
|
|
+ END (__thread_start)
|
|
+
|
|
+libc_hidden_def (__clone)
|
|
+weak_alias (__clone, clone)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/clone3.S b/sysdeps/unix/sysv/linux/loongarch/clone3.S
|
|
new file mode 100644
|
|
index 00000000..5eaaa546
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/clone3.S
|
|
@@ -0,0 +1,87 @@
|
|
+/* The clone3 syscall wrapper.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* clone3() is even more special than fork() as it mucks with stacks
|
|
+ and invokes a function in the right context after its all over. */
|
|
+
|
|
+#include <sys/asm.h>
|
|
+#include <sysdep.h>
|
|
+#define _ERRNO_H 1
|
|
+#include <bits/errno.h>
|
|
+#include <tls.h>
|
|
+#include "tcb-offsets.h"
|
|
+
|
|
+/* int clone3(struct clone_args *cl_args, size_t size,
|
|
+ int (*func)(void *arg), void *arg); */
|
|
+
|
|
+ENTRY (__clone3)
|
|
+
|
|
+ /* Sanity check arguments. */
|
|
+ beqz a0, L (invalid) /* No NULL cl_args pointer. */
|
|
+ beqz a2, L (invalid) /* No NULL function pointer. */
|
|
+
|
|
+ /* Do the system call. */
|
|
+ li.d a7, __NR_clone3
|
|
+ syscall 0
|
|
+
|
|
+ blt a0, zero ,L (error)
|
|
+ beqz a0, L (thread_start3)
|
|
+
|
|
+ /* Successful return from the parent. */
|
|
+ ret
|
|
+
|
|
+L (invalid):
|
|
+ li.d a0, -EINVAL
|
|
+
|
|
+ /* Something bad happened -- no child created. */
|
|
+L (error):
|
|
+ b __syscall_error
|
|
+
|
|
+END (__clone3)
|
|
+
|
|
+/* Load up the arguments to the function. Put this block of code in
|
|
+ its own function so that we can terminate the stack trace with our
|
|
+ debug info. */
|
|
+ENTRY (__thread_start3)
|
|
+L (thread_start3):
|
|
+
|
|
+/* Terminate call stack by noting ra is undefined. Use a dummy
|
|
+ .cfi_label to force starting the FDE. */
|
|
+ .cfi_label .Ldummy
|
|
+ cfi_undefined (1)
|
|
+
|
|
+ /* Align stack to 16 or 8 bytes per the ABI. */
|
|
+#ifdef __loongarch_lp64
|
|
+ bstrins.d sp, zero, 3, 0
|
|
+#else
|
|
+#error "32bit LoongArch systems are not supported"
|
|
+#endif
|
|
+
|
|
+ /* Set up arguments for the function call. */
|
|
+ move a0, a3 /* Argument. */
|
|
+ jirl ra, a2, 0 /* Call function. */
|
|
+
|
|
+ /* Call exit with the function's return value. */
|
|
+ li.d a7, __NR_exit
|
|
+ syscall 0
|
|
+
|
|
+ END (__thread_start3)
|
|
+
|
|
+libc_hidden_def (__clone3)
|
|
+weak_alias (__clone3, clone3)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/configure b/sysdeps/unix/sysv/linux/loongarch/configure
|
|
new file mode 100644
|
|
index 00000000..23b44a8c
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/configure
|
|
@@ -0,0 +1,199 @@
|
|
+# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
|
|
+ # Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
|
|
+
|
|
+arch_minimum_kernel=5.10.0
|
|
+
|
|
+libc_cv_loongarch_int_abi=no
|
|
+
|
|
+
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
|
|
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
|
|
+if ${ac_cv_path_GREP+:} false; then :
|
|
+ $as_echo_n "(cached) " >&6
|
|
+else
|
|
+ if test -z "$GREP"; then
|
|
+ ac_path_GREP_found=false
|
|
+ # Loop through the user's path and test for each of PROGNAME-LIST
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_prog in grep ggrep; do
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
|
|
+ as_fn_executable_p "$ac_path_GREP" || continue
|
|
+# Check for GNU ac_path_GREP and select it if it is found.
|
|
+ # Check for GNU $ac_path_GREP
|
|
+case `"$ac_path_GREP" --version 2>&1` in
|
|
+*GNU*)
|
|
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
|
|
+*)
|
|
+ ac_count=0
|
|
+ $as_echo_n 0123456789 >"conftest.in"
|
|
+ while :
|
|
+ do
|
|
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
|
|
+ mv "conftest.tmp" "conftest.in"
|
|
+ cp "conftest.in" "conftest.nl"
|
|
+ $as_echo 'GREP' >> "conftest.nl"
|
|
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
|
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
|
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
|
|
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
|
|
+ # Best one so far, save it but keep looking for a better one
|
|
+ ac_cv_path_GREP="$ac_path_GREP"
|
|
+ ac_path_GREP_max=$ac_count
|
|
+ fi
|
|
+ # 10*(2^10) chars as input seems more than enough
|
|
+ test $ac_count -gt 10 && break
|
|
+ done
|
|
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
|
+esac
|
|
+
|
|
+ $ac_path_GREP_found && break 3
|
|
+ done
|
|
+ done
|
|
+ done
|
|
+IFS=$as_save_IFS
|
|
+ if test -z "$ac_cv_path_GREP"; then
|
|
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
+ fi
|
|
+else
|
|
+ ac_cv_path_GREP=$GREP
|
|
+fi
|
|
+
|
|
+fi
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
|
|
+$as_echo "$ac_cv_path_GREP" >&6; }
|
|
+ GREP="$ac_cv_path_GREP"
|
|
+
|
|
+
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
|
|
+$as_echo_n "checking for egrep... " >&6; }
|
|
+if ${ac_cv_path_EGREP+:} false; then :
|
|
+ $as_echo_n "(cached) " >&6
|
|
+else
|
|
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
|
|
+ then ac_cv_path_EGREP="$GREP -E"
|
|
+ else
|
|
+ if test -z "$EGREP"; then
|
|
+ ac_path_EGREP_found=false
|
|
+ # Loop through the user's path and test for each of PROGNAME-LIST
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_prog in egrep; do
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
|
|
+ as_fn_executable_p "$ac_path_EGREP" || continue
|
|
+# Check for GNU ac_path_EGREP and select it if it is found.
|
|
+ # Check for GNU $ac_path_EGREP
|
|
+case `"$ac_path_EGREP" --version 2>&1` in
|
|
+*GNU*)
|
|
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
|
|
+*)
|
|
+ ac_count=0
|
|
+ $as_echo_n 0123456789 >"conftest.in"
|
|
+ while :
|
|
+ do
|
|
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
|
|
+ mv "conftest.tmp" "conftest.in"
|
|
+ cp "conftest.in" "conftest.nl"
|
|
+ $as_echo 'EGREP' >> "conftest.nl"
|
|
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
|
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
|
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
|
|
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
|
|
+ # Best one so far, save it but keep looking for a better one
|
|
+ ac_cv_path_EGREP="$ac_path_EGREP"
|
|
+ ac_path_EGREP_max=$ac_count
|
|
+ fi
|
|
+ # 10*(2^10) chars as input seems more than enough
|
|
+ test $ac_count -gt 10 && break
|
|
+ done
|
|
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
|
+esac
|
|
+
|
|
+ $ac_path_EGREP_found && break 3
|
|
+ done
|
|
+ done
|
|
+ done
|
|
+IFS=$as_save_IFS
|
|
+ if test -z "$ac_cv_path_EGREP"; then
|
|
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
|
+ fi
|
|
+else
|
|
+ ac_cv_path_EGREP=$EGREP
|
|
+fi
|
|
+
|
|
+ fi
|
|
+fi
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
|
|
+$as_echo "$ac_cv_path_EGREP" >&6; }
|
|
+ EGREP="$ac_cv_path_EGREP"
|
|
+
|
|
+
|
|
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
+/* end confdefs.h. */
|
|
+__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
|
|
+
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "4 4 4" >/dev/null 2>&1; then :
|
|
+ libc_cv_loongarch_int_abi=lp32
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
+/* end confdefs.h. */
|
|
+__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
|
|
+
|
|
+_ACEOF
|
|
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
|
+ $EGREP "4 8 8" >/dev/null 2>&1; then :
|
|
+ libc_cv_loongarch_int_abi=lp64
|
|
+fi
|
|
+rm -f conftest*
|
|
+
|
|
+if test $libc_cv_loongarch_int_abi = no; then
|
|
+ as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5
|
|
+fi
|
|
+
|
|
+config_vars="$config_vars
|
|
+default-abi = $libc_cv_loongarch_int_abi"
|
|
+
|
|
+case $libc_cv_loongarch_int_abi in
|
|
+lp32)
|
|
+ test -n "$libc_cv_slibdir" ||
|
|
+case "$prefix" in
|
|
+/usr | /usr/)
|
|
+ libc_cv_slibdir='/lib32'
|
|
+ libc_cv_rtlddir='/lib32'
|
|
+ if test "$libdir" = '${exec_prefix}/lib'; then
|
|
+ libdir='${exec_prefix}/lib32';
|
|
+ # Locale data can be shared between 32-bit and 64-bit libraries.
|
|
+ libc_cv_complocaledir='${exec_prefix}/lib/locale'
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+ ;;
|
|
+lp64)
|
|
+ test -n "$libc_cv_slibdir" ||
|
|
+case "$prefix" in
|
|
+/usr | /usr/)
|
|
+ libc_cv_slibdir='/lib64'
|
|
+ libc_cv_rtlddir='/lib64'
|
|
+ if test "$libdir" = '${exec_prefix}/lib'; then
|
|
+ libdir='${exec_prefix}/lib64';
|
|
+ # Locale data can be shared between 32-bit and 64-bit libraries.
|
|
+ libc_cv_complocaledir='${exec_prefix}/lib/locale'
|
|
+ fi
|
|
+ ;;
|
|
+esac
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/configure.ac b/sysdeps/unix/sysv/linux/loongarch/configure.ac
|
|
new file mode 100644
|
|
index 00000000..55ccb504
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/configure.ac
|
|
@@ -0,0 +1,27 @@
|
|
+sinclude(./aclocal.m4)dnl Autoconf lossage
|
|
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
|
+# Local configure fragment for sysdeps/unix/sysv/linux/loongarch.
|
|
+
|
|
+arch_minimum_kernel=5.10.0
|
|
+
|
|
+libc_cv_loongarch_int_abi=no
|
|
+AC_EGREP_CPP(4 4 4, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
|
|
+ ], libc_cv_loongarch_int_abi=ilp32)
|
|
+AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__
|
|
+ ], libc_cv_loongarch_int_abi=lp64)
|
|
+if test $libc_cv_loongarch_int_abi = no; then
|
|
+ AC_MSG_ERROR([Unable to determine integer ABI])
|
|
+fi
|
|
+
|
|
+LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi])
|
|
+
|
|
+case $libc_cv_loongarch_int_abi in
|
|
+ilp32)
|
|
+ LIBC_SLIBDIR_RTLDDIR([lib32], [lib32])
|
|
+ ;;
|
|
+lp64)
|
|
+ LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/dl-static.c b/sysdeps/unix/sysv/linux/loongarch/dl-static.c
|
|
new file mode 100644
|
|
index 00000000..b9a7b2a6
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/dl-static.c
|
|
@@ -0,0 +1,80 @@
|
|
+/* dl_static_init for loongarch.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <ldsodefs.h>
|
|
+
|
|
+#ifdef SHARED
|
|
+
|
|
+void
|
|
+_dl_var_init (void *array[])
|
|
+{
|
|
+ /* It has to match "variables" below. */
|
|
+ enum
|
|
+ {
|
|
+ DL_PAGESIZE = 0
|
|
+ };
|
|
+
|
|
+ GLRO (dl_pagesize) = *((size_t *) array[DL_PAGESIZE]);
|
|
+}
|
|
+
|
|
+#else
|
|
+
|
|
+static void *variables[] = {&GLRO (dl_pagesize)};
|
|
+
|
|
+static void _dl_unprotect_relro (struct link_map *l)
|
|
+{
|
|
+ ElfW (Addr) start = ((l->l_addr + l->l_relro_addr)
|
|
+ & ~(GLRO (dl_pagesize) - 1));
|
|
+ ElfW (Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
|
|
+ & ~(GLRO (dl_pagesize) - 1));
|
|
+
|
|
+ if (start != end)
|
|
+ __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE);
|
|
+}
|
|
+
|
|
+void dl_static_init (struct link_map *l)
|
|
+{
|
|
+ struct link_map *rtld_map = l;
|
|
+ struct r_scope_elem **scope;
|
|
+ const ElfW (Sym) *ref = NULL;
|
|
+ lookup_t loadbase;
|
|
+ void (*f) (void *[]);
|
|
+ size_t i;
|
|
+
|
|
+ loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
|
|
+ NULL, 0, 1, NULL);
|
|
+
|
|
+ for (scope = l->l_local_scope; *scope != NULL; scope++)
|
|
+ for (i = 0; i < (*scope)->r_nlist; i++)
|
|
+ if ((*scope)->r_list[i] == loadbase)
|
|
+ {
|
|
+ rtld_map = (*scope)->r_list[i];
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (ref != NULL)
|
|
+ {
|
|
+ f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
|
|
+ _dl_unprotect_relro (rtld_map);
|
|
+ f (variables);
|
|
+ _dl_protect_relro (rtld_map);
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/getcontext.S b/sysdeps/unix/sysv/linux/loongarch/getcontext.S
|
|
new file mode 100644
|
|
index 00000000..43b95e97
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/getcontext.S
|
|
@@ -0,0 +1,59 @@
|
|
+/* Save current context.
|
|
+ Copyright (C) 2022 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/>. */
|
|
+
|
|
+#include "ucontext-macros.h"
|
|
+
|
|
+/* int getcontext (ucontext_t *ucp) */
|
|
+
|
|
+ .text
|
|
+LEAF (__getcontext)
|
|
+ SAVE_INT_REG (ra, 1, a0)
|
|
+ SAVE_INT_REG (sp, 3, a0)
|
|
+ SAVE_INT_REG (zero, 4, a0) /* return 0 by overwriting a0. */
|
|
+ SAVE_INT_REG (x, 21, a0)
|
|
+ SAVE_INT_REG (fp, 22, a0)
|
|
+ SAVE_INT_REG (s0, 23, a0)
|
|
+ SAVE_INT_REG (s1, 24, a0)
|
|
+ SAVE_INT_REG (s2, 25, a0)
|
|
+ SAVE_INT_REG (s3, 26, a0)
|
|
+ SAVE_INT_REG (s4, 27, a0)
|
|
+ SAVE_INT_REG (s5, 28, a0)
|
|
+ SAVE_INT_REG (s6, 29, a0)
|
|
+ SAVE_INT_REG (s7, 30, a0)
|
|
+ SAVE_INT_REG (s8, 31, a0)
|
|
+ st.d ra, a0, MCONTEXT_PC
|
|
+
|
|
+/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
|
+ li.d a3, _NSIG8
|
|
+ li.d a2, UCONTEXT_SIGMASK
|
|
+ add.d a2, a2, a0
|
|
+ ori a1, zero,0
|
|
+ li.d a0, SIG_BLOCK
|
|
+
|
|
+ li.d a7, SYS_ify (rt_sigprocmask)
|
|
+ syscall 0
|
|
+ blt a0, zero, 99f
|
|
+
|
|
+ jirl $r0, $r1, 0
|
|
+
|
|
+99:
|
|
+ b __syscall_error
|
|
+
|
|
+PSEUDO_END (__getcontext)
|
|
+
|
|
+weak_alias (__getcontext, getcontext)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/ldconfig.h b/sysdeps/unix/sysv/linux/loongarch/ldconfig.h
|
|
new file mode 100644
|
|
index 00000000..126f0860
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/ldconfig.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* ldconfig default paths and libraries.
|
|
+ Copyright (C) 2001-2021 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/>. */
|
|
+
|
|
+#include <sysdeps/generic/ldconfig.h>
|
|
+
|
|
+#ifdef __loongarch_lp64
|
|
+#define SYSDEP_KNOWN_INTERPRETER_NAMES \
|
|
+ { "/lib64/ld-linux-loongarch-lp64d.so.1", FLAG_ELF_LIBC6 },
|
|
+#else
|
|
+#error cannot determine ABI
|
|
+#endif
|
|
+
|
|
+#define SYSDEP_KNOWN_LIBRARY_NAMES \
|
|
+ { "libc.so.6", FLAG_ELF_LIBC6 }, \
|
|
+ { "libm.so.6", FLAG_ELF_LIBC6 },
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
|
|
new file mode 100644
|
|
index 00000000..d42a13e0
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
|
|
@@ -0,0 +1,3 @@
|
|
+/LD_TRACE_LOADED_OBJECTS=1/a\
|
|
+add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
|
|
+s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/ldsodefs.h b/sysdeps/unix/sysv/linux/loongarch/ldsodefs.h
|
|
new file mode 100644
|
|
index 00000000..680baf2e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/ldsodefs.h
|
|
@@ -0,0 +1,33 @@
|
|
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
|
+ Copyright (C) 2021 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 _LDSODEFS_H
|
|
+
|
|
+/* Get the real definitions. */
|
|
+#include_next <ldsodefs.h>
|
|
+
|
|
+/* Now define our stuff. */
|
|
+
|
|
+/* We need special support to initialize DSO loaded for statically linked
|
|
+ binaries. */
|
|
+extern void _dl_static_init (struct link_map *map);
|
|
+#undef DL_STATIC_INIT
|
|
+#define DL_STATIC_INIT(map) _dl_static_init (map)
|
|
+
|
|
+#endif /* ldsodefs.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/localplt.data b/sysdeps/unix/sysv/linux/loongarch/localplt.data
|
|
new file mode 100644
|
|
index 00000000..817ab265
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/localplt.data
|
|
@@ -0,0 +1,12 @@
|
|
+# See scripts/check-localplt.awk for how this file is processed.
|
|
+# PLT use is required for the malloc family and for matherr because
|
|
+# users can define their own functions and have library internals call them.
|
|
+libc.so: calloc
|
|
+libc.so: free
|
|
+libc.so: malloc
|
|
+libc.so: realloc
|
|
+# The TLS-enabled version of these functions is interposed from libc.so.
|
|
+ld.so: _dl_signal_error
|
|
+ld.so: _dl_catch_error
|
|
+ld.so: _dl_signal_exception
|
|
+ld.so: _dl_catch_exception
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/Implies b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies
|
|
new file mode 100644
|
|
index 00000000..117c2b8e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies
|
|
@@ -0,0 +1,3 @@
|
|
+unix/sysv/linux/loongarch
|
|
+unix/sysv/linux/generic
|
|
+unix/sysv/linux/wordsize-64
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data b/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data
|
|
new file mode 100644
|
|
index 00000000..ac925ccb
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data
|
|
@@ -0,0 +1,67 @@
|
|
+blkcnt64_t:l
|
|
+blkcnt_t:l
|
|
+blksize_t:i
|
|
+caddr_t:Pc
|
|
+clockid_t:i
|
|
+clock_t:l
|
|
+daddr_t:i
|
|
+dev_t:m
|
|
+fd_mask:l
|
|
+fsblkcnt64_t:m
|
|
+fsblkcnt_t:m
|
|
+fsfilcnt64_t:m
|
|
+fsfilcnt_t:m
|
|
+fsid_t:8__fsid_t
|
|
+gid_t:j
|
|
+id_t:j
|
|
+ino64_t:m
|
|
+ino_t:m
|
|
+int16_t:s
|
|
+int32_t:i
|
|
+int64_t:l
|
|
+int8_t:a
|
|
+intptr_t:l
|
|
+key_t:i
|
|
+loff_t:l
|
|
+mode_t:j
|
|
+nlink_t:j
|
|
+off64_t:l
|
|
+off_t:l
|
|
+pid_t:i
|
|
+pthread_attr_t:14pthread_attr_t
|
|
+pthread_barrier_t:17pthread_barrier_t
|
|
+pthread_barrierattr_t:21pthread_barrierattr_t
|
|
+pthread_cond_t:14pthread_cond_t
|
|
+pthread_condattr_t:18pthread_condattr_t
|
|
+pthread_key_t:j
|
|
+pthread_mutex_t:15pthread_mutex_t
|
|
+pthread_mutexattr_t:19pthread_mutexattr_t
|
|
+pthread_once_t:i
|
|
+pthread_rwlock_t:16pthread_rwlock_t
|
|
+pthread_rwlockattr_t:20pthread_rwlockattr_t
|
|
+pthread_spinlock_t:i
|
|
+pthread_t:m
|
|
+quad_t:l
|
|
+register_t:l
|
|
+rlim64_t:m
|
|
+rlim_t:m
|
|
+sigset_t:10__sigset_t
|
|
+size_t:m
|
|
+socklen_t:j
|
|
+ssize_t:l
|
|
+suseconds_t:l
|
|
+time_t:l
|
|
+u_char:h
|
|
+uid_t:j
|
|
+uint:j
|
|
+u_int:j
|
|
+u_int16_t:t
|
|
+u_int32_t:j
|
|
+u_int64_t:m
|
|
+u_int8_t:h
|
|
+ulong:m
|
|
+u_long:m
|
|
+u_quad_t:m
|
|
+useconds_t:j
|
|
+ushort:t
|
|
+u_short:t
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h
|
|
new file mode 100644
|
|
index 00000000..a02865b4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h
|
|
@@ -0,0 +1,44 @@
|
|
+/* jump buffer constants for LoongArch.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+/* Produced by this program:
|
|
+
|
|
+ #include <stdio.h>
|
|
+ #include <unistd.h>
|
|
+ #include <setjmp.h>
|
|
+ #include <stddef.h>
|
|
+
|
|
+ int main (int argc, char **argv)
|
|
+ {
|
|
+ printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf));
|
|
+ printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf));
|
|
+ printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf));
|
|
+ printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf));
|
|
+ printf ("#define MASK_WAS_SAVED_OFFSET %d\n",
|
|
+ offsetof (struct __jmp_buf_tag, __mask_was_saved));
|
|
+ printf ("#define SAVED_MASK_OFFSET %d\n",
|
|
+ offsetof (struct __jmp_buf_tag, __saved_mask));
|
|
+ } */
|
|
+
|
|
+#define JMP_BUF_SIZE 304
|
|
+#define JMP_BUF_ALIGN 8
|
|
+#define SIGJMP_BUF_SIZE 304
|
|
+#define SIGJMP_BUF_ALIGN 8
|
|
+#define MASK_WAS_SAVED_OFFSET 168
|
|
+#define SAVED_MASK_OFFSET 176
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist
|
|
new file mode 100644
|
|
index 00000000..a6a0faff
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist
|
|
@@ -0,0 +1,9 @@
|
|
+GLIBC_2.36 __libc_stack_end D 0x8
|
|
+GLIBC_2.36 __rseq_flags D 0x4
|
|
+GLIBC_2.36 __rseq_offset D 0x8
|
|
+GLIBC_2.36 __rseq_size D 0x4
|
|
+GLIBC_2.36 __rtld_version_placeholder F
|
|
+GLIBC_2.36 __stack_chk_guard D 0x8
|
|
+GLIBC_2.36 __tls_get_addr F
|
|
+GLIBC_2.36 _dl_mcount F
|
|
+GLIBC_2.36 _r_debug D 0x28
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist
|
|
new file mode 100644
|
|
index 00000000..404afa36
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist
|
|
@@ -0,0 +1 @@
|
|
+GLIBC_2.36 __ctype_get_mb_cur_max F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libanl.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libanl.abilist
|
|
new file mode 100644
|
|
index 00000000..377e03d4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libanl.abilist
|
|
@@ -0,0 +1 @@
|
|
+GLIBC_2.36 __libanl_version_placeholder F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
|
|
new file mode 100644
|
|
index 00000000..e1640cd7
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
|
|
@@ -0,0 +1,2135 @@
|
|
+GLIBC_2.36 _Exit F
|
|
+GLIBC_2.36 _Fork F
|
|
+GLIBC_2.36 _IO_2_1_stderr_ D 0xe0
|
|
+GLIBC_2.36 _IO_2_1_stdin_ D 0xe0
|
|
+GLIBC_2.36 _IO_2_1_stdout_ D 0xe0
|
|
+GLIBC_2.36 _IO_adjust_column F
|
|
+GLIBC_2.36 _IO_adjust_wcolumn F
|
|
+GLIBC_2.36 _IO_default_doallocate F
|
|
+GLIBC_2.36 _IO_default_finish F
|
|
+GLIBC_2.36 _IO_default_pbackfail F
|
|
+GLIBC_2.36 _IO_default_uflow F
|
|
+GLIBC_2.36 _IO_default_xsgetn F
|
|
+GLIBC_2.36 _IO_default_xsputn F
|
|
+GLIBC_2.36 _IO_do_write F
|
|
+GLIBC_2.36 _IO_doallocbuf F
|
|
+GLIBC_2.36 _IO_fclose F
|
|
+GLIBC_2.36 _IO_fdopen F
|
|
+GLIBC_2.36 _IO_feof F
|
|
+GLIBC_2.36 _IO_ferror F
|
|
+GLIBC_2.36 _IO_fflush F
|
|
+GLIBC_2.36 _IO_fgetpos F
|
|
+GLIBC_2.36 _IO_fgetpos64 F
|
|
+GLIBC_2.36 _IO_fgets F
|
|
+GLIBC_2.36 _IO_file_attach F
|
|
+GLIBC_2.36 _IO_file_close F
|
|
+GLIBC_2.36 _IO_file_close_it F
|
|
+GLIBC_2.36 _IO_file_doallocate F
|
|
+GLIBC_2.36 _IO_file_finish F
|
|
+GLIBC_2.36 _IO_file_fopen F
|
|
+GLIBC_2.36 _IO_file_init F
|
|
+GLIBC_2.36 _IO_file_jumps D 0xa8
|
|
+GLIBC_2.36 _IO_file_open F
|
|
+GLIBC_2.36 _IO_file_overflow F
|
|
+GLIBC_2.36 _IO_file_read F
|
|
+GLIBC_2.36 _IO_file_seek F
|
|
+GLIBC_2.36 _IO_file_seekoff F
|
|
+GLIBC_2.36 _IO_file_setbuf F
|
|
+GLIBC_2.36 _IO_file_stat F
|
|
+GLIBC_2.36 _IO_file_sync F
|
|
+GLIBC_2.36 _IO_file_underflow F
|
|
+GLIBC_2.36 _IO_file_write F
|
|
+GLIBC_2.36 _IO_file_xsputn F
|
|
+GLIBC_2.36 _IO_flockfile F
|
|
+GLIBC_2.36 _IO_flush_all F
|
|
+GLIBC_2.36 _IO_flush_all_linebuffered F
|
|
+GLIBC_2.36 _IO_fopen F
|
|
+GLIBC_2.36 _IO_fprintf F
|
|
+GLIBC_2.36 _IO_fputs F
|
|
+GLIBC_2.36 _IO_fread F
|
|
+GLIBC_2.36 _IO_free_backup_area F
|
|
+GLIBC_2.36 _IO_free_wbackup_area F
|
|
+GLIBC_2.36 _IO_fsetpos F
|
|
+GLIBC_2.36 _IO_fsetpos64 F
|
|
+GLIBC_2.36 _IO_ftell F
|
|
+GLIBC_2.36 _IO_ftrylockfile F
|
|
+GLIBC_2.36 _IO_funlockfile F
|
|
+GLIBC_2.36 _IO_fwrite F
|
|
+GLIBC_2.36 _IO_getc F
|
|
+GLIBC_2.36 _IO_getline F
|
|
+GLIBC_2.36 _IO_getline_info F
|
|
+GLIBC_2.36 _IO_gets F
|
|
+GLIBC_2.36 _IO_init F
|
|
+GLIBC_2.36 _IO_init_marker F
|
|
+GLIBC_2.36 _IO_init_wmarker F
|
|
+GLIBC_2.36 _IO_iter_begin F
|
|
+GLIBC_2.36 _IO_iter_end F
|
|
+GLIBC_2.36 _IO_iter_file F
|
|
+GLIBC_2.36 _IO_iter_next F
|
|
+GLIBC_2.36 _IO_least_wmarker F
|
|
+GLIBC_2.36 _IO_link_in F
|
|
+GLIBC_2.36 _IO_list_all D 0x8
|
|
+GLIBC_2.36 _IO_list_lock F
|
|
+GLIBC_2.36 _IO_list_resetlock F
|
|
+GLIBC_2.36 _IO_list_unlock F
|
|
+GLIBC_2.36 _IO_marker_delta F
|
|
+GLIBC_2.36 _IO_marker_difference F
|
|
+GLIBC_2.36 _IO_padn F
|
|
+GLIBC_2.36 _IO_peekc_locked F
|
|
+GLIBC_2.36 _IO_popen F
|
|
+GLIBC_2.36 _IO_printf F
|
|
+GLIBC_2.36 _IO_proc_close F
|
|
+GLIBC_2.36 _IO_proc_open F
|
|
+GLIBC_2.36 _IO_putc F
|
|
+GLIBC_2.36 _IO_puts F
|
|
+GLIBC_2.36 _IO_remove_marker F
|
|
+GLIBC_2.36 _IO_seekmark F
|
|
+GLIBC_2.36 _IO_seekoff F
|
|
+GLIBC_2.36 _IO_seekpos F
|
|
+GLIBC_2.36 _IO_seekwmark F
|
|
+GLIBC_2.36 _IO_setb F
|
|
+GLIBC_2.36 _IO_setbuffer F
|
|
+GLIBC_2.36 _IO_setvbuf F
|
|
+GLIBC_2.36 _IO_sgetn F
|
|
+GLIBC_2.36 _IO_sprintf F
|
|
+GLIBC_2.36 _IO_sputbackc F
|
|
+GLIBC_2.36 _IO_sputbackwc F
|
|
+GLIBC_2.36 _IO_sscanf F
|
|
+GLIBC_2.36 _IO_str_init_readonly F
|
|
+GLIBC_2.36 _IO_str_init_static F
|
|
+GLIBC_2.36 _IO_str_overflow F
|
|
+GLIBC_2.36 _IO_str_pbackfail F
|
|
+GLIBC_2.36 _IO_str_seekoff F
|
|
+GLIBC_2.36 _IO_str_underflow F
|
|
+GLIBC_2.36 _IO_sungetc F
|
|
+GLIBC_2.36 _IO_sungetwc F
|
|
+GLIBC_2.36 _IO_switch_to_get_mode F
|
|
+GLIBC_2.36 _IO_switch_to_main_wget_area F
|
|
+GLIBC_2.36 _IO_switch_to_wbackup_area F
|
|
+GLIBC_2.36 _IO_switch_to_wget_mode F
|
|
+GLIBC_2.36 _IO_un_link F
|
|
+GLIBC_2.36 _IO_ungetc F
|
|
+GLIBC_2.36 _IO_unsave_markers F
|
|
+GLIBC_2.36 _IO_unsave_wmarkers F
|
|
+GLIBC_2.36 _IO_vfprintf F
|
|
+GLIBC_2.36 _IO_vsprintf F
|
|
+GLIBC_2.36 _IO_wdefault_doallocate F
|
|
+GLIBC_2.36 _IO_wdefault_finish F
|
|
+GLIBC_2.36 _IO_wdefault_pbackfail F
|
|
+GLIBC_2.36 _IO_wdefault_uflow F
|
|
+GLIBC_2.36 _IO_wdefault_xsgetn F
|
|
+GLIBC_2.36 _IO_wdefault_xsputn F
|
|
+GLIBC_2.36 _IO_wdo_write F
|
|
+GLIBC_2.36 _IO_wdoallocbuf F
|
|
+GLIBC_2.36 _IO_wfile_jumps D 0xa8
|
|
+GLIBC_2.36 _IO_wfile_overflow F
|
|
+GLIBC_2.36 _IO_wfile_seekoff F
|
|
+GLIBC_2.36 _IO_wfile_sync F
|
|
+GLIBC_2.36 _IO_wfile_underflow F
|
|
+GLIBC_2.36 _IO_wfile_xsputn F
|
|
+GLIBC_2.36 _IO_wmarker_delta F
|
|
+GLIBC_2.36 _IO_wsetb F
|
|
+GLIBC_2.36 __adjtimex F
|
|
+GLIBC_2.36 __argz_count F
|
|
+GLIBC_2.36 __argz_next F
|
|
+GLIBC_2.36 __argz_stringify F
|
|
+GLIBC_2.36 __asprintf F
|
|
+GLIBC_2.36 __asprintf_chk F
|
|
+GLIBC_2.36 __assert F
|
|
+GLIBC_2.36 __assert_fail F
|
|
+GLIBC_2.36 __assert_perror_fail F
|
|
+GLIBC_2.36 __backtrace F
|
|
+GLIBC_2.36 __backtrace_symbols F
|
|
+GLIBC_2.36 __backtrace_symbols_fd F
|
|
+GLIBC_2.36 __bsd_getpgrp F
|
|
+GLIBC_2.36 __bzero F
|
|
+GLIBC_2.36 __check_rhosts_file D 0x4
|
|
+GLIBC_2.36 __chk_fail F
|
|
+GLIBC_2.36 __clone F
|
|
+GLIBC_2.36 __close F
|
|
+GLIBC_2.36 __cmsg_nxthdr F
|
|
+GLIBC_2.36 __confstr_chk F
|
|
+GLIBC_2.36 __connect F
|
|
+GLIBC_2.36 __ctype_b_loc F
|
|
+GLIBC_2.36 __ctype_get_mb_cur_max F
|
|
+GLIBC_2.36 __ctype_tolower_loc F
|
|
+GLIBC_2.36 __ctype_toupper_loc F
|
|
+GLIBC_2.36 __curbrk D 0x8
|
|
+GLIBC_2.36 __cxa_at_quick_exit F
|
|
+GLIBC_2.36 __cxa_atexit F
|
|
+GLIBC_2.36 __cxa_finalize F
|
|
+GLIBC_2.36 __cxa_thread_atexit_impl F
|
|
+GLIBC_2.36 __cyg_profile_func_enter F
|
|
+GLIBC_2.36 __cyg_profile_func_exit F
|
|
+GLIBC_2.36 __daylight D 0x4
|
|
+GLIBC_2.36 __dcgettext F
|
|
+GLIBC_2.36 __dgettext F
|
|
+GLIBC_2.36 __dprintf_chk F
|
|
+GLIBC_2.36 __dup2 F
|
|
+GLIBC_2.36 __duplocale F
|
|
+GLIBC_2.36 __endmntent F
|
|
+GLIBC_2.36 __environ D 0x8
|
|
+GLIBC_2.36 __errno_location F
|
|
+GLIBC_2.36 __explicit_bzero_chk F
|
|
+GLIBC_2.36 __fbufsize F
|
|
+GLIBC_2.36 __fcntl F
|
|
+GLIBC_2.36 __fdelt_chk F
|
|
+GLIBC_2.36 __fdelt_warn F
|
|
+GLIBC_2.36 __ffs F
|
|
+GLIBC_2.36 __fgets_chk F
|
|
+GLIBC_2.36 __fgets_unlocked_chk F
|
|
+GLIBC_2.36 __fgetws_chk F
|
|
+GLIBC_2.36 __fgetws_unlocked_chk F
|
|
+GLIBC_2.36 __finite F
|
|
+GLIBC_2.36 __finitef F
|
|
+GLIBC_2.36 __finitel F
|
|
+GLIBC_2.36 __flbf F
|
|
+GLIBC_2.36 __fork F
|
|
+GLIBC_2.36 __fpending F
|
|
+GLIBC_2.36 __fprintf_chk F
|
|
+GLIBC_2.36 __fpu_control D 0x4
|
|
+GLIBC_2.36 __fpurge F
|
|
+GLIBC_2.36 __fread_chk F
|
|
+GLIBC_2.36 __fread_unlocked_chk F
|
|
+GLIBC_2.36 __freadable F
|
|
+GLIBC_2.36 __freading F
|
|
+GLIBC_2.36 __freelocale F
|
|
+GLIBC_2.36 __fsetlocking F
|
|
+GLIBC_2.36 __fwprintf_chk F
|
|
+GLIBC_2.36 __fwritable F
|
|
+GLIBC_2.36 __fwriting F
|
|
+GLIBC_2.36 __getauxval F
|
|
+GLIBC_2.36 __getcwd_chk F
|
|
+GLIBC_2.36 __getdelim F
|
|
+GLIBC_2.36 __getdomainname_chk F
|
|
+GLIBC_2.36 __getgroups_chk F
|
|
+GLIBC_2.36 __gethostname_chk F
|
|
+GLIBC_2.36 __getlogin_r_chk F
|
|
+GLIBC_2.36 __getmntent_r F
|
|
+GLIBC_2.36 __getpagesize F
|
|
+GLIBC_2.36 __getpgid F
|
|
+GLIBC_2.36 __getpid F
|
|
+GLIBC_2.36 __gets_chk F
|
|
+GLIBC_2.36 __gettimeofday F
|
|
+GLIBC_2.36 __getwd_chk F
|
|
+GLIBC_2.36 __gmtime_r F
|
|
+GLIBC_2.36 __h_errno_location F
|
|
+GLIBC_2.36 __isalnum_l F
|
|
+GLIBC_2.36 __isalpha_l F
|
|
+GLIBC_2.36 __isascii_l F
|
|
+GLIBC_2.36 __isblank_l F
|
|
+GLIBC_2.36 __iscntrl_l F
|
|
+GLIBC_2.36 __isctype F
|
|
+GLIBC_2.36 __isdigit_l F
|
|
+GLIBC_2.36 __isgraph_l F
|
|
+GLIBC_2.36 __isinf F
|
|
+GLIBC_2.36 __isinff F
|
|
+GLIBC_2.36 __isinfl F
|
|
+GLIBC_2.36 __islower_l F
|
|
+GLIBC_2.36 __isnan F
|
|
+GLIBC_2.36 __isnanf F
|
|
+GLIBC_2.36 __isnanl F
|
|
+GLIBC_2.36 __isoc99_fscanf F
|
|
+GLIBC_2.36 __isoc99_fwscanf F
|
|
+GLIBC_2.36 __isoc99_scanf F
|
|
+GLIBC_2.36 __isoc99_sscanf F
|
|
+GLIBC_2.36 __isoc99_swscanf F
|
|
+GLIBC_2.36 __isoc99_vfscanf F
|
|
+GLIBC_2.36 __isoc99_vfwscanf F
|
|
+GLIBC_2.36 __isoc99_vscanf F
|
|
+GLIBC_2.36 __isoc99_vsscanf F
|
|
+GLIBC_2.36 __isoc99_vswscanf F
|
|
+GLIBC_2.36 __isoc99_vwscanf F
|
|
+GLIBC_2.36 __isoc99_wscanf F
|
|
+GLIBC_2.36 __isprint_l F
|
|
+GLIBC_2.36 __ispunct_l F
|
|
+GLIBC_2.36 __isspace_l F
|
|
+GLIBC_2.36 __isupper_l F
|
|
+GLIBC_2.36 __iswalnum_l F
|
|
+GLIBC_2.36 __iswalpha_l F
|
|
+GLIBC_2.36 __iswblank_l F
|
|
+GLIBC_2.36 __iswcntrl_l F
|
|
+GLIBC_2.36 __iswctype F
|
|
+GLIBC_2.36 __iswctype_l F
|
|
+GLIBC_2.36 __iswdigit_l F
|
|
+GLIBC_2.36 __iswgraph_l F
|
|
+GLIBC_2.36 __iswlower_l F
|
|
+GLIBC_2.36 __iswprint_l F
|
|
+GLIBC_2.36 __iswpunct_l F
|
|
+GLIBC_2.36 __iswspace_l F
|
|
+GLIBC_2.36 __iswupper_l F
|
|
+GLIBC_2.36 __iswxdigit_l F
|
|
+GLIBC_2.36 __isxdigit_l F
|
|
+GLIBC_2.36 __ivaliduser F
|
|
+GLIBC_2.36 __libc_allocate_rtsig F
|
|
+GLIBC_2.36 __libc_calloc F
|
|
+GLIBC_2.36 __libc_current_sigrtmax F
|
|
+GLIBC_2.36 __libc_current_sigrtmin F
|
|
+GLIBC_2.36 __libc_free F
|
|
+GLIBC_2.36 __libc_freeres F
|
|
+GLIBC_2.36 __libc_init_first F
|
|
+GLIBC_2.36 __libc_mallinfo F
|
|
+GLIBC_2.36 __libc_malloc F
|
|
+GLIBC_2.36 __libc_mallopt F
|
|
+GLIBC_2.36 __libc_memalign F
|
|
+GLIBC_2.36 __libc_pvalloc F
|
|
+GLIBC_2.36 __libc_realloc F
|
|
+GLIBC_2.36 __libc_sa_len F
|
|
+GLIBC_2.36 __libc_single_threaded D 0x1
|
|
+GLIBC_2.36 __libc_start_main F
|
|
+GLIBC_2.36 __libc_valloc F
|
|
+GLIBC_2.36 __longjmp_chk F
|
|
+GLIBC_2.36 __lseek F
|
|
+GLIBC_2.36 __mbrlen F
|
|
+GLIBC_2.36 __mbrtowc F
|
|
+GLIBC_2.36 __mbsnrtowcs_chk F
|
|
+GLIBC_2.36 __mbsrtowcs_chk F
|
|
+GLIBC_2.36 __mbstowcs_chk F
|
|
+GLIBC_2.36 __memcpy_chk F
|
|
+GLIBC_2.36 __memmove_chk F
|
|
+GLIBC_2.36 __mempcpy F
|
|
+GLIBC_2.36 __mempcpy_chk F
|
|
+GLIBC_2.36 __memset_chk F
|
|
+GLIBC_2.36 __monstartup F
|
|
+GLIBC_2.36 __mq_open_2 F
|
|
+GLIBC_2.36 __nanosleep F
|
|
+GLIBC_2.36 __newlocale F
|
|
+GLIBC_2.36 __nl_langinfo_l F
|
|
+GLIBC_2.36 __nss_configure_lookup F
|
|
+GLIBC_2.36 __nss_hostname_digits_dots F
|
|
+GLIBC_2.36 __obstack_printf_chk F
|
|
+GLIBC_2.36 __obstack_vprintf_chk F
|
|
+GLIBC_2.36 __open F
|
|
+GLIBC_2.36 __open64 F
|
|
+GLIBC_2.36 __open64_2 F
|
|
+GLIBC_2.36 __open_2 F
|
|
+GLIBC_2.36 __openat64_2 F
|
|
+GLIBC_2.36 __openat_2 F
|
|
+GLIBC_2.36 __overflow F
|
|
+GLIBC_2.36 __pipe F
|
|
+GLIBC_2.36 __poll F
|
|
+GLIBC_2.36 __poll_chk F
|
|
+GLIBC_2.36 __posix_getopt F
|
|
+GLIBC_2.36 __ppoll_chk F
|
|
+GLIBC_2.36 __pread64 F
|
|
+GLIBC_2.36 __pread64_chk F
|
|
+GLIBC_2.36 __pread_chk F
|
|
+GLIBC_2.36 __printf_chk F
|
|
+GLIBC_2.36 __printf_fp F
|
|
+GLIBC_2.36 __profile_frequency F
|
|
+GLIBC_2.36 __progname D 0x8
|
|
+GLIBC_2.36 __progname_full D 0x8
|
|
+GLIBC_2.36 __pthread_cleanup_routine F
|
|
+GLIBC_2.36 __pthread_key_create F
|
|
+GLIBC_2.36 __pthread_register_cancel F
|
|
+GLIBC_2.36 __pthread_register_cancel_defer F
|
|
+GLIBC_2.36 __pthread_rwlock_unlock F
|
|
+GLIBC_2.36 __pthread_unregister_cancel F
|
|
+GLIBC_2.36 __pthread_unregister_cancel_restore F
|
|
+GLIBC_2.36 __pthread_unwind_next F
|
|
+GLIBC_2.36 __ptsname_r_chk F
|
|
+GLIBC_2.36 __pwrite64 F
|
|
+GLIBC_2.36 __rawmemchr F
|
|
+GLIBC_2.36 __rcmd_errstr D 0x8
|
|
+GLIBC_2.36 __read F
|
|
+GLIBC_2.36 __read_chk F
|
|
+GLIBC_2.36 __readlink_chk F
|
|
+GLIBC_2.36 __readlinkat_chk F
|
|
+GLIBC_2.36 __realpath_chk F
|
|
+GLIBC_2.36 __recv_chk F
|
|
+GLIBC_2.36 __recvfrom_chk F
|
|
+GLIBC_2.36 __register_atfork F
|
|
+GLIBC_2.36 __res_init F
|
|
+GLIBC_2.36 __res_nclose F
|
|
+GLIBC_2.36 __res_ninit F
|
|
+GLIBC_2.36 __res_randomid F
|
|
+GLIBC_2.36 __res_state F
|
|
+GLIBC_2.36 __sbrk F
|
|
+GLIBC_2.36 __sched_cpualloc F
|
|
+GLIBC_2.36 __sched_cpucount F
|
|
+GLIBC_2.36 __sched_cpufree F
|
|
+GLIBC_2.36 __sched_get_priority_max F
|
|
+GLIBC_2.36 __sched_get_priority_min F
|
|
+GLIBC_2.36 __sched_getparam F
|
|
+GLIBC_2.36 __sched_getscheduler F
|
|
+GLIBC_2.36 __sched_setscheduler F
|
|
+GLIBC_2.36 __sched_yield F
|
|
+GLIBC_2.36 __select F
|
|
+GLIBC_2.36 __send F
|
|
+GLIBC_2.36 __setmntent F
|
|
+GLIBC_2.36 __setpgid F
|
|
+GLIBC_2.36 __sigaction F
|
|
+GLIBC_2.36 __signbit F
|
|
+GLIBC_2.36 __signbitf F
|
|
+GLIBC_2.36 __signbitl F
|
|
+GLIBC_2.36 __sigpause F
|
|
+GLIBC_2.36 __sigsetjmp F
|
|
+GLIBC_2.36 __sigsuspend F
|
|
+GLIBC_2.36 __snprintf_chk F
|
|
+GLIBC_2.36 __sprintf_chk F
|
|
+GLIBC_2.36 __stack_chk_fail F
|
|
+GLIBC_2.36 __statfs F
|
|
+GLIBC_2.36 __stpcpy F
|
|
+GLIBC_2.36 __stpcpy_chk F
|
|
+GLIBC_2.36 __stpncpy F
|
|
+GLIBC_2.36 __stpncpy_chk F
|
|
+GLIBC_2.36 __strcasecmp F
|
|
+GLIBC_2.36 __strcasecmp_l F
|
|
+GLIBC_2.36 __strcasestr F
|
|
+GLIBC_2.36 __strcat_chk F
|
|
+GLIBC_2.36 __strcoll_l F
|
|
+GLIBC_2.36 __strcpy_chk F
|
|
+GLIBC_2.36 __strdup F
|
|
+GLIBC_2.36 __strerror_r F
|
|
+GLIBC_2.36 __strfmon_l F
|
|
+GLIBC_2.36 __strftime_l F
|
|
+GLIBC_2.36 __strncasecmp_l F
|
|
+GLIBC_2.36 __strncat_chk F
|
|
+GLIBC_2.36 __strncpy_chk F
|
|
+GLIBC_2.36 __strndup F
|
|
+GLIBC_2.36 __strsep_g F
|
|
+GLIBC_2.36 __strtod_internal F
|
|
+GLIBC_2.36 __strtod_l F
|
|
+GLIBC_2.36 __strtof_internal F
|
|
+GLIBC_2.36 __strtof_l F
|
|
+GLIBC_2.36 __strtok_r F
|
|
+GLIBC_2.36 __strtol_internal F
|
|
+GLIBC_2.36 __strtol_l F
|
|
+GLIBC_2.36 __strtold_internal F
|
|
+GLIBC_2.36 __strtold_l F
|
|
+GLIBC_2.36 __strtoll_internal F
|
|
+GLIBC_2.36 __strtoll_l F
|
|
+GLIBC_2.36 __strtoul_internal F
|
|
+GLIBC_2.36 __strtoul_l F
|
|
+GLIBC_2.36 __strtoull_internal F
|
|
+GLIBC_2.36 __strtoull_l F
|
|
+GLIBC_2.36 __strverscmp F
|
|
+GLIBC_2.36 __strxfrm_l F
|
|
+GLIBC_2.36 __swprintf_chk F
|
|
+GLIBC_2.36 __sysconf F
|
|
+GLIBC_2.36 __syslog_chk F
|
|
+GLIBC_2.36 __sysv_signal F
|
|
+GLIBC_2.36 __timezone D 0x8
|
|
+GLIBC_2.36 __toascii_l F
|
|
+GLIBC_2.36 __tolower_l F
|
|
+GLIBC_2.36 __toupper_l F
|
|
+GLIBC_2.36 __towctrans F
|
|
+GLIBC_2.36 __towctrans_l F
|
|
+GLIBC_2.36 __towlower_l F
|
|
+GLIBC_2.36 __towupper_l F
|
|
+GLIBC_2.36 __ttyname_r_chk F
|
|
+GLIBC_2.36 __tzname D 0x10
|
|
+GLIBC_2.36 __uflow F
|
|
+GLIBC_2.36 __underflow F
|
|
+GLIBC_2.36 __uselocale F
|
|
+GLIBC_2.36 __vasprintf_chk F
|
|
+GLIBC_2.36 __vdprintf_chk F
|
|
+GLIBC_2.36 __vfork F
|
|
+GLIBC_2.36 __vfprintf_chk F
|
|
+GLIBC_2.36 __vfscanf F
|
|
+GLIBC_2.36 __vfwprintf_chk F
|
|
+GLIBC_2.36 __vprintf_chk F
|
|
+GLIBC_2.36 __vsnprintf F
|
|
+GLIBC_2.36 __vsnprintf_chk F
|
|
+GLIBC_2.36 __vsprintf_chk F
|
|
+GLIBC_2.36 __vsscanf F
|
|
+GLIBC_2.36 __vswprintf_chk F
|
|
+GLIBC_2.36 __vsyslog_chk F
|
|
+GLIBC_2.36 __vwprintf_chk F
|
|
+GLIBC_2.36 __wait F
|
|
+GLIBC_2.36 __waitpid F
|
|
+GLIBC_2.36 __wcpcpy_chk F
|
|
+GLIBC_2.36 __wcpncpy_chk F
|
|
+GLIBC_2.36 __wcrtomb_chk F
|
|
+GLIBC_2.36 __wcscasecmp_l F
|
|
+GLIBC_2.36 __wcscat_chk F
|
|
+GLIBC_2.36 __wcscoll_l F
|
|
+GLIBC_2.36 __wcscpy_chk F
|
|
+GLIBC_2.36 __wcsftime_l F
|
|
+GLIBC_2.36 __wcsncasecmp_l F
|
|
+GLIBC_2.36 __wcsncat_chk F
|
|
+GLIBC_2.36 __wcsncpy_chk F
|
|
+GLIBC_2.36 __wcsnrtombs_chk F
|
|
+GLIBC_2.36 __wcsrtombs_chk F
|
|
+GLIBC_2.36 __wcstod_internal F
|
|
+GLIBC_2.36 __wcstod_l F
|
|
+GLIBC_2.36 __wcstof_internal F
|
|
+GLIBC_2.36 __wcstof_l F
|
|
+GLIBC_2.36 __wcstol_internal F
|
|
+GLIBC_2.36 __wcstol_l F
|
|
+GLIBC_2.36 __wcstold_internal F
|
|
+GLIBC_2.36 __wcstold_l F
|
|
+GLIBC_2.36 __wcstoll_internal F
|
|
+GLIBC_2.36 __wcstoll_l F
|
|
+GLIBC_2.36 __wcstombs_chk F
|
|
+GLIBC_2.36 __wcstoul_internal F
|
|
+GLIBC_2.36 __wcstoul_l F
|
|
+GLIBC_2.36 __wcstoull_internal F
|
|
+GLIBC_2.36 __wcstoull_l F
|
|
+GLIBC_2.36 __wcsxfrm_l F
|
|
+GLIBC_2.36 __wctomb_chk F
|
|
+GLIBC_2.36 __wctrans_l F
|
|
+GLIBC_2.36 __wctype_l F
|
|
+GLIBC_2.36 __wmemcpy_chk F
|
|
+GLIBC_2.36 __wmemmove_chk F
|
|
+GLIBC_2.36 __wmempcpy_chk F
|
|
+GLIBC_2.36 __wmemset_chk F
|
|
+GLIBC_2.36 __woverflow F
|
|
+GLIBC_2.36 __wprintf_chk F
|
|
+GLIBC_2.36 __write F
|
|
+GLIBC_2.36 __wuflow F
|
|
+GLIBC_2.36 __wunderflow F
|
|
+GLIBC_2.36 __xpg_basename F
|
|
+GLIBC_2.36 __xpg_sigpause F
|
|
+GLIBC_2.36 __xpg_strerror_r F
|
|
+GLIBC_2.36 _dl_mcount_wrapper F
|
|
+GLIBC_2.36 _dl_mcount_wrapper_check F
|
|
+GLIBC_2.36 _environ D 0x8
|
|
+GLIBC_2.36 _exit F
|
|
+GLIBC_2.36 _flushlbf F
|
|
+GLIBC_2.36 _libc_intl_domainname D 0x5
|
|
+GLIBC_2.36 _longjmp F
|
|
+GLIBC_2.36 _mcleanup F
|
|
+GLIBC_2.36 _mcount F
|
|
+GLIBC_2.36 _nl_default_dirname D 0x12
|
|
+GLIBC_2.36 _nl_domain_bindings D 0x8
|
|
+GLIBC_2.36 _nl_msg_cat_cntr D 0x4
|
|
+GLIBC_2.36 _obstack_allocated_p F
|
|
+GLIBC_2.36 _obstack_begin F
|
|
+GLIBC_2.36 _obstack_begin_1 F
|
|
+GLIBC_2.36 _obstack_free F
|
|
+GLIBC_2.36 _obstack_memory_used F
|
|
+GLIBC_2.36 _obstack_newchunk F
|
|
+GLIBC_2.36 _pthread_cleanup_pop F
|
|
+GLIBC_2.36 _pthread_cleanup_push F
|
|
+GLIBC_2.36 _res D 0x238
|
|
+GLIBC_2.36 _res_hconf D 0x48
|
|
+GLIBC_2.36 _setjmp F
|
|
+GLIBC_2.36 _tolower F
|
|
+GLIBC_2.36 _toupper F
|
|
+GLIBC_2.36 a64l F
|
|
+GLIBC_2.36 abort F
|
|
+GLIBC_2.36 abs F
|
|
+GLIBC_2.36 accept F
|
|
+GLIBC_2.36 accept4 F
|
|
+GLIBC_2.36 access F
|
|
+GLIBC_2.36 acct F
|
|
+GLIBC_2.36 addmntent F
|
|
+GLIBC_2.36 addseverity F
|
|
+GLIBC_2.36 adjtime F
|
|
+GLIBC_2.36 adjtimex F
|
|
+GLIBC_2.36 aio_cancel F
|
|
+GLIBC_2.36 aio_cancel64 F
|
|
+GLIBC_2.36 aio_error F
|
|
+GLIBC_2.36 aio_error64 F
|
|
+GLIBC_2.36 aio_fsync F
|
|
+GLIBC_2.36 aio_fsync64 F
|
|
+GLIBC_2.36 aio_init F
|
|
+GLIBC_2.36 aio_read F
|
|
+GLIBC_2.36 aio_read64 F
|
|
+GLIBC_2.36 aio_return F
|
|
+GLIBC_2.36 aio_return64 F
|
|
+GLIBC_2.36 aio_suspend F
|
|
+GLIBC_2.36 aio_suspend64 F
|
|
+GLIBC_2.36 aio_write F
|
|
+GLIBC_2.36 aio_write64 F
|
|
+GLIBC_2.36 alarm F
|
|
+GLIBC_2.36 aligned_alloc F
|
|
+GLIBC_2.36 alphasort F
|
|
+GLIBC_2.36 alphasort64 F
|
|
+GLIBC_2.36 argp_err_exit_status D 0x4
|
|
+GLIBC_2.36 argp_error F
|
|
+GLIBC_2.36 argp_failure F
|
|
+GLIBC_2.36 argp_help F
|
|
+GLIBC_2.36 argp_parse F
|
|
+GLIBC_2.36 argp_program_bug_address D 0x8
|
|
+GLIBC_2.36 argp_program_version D 0x8
|
|
+GLIBC_2.36 argp_program_version_hook D 0x8
|
|
+GLIBC_2.36 argp_state_help F
|
|
+GLIBC_2.36 argp_usage F
|
|
+GLIBC_2.36 argz_add F
|
|
+GLIBC_2.36 argz_add_sep F
|
|
+GLIBC_2.36 argz_append F
|
|
+GLIBC_2.36 argz_count F
|
|
+GLIBC_2.36 argz_create F
|
|
+GLIBC_2.36 argz_create_sep F
|
|
+GLIBC_2.36 argz_delete F
|
|
+GLIBC_2.36 argz_extract F
|
|
+GLIBC_2.36 argz_insert F
|
|
+GLIBC_2.36 argz_next F
|
|
+GLIBC_2.36 argz_replace F
|
|
+GLIBC_2.36 argz_stringify F
|
|
+GLIBC_2.36 asctime F
|
|
+GLIBC_2.36 asctime_r F
|
|
+GLIBC_2.36 asprintf F
|
|
+GLIBC_2.36 atof F
|
|
+GLIBC_2.36 atoi F
|
|
+GLIBC_2.36 atol F
|
|
+GLIBC_2.36 atoll F
|
|
+GLIBC_2.36 backtrace F
|
|
+GLIBC_2.36 backtrace_symbols F
|
|
+GLIBC_2.36 backtrace_symbols_fd F
|
|
+GLIBC_2.36 basename F
|
|
+GLIBC_2.36 bcmp F
|
|
+GLIBC_2.36 bcopy F
|
|
+GLIBC_2.36 bind F
|
|
+GLIBC_2.36 bind_textdomain_codeset F
|
|
+GLIBC_2.36 bindresvport F
|
|
+GLIBC_2.36 bindtextdomain F
|
|
+GLIBC_2.36 brk F
|
|
+GLIBC_2.36 bsd_signal F
|
|
+GLIBC_2.36 bsearch F
|
|
+GLIBC_2.36 btowc F
|
|
+GLIBC_2.36 bzero F
|
|
+GLIBC_2.36 c16rtomb F
|
|
+GLIBC_2.36 c32rtomb F
|
|
+GLIBC_2.36 call_once F
|
|
+GLIBC_2.36 calloc F
|
|
+GLIBC_2.36 canonicalize_file_name F
|
|
+GLIBC_2.36 capget F
|
|
+GLIBC_2.36 capset F
|
|
+GLIBC_2.36 catclose F
|
|
+GLIBC_2.36 catgets F
|
|
+GLIBC_2.36 catopen F
|
|
+GLIBC_2.36 cfgetispeed F
|
|
+GLIBC_2.36 cfgetospeed F
|
|
+GLIBC_2.36 cfmakeraw F
|
|
+GLIBC_2.36 cfsetispeed F
|
|
+GLIBC_2.36 cfsetospeed F
|
|
+GLIBC_2.36 cfsetspeed F
|
|
+GLIBC_2.36 chdir F
|
|
+GLIBC_2.36 chflags F
|
|
+GLIBC_2.36 chmod F
|
|
+GLIBC_2.36 chown F
|
|
+GLIBC_2.36 chroot F
|
|
+GLIBC_2.36 clearenv F
|
|
+GLIBC_2.36 clearerr F
|
|
+GLIBC_2.36 clearerr_unlocked F
|
|
+GLIBC_2.36 clock F
|
|
+GLIBC_2.36 clock_adjtime F
|
|
+GLIBC_2.36 clock_getcpuclockid F
|
|
+GLIBC_2.36 clock_getres F
|
|
+GLIBC_2.36 clock_gettime F
|
|
+GLIBC_2.36 clock_nanosleep F
|
|
+GLIBC_2.36 clock_settime F
|
|
+GLIBC_2.36 clone F
|
|
+GLIBC_2.36 close F
|
|
+GLIBC_2.36 close_range F
|
|
+GLIBC_2.36 closedir F
|
|
+GLIBC_2.36 closefrom F
|
|
+GLIBC_2.36 closelog F
|
|
+GLIBC_2.36 cnd_broadcast F
|
|
+GLIBC_2.36 cnd_destroy F
|
|
+GLIBC_2.36 cnd_init F
|
|
+GLIBC_2.36 cnd_signal F
|
|
+GLIBC_2.36 cnd_timedwait F
|
|
+GLIBC_2.36 cnd_wait F
|
|
+GLIBC_2.36 confstr F
|
|
+GLIBC_2.36 connect F
|
|
+GLIBC_2.36 copy_file_range F
|
|
+GLIBC_2.36 copysign F
|
|
+GLIBC_2.36 copysignf F
|
|
+GLIBC_2.36 copysignl F
|
|
+GLIBC_2.36 creat F
|
|
+GLIBC_2.36 creat64 F
|
|
+GLIBC_2.36 ctermid F
|
|
+GLIBC_2.36 ctime F
|
|
+GLIBC_2.36 ctime_r F
|
|
+GLIBC_2.36 cuserid F
|
|
+GLIBC_2.36 daemon F
|
|
+GLIBC_2.36 daylight D 0x4
|
|
+GLIBC_2.36 dcgettext F
|
|
+GLIBC_2.36 dcngettext F
|
|
+GLIBC_2.36 delete_module F
|
|
+GLIBC_2.36 dgettext F
|
|
+GLIBC_2.36 difftime F
|
|
+GLIBC_2.36 dirfd F
|
|
+GLIBC_2.36 dirname F
|
|
+GLIBC_2.36 div F
|
|
+GLIBC_2.36 dl_iterate_phdr F
|
|
+GLIBC_2.36 dladdr F
|
|
+GLIBC_2.36 dladdr1 F
|
|
+GLIBC_2.36 dlclose F
|
|
+GLIBC_2.36 dlerror F
|
|
+GLIBC_2.36 dlinfo F
|
|
+GLIBC_2.36 dlmopen F
|
|
+GLIBC_2.36 dlopen F
|
|
+GLIBC_2.36 dlsym F
|
|
+GLIBC_2.36 dlvsym F
|
|
+GLIBC_2.36 dn_comp F
|
|
+GLIBC_2.36 dn_expand F
|
|
+GLIBC_2.36 dn_skipname F
|
|
+GLIBC_2.36 dngettext F
|
|
+GLIBC_2.36 dprintf F
|
|
+GLIBC_2.36 drand48 F
|
|
+GLIBC_2.36 drand48_r F
|
|
+GLIBC_2.36 dup F
|
|
+GLIBC_2.36 dup2 F
|
|
+GLIBC_2.36 dup3 F
|
|
+GLIBC_2.36 duplocale F
|
|
+GLIBC_2.36 dysize F
|
|
+GLIBC_2.36 eaccess F
|
|
+GLIBC_2.36 ecvt F
|
|
+GLIBC_2.36 ecvt_r F
|
|
+GLIBC_2.36 endaliasent F
|
|
+GLIBC_2.36 endfsent F
|
|
+GLIBC_2.36 endgrent F
|
|
+GLIBC_2.36 endhostent F
|
|
+GLIBC_2.36 endmntent F
|
|
+GLIBC_2.36 endnetent F
|
|
+GLIBC_2.36 endnetgrent F
|
|
+GLIBC_2.36 endprotoent F
|
|
+GLIBC_2.36 endpwent F
|
|
+GLIBC_2.36 endrpcent F
|
|
+GLIBC_2.36 endservent F
|
|
+GLIBC_2.36 endsgent F
|
|
+GLIBC_2.36 endspent F
|
|
+GLIBC_2.36 endttyent F
|
|
+GLIBC_2.36 endusershell F
|
|
+GLIBC_2.36 endutent F
|
|
+GLIBC_2.36 endutxent F
|
|
+GLIBC_2.36 environ D 0x8
|
|
+GLIBC_2.36 envz_add F
|
|
+GLIBC_2.36 envz_entry F
|
|
+GLIBC_2.36 envz_get F
|
|
+GLIBC_2.36 envz_merge F
|
|
+GLIBC_2.36 envz_remove F
|
|
+GLIBC_2.36 envz_strip F
|
|
+GLIBC_2.36 epoll_create F
|
|
+GLIBC_2.36 epoll_create1 F
|
|
+GLIBC_2.36 epoll_ctl F
|
|
+GLIBC_2.36 epoll_pwait F
|
|
+GLIBC_2.36 epoll_wait F
|
|
+GLIBC_2.36 erand48 F
|
|
+GLIBC_2.36 erand48_r F
|
|
+GLIBC_2.36 err F
|
|
+GLIBC_2.36 error F
|
|
+GLIBC_2.36 error_at_line F
|
|
+GLIBC_2.36 error_message_count D 0x4
|
|
+GLIBC_2.36 error_one_per_line D 0x4
|
|
+GLIBC_2.36 error_print_progname D 0x8
|
|
+GLIBC_2.36 errx F
|
|
+GLIBC_2.36 ether_aton F
|
|
+GLIBC_2.36 ether_aton_r F
|
|
+GLIBC_2.36 ether_hostton F
|
|
+GLIBC_2.36 ether_line F
|
|
+GLIBC_2.36 ether_ntoa F
|
|
+GLIBC_2.36 ether_ntoa_r F
|
|
+GLIBC_2.36 ether_ntohost F
|
|
+GLIBC_2.36 euidaccess F
|
|
+GLIBC_2.36 eventfd F
|
|
+GLIBC_2.36 eventfd_read F
|
|
+GLIBC_2.36 eventfd_write F
|
|
+GLIBC_2.36 execl F
|
|
+GLIBC_2.36 execle F
|
|
+GLIBC_2.36 execlp F
|
|
+GLIBC_2.36 execv F
|
|
+GLIBC_2.36 execve F
|
|
+GLIBC_2.36 execveat F
|
|
+GLIBC_2.36 execvp F
|
|
+GLIBC_2.36 execvpe F
|
|
+GLIBC_2.36 exit F
|
|
+GLIBC_2.36 explicit_bzero F
|
|
+GLIBC_2.36 faccessat F
|
|
+GLIBC_2.36 fallocate F
|
|
+GLIBC_2.36 fallocate64 F
|
|
+GLIBC_2.36 fanotify_init F
|
|
+GLIBC_2.36 fanotify_mark F
|
|
+GLIBC_2.36 fchdir F
|
|
+GLIBC_2.36 fchflags F
|
|
+GLIBC_2.36 fchmod F
|
|
+GLIBC_2.36 fchmodat F
|
|
+GLIBC_2.36 fchown F
|
|
+GLIBC_2.36 fchownat F
|
|
+GLIBC_2.36 fclose F
|
|
+GLIBC_2.36 fcloseall F
|
|
+GLIBC_2.36 fcntl F
|
|
+GLIBC_2.36 fcntl64 F
|
|
+GLIBC_2.36 fcvt F
|
|
+GLIBC_2.36 fcvt_r F
|
|
+GLIBC_2.36 fdatasync F
|
|
+GLIBC_2.36 fdopen F
|
|
+GLIBC_2.36 fdopendir F
|
|
+GLIBC_2.36 feof F
|
|
+GLIBC_2.36 feof_unlocked F
|
|
+GLIBC_2.36 ferror F
|
|
+GLIBC_2.36 ferror_unlocked F
|
|
+GLIBC_2.36 fexecve F
|
|
+GLIBC_2.36 fflush F
|
|
+GLIBC_2.36 fflush_unlocked F
|
|
+GLIBC_2.36 ffs F
|
|
+GLIBC_2.36 ffsl F
|
|
+GLIBC_2.36 ffsll F
|
|
+GLIBC_2.36 fgetc F
|
|
+GLIBC_2.36 fgetc_unlocked F
|
|
+GLIBC_2.36 fgetgrent F
|
|
+GLIBC_2.36 fgetgrent_r F
|
|
+GLIBC_2.36 fgetpos F
|
|
+GLIBC_2.36 fgetpos64 F
|
|
+GLIBC_2.36 fgetpwent F
|
|
+GLIBC_2.36 fgetpwent_r F
|
|
+GLIBC_2.36 fgets F
|
|
+GLIBC_2.36 fgets_unlocked F
|
|
+GLIBC_2.36 fgetsgent F
|
|
+GLIBC_2.36 fgetsgent_r F
|
|
+GLIBC_2.36 fgetspent F
|
|
+GLIBC_2.36 fgetspent_r F
|
|
+GLIBC_2.36 fgetwc F
|
|
+GLIBC_2.36 fgetwc_unlocked F
|
|
+GLIBC_2.36 fgetws F
|
|
+GLIBC_2.36 fgetws_unlocked F
|
|
+GLIBC_2.36 fgetxattr F
|
|
+GLIBC_2.36 fileno F
|
|
+GLIBC_2.36 fileno_unlocked F
|
|
+GLIBC_2.36 finite F
|
|
+GLIBC_2.36 finitef F
|
|
+GLIBC_2.36 finitel F
|
|
+GLIBC_2.36 flistxattr F
|
|
+GLIBC_2.36 flock F
|
|
+GLIBC_2.36 flockfile F
|
|
+GLIBC_2.36 fmemopen F
|
|
+GLIBC_2.36 fmtmsg F
|
|
+GLIBC_2.36 fnmatch F
|
|
+GLIBC_2.36 fopen F
|
|
+GLIBC_2.36 fopen64 F
|
|
+GLIBC_2.36 fopencookie F
|
|
+GLIBC_2.36 fork F
|
|
+GLIBC_2.36 forkpty F
|
|
+GLIBC_2.36 fpathconf F
|
|
+GLIBC_2.36 fprintf F
|
|
+GLIBC_2.36 fputc F
|
|
+GLIBC_2.36 fputc_unlocked F
|
|
+GLIBC_2.36 fputs F
|
|
+GLIBC_2.36 fputs_unlocked F
|
|
+GLIBC_2.36 fputwc F
|
|
+GLIBC_2.36 fputwc_unlocked F
|
|
+GLIBC_2.36 fputws F
|
|
+GLIBC_2.36 fputws_unlocked F
|
|
+GLIBC_2.36 fread F
|
|
+GLIBC_2.36 fread_unlocked F
|
|
+GLIBC_2.36 free F
|
|
+GLIBC_2.36 freeaddrinfo F
|
|
+GLIBC_2.36 freeifaddrs F
|
|
+GLIBC_2.36 freelocale F
|
|
+GLIBC_2.36 fremovexattr F
|
|
+GLIBC_2.36 freopen F
|
|
+GLIBC_2.36 freopen64 F
|
|
+GLIBC_2.36 frexp F
|
|
+GLIBC_2.36 frexpf F
|
|
+GLIBC_2.36 frexpl F
|
|
+GLIBC_2.36 fscanf F
|
|
+GLIBC_2.36 fseek F
|
|
+GLIBC_2.36 fseeko F
|
|
+GLIBC_2.36 fseeko64 F
|
|
+GLIBC_2.36 fsetpos F
|
|
+GLIBC_2.36 fsetpos64 F
|
|
+GLIBC_2.36 fsetxattr F
|
|
+GLIBC_2.36 fstat F
|
|
+GLIBC_2.36 fstat64 F
|
|
+GLIBC_2.36 fstatat F
|
|
+GLIBC_2.36 fstatat64 F
|
|
+GLIBC_2.36 fstatfs F
|
|
+GLIBC_2.36 fstatfs64 F
|
|
+GLIBC_2.36 fstatvfs F
|
|
+GLIBC_2.36 fstatvfs64 F
|
|
+GLIBC_2.36 fsync F
|
|
+GLIBC_2.36 ftell F
|
|
+GLIBC_2.36 ftello F
|
|
+GLIBC_2.36 ftello64 F
|
|
+GLIBC_2.36 ftime F
|
|
+GLIBC_2.36 ftok F
|
|
+GLIBC_2.36 ftruncate F
|
|
+GLIBC_2.36 ftruncate64 F
|
|
+GLIBC_2.36 ftrylockfile F
|
|
+GLIBC_2.36 fts64_children F
|
|
+GLIBC_2.36 fts64_close F
|
|
+GLIBC_2.36 fts64_open F
|
|
+GLIBC_2.36 fts64_read F
|
|
+GLIBC_2.36 fts64_set F
|
|
+GLIBC_2.36 fts_children F
|
|
+GLIBC_2.36 fts_close F
|
|
+GLIBC_2.36 fts_open F
|
|
+GLIBC_2.36 fts_read F
|
|
+GLIBC_2.36 fts_set F
|
|
+GLIBC_2.36 ftw F
|
|
+GLIBC_2.36 ftw64 F
|
|
+GLIBC_2.36 funlockfile F
|
|
+GLIBC_2.36 futimens F
|
|
+GLIBC_2.36 futimes F
|
|
+GLIBC_2.36 futimesat F
|
|
+GLIBC_2.36 fwide F
|
|
+GLIBC_2.36 fwprintf F
|
|
+GLIBC_2.36 fwrite F
|
|
+GLIBC_2.36 fwrite_unlocked F
|
|
+GLIBC_2.36 fwscanf F
|
|
+GLIBC_2.36 gai_cancel F
|
|
+GLIBC_2.36 gai_error F
|
|
+GLIBC_2.36 gai_strerror F
|
|
+GLIBC_2.36 gai_suspend F
|
|
+GLIBC_2.36 gcvt F
|
|
+GLIBC_2.36 get_avphys_pages F
|
|
+GLIBC_2.36 get_current_dir_name F
|
|
+GLIBC_2.36 get_nprocs F
|
|
+GLIBC_2.36 get_nprocs_conf F
|
|
+GLIBC_2.36 get_phys_pages F
|
|
+GLIBC_2.36 getaddrinfo F
|
|
+GLIBC_2.36 getaddrinfo_a F
|
|
+GLIBC_2.36 getaliasbyname F
|
|
+GLIBC_2.36 getaliasbyname_r F
|
|
+GLIBC_2.36 getaliasent F
|
|
+GLIBC_2.36 getaliasent_r F
|
|
+GLIBC_2.36 getauxval F
|
|
+GLIBC_2.36 getc F
|
|
+GLIBC_2.36 getc_unlocked F
|
|
+GLIBC_2.36 getchar F
|
|
+GLIBC_2.36 getchar_unlocked F
|
|
+GLIBC_2.36 getcontext F
|
|
+GLIBC_2.36 getcpu F
|
|
+GLIBC_2.36 getcwd F
|
|
+GLIBC_2.36 getdate F
|
|
+GLIBC_2.36 getdate_err D 0x4
|
|
+GLIBC_2.36 getdate_r F
|
|
+GLIBC_2.36 getdelim F
|
|
+GLIBC_2.36 getdents64 F
|
|
+GLIBC_2.36 getdirentries F
|
|
+GLIBC_2.36 getdirentries64 F
|
|
+GLIBC_2.36 getdomainname F
|
|
+GLIBC_2.36 getdtablesize F
|
|
+GLIBC_2.36 getegid F
|
|
+GLIBC_2.36 getentropy F
|
|
+GLIBC_2.36 getenv F
|
|
+GLIBC_2.36 geteuid F
|
|
+GLIBC_2.36 getfsent F
|
|
+GLIBC_2.36 getfsfile F
|
|
+GLIBC_2.36 getfsspec F
|
|
+GLIBC_2.36 getgid F
|
|
+GLIBC_2.36 getgrent F
|
|
+GLIBC_2.36 getgrent_r F
|
|
+GLIBC_2.36 getgrgid F
|
|
+GLIBC_2.36 getgrgid_r F
|
|
+GLIBC_2.36 getgrnam F
|
|
+GLIBC_2.36 getgrnam_r F
|
|
+GLIBC_2.36 getgrouplist F
|
|
+GLIBC_2.36 getgroups F
|
|
+GLIBC_2.36 gethostbyaddr F
|
|
+GLIBC_2.36 gethostbyaddr_r F
|
|
+GLIBC_2.36 gethostbyname F
|
|
+GLIBC_2.36 gethostbyname2 F
|
|
+GLIBC_2.36 gethostbyname2_r F
|
|
+GLIBC_2.36 gethostbyname_r F
|
|
+GLIBC_2.36 gethostent F
|
|
+GLIBC_2.36 gethostent_r F
|
|
+GLIBC_2.36 gethostid F
|
|
+GLIBC_2.36 gethostname F
|
|
+GLIBC_2.36 getifaddrs F
|
|
+GLIBC_2.36 getipv4sourcefilter F
|
|
+GLIBC_2.36 getitimer F
|
|
+GLIBC_2.36 getline F
|
|
+GLIBC_2.36 getloadavg F
|
|
+GLIBC_2.36 getlogin F
|
|
+GLIBC_2.36 getlogin_r F
|
|
+GLIBC_2.36 getmntent F
|
|
+GLIBC_2.36 getmntent_r F
|
|
+GLIBC_2.36 getnameinfo F
|
|
+GLIBC_2.36 getnetbyaddr F
|
|
+GLIBC_2.36 getnetbyaddr_r F
|
|
+GLIBC_2.36 getnetbyname F
|
|
+GLIBC_2.36 getnetbyname_r F
|
|
+GLIBC_2.36 getnetent F
|
|
+GLIBC_2.36 getnetent_r F
|
|
+GLIBC_2.36 getnetgrent F
|
|
+GLIBC_2.36 getnetgrent_r F
|
|
+GLIBC_2.36 getopt F
|
|
+GLIBC_2.36 getopt_long F
|
|
+GLIBC_2.36 getopt_long_only F
|
|
+GLIBC_2.36 getpagesize F
|
|
+GLIBC_2.36 getpass F
|
|
+GLIBC_2.36 getpeername F
|
|
+GLIBC_2.36 getpgid F
|
|
+GLIBC_2.36 getpgrp F
|
|
+GLIBC_2.36 getpid F
|
|
+GLIBC_2.36 getppid F
|
|
+GLIBC_2.36 getpriority F
|
|
+GLIBC_2.36 getprotobyname F
|
|
+GLIBC_2.36 getprotobyname_r F
|
|
+GLIBC_2.36 getprotobynumber F
|
|
+GLIBC_2.36 getprotobynumber_r F
|
|
+GLIBC_2.36 getprotoent F
|
|
+GLIBC_2.36 getprotoent_r F
|
|
+GLIBC_2.36 getpt F
|
|
+GLIBC_2.36 getpw F
|
|
+GLIBC_2.36 getpwent F
|
|
+GLIBC_2.36 getpwent_r F
|
|
+GLIBC_2.36 getpwnam F
|
|
+GLIBC_2.36 getpwnam_r F
|
|
+GLIBC_2.36 getpwuid F
|
|
+GLIBC_2.36 getpwuid_r F
|
|
+GLIBC_2.36 getrandom F
|
|
+GLIBC_2.36 getresgid F
|
|
+GLIBC_2.36 getresuid F
|
|
+GLIBC_2.36 getrlimit F
|
|
+GLIBC_2.36 getrlimit64 F
|
|
+GLIBC_2.36 getrpcbyname F
|
|
+GLIBC_2.36 getrpcbyname_r F
|
|
+GLIBC_2.36 getrpcbynumber F
|
|
+GLIBC_2.36 getrpcbynumber_r F
|
|
+GLIBC_2.36 getrpcent F
|
|
+GLIBC_2.36 getrpcent_r F
|
|
+GLIBC_2.36 getrusage F
|
|
+GLIBC_2.36 gets F
|
|
+GLIBC_2.36 getservbyname F
|
|
+GLIBC_2.36 getservbyname_r F
|
|
+GLIBC_2.36 getservbyport F
|
|
+GLIBC_2.36 getservbyport_r F
|
|
+GLIBC_2.36 getservent F
|
|
+GLIBC_2.36 getservent_r F
|
|
+GLIBC_2.36 getsgent F
|
|
+GLIBC_2.36 getsgent_r F
|
|
+GLIBC_2.36 getsgnam F
|
|
+GLIBC_2.36 getsgnam_r F
|
|
+GLIBC_2.36 getsid F
|
|
+GLIBC_2.36 getsockname F
|
|
+GLIBC_2.36 getsockopt F
|
|
+GLIBC_2.36 getsourcefilter F
|
|
+GLIBC_2.36 getspent F
|
|
+GLIBC_2.36 getspent_r F
|
|
+GLIBC_2.36 getspnam F
|
|
+GLIBC_2.36 getspnam_r F
|
|
+GLIBC_2.36 getsubopt F
|
|
+GLIBC_2.36 gettext F
|
|
+GLIBC_2.36 gettid F
|
|
+GLIBC_2.36 gettimeofday F
|
|
+GLIBC_2.36 getttyent F
|
|
+GLIBC_2.36 getttynam F
|
|
+GLIBC_2.36 getuid F
|
|
+GLIBC_2.36 getusershell F
|
|
+GLIBC_2.36 getutent F
|
|
+GLIBC_2.36 getutent_r F
|
|
+GLIBC_2.36 getutid F
|
|
+GLIBC_2.36 getutid_r F
|
|
+GLIBC_2.36 getutline F
|
|
+GLIBC_2.36 getutline_r F
|
|
+GLIBC_2.36 getutmp F
|
|
+GLIBC_2.36 getutmpx F
|
|
+GLIBC_2.36 getutxent F
|
|
+GLIBC_2.36 getutxid F
|
|
+GLIBC_2.36 getutxline F
|
|
+GLIBC_2.36 getw F
|
|
+GLIBC_2.36 getwc F
|
|
+GLIBC_2.36 getwc_unlocked F
|
|
+GLIBC_2.36 getwchar F
|
|
+GLIBC_2.36 getwchar_unlocked F
|
|
+GLIBC_2.36 getwd F
|
|
+GLIBC_2.36 getxattr F
|
|
+GLIBC_2.36 glob F
|
|
+GLIBC_2.36 glob64 F
|
|
+GLIBC_2.36 glob_pattern_p F
|
|
+GLIBC_2.36 globfree F
|
|
+GLIBC_2.36 globfree64 F
|
|
+GLIBC_2.36 gmtime F
|
|
+GLIBC_2.36 gmtime_r F
|
|
+GLIBC_2.36 gnu_dev_major F
|
|
+GLIBC_2.36 gnu_dev_makedev F
|
|
+GLIBC_2.36 gnu_dev_minor F
|
|
+GLIBC_2.36 gnu_get_libc_release F
|
|
+GLIBC_2.36 gnu_get_libc_version F
|
|
+GLIBC_2.36 grantpt F
|
|
+GLIBC_2.36 group_member F
|
|
+GLIBC_2.36 gsignal F
|
|
+GLIBC_2.36 gtty F
|
|
+GLIBC_2.36 h_errlist D 0x28
|
|
+GLIBC_2.36 h_nerr D 0x4
|
|
+GLIBC_2.36 hasmntopt F
|
|
+GLIBC_2.36 hcreate F
|
|
+GLIBC_2.36 hcreate_r F
|
|
+GLIBC_2.36 hdestroy F
|
|
+GLIBC_2.36 hdestroy_r F
|
|
+GLIBC_2.36 herror F
|
|
+GLIBC_2.36 hsearch F
|
|
+GLIBC_2.36 hsearch_r F
|
|
+GLIBC_2.36 hstrerror F
|
|
+GLIBC_2.36 htonl F
|
|
+GLIBC_2.36 htons F
|
|
+GLIBC_2.36 iconv F
|
|
+GLIBC_2.36 iconv_close F
|
|
+GLIBC_2.36 iconv_open F
|
|
+GLIBC_2.36 if_freenameindex F
|
|
+GLIBC_2.36 if_indextoname F
|
|
+GLIBC_2.36 if_nameindex F
|
|
+GLIBC_2.36 if_nametoindex F
|
|
+GLIBC_2.36 imaxabs F
|
|
+GLIBC_2.36 imaxdiv F
|
|
+GLIBC_2.36 in6addr_any D 0x10
|
|
+GLIBC_2.36 in6addr_loopback D 0x10
|
|
+GLIBC_2.36 index F
|
|
+GLIBC_2.36 inet6_opt_append F
|
|
+GLIBC_2.36 inet6_opt_find F
|
|
+GLIBC_2.36 inet6_opt_finish F
|
|
+GLIBC_2.36 inet6_opt_get_val F
|
|
+GLIBC_2.36 inet6_opt_init F
|
|
+GLIBC_2.36 inet6_opt_next F
|
|
+GLIBC_2.36 inet6_opt_set_val F
|
|
+GLIBC_2.36 inet6_option_alloc F
|
|
+GLIBC_2.36 inet6_option_append F
|
|
+GLIBC_2.36 inet6_option_find F
|
|
+GLIBC_2.36 inet6_option_init F
|
|
+GLIBC_2.36 inet6_option_next F
|
|
+GLIBC_2.36 inet6_option_space F
|
|
+GLIBC_2.36 inet6_rth_add F
|
|
+GLIBC_2.36 inet6_rth_getaddr F
|
|
+GLIBC_2.36 inet6_rth_init F
|
|
+GLIBC_2.36 inet6_rth_reverse F
|
|
+GLIBC_2.36 inet6_rth_segments F
|
|
+GLIBC_2.36 inet6_rth_space F
|
|
+GLIBC_2.36 inet_addr F
|
|
+GLIBC_2.36 inet_aton F
|
|
+GLIBC_2.36 inet_lnaof F
|
|
+GLIBC_2.36 inet_makeaddr F
|
|
+GLIBC_2.36 inet_netof F
|
|
+GLIBC_2.36 inet_network F
|
|
+GLIBC_2.36 inet_nsap_addr F
|
|
+GLIBC_2.36 inet_nsap_ntoa F
|
|
+GLIBC_2.36 inet_ntoa F
|
|
+GLIBC_2.36 inet_ntop F
|
|
+GLIBC_2.36 inet_pton F
|
|
+GLIBC_2.36 init_module F
|
|
+GLIBC_2.36 initgroups F
|
|
+GLIBC_2.36 initstate F
|
|
+GLIBC_2.36 initstate_r F
|
|
+GLIBC_2.36 innetgr F
|
|
+GLIBC_2.36 inotify_add_watch F
|
|
+GLIBC_2.36 inotify_init F
|
|
+GLIBC_2.36 inotify_init1 F
|
|
+GLIBC_2.36 inotify_rm_watch F
|
|
+GLIBC_2.36 insque F
|
|
+GLIBC_2.36 ioctl F
|
|
+GLIBC_2.36 iruserok F
|
|
+GLIBC_2.36 iruserok_af F
|
|
+GLIBC_2.36 isalnum F
|
|
+GLIBC_2.36 isalnum_l F
|
|
+GLIBC_2.36 isalpha F
|
|
+GLIBC_2.36 isalpha_l F
|
|
+GLIBC_2.36 isascii F
|
|
+GLIBC_2.36 isatty F
|
|
+GLIBC_2.36 isblank F
|
|
+GLIBC_2.36 isblank_l F
|
|
+GLIBC_2.36 iscntrl F
|
|
+GLIBC_2.36 iscntrl_l F
|
|
+GLIBC_2.36 isctype F
|
|
+GLIBC_2.36 isdigit F
|
|
+GLIBC_2.36 isdigit_l F
|
|
+GLIBC_2.36 isfdtype F
|
|
+GLIBC_2.36 isgraph F
|
|
+GLIBC_2.36 isgraph_l F
|
|
+GLIBC_2.36 isinf F
|
|
+GLIBC_2.36 isinff F
|
|
+GLIBC_2.36 isinfl F
|
|
+GLIBC_2.36 islower F
|
|
+GLIBC_2.36 islower_l F
|
|
+GLIBC_2.36 isnan F
|
|
+GLIBC_2.36 isnanf F
|
|
+GLIBC_2.36 isnanl F
|
|
+GLIBC_2.36 isprint F
|
|
+GLIBC_2.36 isprint_l F
|
|
+GLIBC_2.36 ispunct F
|
|
+GLIBC_2.36 ispunct_l F
|
|
+GLIBC_2.36 isspace F
|
|
+GLIBC_2.36 isspace_l F
|
|
+GLIBC_2.36 isupper F
|
|
+GLIBC_2.36 isupper_l F
|
|
+GLIBC_2.36 iswalnum F
|
|
+GLIBC_2.36 iswalnum_l F
|
|
+GLIBC_2.36 iswalpha F
|
|
+GLIBC_2.36 iswalpha_l F
|
|
+GLIBC_2.36 iswblank F
|
|
+GLIBC_2.36 iswblank_l F
|
|
+GLIBC_2.36 iswcntrl F
|
|
+GLIBC_2.36 iswcntrl_l F
|
|
+GLIBC_2.36 iswctype F
|
|
+GLIBC_2.36 iswctype_l F
|
|
+GLIBC_2.36 iswdigit F
|
|
+GLIBC_2.36 iswdigit_l F
|
|
+GLIBC_2.36 iswgraph F
|
|
+GLIBC_2.36 iswgraph_l F
|
|
+GLIBC_2.36 iswlower F
|
|
+GLIBC_2.36 iswlower_l F
|
|
+GLIBC_2.36 iswprint F
|
|
+GLIBC_2.36 iswprint_l F
|
|
+GLIBC_2.36 iswpunct F
|
|
+GLIBC_2.36 iswpunct_l F
|
|
+GLIBC_2.36 iswspace F
|
|
+GLIBC_2.36 iswspace_l F
|
|
+GLIBC_2.36 iswupper F
|
|
+GLIBC_2.36 iswupper_l F
|
|
+GLIBC_2.36 iswxdigit F
|
|
+GLIBC_2.36 iswxdigit_l F
|
|
+GLIBC_2.36 isxdigit F
|
|
+GLIBC_2.36 isxdigit_l F
|
|
+GLIBC_2.36 jrand48 F
|
|
+GLIBC_2.36 jrand48_r F
|
|
+GLIBC_2.36 kill F
|
|
+GLIBC_2.36 killpg F
|
|
+GLIBC_2.36 klogctl F
|
|
+GLIBC_2.36 l64a F
|
|
+GLIBC_2.36 labs F
|
|
+GLIBC_2.36 lchmod F
|
|
+GLIBC_2.36 lchown F
|
|
+GLIBC_2.36 lckpwdf F
|
|
+GLIBC_2.36 lcong48 F
|
|
+GLIBC_2.36 lcong48_r F
|
|
+GLIBC_2.36 ldexp F
|
|
+GLIBC_2.36 ldexpf F
|
|
+GLIBC_2.36 ldexpl F
|
|
+GLIBC_2.36 ldiv F
|
|
+GLIBC_2.36 lfind F
|
|
+GLIBC_2.36 lgetxattr F
|
|
+GLIBC_2.36 link F
|
|
+GLIBC_2.36 linkat F
|
|
+GLIBC_2.36 lio_listio F
|
|
+GLIBC_2.36 lio_listio64 F
|
|
+GLIBC_2.36 listen F
|
|
+GLIBC_2.36 listxattr F
|
|
+GLIBC_2.36 llabs F
|
|
+GLIBC_2.36 lldiv F
|
|
+GLIBC_2.36 llistxattr F
|
|
+GLIBC_2.36 localeconv F
|
|
+GLIBC_2.36 localtime F
|
|
+GLIBC_2.36 localtime_r F
|
|
+GLIBC_2.36 lockf F
|
|
+GLIBC_2.36 lockf64 F
|
|
+GLIBC_2.36 login F
|
|
+GLIBC_2.36 login_tty F
|
|
+GLIBC_2.36 logout F
|
|
+GLIBC_2.36 logwtmp F
|
|
+GLIBC_2.36 longjmp F
|
|
+GLIBC_2.36 lrand48 F
|
|
+GLIBC_2.36 lrand48_r F
|
|
+GLIBC_2.36 lremovexattr F
|
|
+GLIBC_2.36 lsearch F
|
|
+GLIBC_2.36 lseek F
|
|
+GLIBC_2.36 lseek64 F
|
|
+GLIBC_2.36 lsetxattr F
|
|
+GLIBC_2.36 lstat F
|
|
+GLIBC_2.36 lstat64 F
|
|
+GLIBC_2.36 lutimes F
|
|
+GLIBC_2.36 madvise F
|
|
+GLIBC_2.36 makecontext F
|
|
+GLIBC_2.36 mallinfo F
|
|
+GLIBC_2.36 mallinfo2 F
|
|
+GLIBC_2.36 malloc F
|
|
+GLIBC_2.36 malloc_info F
|
|
+GLIBC_2.36 malloc_stats F
|
|
+GLIBC_2.36 malloc_trim F
|
|
+GLIBC_2.36 malloc_usable_size F
|
|
+GLIBC_2.36 mallopt F
|
|
+GLIBC_2.36 mblen F
|
|
+GLIBC_2.36 mbrlen F
|
|
+GLIBC_2.36 mbrtoc16 F
|
|
+GLIBC_2.36 mbrtoc32 F
|
|
+GLIBC_2.36 mbrtowc F
|
|
+GLIBC_2.36 mbsinit F
|
|
+GLIBC_2.36 mbsnrtowcs F
|
|
+GLIBC_2.36 mbsrtowcs F
|
|
+GLIBC_2.36 mbstowcs F
|
|
+GLIBC_2.36 mbtowc F
|
|
+GLIBC_2.36 mcheck F
|
|
+GLIBC_2.36 mcheck_check_all F
|
|
+GLIBC_2.36 mcheck_pedantic F
|
|
+GLIBC_2.36 memalign F
|
|
+GLIBC_2.36 memccpy F
|
|
+GLIBC_2.36 memchr F
|
|
+GLIBC_2.36 memcmp F
|
|
+GLIBC_2.36 memcpy F
|
|
+GLIBC_2.36 memfd_create F
|
|
+GLIBC_2.36 memfrob F
|
|
+GLIBC_2.36 memmem F
|
|
+GLIBC_2.36 memmove F
|
|
+GLIBC_2.36 mempcpy F
|
|
+GLIBC_2.36 memrchr F
|
|
+GLIBC_2.36 memset F
|
|
+GLIBC_2.36 mincore F
|
|
+GLIBC_2.36 mkdir F
|
|
+GLIBC_2.36 mkdirat F
|
|
+GLIBC_2.36 mkdtemp F
|
|
+GLIBC_2.36 mkfifo F
|
|
+GLIBC_2.36 mkfifoat F
|
|
+GLIBC_2.36 mknod F
|
|
+GLIBC_2.36 mknodat F
|
|
+GLIBC_2.36 mkostemp F
|
|
+GLIBC_2.36 mkostemp64 F
|
|
+GLIBC_2.36 mkostemps F
|
|
+GLIBC_2.36 mkostemps64 F
|
|
+GLIBC_2.36 mkstemp F
|
|
+GLIBC_2.36 mkstemp64 F
|
|
+GLIBC_2.36 mkstemps F
|
|
+GLIBC_2.36 mkstemps64 F
|
|
+GLIBC_2.36 mktemp F
|
|
+GLIBC_2.36 mktime F
|
|
+GLIBC_2.36 mlock F
|
|
+GLIBC_2.36 mlock2 F
|
|
+GLIBC_2.36 mlockall F
|
|
+GLIBC_2.36 mmap F
|
|
+GLIBC_2.36 mmap64 F
|
|
+GLIBC_2.36 modf F
|
|
+GLIBC_2.36 modff F
|
|
+GLIBC_2.36 modfl F
|
|
+GLIBC_2.36 moncontrol F
|
|
+GLIBC_2.36 monstartup F
|
|
+GLIBC_2.36 mount F
|
|
+GLIBC_2.36 mprobe F
|
|
+GLIBC_2.36 mprotect F
|
|
+GLIBC_2.36 mq_close F
|
|
+GLIBC_2.36 mq_getattr F
|
|
+GLIBC_2.36 mq_notify F
|
|
+GLIBC_2.36 mq_open F
|
|
+GLIBC_2.36 mq_receive F
|
|
+GLIBC_2.36 mq_send F
|
|
+GLIBC_2.36 mq_setattr F
|
|
+GLIBC_2.36 mq_timedreceive F
|
|
+GLIBC_2.36 mq_timedsend F
|
|
+GLIBC_2.36 mq_unlink F
|
|
+GLIBC_2.36 mrand48 F
|
|
+GLIBC_2.36 mrand48_r F
|
|
+GLIBC_2.36 mremap F
|
|
+GLIBC_2.36 msgctl F
|
|
+GLIBC_2.36 msgget F
|
|
+GLIBC_2.36 msgrcv F
|
|
+GLIBC_2.36 msgsnd F
|
|
+GLIBC_2.36 msync F
|
|
+GLIBC_2.36 mtrace F
|
|
+GLIBC_2.36 mtx_destroy F
|
|
+GLIBC_2.36 mtx_init F
|
|
+GLIBC_2.36 mtx_lock F
|
|
+GLIBC_2.36 mtx_timedlock F
|
|
+GLIBC_2.36 mtx_trylock F
|
|
+GLIBC_2.36 mtx_unlock F
|
|
+GLIBC_2.36 munlock F
|
|
+GLIBC_2.36 munlockall F
|
|
+GLIBC_2.36 munmap F
|
|
+GLIBC_2.36 muntrace F
|
|
+GLIBC_2.36 name_to_handle_at F
|
|
+GLIBC_2.36 nanosleep F
|
|
+GLIBC_2.36 newlocale F
|
|
+GLIBC_2.36 nftw F
|
|
+GLIBC_2.36 nftw64 F
|
|
+GLIBC_2.36 ngettext F
|
|
+GLIBC_2.36 nice F
|
|
+GLIBC_2.36 nl_langinfo F
|
|
+GLIBC_2.36 nl_langinfo_l F
|
|
+GLIBC_2.36 nrand48 F
|
|
+GLIBC_2.36 nrand48_r F
|
|
+GLIBC_2.36 ns_name_compress F
|
|
+GLIBC_2.36 ns_name_ntop F
|
|
+GLIBC_2.36 ns_name_pack F
|
|
+GLIBC_2.36 ns_name_pton F
|
|
+GLIBC_2.36 ns_name_skip F
|
|
+GLIBC_2.36 ns_name_uncompress F
|
|
+GLIBC_2.36 ns_name_unpack F
|
|
+GLIBC_2.36 ntohl F
|
|
+GLIBC_2.36 ntohs F
|
|
+GLIBC_2.36 ntp_adjtime F
|
|
+GLIBC_2.36 ntp_gettime F
|
|
+GLIBC_2.36 ntp_gettimex F
|
|
+GLIBC_2.36 obstack_alloc_failed_handler D 0x8
|
|
+GLIBC_2.36 obstack_exit_failure D 0x4
|
|
+GLIBC_2.36 obstack_free F
|
|
+GLIBC_2.36 obstack_printf F
|
|
+GLIBC_2.36 obstack_vprintf F
|
|
+GLIBC_2.36 on_exit F
|
|
+GLIBC_2.36 open F
|
|
+GLIBC_2.36 open64 F
|
|
+GLIBC_2.36 open_by_handle_at F
|
|
+GLIBC_2.36 open_memstream F
|
|
+GLIBC_2.36 open_wmemstream F
|
|
+GLIBC_2.36 openat F
|
|
+GLIBC_2.36 openat64 F
|
|
+GLIBC_2.36 opendir F
|
|
+GLIBC_2.36 openlog F
|
|
+GLIBC_2.36 openpty F
|
|
+GLIBC_2.36 optarg D 0x8
|
|
+GLIBC_2.36 opterr D 0x4
|
|
+GLIBC_2.36 optind D 0x4
|
|
+GLIBC_2.36 optopt D 0x4
|
|
+GLIBC_2.36 parse_printf_format F
|
|
+GLIBC_2.36 pathconf F
|
|
+GLIBC_2.36 pause F
|
|
+GLIBC_2.36 pclose F
|
|
+GLIBC_2.36 perror F
|
|
+GLIBC_2.36 personality F
|
|
+GLIBC_2.36 pipe F
|
|
+GLIBC_2.36 pipe2 F
|
|
+GLIBC_2.36 pivot_root F
|
|
+GLIBC_2.36 pkey_alloc F
|
|
+GLIBC_2.36 pkey_free F
|
|
+GLIBC_2.36 pkey_get F
|
|
+GLIBC_2.36 pkey_mprotect F
|
|
+GLIBC_2.36 pkey_set F
|
|
+GLIBC_2.36 poll F
|
|
+GLIBC_2.36 popen F
|
|
+GLIBC_2.36 posix_fadvise F
|
|
+GLIBC_2.36 posix_fadvise64 F
|
|
+GLIBC_2.36 posix_fallocate F
|
|
+GLIBC_2.36 posix_fallocate64 F
|
|
+GLIBC_2.36 posix_madvise F
|
|
+GLIBC_2.36 posix_memalign F
|
|
+GLIBC_2.36 posix_openpt F
|
|
+GLIBC_2.36 posix_spawn F
|
|
+GLIBC_2.36 posix_spawn_file_actions_addchdir_np F
|
|
+GLIBC_2.36 posix_spawn_file_actions_addclose F
|
|
+GLIBC_2.36 posix_spawn_file_actions_addclosefrom_np F
|
|
+GLIBC_2.36 posix_spawn_file_actions_adddup2 F
|
|
+GLIBC_2.36 posix_spawn_file_actions_addfchdir_np F
|
|
+GLIBC_2.36 posix_spawn_file_actions_addopen F
|
|
+GLIBC_2.36 posix_spawn_file_actions_destroy F
|
|
+GLIBC_2.36 posix_spawn_file_actions_init F
|
|
+GLIBC_2.36 posix_spawnattr_destroy F
|
|
+GLIBC_2.36 posix_spawnattr_getflags F
|
|
+GLIBC_2.36 posix_spawnattr_getpgroup F
|
|
+GLIBC_2.36 posix_spawnattr_getschedparam F
|
|
+GLIBC_2.36 posix_spawnattr_getschedpolicy F
|
|
+GLIBC_2.36 posix_spawnattr_getsigdefault F
|
|
+GLIBC_2.36 posix_spawnattr_getsigmask F
|
|
+GLIBC_2.36 posix_spawnattr_init F
|
|
+GLIBC_2.36 posix_spawnattr_setflags F
|
|
+GLIBC_2.36 posix_spawnattr_setpgroup F
|
|
+GLIBC_2.36 posix_spawnattr_setschedparam F
|
|
+GLIBC_2.36 posix_spawnattr_setschedpolicy F
|
|
+GLIBC_2.36 posix_spawnattr_setsigdefault F
|
|
+GLIBC_2.36 posix_spawnattr_setsigmask F
|
|
+GLIBC_2.36 posix_spawnp F
|
|
+GLIBC_2.36 ppoll F
|
|
+GLIBC_2.36 prctl F
|
|
+GLIBC_2.36 pread F
|
|
+GLIBC_2.36 pread64 F
|
|
+GLIBC_2.36 preadv F
|
|
+GLIBC_2.36 preadv2 F
|
|
+GLIBC_2.36 preadv64 F
|
|
+GLIBC_2.36 preadv64v2 F
|
|
+GLIBC_2.36 printf F
|
|
+GLIBC_2.36 printf_size F
|
|
+GLIBC_2.36 printf_size_info F
|
|
+GLIBC_2.36 prlimit F
|
|
+GLIBC_2.36 prlimit64 F
|
|
+GLIBC_2.36 process_vm_readv F
|
|
+GLIBC_2.36 process_vm_writev F
|
|
+GLIBC_2.36 profil F
|
|
+GLIBC_2.36 program_invocation_name D 0x8
|
|
+GLIBC_2.36 program_invocation_short_name D 0x8
|
|
+GLIBC_2.36 pselect F
|
|
+GLIBC_2.36 psiginfo F
|
|
+GLIBC_2.36 psignal F
|
|
+GLIBC_2.36 pthread_attr_destroy F
|
|
+GLIBC_2.36 pthread_attr_getaffinity_np F
|
|
+GLIBC_2.36 pthread_attr_getdetachstate F
|
|
+GLIBC_2.36 pthread_attr_getguardsize F
|
|
+GLIBC_2.36 pthread_attr_getinheritsched F
|
|
+GLIBC_2.36 pthread_attr_getschedparam F
|
|
+GLIBC_2.36 pthread_attr_getschedpolicy F
|
|
+GLIBC_2.36 pthread_attr_getscope F
|
|
+GLIBC_2.36 pthread_attr_getsigmask_np F
|
|
+GLIBC_2.36 pthread_attr_getstack F
|
|
+GLIBC_2.36 pthread_attr_getstackaddr F
|
|
+GLIBC_2.36 pthread_attr_getstacksize F
|
|
+GLIBC_2.36 pthread_attr_init F
|
|
+GLIBC_2.36 pthread_attr_setaffinity_np F
|
|
+GLIBC_2.36 pthread_attr_setdetachstate F
|
|
+GLIBC_2.36 pthread_attr_setguardsize F
|
|
+GLIBC_2.36 pthread_attr_setinheritsched F
|
|
+GLIBC_2.36 pthread_attr_setschedparam F
|
|
+GLIBC_2.36 pthread_attr_setschedpolicy F
|
|
+GLIBC_2.36 pthread_attr_setscope F
|
|
+GLIBC_2.36 pthread_attr_setsigmask_np F
|
|
+GLIBC_2.36 pthread_attr_setstack F
|
|
+GLIBC_2.36 pthread_attr_setstackaddr F
|
|
+GLIBC_2.36 pthread_attr_setstacksize F
|
|
+GLIBC_2.36 pthread_barrier_destroy F
|
|
+GLIBC_2.36 pthread_barrier_init F
|
|
+GLIBC_2.36 pthread_barrier_wait F
|
|
+GLIBC_2.36 pthread_barrierattr_destroy F
|
|
+GLIBC_2.36 pthread_barrierattr_getpshared F
|
|
+GLIBC_2.36 pthread_barrierattr_init F
|
|
+GLIBC_2.36 pthread_barrierattr_setpshared F
|
|
+GLIBC_2.36 pthread_cancel F
|
|
+GLIBC_2.36 pthread_clockjoin_np F
|
|
+GLIBC_2.36 pthread_cond_broadcast F
|
|
+GLIBC_2.36 pthread_cond_clockwait F
|
|
+GLIBC_2.36 pthread_cond_destroy F
|
|
+GLIBC_2.36 pthread_cond_init F
|
|
+GLIBC_2.36 pthread_cond_signal F
|
|
+GLIBC_2.36 pthread_cond_timedwait F
|
|
+GLIBC_2.36 pthread_cond_wait F
|
|
+GLIBC_2.36 pthread_condattr_destroy F
|
|
+GLIBC_2.36 pthread_condattr_getclock F
|
|
+GLIBC_2.36 pthread_condattr_getpshared F
|
|
+GLIBC_2.36 pthread_condattr_init F
|
|
+GLIBC_2.36 pthread_condattr_setclock F
|
|
+GLIBC_2.36 pthread_condattr_setpshared F
|
|
+GLIBC_2.36 pthread_create F
|
|
+GLIBC_2.36 pthread_detach F
|
|
+GLIBC_2.36 pthread_equal F
|
|
+GLIBC_2.36 pthread_exit F
|
|
+GLIBC_2.36 pthread_getaffinity_np F
|
|
+GLIBC_2.36 pthread_getattr_default_np F
|
|
+GLIBC_2.36 pthread_getattr_np F
|
|
+GLIBC_2.36 pthread_getconcurrency F
|
|
+GLIBC_2.36 pthread_getcpuclockid F
|
|
+GLIBC_2.36 pthread_getname_np F
|
|
+GLIBC_2.36 pthread_getschedparam F
|
|
+GLIBC_2.36 pthread_getspecific F
|
|
+GLIBC_2.36 pthread_join F
|
|
+GLIBC_2.36 pthread_key_create F
|
|
+GLIBC_2.36 pthread_key_delete F
|
|
+GLIBC_2.36 pthread_kill F
|
|
+GLIBC_2.36 pthread_mutex_clocklock F
|
|
+GLIBC_2.36 pthread_mutex_consistent F
|
|
+GLIBC_2.36 pthread_mutex_destroy F
|
|
+GLIBC_2.36 pthread_mutex_getprioceiling F
|
|
+GLIBC_2.36 pthread_mutex_init F
|
|
+GLIBC_2.36 pthread_mutex_lock F
|
|
+GLIBC_2.36 pthread_mutex_setprioceiling F
|
|
+GLIBC_2.36 pthread_mutex_timedlock F
|
|
+GLIBC_2.36 pthread_mutex_trylock F
|
|
+GLIBC_2.36 pthread_mutex_unlock F
|
|
+GLIBC_2.36 pthread_mutexattr_destroy F
|
|
+GLIBC_2.36 pthread_mutexattr_getprioceiling F
|
|
+GLIBC_2.36 pthread_mutexattr_getprotocol F
|
|
+GLIBC_2.36 pthread_mutexattr_getpshared F
|
|
+GLIBC_2.36 pthread_mutexattr_getrobust F
|
|
+GLIBC_2.36 pthread_mutexattr_gettype F
|
|
+GLIBC_2.36 pthread_mutexattr_init F
|
|
+GLIBC_2.36 pthread_mutexattr_setprioceiling F
|
|
+GLIBC_2.36 pthread_mutexattr_setprotocol F
|
|
+GLIBC_2.36 pthread_mutexattr_setpshared F
|
|
+GLIBC_2.36 pthread_mutexattr_setrobust F
|
|
+GLIBC_2.36 pthread_mutexattr_settype F
|
|
+GLIBC_2.36 pthread_once F
|
|
+GLIBC_2.36 pthread_rwlock_clockrdlock F
|
|
+GLIBC_2.36 pthread_rwlock_clockwrlock F
|
|
+GLIBC_2.36 pthread_rwlock_destroy F
|
|
+GLIBC_2.36 pthread_rwlock_init F
|
|
+GLIBC_2.36 pthread_rwlock_rdlock F
|
|
+GLIBC_2.36 pthread_rwlock_timedrdlock F
|
|
+GLIBC_2.36 pthread_rwlock_timedwrlock F
|
|
+GLIBC_2.36 pthread_rwlock_tryrdlock F
|
|
+GLIBC_2.36 pthread_rwlock_trywrlock F
|
|
+GLIBC_2.36 pthread_rwlock_unlock F
|
|
+GLIBC_2.36 pthread_rwlock_wrlock F
|
|
+GLIBC_2.36 pthread_rwlockattr_destroy F
|
|
+GLIBC_2.36 pthread_rwlockattr_getkind_np F
|
|
+GLIBC_2.36 pthread_rwlockattr_getpshared F
|
|
+GLIBC_2.36 pthread_rwlockattr_init F
|
|
+GLIBC_2.36 pthread_rwlockattr_setkind_np F
|
|
+GLIBC_2.36 pthread_rwlockattr_setpshared F
|
|
+GLIBC_2.36 pthread_self F
|
|
+GLIBC_2.36 pthread_setaffinity_np F
|
|
+GLIBC_2.36 pthread_setattr_default_np F
|
|
+GLIBC_2.36 pthread_setcancelstate F
|
|
+GLIBC_2.36 pthread_setcanceltype F
|
|
+GLIBC_2.36 pthread_setconcurrency F
|
|
+GLIBC_2.36 pthread_setname_np F
|
|
+GLIBC_2.36 pthread_setschedparam F
|
|
+GLIBC_2.36 pthread_setschedprio F
|
|
+GLIBC_2.36 pthread_setspecific F
|
|
+GLIBC_2.36 pthread_sigmask F
|
|
+GLIBC_2.36 pthread_sigqueue F
|
|
+GLIBC_2.36 pthread_spin_destroy F
|
|
+GLIBC_2.36 pthread_spin_init F
|
|
+GLIBC_2.36 pthread_spin_lock F
|
|
+GLIBC_2.36 pthread_spin_trylock F
|
|
+GLIBC_2.36 pthread_spin_unlock F
|
|
+GLIBC_2.36 pthread_testcancel F
|
|
+GLIBC_2.36 pthread_timedjoin_np F
|
|
+GLIBC_2.36 pthread_tryjoin_np F
|
|
+GLIBC_2.36 ptrace F
|
|
+GLIBC_2.36 ptsname F
|
|
+GLIBC_2.36 ptsname_r F
|
|
+GLIBC_2.36 putc F
|
|
+GLIBC_2.36 putc_unlocked F
|
|
+GLIBC_2.36 putchar F
|
|
+GLIBC_2.36 putchar_unlocked F
|
|
+GLIBC_2.36 putenv F
|
|
+GLIBC_2.36 putgrent F
|
|
+GLIBC_2.36 putpwent F
|
|
+GLIBC_2.36 puts F
|
|
+GLIBC_2.36 putsgent F
|
|
+GLIBC_2.36 putspent F
|
|
+GLIBC_2.36 pututline F
|
|
+GLIBC_2.36 pututxline F
|
|
+GLIBC_2.36 putw F
|
|
+GLIBC_2.36 putwc F
|
|
+GLIBC_2.36 putwc_unlocked F
|
|
+GLIBC_2.36 putwchar F
|
|
+GLIBC_2.36 putwchar_unlocked F
|
|
+GLIBC_2.36 pvalloc F
|
|
+GLIBC_2.36 pwrite F
|
|
+GLIBC_2.36 pwrite64 F
|
|
+GLIBC_2.36 pwritev F
|
|
+GLIBC_2.36 pwritev2 F
|
|
+GLIBC_2.36 pwritev64 F
|
|
+GLIBC_2.36 pwritev64v2 F
|
|
+GLIBC_2.36 qecvt F
|
|
+GLIBC_2.36 qecvt_r F
|
|
+GLIBC_2.36 qfcvt F
|
|
+GLIBC_2.36 qfcvt_r F
|
|
+GLIBC_2.36 qgcvt F
|
|
+GLIBC_2.36 qsort F
|
|
+GLIBC_2.36 qsort_r F
|
|
+GLIBC_2.36 quick_exit F
|
|
+GLIBC_2.36 quotactl F
|
|
+GLIBC_2.36 raise F
|
|
+GLIBC_2.36 rand F
|
|
+GLIBC_2.36 rand_r F
|
|
+GLIBC_2.36 random F
|
|
+GLIBC_2.36 random_r F
|
|
+GLIBC_2.36 rawmemchr F
|
|
+GLIBC_2.36 rcmd F
|
|
+GLIBC_2.36 rcmd_af F
|
|
+GLIBC_2.36 re_comp F
|
|
+GLIBC_2.36 re_compile_fastmap F
|
|
+GLIBC_2.36 re_compile_pattern F
|
|
+GLIBC_2.36 re_exec F
|
|
+GLIBC_2.36 re_match F
|
|
+GLIBC_2.36 re_match_2 F
|
|
+GLIBC_2.36 re_search F
|
|
+GLIBC_2.36 re_search_2 F
|
|
+GLIBC_2.36 re_set_registers F
|
|
+GLIBC_2.36 re_set_syntax F
|
|
+GLIBC_2.36 re_syntax_options D 0x8
|
|
+GLIBC_2.36 read F
|
|
+GLIBC_2.36 readahead F
|
|
+GLIBC_2.36 readdir F
|
|
+GLIBC_2.36 readdir64 F
|
|
+GLIBC_2.36 readdir64_r F
|
|
+GLIBC_2.36 readdir_r F
|
|
+GLIBC_2.36 readlink F
|
|
+GLIBC_2.36 readlinkat F
|
|
+GLIBC_2.36 readv F
|
|
+GLIBC_2.36 realloc F
|
|
+GLIBC_2.36 reallocarray F
|
|
+GLIBC_2.36 realpath F
|
|
+GLIBC_2.36 reboot F
|
|
+GLIBC_2.36 recv F
|
|
+GLIBC_2.36 recvfrom F
|
|
+GLIBC_2.36 recvmmsg F
|
|
+GLIBC_2.36 recvmsg F
|
|
+GLIBC_2.36 regcomp F
|
|
+GLIBC_2.36 regerror F
|
|
+GLIBC_2.36 regexec F
|
|
+GLIBC_2.36 regfree F
|
|
+GLIBC_2.36 register_printf_function F
|
|
+GLIBC_2.36 register_printf_modifier F
|
|
+GLIBC_2.36 register_printf_specifier F
|
|
+GLIBC_2.36 register_printf_type F
|
|
+GLIBC_2.36 remap_file_pages F
|
|
+GLIBC_2.36 remove F
|
|
+GLIBC_2.36 removexattr F
|
|
+GLIBC_2.36 remque F
|
|
+GLIBC_2.36 rename F
|
|
+GLIBC_2.36 renameat F
|
|
+GLIBC_2.36 renameat2 F
|
|
+GLIBC_2.36 res_dnok F
|
|
+GLIBC_2.36 res_hnok F
|
|
+GLIBC_2.36 res_mailok F
|
|
+GLIBC_2.36 res_mkquery F
|
|
+GLIBC_2.36 res_nmkquery F
|
|
+GLIBC_2.36 res_nquery F
|
|
+GLIBC_2.36 res_nquerydomain F
|
|
+GLIBC_2.36 res_nsearch F
|
|
+GLIBC_2.36 res_nsend F
|
|
+GLIBC_2.36 res_ownok F
|
|
+GLIBC_2.36 res_query F
|
|
+GLIBC_2.36 res_querydomain F
|
|
+GLIBC_2.36 res_search F
|
|
+GLIBC_2.36 res_send F
|
|
+GLIBC_2.36 revoke F
|
|
+GLIBC_2.36 rewind F
|
|
+GLIBC_2.36 rewinddir F
|
|
+GLIBC_2.36 rexec F
|
|
+GLIBC_2.36 rexec_af F
|
|
+GLIBC_2.36 rexecoptions D 0x4
|
|
+GLIBC_2.36 rindex F
|
|
+GLIBC_2.36 rmdir F
|
|
+GLIBC_2.36 rpmatch F
|
|
+GLIBC_2.36 rresvport F
|
|
+GLIBC_2.36 rresvport_af F
|
|
+GLIBC_2.36 ruserok F
|
|
+GLIBC_2.36 ruserok_af F
|
|
+GLIBC_2.36 ruserpass F
|
|
+GLIBC_2.36 sbrk F
|
|
+GLIBC_2.36 scalbn F
|
|
+GLIBC_2.36 scalbnf F
|
|
+GLIBC_2.36 scalbnl F
|
|
+GLIBC_2.36 scandir F
|
|
+GLIBC_2.36 scandir64 F
|
|
+GLIBC_2.36 scandirat F
|
|
+GLIBC_2.36 scandirat64 F
|
|
+GLIBC_2.36 scanf F
|
|
+GLIBC_2.36 sched_get_priority_max F
|
|
+GLIBC_2.36 sched_get_priority_min F
|
|
+GLIBC_2.36 sched_getaffinity F
|
|
+GLIBC_2.36 sched_getcpu F
|
|
+GLIBC_2.36 sched_getparam F
|
|
+GLIBC_2.36 sched_getscheduler F
|
|
+GLIBC_2.36 sched_rr_get_interval F
|
|
+GLIBC_2.36 sched_setaffinity F
|
|
+GLIBC_2.36 sched_setparam F
|
|
+GLIBC_2.36 sched_setscheduler F
|
|
+GLIBC_2.36 sched_yield F
|
|
+GLIBC_2.36 secure_getenv F
|
|
+GLIBC_2.36 seed48 F
|
|
+GLIBC_2.36 seed48_r F
|
|
+GLIBC_2.36 seekdir F
|
|
+GLIBC_2.36 select F
|
|
+GLIBC_2.36 sem_clockwait F
|
|
+GLIBC_2.36 sem_close F
|
|
+GLIBC_2.36 sem_destroy F
|
|
+GLIBC_2.36 sem_getvalue F
|
|
+GLIBC_2.36 sem_init F
|
|
+GLIBC_2.36 sem_open F
|
|
+GLIBC_2.36 sem_post F
|
|
+GLIBC_2.36 sem_timedwait F
|
|
+GLIBC_2.36 sem_trywait F
|
|
+GLIBC_2.36 sem_unlink F
|
|
+GLIBC_2.36 sem_wait F
|
|
+GLIBC_2.36 semctl F
|
|
+GLIBC_2.36 semget F
|
|
+GLIBC_2.36 semop F
|
|
+GLIBC_2.36 semtimedop F
|
|
+GLIBC_2.36 send F
|
|
+GLIBC_2.36 sendfile F
|
|
+GLIBC_2.36 sendfile64 F
|
|
+GLIBC_2.36 sendmmsg F
|
|
+GLIBC_2.36 sendmsg F
|
|
+GLIBC_2.36 sendto F
|
|
+GLIBC_2.36 setaliasent F
|
|
+GLIBC_2.36 setbuf F
|
|
+GLIBC_2.36 setbuffer F
|
|
+GLIBC_2.36 setcontext F
|
|
+GLIBC_2.36 setdomainname F
|
|
+GLIBC_2.36 setegid F
|
|
+GLIBC_2.36 setenv F
|
|
+GLIBC_2.36 seteuid F
|
|
+GLIBC_2.36 setfsent F
|
|
+GLIBC_2.36 setfsgid F
|
|
+GLIBC_2.36 setfsuid F
|
|
+GLIBC_2.36 setgid F
|
|
+GLIBC_2.36 setgrent F
|
|
+GLIBC_2.36 setgroups F
|
|
+GLIBC_2.36 sethostent F
|
|
+GLIBC_2.36 sethostid F
|
|
+GLIBC_2.36 sethostname F
|
|
+GLIBC_2.36 setipv4sourcefilter F
|
|
+GLIBC_2.36 setitimer F
|
|
+GLIBC_2.36 setjmp F
|
|
+GLIBC_2.36 setlinebuf F
|
|
+GLIBC_2.36 setlocale F
|
|
+GLIBC_2.36 setlogin F
|
|
+GLIBC_2.36 setlogmask F
|
|
+GLIBC_2.36 setmntent F
|
|
+GLIBC_2.36 setnetent F
|
|
+GLIBC_2.36 setnetgrent F
|
|
+GLIBC_2.36 setns F
|
|
+GLIBC_2.36 setpgid F
|
|
+GLIBC_2.36 setpgrp F
|
|
+GLIBC_2.36 setpriority F
|
|
+GLIBC_2.36 setprotoent F
|
|
+GLIBC_2.36 setpwent F
|
|
+GLIBC_2.36 setregid F
|
|
+GLIBC_2.36 setresgid F
|
|
+GLIBC_2.36 setresuid F
|
|
+GLIBC_2.36 setreuid F
|
|
+GLIBC_2.36 setrlimit F
|
|
+GLIBC_2.36 setrlimit64 F
|
|
+GLIBC_2.36 setrpcent F
|
|
+GLIBC_2.36 setservent F
|
|
+GLIBC_2.36 setsgent F
|
|
+GLIBC_2.36 setsid F
|
|
+GLIBC_2.36 setsockopt F
|
|
+GLIBC_2.36 setsourcefilter F
|
|
+GLIBC_2.36 setspent F
|
|
+GLIBC_2.36 setstate F
|
|
+GLIBC_2.36 setstate_r F
|
|
+GLIBC_2.36 settimeofday F
|
|
+GLIBC_2.36 setttyent F
|
|
+GLIBC_2.36 setuid F
|
|
+GLIBC_2.36 setusershell F
|
|
+GLIBC_2.36 setutent F
|
|
+GLIBC_2.36 setutxent F
|
|
+GLIBC_2.36 setvbuf F
|
|
+GLIBC_2.36 setxattr F
|
|
+GLIBC_2.36 sgetsgent F
|
|
+GLIBC_2.36 sgetsgent_r F
|
|
+GLIBC_2.36 sgetspent F
|
|
+GLIBC_2.36 sgetspent_r F
|
|
+GLIBC_2.36 shm_open F
|
|
+GLIBC_2.36 shm_unlink F
|
|
+GLIBC_2.36 shmat F
|
|
+GLIBC_2.36 shmctl F
|
|
+GLIBC_2.36 shmdt F
|
|
+GLIBC_2.36 shmget F
|
|
+GLIBC_2.36 shutdown F
|
|
+GLIBC_2.36 sigabbrev_np F
|
|
+GLIBC_2.36 sigaction F
|
|
+GLIBC_2.36 sigaddset F
|
|
+GLIBC_2.36 sigaltstack F
|
|
+GLIBC_2.36 sigandset F
|
|
+GLIBC_2.36 sigblock F
|
|
+GLIBC_2.36 sigdelset F
|
|
+GLIBC_2.36 sigdescr_np F
|
|
+GLIBC_2.36 sigemptyset F
|
|
+GLIBC_2.36 sigfillset F
|
|
+GLIBC_2.36 siggetmask F
|
|
+GLIBC_2.36 sighold F
|
|
+GLIBC_2.36 sigignore F
|
|
+GLIBC_2.36 siginterrupt F
|
|
+GLIBC_2.36 sigisemptyset F
|
|
+GLIBC_2.36 sigismember F
|
|
+GLIBC_2.36 siglongjmp F
|
|
+GLIBC_2.36 signal F
|
|
+GLIBC_2.36 signalfd F
|
|
+GLIBC_2.36 sigorset F
|
|
+GLIBC_2.36 sigpause F
|
|
+GLIBC_2.36 sigpending F
|
|
+GLIBC_2.36 sigprocmask F
|
|
+GLIBC_2.36 sigqueue F
|
|
+GLIBC_2.36 sigrelse F
|
|
+GLIBC_2.36 sigreturn F
|
|
+GLIBC_2.36 sigset F
|
|
+GLIBC_2.36 sigsetmask F
|
|
+GLIBC_2.36 sigstack F
|
|
+GLIBC_2.36 sigsuspend F
|
|
+GLIBC_2.36 sigtimedwait F
|
|
+GLIBC_2.36 sigwait F
|
|
+GLIBC_2.36 sigwaitinfo F
|
|
+GLIBC_2.36 sleep F
|
|
+GLIBC_2.36 snprintf F
|
|
+GLIBC_2.36 sockatmark F
|
|
+GLIBC_2.36 socket F
|
|
+GLIBC_2.36 socketpair F
|
|
+GLIBC_2.36 splice F
|
|
+GLIBC_2.36 sprintf F
|
|
+GLIBC_2.36 sprofil F
|
|
+GLIBC_2.36 srand F
|
|
+GLIBC_2.36 srand48 F
|
|
+GLIBC_2.36 srand48_r F
|
|
+GLIBC_2.36 srandom F
|
|
+GLIBC_2.36 srandom_r F
|
|
+GLIBC_2.36 sscanf F
|
|
+GLIBC_2.36 ssignal F
|
|
+GLIBC_2.36 stat F
|
|
+GLIBC_2.36 stat64 F
|
|
+GLIBC_2.36 statfs F
|
|
+GLIBC_2.36 statfs64 F
|
|
+GLIBC_2.36 statvfs F
|
|
+GLIBC_2.36 statvfs64 F
|
|
+GLIBC_2.36 statx F
|
|
+GLIBC_2.36 stderr D 0x8
|
|
+GLIBC_2.36 stdin D 0x8
|
|
+GLIBC_2.36 stdout D 0x8
|
|
+GLIBC_2.36 stpcpy F
|
|
+GLIBC_2.36 stpncpy F
|
|
+GLIBC_2.36 strcasecmp F
|
|
+GLIBC_2.36 strcasecmp_l F
|
|
+GLIBC_2.36 strcasestr F
|
|
+GLIBC_2.36 strcat F
|
|
+GLIBC_2.36 strchr F
|
|
+GLIBC_2.36 strchrnul F
|
|
+GLIBC_2.36 strcmp F
|
|
+GLIBC_2.36 strcoll F
|
|
+GLIBC_2.36 strcoll_l F
|
|
+GLIBC_2.36 strcpy F
|
|
+GLIBC_2.36 strcspn F
|
|
+GLIBC_2.36 strdup F
|
|
+GLIBC_2.36 strerror F
|
|
+GLIBC_2.36 strerror_l F
|
|
+GLIBC_2.36 strerror_r F
|
|
+GLIBC_2.36 strerrordesc_np F
|
|
+GLIBC_2.36 strerrorname_np F
|
|
+GLIBC_2.36 strfmon F
|
|
+GLIBC_2.36 strfmon_l F
|
|
+GLIBC_2.36 strfromd F
|
|
+GLIBC_2.36 strfromf F
|
|
+GLIBC_2.36 strfromf128 F
|
|
+GLIBC_2.36 strfromf32 F
|
|
+GLIBC_2.36 strfromf32x F
|
|
+GLIBC_2.36 strfromf64 F
|
|
+GLIBC_2.36 strfromf64x F
|
|
+GLIBC_2.36 strfroml F
|
|
+GLIBC_2.36 strfry F
|
|
+GLIBC_2.36 strftime F
|
|
+GLIBC_2.36 strftime_l F
|
|
+GLIBC_2.36 strlen F
|
|
+GLIBC_2.36 strncasecmp F
|
|
+GLIBC_2.36 strncasecmp_l F
|
|
+GLIBC_2.36 strncat F
|
|
+GLIBC_2.36 strncmp F
|
|
+GLIBC_2.36 strncpy F
|
|
+GLIBC_2.36 strndup F
|
|
+GLIBC_2.36 strnlen F
|
|
+GLIBC_2.36 strpbrk F
|
|
+GLIBC_2.36 strptime F
|
|
+GLIBC_2.36 strptime_l F
|
|
+GLIBC_2.36 strrchr F
|
|
+GLIBC_2.36 strsep F
|
|
+GLIBC_2.36 strsignal F
|
|
+GLIBC_2.36 strspn F
|
|
+GLIBC_2.36 strstr F
|
|
+GLIBC_2.36 strtod F
|
|
+GLIBC_2.36 strtod_l F
|
|
+GLIBC_2.36 strtof F
|
|
+GLIBC_2.36 strtof128 F
|
|
+GLIBC_2.36 strtof128_l F
|
|
+GLIBC_2.36 strtof32 F
|
|
+GLIBC_2.36 strtof32_l F
|
|
+GLIBC_2.36 strtof32x F
|
|
+GLIBC_2.36 strtof32x_l F
|
|
+GLIBC_2.36 strtof64 F
|
|
+GLIBC_2.36 strtof64_l F
|
|
+GLIBC_2.36 strtof64x F
|
|
+GLIBC_2.36 strtof64x_l F
|
|
+GLIBC_2.36 strtof_l F
|
|
+GLIBC_2.36 strtoimax F
|
|
+GLIBC_2.36 strtok F
|
|
+GLIBC_2.36 strtok_r F
|
|
+GLIBC_2.36 strtol F
|
|
+GLIBC_2.36 strtol_l F
|
|
+GLIBC_2.36 strtold F
|
|
+GLIBC_2.36 strtold_l F
|
|
+GLIBC_2.36 strtoll F
|
|
+GLIBC_2.36 strtoll_l F
|
|
+GLIBC_2.36 strtoq F
|
|
+GLIBC_2.36 strtoul F
|
|
+GLIBC_2.36 strtoul_l F
|
|
+GLIBC_2.36 strtoull F
|
|
+GLIBC_2.36 strtoull_l F
|
|
+GLIBC_2.36 strtoumax F
|
|
+GLIBC_2.36 strtouq F
|
|
+GLIBC_2.36 strverscmp F
|
|
+GLIBC_2.36 strxfrm F
|
|
+GLIBC_2.36 strxfrm_l F
|
|
+GLIBC_2.36 stty F
|
|
+GLIBC_2.36 swab F
|
|
+GLIBC_2.36 swapcontext F
|
|
+GLIBC_2.36 swapoff F
|
|
+GLIBC_2.36 swapon F
|
|
+GLIBC_2.36 swprintf F
|
|
+GLIBC_2.36 swscanf F
|
|
+GLIBC_2.36 symlink F
|
|
+GLIBC_2.36 symlinkat F
|
|
+GLIBC_2.36 sync F
|
|
+GLIBC_2.36 sync_file_range F
|
|
+GLIBC_2.36 syncfs F
|
|
+GLIBC_2.36 syscall F
|
|
+GLIBC_2.36 sysconf F
|
|
+GLIBC_2.36 sysinfo F
|
|
+GLIBC_2.36 syslog F
|
|
+GLIBC_2.36 system F
|
|
+GLIBC_2.36 sysv_signal F
|
|
+GLIBC_2.36 tcdrain F
|
|
+GLIBC_2.36 tcflow F
|
|
+GLIBC_2.36 tcflush F
|
|
+GLIBC_2.36 tcgetattr F
|
|
+GLIBC_2.36 tcgetpgrp F
|
|
+GLIBC_2.36 tcgetsid F
|
|
+GLIBC_2.36 tcsendbreak F
|
|
+GLIBC_2.36 tcsetattr F
|
|
+GLIBC_2.36 tcsetpgrp F
|
|
+GLIBC_2.36 tdelete F
|
|
+GLIBC_2.36 tdestroy F
|
|
+GLIBC_2.36 tee F
|
|
+GLIBC_2.36 telldir F
|
|
+GLIBC_2.36 tempnam F
|
|
+GLIBC_2.36 textdomain F
|
|
+GLIBC_2.36 tfind F
|
|
+GLIBC_2.36 tgkill F
|
|
+GLIBC_2.36 thrd_create F
|
|
+GLIBC_2.36 thrd_current F
|
|
+GLIBC_2.36 thrd_detach F
|
|
+GLIBC_2.36 thrd_equal F
|
|
+GLIBC_2.36 thrd_exit F
|
|
+GLIBC_2.36 thrd_join F
|
|
+GLIBC_2.36 thrd_sleep F
|
|
+GLIBC_2.36 thrd_yield F
|
|
+GLIBC_2.36 time F
|
|
+GLIBC_2.36 timegm F
|
|
+GLIBC_2.36 timelocal F
|
|
+GLIBC_2.36 timer_create F
|
|
+GLIBC_2.36 timer_delete F
|
|
+GLIBC_2.36 timer_getoverrun F
|
|
+GLIBC_2.36 timer_gettime F
|
|
+GLIBC_2.36 timer_settime F
|
|
+GLIBC_2.36 timerfd_create F
|
|
+GLIBC_2.36 timerfd_gettime F
|
|
+GLIBC_2.36 timerfd_settime F
|
|
+GLIBC_2.36 times F
|
|
+GLIBC_2.36 timespec_get F
|
|
+GLIBC_2.36 timespec_getres F
|
|
+GLIBC_2.36 timezone D 0x8
|
|
+GLIBC_2.36 tmpfile F
|
|
+GLIBC_2.36 tmpfile64 F
|
|
+GLIBC_2.36 tmpnam F
|
|
+GLIBC_2.36 tmpnam_r F
|
|
+GLIBC_2.36 toascii F
|
|
+GLIBC_2.36 tolower F
|
|
+GLIBC_2.36 tolower_l F
|
|
+GLIBC_2.36 toupper F
|
|
+GLIBC_2.36 toupper_l F
|
|
+GLIBC_2.36 towctrans F
|
|
+GLIBC_2.36 towctrans_l F
|
|
+GLIBC_2.36 towlower F
|
|
+GLIBC_2.36 towlower_l F
|
|
+GLIBC_2.36 towupper F
|
|
+GLIBC_2.36 towupper_l F
|
|
+GLIBC_2.36 truncate F
|
|
+GLIBC_2.36 truncate64 F
|
|
+GLIBC_2.36 tsearch F
|
|
+GLIBC_2.36 tss_create F
|
|
+GLIBC_2.36 tss_delete F
|
|
+GLIBC_2.36 tss_get F
|
|
+GLIBC_2.36 tss_set F
|
|
+GLIBC_2.36 ttyname F
|
|
+GLIBC_2.36 ttyname_r F
|
|
+GLIBC_2.36 ttyslot F
|
|
+GLIBC_2.36 twalk F
|
|
+GLIBC_2.36 twalk_r F
|
|
+GLIBC_2.36 tzname D 0x10
|
|
+GLIBC_2.36 tzset F
|
|
+GLIBC_2.36 ualarm F
|
|
+GLIBC_2.36 ulckpwdf F
|
|
+GLIBC_2.36 ulimit F
|
|
+GLIBC_2.36 umask F
|
|
+GLIBC_2.36 umount F
|
|
+GLIBC_2.36 umount2 F
|
|
+GLIBC_2.36 uname F
|
|
+GLIBC_2.36 ungetc F
|
|
+GLIBC_2.36 ungetwc F
|
|
+GLIBC_2.36 unlink F
|
|
+GLIBC_2.36 unlinkat F
|
|
+GLIBC_2.36 unlockpt F
|
|
+GLIBC_2.36 unsetenv F
|
|
+GLIBC_2.36 unshare F
|
|
+GLIBC_2.36 updwtmp F
|
|
+GLIBC_2.36 updwtmpx F
|
|
+GLIBC_2.36 uselocale F
|
|
+GLIBC_2.36 usleep F
|
|
+GLIBC_2.36 utime F
|
|
+GLIBC_2.36 utimensat F
|
|
+GLIBC_2.36 utimes F
|
|
+GLIBC_2.36 utmpname F
|
|
+GLIBC_2.36 utmpxname F
|
|
+GLIBC_2.36 valloc F
|
|
+GLIBC_2.36 vasprintf F
|
|
+GLIBC_2.36 vdprintf F
|
|
+GLIBC_2.36 verr F
|
|
+GLIBC_2.36 verrx F
|
|
+GLIBC_2.36 versionsort F
|
|
+GLIBC_2.36 versionsort64 F
|
|
+GLIBC_2.36 vfork F
|
|
+GLIBC_2.36 vfprintf F
|
|
+GLIBC_2.36 vfscanf F
|
|
+GLIBC_2.36 vfwprintf F
|
|
+GLIBC_2.36 vfwscanf F
|
|
+GLIBC_2.36 vhangup F
|
|
+GLIBC_2.36 vlimit F
|
|
+GLIBC_2.36 vmsplice F
|
|
+GLIBC_2.36 vprintf F
|
|
+GLIBC_2.36 vscanf F
|
|
+GLIBC_2.36 vsnprintf F
|
|
+GLIBC_2.36 vsprintf F
|
|
+GLIBC_2.36 vsscanf F
|
|
+GLIBC_2.36 vswprintf F
|
|
+GLIBC_2.36 vswscanf F
|
|
+GLIBC_2.36 vsyslog F
|
|
+GLIBC_2.36 vwarn F
|
|
+GLIBC_2.36 vwarnx F
|
|
+GLIBC_2.36 vwprintf F
|
|
+GLIBC_2.36 vwscanf F
|
|
+GLIBC_2.36 wait F
|
|
+GLIBC_2.36 wait3 F
|
|
+GLIBC_2.36 wait4 F
|
|
+GLIBC_2.36 waitid F
|
|
+GLIBC_2.36 waitpid F
|
|
+GLIBC_2.36 warn F
|
|
+GLIBC_2.36 warnx F
|
|
+GLIBC_2.36 wcpcpy F
|
|
+GLIBC_2.36 wcpncpy F
|
|
+GLIBC_2.36 wcrtomb F
|
|
+GLIBC_2.36 wcscasecmp F
|
|
+GLIBC_2.36 wcscasecmp_l F
|
|
+GLIBC_2.36 wcscat F
|
|
+GLIBC_2.36 wcschr F
|
|
+GLIBC_2.36 wcschrnul F
|
|
+GLIBC_2.36 wcscmp F
|
|
+GLIBC_2.36 wcscoll F
|
|
+GLIBC_2.36 wcscoll_l F
|
|
+GLIBC_2.36 wcscpy F
|
|
+GLIBC_2.36 wcscspn F
|
|
+GLIBC_2.36 wcsdup F
|
|
+GLIBC_2.36 wcsftime F
|
|
+GLIBC_2.36 wcsftime_l F
|
|
+GLIBC_2.36 wcslen F
|
|
+GLIBC_2.36 wcsncasecmp F
|
|
+GLIBC_2.36 wcsncasecmp_l F
|
|
+GLIBC_2.36 wcsncat F
|
|
+GLIBC_2.36 wcsncmp F
|
|
+GLIBC_2.36 wcsncpy F
|
|
+GLIBC_2.36 wcsnlen F
|
|
+GLIBC_2.36 wcsnrtombs F
|
|
+GLIBC_2.36 wcspbrk F
|
|
+GLIBC_2.36 wcsrchr F
|
|
+GLIBC_2.36 wcsrtombs F
|
|
+GLIBC_2.36 wcsspn F
|
|
+GLIBC_2.36 wcsstr F
|
|
+GLIBC_2.36 wcstod F
|
|
+GLIBC_2.36 wcstod_l F
|
|
+GLIBC_2.36 wcstof F
|
|
+GLIBC_2.36 wcstof128 F
|
|
+GLIBC_2.36 wcstof128_l F
|
|
+GLIBC_2.36 wcstof32 F
|
|
+GLIBC_2.36 wcstof32_l F
|
|
+GLIBC_2.36 wcstof32x F
|
|
+GLIBC_2.36 wcstof32x_l F
|
|
+GLIBC_2.36 wcstof64 F
|
|
+GLIBC_2.36 wcstof64_l F
|
|
+GLIBC_2.36 wcstof64x F
|
|
+GLIBC_2.36 wcstof64x_l F
|
|
+GLIBC_2.36 wcstof_l F
|
|
+GLIBC_2.36 wcstoimax F
|
|
+GLIBC_2.36 wcstok F
|
|
+GLIBC_2.36 wcstol F
|
|
+GLIBC_2.36 wcstol_l F
|
|
+GLIBC_2.36 wcstold F
|
|
+GLIBC_2.36 wcstold_l F
|
|
+GLIBC_2.36 wcstoll F
|
|
+GLIBC_2.36 wcstoll_l F
|
|
+GLIBC_2.36 wcstombs F
|
|
+GLIBC_2.36 wcstoq F
|
|
+GLIBC_2.36 wcstoul F
|
|
+GLIBC_2.36 wcstoul_l F
|
|
+GLIBC_2.36 wcstoull F
|
|
+GLIBC_2.36 wcstoull_l F
|
|
+GLIBC_2.36 wcstoumax F
|
|
+GLIBC_2.36 wcstouq F
|
|
+GLIBC_2.36 wcswcs F
|
|
+GLIBC_2.36 wcswidth F
|
|
+GLIBC_2.36 wcsxfrm F
|
|
+GLIBC_2.36 wcsxfrm_l F
|
|
+GLIBC_2.36 wctob F
|
|
+GLIBC_2.36 wctomb F
|
|
+GLIBC_2.36 wctrans F
|
|
+GLIBC_2.36 wctrans_l F
|
|
+GLIBC_2.36 wctype F
|
|
+GLIBC_2.36 wctype_l F
|
|
+GLIBC_2.36 wcwidth F
|
|
+GLIBC_2.36 wmemchr F
|
|
+GLIBC_2.36 wmemcmp F
|
|
+GLIBC_2.36 wmemcpy F
|
|
+GLIBC_2.36 wmemmove F
|
|
+GLIBC_2.36 wmempcpy F
|
|
+GLIBC_2.36 wmemset F
|
|
+GLIBC_2.36 wordexp F
|
|
+GLIBC_2.36 wordfree F
|
|
+GLIBC_2.36 wprintf F
|
|
+GLIBC_2.36 write F
|
|
+GLIBC_2.36 writev F
|
|
+GLIBC_2.36 wscanf F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist
|
|
new file mode 100644
|
|
index 00000000..6ddfd162
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist
|
|
@@ -0,0 +1,26 @@
|
|
+GLIBC_2.36 __free_hook D 0x8
|
|
+GLIBC_2.36 __malloc_hook D 0x8
|
|
+GLIBC_2.36 __memalign_hook D 0x8
|
|
+GLIBC_2.36 __realloc_hook D 0x8
|
|
+GLIBC_2.36 aligned_alloc F
|
|
+GLIBC_2.36 calloc F
|
|
+GLIBC_2.36 free F
|
|
+GLIBC_2.36 mallinfo F
|
|
+GLIBC_2.36 mallinfo2 F
|
|
+GLIBC_2.36 malloc F
|
|
+GLIBC_2.36 malloc_info F
|
|
+GLIBC_2.36 malloc_stats F
|
|
+GLIBC_2.36 malloc_trim F
|
|
+GLIBC_2.36 malloc_usable_size F
|
|
+GLIBC_2.36 mallopt F
|
|
+GLIBC_2.36 mcheck F
|
|
+GLIBC_2.36 mcheck_check_all F
|
|
+GLIBC_2.36 mcheck_pedantic F
|
|
+GLIBC_2.36 memalign F
|
|
+GLIBC_2.36 mprobe F
|
|
+GLIBC_2.36 mtrace F
|
|
+GLIBC_2.36 muntrace F
|
|
+GLIBC_2.36 posix_memalign F
|
|
+GLIBC_2.36 pvalloc F
|
|
+GLIBC_2.36 realloc F
|
|
+GLIBC_2.36 valloc F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist
|
|
new file mode 100644
|
|
index 00000000..4d4332da
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist
|
|
@@ -0,0 +1,2 @@
|
|
+GLIBC_2.36 crypt F
|
|
+GLIBC_2.36 crypt_r F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libdl.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libdl.abilist
|
|
new file mode 100644
|
|
index 00000000..e69de29b
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist
|
|
new file mode 100644
|
|
index 00000000..b566624d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist
|
|
@@ -0,0 +1,940 @@
|
|
+GLIBC_2.36 __clog10 F
|
|
+GLIBC_2.36 __clog10f F
|
|
+GLIBC_2.36 __clog10l F
|
|
+GLIBC_2.36 __finite F
|
|
+GLIBC_2.36 __finitef F
|
|
+GLIBC_2.36 __finitel F
|
|
+GLIBC_2.36 __fpclassify F
|
|
+GLIBC_2.36 __fpclassifyf F
|
|
+GLIBC_2.36 __fpclassifyl F
|
|
+GLIBC_2.36 __iseqsig F
|
|
+GLIBC_2.36 __iseqsigf F
|
|
+GLIBC_2.36 __iseqsigl F
|
|
+GLIBC_2.36 __issignaling F
|
|
+GLIBC_2.36 __issignalingf F
|
|
+GLIBC_2.36 __issignalingl F
|
|
+GLIBC_2.36 __signbit F
|
|
+GLIBC_2.36 __signbitf F
|
|
+GLIBC_2.36 __signbitl F
|
|
+GLIBC_2.36 __signgam D 0x4
|
|
+GLIBC_2.36 acos F
|
|
+GLIBC_2.36 acosf F
|
|
+GLIBC_2.36 acosf128 F
|
|
+GLIBC_2.36 acosf32 F
|
|
+GLIBC_2.36 acosf32x F
|
|
+GLIBC_2.36 acosf64 F
|
|
+GLIBC_2.36 acosf64x F
|
|
+GLIBC_2.36 acosh F
|
|
+GLIBC_2.36 acoshf F
|
|
+GLIBC_2.36 acoshf128 F
|
|
+GLIBC_2.36 acoshf32 F
|
|
+GLIBC_2.36 acoshf32x F
|
|
+GLIBC_2.36 acoshf64 F
|
|
+GLIBC_2.36 acoshf64x F
|
|
+GLIBC_2.36 acoshl F
|
|
+GLIBC_2.36 acosl F
|
|
+GLIBC_2.36 asin F
|
|
+GLIBC_2.36 asinf F
|
|
+GLIBC_2.36 asinf128 F
|
|
+GLIBC_2.36 asinf32 F
|
|
+GLIBC_2.36 asinf32x F
|
|
+GLIBC_2.36 asinf64 F
|
|
+GLIBC_2.36 asinf64x F
|
|
+GLIBC_2.36 asinh F
|
|
+GLIBC_2.36 asinhf F
|
|
+GLIBC_2.36 asinhf128 F
|
|
+GLIBC_2.36 asinhf32 F
|
|
+GLIBC_2.36 asinhf32x F
|
|
+GLIBC_2.36 asinhf64 F
|
|
+GLIBC_2.36 asinhf64x F
|
|
+GLIBC_2.36 asinhl F
|
|
+GLIBC_2.36 asinl F
|
|
+GLIBC_2.36 atan F
|
|
+GLIBC_2.36 atan2 F
|
|
+GLIBC_2.36 atan2f F
|
|
+GLIBC_2.36 atan2f128 F
|
|
+GLIBC_2.36 atan2f32 F
|
|
+GLIBC_2.36 atan2f32x F
|
|
+GLIBC_2.36 atan2f64 F
|
|
+GLIBC_2.36 atan2f64x F
|
|
+GLIBC_2.36 atan2l F
|
|
+GLIBC_2.36 atanf F
|
|
+GLIBC_2.36 atanf128 F
|
|
+GLIBC_2.36 atanf32 F
|
|
+GLIBC_2.36 atanf32x F
|
|
+GLIBC_2.36 atanf64 F
|
|
+GLIBC_2.36 atanf64x F
|
|
+GLIBC_2.36 atanh F
|
|
+GLIBC_2.36 atanhf F
|
|
+GLIBC_2.36 atanhf128 F
|
|
+GLIBC_2.36 atanhf32 F
|
|
+GLIBC_2.36 atanhf32x F
|
|
+GLIBC_2.36 atanhf64 F
|
|
+GLIBC_2.36 atanhf64x F
|
|
+GLIBC_2.36 atanhl F
|
|
+GLIBC_2.36 atanl F
|
|
+GLIBC_2.36 cabs F
|
|
+GLIBC_2.36 cabsf F
|
|
+GLIBC_2.36 cabsf128 F
|
|
+GLIBC_2.36 cabsf32 F
|
|
+GLIBC_2.36 cabsf32x F
|
|
+GLIBC_2.36 cabsf64 F
|
|
+GLIBC_2.36 cabsf64x F
|
|
+GLIBC_2.36 cabsl F
|
|
+GLIBC_2.36 cacos F
|
|
+GLIBC_2.36 cacosf F
|
|
+GLIBC_2.36 cacosf128 F
|
|
+GLIBC_2.36 cacosf32 F
|
|
+GLIBC_2.36 cacosf32x F
|
|
+GLIBC_2.36 cacosf64 F
|
|
+GLIBC_2.36 cacosf64x F
|
|
+GLIBC_2.36 cacosh F
|
|
+GLIBC_2.36 cacoshf F
|
|
+GLIBC_2.36 cacoshf128 F
|
|
+GLIBC_2.36 cacoshf32 F
|
|
+GLIBC_2.36 cacoshf32x F
|
|
+GLIBC_2.36 cacoshf64 F
|
|
+GLIBC_2.36 cacoshf64x F
|
|
+GLIBC_2.36 cacoshl F
|
|
+GLIBC_2.36 cacosl F
|
|
+GLIBC_2.36 canonicalize F
|
|
+GLIBC_2.36 canonicalizef F
|
|
+GLIBC_2.36 canonicalizef128 F
|
|
+GLIBC_2.36 canonicalizef32 F
|
|
+GLIBC_2.36 canonicalizef32x F
|
|
+GLIBC_2.36 canonicalizef64 F
|
|
+GLIBC_2.36 canonicalizef64x F
|
|
+GLIBC_2.36 canonicalizel F
|
|
+GLIBC_2.36 carg F
|
|
+GLIBC_2.36 cargf F
|
|
+GLIBC_2.36 cargf128 F
|
|
+GLIBC_2.36 cargf32 F
|
|
+GLIBC_2.36 cargf32x F
|
|
+GLIBC_2.36 cargf64 F
|
|
+GLIBC_2.36 cargf64x F
|
|
+GLIBC_2.36 cargl F
|
|
+GLIBC_2.36 casin F
|
|
+GLIBC_2.36 casinf F
|
|
+GLIBC_2.36 casinf128 F
|
|
+GLIBC_2.36 casinf32 F
|
|
+GLIBC_2.36 casinf32x F
|
|
+GLIBC_2.36 casinf64 F
|
|
+GLIBC_2.36 casinf64x F
|
|
+GLIBC_2.36 casinh F
|
|
+GLIBC_2.36 casinhf F
|
|
+GLIBC_2.36 casinhf128 F
|
|
+GLIBC_2.36 casinhf32 F
|
|
+GLIBC_2.36 casinhf32x F
|
|
+GLIBC_2.36 casinhf64 F
|
|
+GLIBC_2.36 casinhf64x F
|
|
+GLIBC_2.36 casinhl F
|
|
+GLIBC_2.36 casinl F
|
|
+GLIBC_2.36 catan F
|
|
+GLIBC_2.36 catanf F
|
|
+GLIBC_2.36 catanf128 F
|
|
+GLIBC_2.36 catanf32 F
|
|
+GLIBC_2.36 catanf32x F
|
|
+GLIBC_2.36 catanf64 F
|
|
+GLIBC_2.36 catanf64x F
|
|
+GLIBC_2.36 catanh F
|
|
+GLIBC_2.36 catanhf F
|
|
+GLIBC_2.36 catanhf128 F
|
|
+GLIBC_2.36 catanhf32 F
|
|
+GLIBC_2.36 catanhf32x F
|
|
+GLIBC_2.36 catanhf64 F
|
|
+GLIBC_2.36 catanhf64x F
|
|
+GLIBC_2.36 catanhl F
|
|
+GLIBC_2.36 catanl F
|
|
+GLIBC_2.36 cbrt F
|
|
+GLIBC_2.36 cbrtf F
|
|
+GLIBC_2.36 cbrtf128 F
|
|
+GLIBC_2.36 cbrtf32 F
|
|
+GLIBC_2.36 cbrtf32x F
|
|
+GLIBC_2.36 cbrtf64 F
|
|
+GLIBC_2.36 cbrtf64x F
|
|
+GLIBC_2.36 cbrtl F
|
|
+GLIBC_2.36 ccos F
|
|
+GLIBC_2.36 ccosf F
|
|
+GLIBC_2.36 ccosf128 F
|
|
+GLIBC_2.36 ccosf32 F
|
|
+GLIBC_2.36 ccosf32x F
|
|
+GLIBC_2.36 ccosf64 F
|
|
+GLIBC_2.36 ccosf64x F
|
|
+GLIBC_2.36 ccosh F
|
|
+GLIBC_2.36 ccoshf F
|
|
+GLIBC_2.36 ccoshf128 F
|
|
+GLIBC_2.36 ccoshf32 F
|
|
+GLIBC_2.36 ccoshf32x F
|
|
+GLIBC_2.36 ccoshf64 F
|
|
+GLIBC_2.36 ccoshf64x F
|
|
+GLIBC_2.36 ccoshl F
|
|
+GLIBC_2.36 ccosl F
|
|
+GLIBC_2.36 ceil F
|
|
+GLIBC_2.36 ceilf F
|
|
+GLIBC_2.36 ceilf128 F
|
|
+GLIBC_2.36 ceilf32 F
|
|
+GLIBC_2.36 ceilf32x F
|
|
+GLIBC_2.36 ceilf64 F
|
|
+GLIBC_2.36 ceilf64x F
|
|
+GLIBC_2.36 ceill F
|
|
+GLIBC_2.36 cexp F
|
|
+GLIBC_2.36 cexpf F
|
|
+GLIBC_2.36 cexpf128 F
|
|
+GLIBC_2.36 cexpf32 F
|
|
+GLIBC_2.36 cexpf32x F
|
|
+GLIBC_2.36 cexpf64 F
|
|
+GLIBC_2.36 cexpf64x F
|
|
+GLIBC_2.36 cexpl F
|
|
+GLIBC_2.36 cimag F
|
|
+GLIBC_2.36 cimagf F
|
|
+GLIBC_2.36 cimagf128 F
|
|
+GLIBC_2.36 cimagf32 F
|
|
+GLIBC_2.36 cimagf32x F
|
|
+GLIBC_2.36 cimagf64 F
|
|
+GLIBC_2.36 cimagf64x F
|
|
+GLIBC_2.36 cimagl F
|
|
+GLIBC_2.36 clog F
|
|
+GLIBC_2.36 clog10 F
|
|
+GLIBC_2.36 clog10f F
|
|
+GLIBC_2.36 clog10f128 F
|
|
+GLIBC_2.36 clog10f32 F
|
|
+GLIBC_2.36 clog10f32x F
|
|
+GLIBC_2.36 clog10f64 F
|
|
+GLIBC_2.36 clog10f64x F
|
|
+GLIBC_2.36 clog10l F
|
|
+GLIBC_2.36 clogf F
|
|
+GLIBC_2.36 clogf128 F
|
|
+GLIBC_2.36 clogf32 F
|
|
+GLIBC_2.36 clogf32x F
|
|
+GLIBC_2.36 clogf64 F
|
|
+GLIBC_2.36 clogf64x F
|
|
+GLIBC_2.36 clogl F
|
|
+GLIBC_2.36 conj F
|
|
+GLIBC_2.36 conjf F
|
|
+GLIBC_2.36 conjf128 F
|
|
+GLIBC_2.36 conjf32 F
|
|
+GLIBC_2.36 conjf32x F
|
|
+GLIBC_2.36 conjf64 F
|
|
+GLIBC_2.36 conjf64x F
|
|
+GLIBC_2.36 conjl F
|
|
+GLIBC_2.36 copysign F
|
|
+GLIBC_2.36 copysignf F
|
|
+GLIBC_2.36 copysignf128 F
|
|
+GLIBC_2.36 copysignf32 F
|
|
+GLIBC_2.36 copysignf32x F
|
|
+GLIBC_2.36 copysignf64 F
|
|
+GLIBC_2.36 copysignf64x F
|
|
+GLIBC_2.36 copysignl F
|
|
+GLIBC_2.36 cos F
|
|
+GLIBC_2.36 cosf F
|
|
+GLIBC_2.36 cosf128 F
|
|
+GLIBC_2.36 cosf32 F
|
|
+GLIBC_2.36 cosf32x F
|
|
+GLIBC_2.36 cosf64 F
|
|
+GLIBC_2.36 cosf64x F
|
|
+GLIBC_2.36 cosh F
|
|
+GLIBC_2.36 coshf F
|
|
+GLIBC_2.36 coshf128 F
|
|
+GLIBC_2.36 coshf32 F
|
|
+GLIBC_2.36 coshf32x F
|
|
+GLIBC_2.36 coshf64 F
|
|
+GLIBC_2.36 coshf64x F
|
|
+GLIBC_2.36 coshl F
|
|
+GLIBC_2.36 cosl F
|
|
+GLIBC_2.36 cpow F
|
|
+GLIBC_2.36 cpowf F
|
|
+GLIBC_2.36 cpowf128 F
|
|
+GLIBC_2.36 cpowf32 F
|
|
+GLIBC_2.36 cpowf32x F
|
|
+GLIBC_2.36 cpowf64 F
|
|
+GLIBC_2.36 cpowf64x F
|
|
+GLIBC_2.36 cpowl F
|
|
+GLIBC_2.36 cproj F
|
|
+GLIBC_2.36 cprojf F
|
|
+GLIBC_2.36 cprojf128 F
|
|
+GLIBC_2.36 cprojf32 F
|
|
+GLIBC_2.36 cprojf32x F
|
|
+GLIBC_2.36 cprojf64 F
|
|
+GLIBC_2.36 cprojf64x F
|
|
+GLIBC_2.36 cprojl F
|
|
+GLIBC_2.36 creal F
|
|
+GLIBC_2.36 crealf F
|
|
+GLIBC_2.36 crealf128 F
|
|
+GLIBC_2.36 crealf32 F
|
|
+GLIBC_2.36 crealf32x F
|
|
+GLIBC_2.36 crealf64 F
|
|
+GLIBC_2.36 crealf64x F
|
|
+GLIBC_2.36 creall F
|
|
+GLIBC_2.36 csin F
|
|
+GLIBC_2.36 csinf F
|
|
+GLIBC_2.36 csinf128 F
|
|
+GLIBC_2.36 csinf32 F
|
|
+GLIBC_2.36 csinf32x F
|
|
+GLIBC_2.36 csinf64 F
|
|
+GLIBC_2.36 csinf64x F
|
|
+GLIBC_2.36 csinh F
|
|
+GLIBC_2.36 csinhf F
|
|
+GLIBC_2.36 csinhf128 F
|
|
+GLIBC_2.36 csinhf32 F
|
|
+GLIBC_2.36 csinhf32x F
|
|
+GLIBC_2.36 csinhf64 F
|
|
+GLIBC_2.36 csinhf64x F
|
|
+GLIBC_2.36 csinhl F
|
|
+GLIBC_2.36 csinl F
|
|
+GLIBC_2.36 csqrt F
|
|
+GLIBC_2.36 csqrtf F
|
|
+GLIBC_2.36 csqrtf128 F
|
|
+GLIBC_2.36 csqrtf32 F
|
|
+GLIBC_2.36 csqrtf32x F
|
|
+GLIBC_2.36 csqrtf64 F
|
|
+GLIBC_2.36 csqrtf64x F
|
|
+GLIBC_2.36 csqrtl F
|
|
+GLIBC_2.36 ctan F
|
|
+GLIBC_2.36 ctanf F
|
|
+GLIBC_2.36 ctanf128 F
|
|
+GLIBC_2.36 ctanf32 F
|
|
+GLIBC_2.36 ctanf32x F
|
|
+GLIBC_2.36 ctanf64 F
|
|
+GLIBC_2.36 ctanf64x F
|
|
+GLIBC_2.36 ctanh F
|
|
+GLIBC_2.36 ctanhf F
|
|
+GLIBC_2.36 ctanhf128 F
|
|
+GLIBC_2.36 ctanhf32 F
|
|
+GLIBC_2.36 ctanhf32x F
|
|
+GLIBC_2.36 ctanhf64 F
|
|
+GLIBC_2.36 ctanhf64x F
|
|
+GLIBC_2.36 ctanhl F
|
|
+GLIBC_2.36 ctanl F
|
|
+GLIBC_2.36 daddl F
|
|
+GLIBC_2.36 ddivl F
|
|
+GLIBC_2.36 dmull F
|
|
+GLIBC_2.36 drem F
|
|
+GLIBC_2.36 dremf F
|
|
+GLIBC_2.36 dreml F
|
|
+GLIBC_2.36 dsubl F
|
|
+GLIBC_2.36 erf F
|
|
+GLIBC_2.36 erfc F
|
|
+GLIBC_2.36 erfcf F
|
|
+GLIBC_2.36 erfcf128 F
|
|
+GLIBC_2.36 erfcf32 F
|
|
+GLIBC_2.36 erfcf32x F
|
|
+GLIBC_2.36 erfcf64 F
|
|
+GLIBC_2.36 erfcf64x F
|
|
+GLIBC_2.36 erfcl F
|
|
+GLIBC_2.36 erff F
|
|
+GLIBC_2.36 erff128 F
|
|
+GLIBC_2.36 erff32 F
|
|
+GLIBC_2.36 erff32x F
|
|
+GLIBC_2.36 erff64 F
|
|
+GLIBC_2.36 erff64x F
|
|
+GLIBC_2.36 erfl F
|
|
+GLIBC_2.36 exp F
|
|
+GLIBC_2.36 exp10 F
|
|
+GLIBC_2.36 exp10f F
|
|
+GLIBC_2.36 exp10f128 F
|
|
+GLIBC_2.36 exp10f32 F
|
|
+GLIBC_2.36 exp10f32x F
|
|
+GLIBC_2.36 exp10f64 F
|
|
+GLIBC_2.36 exp10f64x F
|
|
+GLIBC_2.36 exp10l F
|
|
+GLIBC_2.36 exp2 F
|
|
+GLIBC_2.36 exp2f F
|
|
+GLIBC_2.36 exp2f128 F
|
|
+GLIBC_2.36 exp2f32 F
|
|
+GLIBC_2.36 exp2f32x F
|
|
+GLIBC_2.36 exp2f64 F
|
|
+GLIBC_2.36 exp2f64x F
|
|
+GLIBC_2.36 exp2l F
|
|
+GLIBC_2.36 expf F
|
|
+GLIBC_2.36 expf128 F
|
|
+GLIBC_2.36 expf32 F
|
|
+GLIBC_2.36 expf32x F
|
|
+GLIBC_2.36 expf64 F
|
|
+GLIBC_2.36 expf64x F
|
|
+GLIBC_2.36 expl F
|
|
+GLIBC_2.36 expm1 F
|
|
+GLIBC_2.36 expm1f F
|
|
+GLIBC_2.36 expm1f128 F
|
|
+GLIBC_2.36 expm1f32 F
|
|
+GLIBC_2.36 expm1f32x F
|
|
+GLIBC_2.36 expm1f64 F
|
|
+GLIBC_2.36 expm1f64x F
|
|
+GLIBC_2.36 expm1l F
|
|
+GLIBC_2.36 f32addf128 F
|
|
+GLIBC_2.36 f32addf32x F
|
|
+GLIBC_2.36 f32addf64 F
|
|
+GLIBC_2.36 f32addf64x F
|
|
+GLIBC_2.36 f32divf128 F
|
|
+GLIBC_2.36 f32divf32x F
|
|
+GLIBC_2.36 f32divf64 F
|
|
+GLIBC_2.36 f32divf64x F
|
|
+GLIBC_2.36 f32mulf128 F
|
|
+GLIBC_2.36 f32mulf32x F
|
|
+GLIBC_2.36 f32mulf64 F
|
|
+GLIBC_2.36 f32mulf64x F
|
|
+GLIBC_2.36 f32subf128 F
|
|
+GLIBC_2.36 f32subf32x F
|
|
+GLIBC_2.36 f32subf64 F
|
|
+GLIBC_2.36 f32subf64x F
|
|
+GLIBC_2.36 f32xaddf128 F
|
|
+GLIBC_2.36 f32xaddf64 F
|
|
+GLIBC_2.36 f32xaddf64x F
|
|
+GLIBC_2.36 f32xdivf128 F
|
|
+GLIBC_2.36 f32xdivf64 F
|
|
+GLIBC_2.36 f32xdivf64x F
|
|
+GLIBC_2.36 f32xmulf128 F
|
|
+GLIBC_2.36 f32xmulf64 F
|
|
+GLIBC_2.36 f32xmulf64x F
|
|
+GLIBC_2.36 f32xsubf128 F
|
|
+GLIBC_2.36 f32xsubf64 F
|
|
+GLIBC_2.36 f32xsubf64x F
|
|
+GLIBC_2.36 f64addf128 F
|
|
+GLIBC_2.36 f64addf64x F
|
|
+GLIBC_2.36 f64divf128 F
|
|
+GLIBC_2.36 f64divf64x F
|
|
+GLIBC_2.36 f64mulf128 F
|
|
+GLIBC_2.36 f64mulf64x F
|
|
+GLIBC_2.36 f64subf128 F
|
|
+GLIBC_2.36 f64subf64x F
|
|
+GLIBC_2.36 f64xaddf128 F
|
|
+GLIBC_2.36 f64xdivf128 F
|
|
+GLIBC_2.36 f64xmulf128 F
|
|
+GLIBC_2.36 f64xsubf128 F
|
|
+GLIBC_2.36 fabs F
|
|
+GLIBC_2.36 fabsf F
|
|
+GLIBC_2.36 fabsf128 F
|
|
+GLIBC_2.36 fabsf32 F
|
|
+GLIBC_2.36 fabsf32x F
|
|
+GLIBC_2.36 fabsf64 F
|
|
+GLIBC_2.36 fabsf64x F
|
|
+GLIBC_2.36 fabsl F
|
|
+GLIBC_2.36 fadd F
|
|
+GLIBC_2.36 faddl F
|
|
+GLIBC_2.36 fdim F
|
|
+GLIBC_2.36 fdimf F
|
|
+GLIBC_2.36 fdimf128 F
|
|
+GLIBC_2.36 fdimf32 F
|
|
+GLIBC_2.36 fdimf32x F
|
|
+GLIBC_2.36 fdimf64 F
|
|
+GLIBC_2.36 fdimf64x F
|
|
+GLIBC_2.36 fdiml F
|
|
+GLIBC_2.36 fdiv F
|
|
+GLIBC_2.36 fdivl F
|
|
+GLIBC_2.36 feclearexcept F
|
|
+GLIBC_2.36 fedisableexcept F
|
|
+GLIBC_2.36 feenableexcept F
|
|
+GLIBC_2.36 fegetenv F
|
|
+GLIBC_2.36 fegetexcept F
|
|
+GLIBC_2.36 fegetexceptflag F
|
|
+GLIBC_2.36 fegetmode F
|
|
+GLIBC_2.36 fegetround F
|
|
+GLIBC_2.36 feholdexcept F
|
|
+GLIBC_2.36 feraiseexcept F
|
|
+GLIBC_2.36 fesetenv F
|
|
+GLIBC_2.36 fesetexcept F
|
|
+GLIBC_2.36 fesetexceptflag F
|
|
+GLIBC_2.36 fesetmode F
|
|
+GLIBC_2.36 fesetround F
|
|
+GLIBC_2.36 fetestexcept F
|
|
+GLIBC_2.36 fetestexceptflag F
|
|
+GLIBC_2.36 feupdateenv F
|
|
+GLIBC_2.36 finite F
|
|
+GLIBC_2.36 finitef F
|
|
+GLIBC_2.36 finitel F
|
|
+GLIBC_2.36 floor F
|
|
+GLIBC_2.36 floorf F
|
|
+GLIBC_2.36 floorf128 F
|
|
+GLIBC_2.36 floorf32 F
|
|
+GLIBC_2.36 floorf32x F
|
|
+GLIBC_2.36 floorf64 F
|
|
+GLIBC_2.36 floorf64x F
|
|
+GLIBC_2.36 floorl F
|
|
+GLIBC_2.36 fma F
|
|
+GLIBC_2.36 fmaf F
|
|
+GLIBC_2.36 fmaf128 F
|
|
+GLIBC_2.36 fmaf32 F
|
|
+GLIBC_2.36 fmaf32x F
|
|
+GLIBC_2.36 fmaf64 F
|
|
+GLIBC_2.36 fmaf64x F
|
|
+GLIBC_2.36 fmal F
|
|
+GLIBC_2.36 fmax F
|
|
+GLIBC_2.36 fmaxf F
|
|
+GLIBC_2.36 fmaxf128 F
|
|
+GLIBC_2.36 fmaxf32 F
|
|
+GLIBC_2.36 fmaxf32x F
|
|
+GLIBC_2.36 fmaxf64 F
|
|
+GLIBC_2.36 fmaxf64x F
|
|
+GLIBC_2.36 fmaxl F
|
|
+GLIBC_2.36 fmaxmag F
|
|
+GLIBC_2.36 fmaxmagf F
|
|
+GLIBC_2.36 fmaxmagf128 F
|
|
+GLIBC_2.36 fmaxmagf32 F
|
|
+GLIBC_2.36 fmaxmagf32x F
|
|
+GLIBC_2.36 fmaxmagf64 F
|
|
+GLIBC_2.36 fmaxmagf64x F
|
|
+GLIBC_2.36 fmaxmagl F
|
|
+GLIBC_2.36 fmin F
|
|
+GLIBC_2.36 fminf F
|
|
+GLIBC_2.36 fminf128 F
|
|
+GLIBC_2.36 fminf32 F
|
|
+GLIBC_2.36 fminf32x F
|
|
+GLIBC_2.36 fminf64 F
|
|
+GLIBC_2.36 fminf64x F
|
|
+GLIBC_2.36 fminl F
|
|
+GLIBC_2.36 fminmag F
|
|
+GLIBC_2.36 fminmagf F
|
|
+GLIBC_2.36 fminmagf128 F
|
|
+GLIBC_2.36 fminmagf32 F
|
|
+GLIBC_2.36 fminmagf32x F
|
|
+GLIBC_2.36 fminmagf64 F
|
|
+GLIBC_2.36 fminmagf64x F
|
|
+GLIBC_2.36 fminmagl F
|
|
+GLIBC_2.36 fmod F
|
|
+GLIBC_2.36 fmodf F
|
|
+GLIBC_2.36 fmodf128 F
|
|
+GLIBC_2.36 fmodf32 F
|
|
+GLIBC_2.36 fmodf32x F
|
|
+GLIBC_2.36 fmodf64 F
|
|
+GLIBC_2.36 fmodf64x F
|
|
+GLIBC_2.36 fmodl F
|
|
+GLIBC_2.36 fmul F
|
|
+GLIBC_2.36 fmull F
|
|
+GLIBC_2.36 frexp F
|
|
+GLIBC_2.36 frexpf F
|
|
+GLIBC_2.36 frexpf128 F
|
|
+GLIBC_2.36 frexpf32 F
|
|
+GLIBC_2.36 frexpf32x F
|
|
+GLIBC_2.36 frexpf64 F
|
|
+GLIBC_2.36 frexpf64x F
|
|
+GLIBC_2.36 frexpl F
|
|
+GLIBC_2.36 fromfp F
|
|
+GLIBC_2.36 fromfpf F
|
|
+GLIBC_2.36 fromfpf128 F
|
|
+GLIBC_2.36 fromfpf32 F
|
|
+GLIBC_2.36 fromfpf32x F
|
|
+GLIBC_2.36 fromfpf64 F
|
|
+GLIBC_2.36 fromfpf64x F
|
|
+GLIBC_2.36 fromfpl F
|
|
+GLIBC_2.36 fromfpx F
|
|
+GLIBC_2.36 fromfpxf F
|
|
+GLIBC_2.36 fromfpxf128 F
|
|
+GLIBC_2.36 fromfpxf32 F
|
|
+GLIBC_2.36 fromfpxf32x F
|
|
+GLIBC_2.36 fromfpxf64 F
|
|
+GLIBC_2.36 fromfpxf64x F
|
|
+GLIBC_2.36 fromfpxl F
|
|
+GLIBC_2.36 fsub F
|
|
+GLIBC_2.36 fsubl F
|
|
+GLIBC_2.36 gamma F
|
|
+GLIBC_2.36 gammaf F
|
|
+GLIBC_2.36 gammal F
|
|
+GLIBC_2.36 getpayload F
|
|
+GLIBC_2.36 getpayloadf F
|
|
+GLIBC_2.36 getpayloadf128 F
|
|
+GLIBC_2.36 getpayloadf32 F
|
|
+GLIBC_2.36 getpayloadf32x F
|
|
+GLIBC_2.36 getpayloadf64 F
|
|
+GLIBC_2.36 getpayloadf64x F
|
|
+GLIBC_2.36 getpayloadl F
|
|
+GLIBC_2.36 hypot F
|
|
+GLIBC_2.36 hypotf F
|
|
+GLIBC_2.36 hypotf128 F
|
|
+GLIBC_2.36 hypotf32 F
|
|
+GLIBC_2.36 hypotf32x F
|
|
+GLIBC_2.36 hypotf64 F
|
|
+GLIBC_2.36 hypotf64x F
|
|
+GLIBC_2.36 hypotl F
|
|
+GLIBC_2.36 ilogb F
|
|
+GLIBC_2.36 ilogbf F
|
|
+GLIBC_2.36 ilogbf128 F
|
|
+GLIBC_2.36 ilogbf32 F
|
|
+GLIBC_2.36 ilogbf32x F
|
|
+GLIBC_2.36 ilogbf64 F
|
|
+GLIBC_2.36 ilogbf64x F
|
|
+GLIBC_2.36 ilogbl F
|
|
+GLIBC_2.36 j0 F
|
|
+GLIBC_2.36 j0f F
|
|
+GLIBC_2.36 j0f128 F
|
|
+GLIBC_2.36 j0f32 F
|
|
+GLIBC_2.36 j0f32x F
|
|
+GLIBC_2.36 j0f64 F
|
|
+GLIBC_2.36 j0f64x F
|
|
+GLIBC_2.36 j0l F
|
|
+GLIBC_2.36 j1 F
|
|
+GLIBC_2.36 j1f F
|
|
+GLIBC_2.36 j1f128 F
|
|
+GLIBC_2.36 j1f32 F
|
|
+GLIBC_2.36 j1f32x F
|
|
+GLIBC_2.36 j1f64 F
|
|
+GLIBC_2.36 j1f64x F
|
|
+GLIBC_2.36 j1l F
|
|
+GLIBC_2.36 jn F
|
|
+GLIBC_2.36 jnf F
|
|
+GLIBC_2.36 jnf128 F
|
|
+GLIBC_2.36 jnf32 F
|
|
+GLIBC_2.36 jnf32x F
|
|
+GLIBC_2.36 jnf64 F
|
|
+GLIBC_2.36 jnf64x F
|
|
+GLIBC_2.36 jnl F
|
|
+GLIBC_2.36 ldexp F
|
|
+GLIBC_2.36 ldexpf F
|
|
+GLIBC_2.36 ldexpf128 F
|
|
+GLIBC_2.36 ldexpf32 F
|
|
+GLIBC_2.36 ldexpf32x F
|
|
+GLIBC_2.36 ldexpf64 F
|
|
+GLIBC_2.36 ldexpf64x F
|
|
+GLIBC_2.36 ldexpl F
|
|
+GLIBC_2.36 lgamma F
|
|
+GLIBC_2.36 lgamma_r F
|
|
+GLIBC_2.36 lgammaf F
|
|
+GLIBC_2.36 lgammaf128 F
|
|
+GLIBC_2.36 lgammaf128_r F
|
|
+GLIBC_2.36 lgammaf32 F
|
|
+GLIBC_2.36 lgammaf32_r F
|
|
+GLIBC_2.36 lgammaf32x F
|
|
+GLIBC_2.36 lgammaf32x_r F
|
|
+GLIBC_2.36 lgammaf64 F
|
|
+GLIBC_2.36 lgammaf64_r F
|
|
+GLIBC_2.36 lgammaf64x F
|
|
+GLIBC_2.36 lgammaf64x_r F
|
|
+GLIBC_2.36 lgammaf_r F
|
|
+GLIBC_2.36 lgammal F
|
|
+GLIBC_2.36 lgammal_r F
|
|
+GLIBC_2.36 llogb F
|
|
+GLIBC_2.36 llogbf F
|
|
+GLIBC_2.36 llogbf128 F
|
|
+GLIBC_2.36 llogbf32 F
|
|
+GLIBC_2.36 llogbf32x F
|
|
+GLIBC_2.36 llogbf64 F
|
|
+GLIBC_2.36 llogbf64x F
|
|
+GLIBC_2.36 llogbl F
|
|
+GLIBC_2.36 llrint F
|
|
+GLIBC_2.36 llrintf F
|
|
+GLIBC_2.36 llrintf128 F
|
|
+GLIBC_2.36 llrintf32 F
|
|
+GLIBC_2.36 llrintf32x F
|
|
+GLIBC_2.36 llrintf64 F
|
|
+GLIBC_2.36 llrintf64x F
|
|
+GLIBC_2.36 llrintl F
|
|
+GLIBC_2.36 llround F
|
|
+GLIBC_2.36 llroundf F
|
|
+GLIBC_2.36 llroundf128 F
|
|
+GLIBC_2.36 llroundf32 F
|
|
+GLIBC_2.36 llroundf32x F
|
|
+GLIBC_2.36 llroundf64 F
|
|
+GLIBC_2.36 llroundf64x F
|
|
+GLIBC_2.36 llroundl F
|
|
+GLIBC_2.36 log F
|
|
+GLIBC_2.36 log10 F
|
|
+GLIBC_2.36 log10f F
|
|
+GLIBC_2.36 log10f128 F
|
|
+GLIBC_2.36 log10f32 F
|
|
+GLIBC_2.36 log10f32x F
|
|
+GLIBC_2.36 log10f64 F
|
|
+GLIBC_2.36 log10f64x F
|
|
+GLIBC_2.36 log10l F
|
|
+GLIBC_2.36 log1p F
|
|
+GLIBC_2.36 log1pf F
|
|
+GLIBC_2.36 log1pf128 F
|
|
+GLIBC_2.36 log1pf32 F
|
|
+GLIBC_2.36 log1pf32x F
|
|
+GLIBC_2.36 log1pf64 F
|
|
+GLIBC_2.36 log1pf64x F
|
|
+GLIBC_2.36 log1pl F
|
|
+GLIBC_2.36 log2 F
|
|
+GLIBC_2.36 log2f F
|
|
+GLIBC_2.36 log2f128 F
|
|
+GLIBC_2.36 log2f32 F
|
|
+GLIBC_2.36 log2f32x F
|
|
+GLIBC_2.36 log2f64 F
|
|
+GLIBC_2.36 log2f64x F
|
|
+GLIBC_2.36 log2l F
|
|
+GLIBC_2.36 logb F
|
|
+GLIBC_2.36 logbf F
|
|
+GLIBC_2.36 logbf128 F
|
|
+GLIBC_2.36 logbf32 F
|
|
+GLIBC_2.36 logbf32x F
|
|
+GLIBC_2.36 logbf64 F
|
|
+GLIBC_2.36 logbf64x F
|
|
+GLIBC_2.36 logbl F
|
|
+GLIBC_2.36 logf F
|
|
+GLIBC_2.36 logf128 F
|
|
+GLIBC_2.36 logf32 F
|
|
+GLIBC_2.36 logf32x F
|
|
+GLIBC_2.36 logf64 F
|
|
+GLIBC_2.36 logf64x F
|
|
+GLIBC_2.36 logl F
|
|
+GLIBC_2.36 lrint F
|
|
+GLIBC_2.36 lrintf F
|
|
+GLIBC_2.36 lrintf128 F
|
|
+GLIBC_2.36 lrintf32 F
|
|
+GLIBC_2.36 lrintf32x F
|
|
+GLIBC_2.36 lrintf64 F
|
|
+GLIBC_2.36 lrintf64x F
|
|
+GLIBC_2.36 lrintl F
|
|
+GLIBC_2.36 lround F
|
|
+GLIBC_2.36 lroundf F
|
|
+GLIBC_2.36 lroundf128 F
|
|
+GLIBC_2.36 lroundf32 F
|
|
+GLIBC_2.36 lroundf32x F
|
|
+GLIBC_2.36 lroundf64 F
|
|
+GLIBC_2.36 lroundf64x F
|
|
+GLIBC_2.36 lroundl F
|
|
+GLIBC_2.36 modf F
|
|
+GLIBC_2.36 modff F
|
|
+GLIBC_2.36 modff128 F
|
|
+GLIBC_2.36 modff32 F
|
|
+GLIBC_2.36 modff32x F
|
|
+GLIBC_2.36 modff64 F
|
|
+GLIBC_2.36 modff64x F
|
|
+GLIBC_2.36 modfl F
|
|
+GLIBC_2.36 nan F
|
|
+GLIBC_2.36 nanf F
|
|
+GLIBC_2.36 nanf128 F
|
|
+GLIBC_2.36 nanf32 F
|
|
+GLIBC_2.36 nanf32x F
|
|
+GLIBC_2.36 nanf64 F
|
|
+GLIBC_2.36 nanf64x F
|
|
+GLIBC_2.36 nanl F
|
|
+GLIBC_2.36 nearbyint F
|
|
+GLIBC_2.36 nearbyintf F
|
|
+GLIBC_2.36 nearbyintf128 F
|
|
+GLIBC_2.36 nearbyintf32 F
|
|
+GLIBC_2.36 nearbyintf32x F
|
|
+GLIBC_2.36 nearbyintf64 F
|
|
+GLIBC_2.36 nearbyintf64x F
|
|
+GLIBC_2.36 nearbyintl F
|
|
+GLIBC_2.36 nextafter F
|
|
+GLIBC_2.36 nextafterf F
|
|
+GLIBC_2.36 nextafterf128 F
|
|
+GLIBC_2.36 nextafterf32 F
|
|
+GLIBC_2.36 nextafterf32x F
|
|
+GLIBC_2.36 nextafterf64 F
|
|
+GLIBC_2.36 nextafterf64x F
|
|
+GLIBC_2.36 nextafterl F
|
|
+GLIBC_2.36 nextdown F
|
|
+GLIBC_2.36 nextdownf F
|
|
+GLIBC_2.36 nextdownf128 F
|
|
+GLIBC_2.36 nextdownf32 F
|
|
+GLIBC_2.36 nextdownf32x F
|
|
+GLIBC_2.36 nextdownf64 F
|
|
+GLIBC_2.36 nextdownf64x F
|
|
+GLIBC_2.36 nextdownl F
|
|
+GLIBC_2.36 nexttoward F
|
|
+GLIBC_2.36 nexttowardf F
|
|
+GLIBC_2.36 nexttowardl F
|
|
+GLIBC_2.36 nextup F
|
|
+GLIBC_2.36 nextupf F
|
|
+GLIBC_2.36 nextupf128 F
|
|
+GLIBC_2.36 nextupf32 F
|
|
+GLIBC_2.36 nextupf32x F
|
|
+GLIBC_2.36 nextupf64 F
|
|
+GLIBC_2.36 nextupf64x F
|
|
+GLIBC_2.36 nextupl F
|
|
+GLIBC_2.36 pow F
|
|
+GLIBC_2.36 powf F
|
|
+GLIBC_2.36 powf128 F
|
|
+GLIBC_2.36 powf32 F
|
|
+GLIBC_2.36 powf32x F
|
|
+GLIBC_2.36 powf64 F
|
|
+GLIBC_2.36 powf64x F
|
|
+GLIBC_2.36 powl F
|
|
+GLIBC_2.36 remainder F
|
|
+GLIBC_2.36 remainderf F
|
|
+GLIBC_2.36 remainderf128 F
|
|
+GLIBC_2.36 remainderf32 F
|
|
+GLIBC_2.36 remainderf32x F
|
|
+GLIBC_2.36 remainderf64 F
|
|
+GLIBC_2.36 remainderf64x F
|
|
+GLIBC_2.36 remainderl F
|
|
+GLIBC_2.36 remquo F
|
|
+GLIBC_2.36 remquof F
|
|
+GLIBC_2.36 remquof128 F
|
|
+GLIBC_2.36 remquof32 F
|
|
+GLIBC_2.36 remquof32x F
|
|
+GLIBC_2.36 remquof64 F
|
|
+GLIBC_2.36 remquof64x F
|
|
+GLIBC_2.36 remquol F
|
|
+GLIBC_2.36 rint F
|
|
+GLIBC_2.36 rintf F
|
|
+GLIBC_2.36 rintf128 F
|
|
+GLIBC_2.36 rintf32 F
|
|
+GLIBC_2.36 rintf32x F
|
|
+GLIBC_2.36 rintf64 F
|
|
+GLIBC_2.36 rintf64x F
|
|
+GLIBC_2.36 rintl F
|
|
+GLIBC_2.36 round F
|
|
+GLIBC_2.36 roundeven F
|
|
+GLIBC_2.36 roundevenf F
|
|
+GLIBC_2.36 roundevenf128 F
|
|
+GLIBC_2.36 roundevenf32 F
|
|
+GLIBC_2.36 roundevenf32x F
|
|
+GLIBC_2.36 roundevenf64 F
|
|
+GLIBC_2.36 roundevenf64x F
|
|
+GLIBC_2.36 roundevenl F
|
|
+GLIBC_2.36 roundf F
|
|
+GLIBC_2.36 roundf128 F
|
|
+GLIBC_2.36 roundf32 F
|
|
+GLIBC_2.36 roundf32x F
|
|
+GLIBC_2.36 roundf64 F
|
|
+GLIBC_2.36 roundf64x F
|
|
+GLIBC_2.36 roundl F
|
|
+GLIBC_2.36 scalb F
|
|
+GLIBC_2.36 scalbf F
|
|
+GLIBC_2.36 scalbl F
|
|
+GLIBC_2.36 scalbln F
|
|
+GLIBC_2.36 scalblnf F
|
|
+GLIBC_2.36 scalblnf128 F
|
|
+GLIBC_2.36 scalblnf32 F
|
|
+GLIBC_2.36 scalblnf32x F
|
|
+GLIBC_2.36 scalblnf64 F
|
|
+GLIBC_2.36 scalblnf64x F
|
|
+GLIBC_2.36 scalblnl F
|
|
+GLIBC_2.36 scalbn F
|
|
+GLIBC_2.36 scalbnf F
|
|
+GLIBC_2.36 scalbnf128 F
|
|
+GLIBC_2.36 scalbnf32 F
|
|
+GLIBC_2.36 scalbnf32x F
|
|
+GLIBC_2.36 scalbnf64 F
|
|
+GLIBC_2.36 scalbnf64x F
|
|
+GLIBC_2.36 scalbnl F
|
|
+GLIBC_2.36 setpayload F
|
|
+GLIBC_2.36 setpayloadf F
|
|
+GLIBC_2.36 setpayloadf128 F
|
|
+GLIBC_2.36 setpayloadf32 F
|
|
+GLIBC_2.36 setpayloadf32x F
|
|
+GLIBC_2.36 setpayloadf64 F
|
|
+GLIBC_2.36 setpayloadf64x F
|
|
+GLIBC_2.36 setpayloadl F
|
|
+GLIBC_2.36 setpayloadsig F
|
|
+GLIBC_2.36 setpayloadsigf F
|
|
+GLIBC_2.36 setpayloadsigf128 F
|
|
+GLIBC_2.36 setpayloadsigf32 F
|
|
+GLIBC_2.36 setpayloadsigf32x F
|
|
+GLIBC_2.36 setpayloadsigf64 F
|
|
+GLIBC_2.36 setpayloadsigf64x F
|
|
+GLIBC_2.36 setpayloadsigl F
|
|
+GLIBC_2.36 signgam D 0x4
|
|
+GLIBC_2.36 significand F
|
|
+GLIBC_2.36 significandf F
|
|
+GLIBC_2.36 significandl F
|
|
+GLIBC_2.36 sin F
|
|
+GLIBC_2.36 sincos F
|
|
+GLIBC_2.36 sincosf F
|
|
+GLIBC_2.36 sincosf128 F
|
|
+GLIBC_2.36 sincosf32 F
|
|
+GLIBC_2.36 sincosf32x F
|
|
+GLIBC_2.36 sincosf64 F
|
|
+GLIBC_2.36 sincosf64x F
|
|
+GLIBC_2.36 sincosl F
|
|
+GLIBC_2.36 sinf F
|
|
+GLIBC_2.36 sinf128 F
|
|
+GLIBC_2.36 sinf32 F
|
|
+GLIBC_2.36 sinf32x F
|
|
+GLIBC_2.36 sinf64 F
|
|
+GLIBC_2.36 sinf64x F
|
|
+GLIBC_2.36 sinh F
|
|
+GLIBC_2.36 sinhf F
|
|
+GLIBC_2.36 sinhf128 F
|
|
+GLIBC_2.36 sinhf32 F
|
|
+GLIBC_2.36 sinhf32x F
|
|
+GLIBC_2.36 sinhf64 F
|
|
+GLIBC_2.36 sinhf64x F
|
|
+GLIBC_2.36 sinhl F
|
|
+GLIBC_2.36 sinl F
|
|
+GLIBC_2.36 sqrt F
|
|
+GLIBC_2.36 sqrtf F
|
|
+GLIBC_2.36 sqrtf128 F
|
|
+GLIBC_2.36 sqrtf32 F
|
|
+GLIBC_2.36 sqrtf32x F
|
|
+GLIBC_2.36 sqrtf64 F
|
|
+GLIBC_2.36 sqrtf64x F
|
|
+GLIBC_2.36 sqrtl F
|
|
+GLIBC_2.36 tan F
|
|
+GLIBC_2.36 tanf F
|
|
+GLIBC_2.36 tanf128 F
|
|
+GLIBC_2.36 tanf32 F
|
|
+GLIBC_2.36 tanf32x F
|
|
+GLIBC_2.36 tanf64 F
|
|
+GLIBC_2.36 tanf64x F
|
|
+GLIBC_2.36 tanh F
|
|
+GLIBC_2.36 tanhf F
|
|
+GLIBC_2.36 tanhf128 F
|
|
+GLIBC_2.36 tanhf32 F
|
|
+GLIBC_2.36 tanhf32x F
|
|
+GLIBC_2.36 tanhf64 F
|
|
+GLIBC_2.36 tanhf64x F
|
|
+GLIBC_2.36 tanhl F
|
|
+GLIBC_2.36 tanl F
|
|
+GLIBC_2.36 tgamma F
|
|
+GLIBC_2.36 tgammaf F
|
|
+GLIBC_2.36 tgammaf128 F
|
|
+GLIBC_2.36 tgammaf32 F
|
|
+GLIBC_2.36 tgammaf32x F
|
|
+GLIBC_2.36 tgammaf64 F
|
|
+GLIBC_2.36 tgammaf64x F
|
|
+GLIBC_2.36 tgammal F
|
|
+GLIBC_2.36 totalorder F
|
|
+GLIBC_2.36 totalorderf F
|
|
+GLIBC_2.36 totalorderf128 F
|
|
+GLIBC_2.36 totalorderf32 F
|
|
+GLIBC_2.36 totalorderf32x F
|
|
+GLIBC_2.36 totalorderf64 F
|
|
+GLIBC_2.36 totalorderf64x F
|
|
+GLIBC_2.36 totalorderl F
|
|
+GLIBC_2.36 totalordermag F
|
|
+GLIBC_2.36 totalordermagf F
|
|
+GLIBC_2.36 totalordermagf128 F
|
|
+GLIBC_2.36 totalordermagf32 F
|
|
+GLIBC_2.36 totalordermagf32x F
|
|
+GLIBC_2.36 totalordermagf64 F
|
|
+GLIBC_2.36 totalordermagf64x F
|
|
+GLIBC_2.36 totalordermagl F
|
|
+GLIBC_2.36 trunc F
|
|
+GLIBC_2.36 truncf F
|
|
+GLIBC_2.36 truncf128 F
|
|
+GLIBC_2.36 truncf32 F
|
|
+GLIBC_2.36 truncf32x F
|
|
+GLIBC_2.36 truncf64 F
|
|
+GLIBC_2.36 truncf64x F
|
|
+GLIBC_2.36 truncl F
|
|
+GLIBC_2.36 ufromfp F
|
|
+GLIBC_2.36 ufromfpf F
|
|
+GLIBC_2.36 ufromfpf128 F
|
|
+GLIBC_2.36 ufromfpf32 F
|
|
+GLIBC_2.36 ufromfpf32x F
|
|
+GLIBC_2.36 ufromfpf64 F
|
|
+GLIBC_2.36 ufromfpf64x F
|
|
+GLIBC_2.36 ufromfpl F
|
|
+GLIBC_2.36 ufromfpx F
|
|
+GLIBC_2.36 ufromfpxf F
|
|
+GLIBC_2.36 ufromfpxf128 F
|
|
+GLIBC_2.36 ufromfpxf32 F
|
|
+GLIBC_2.36 ufromfpxf32x F
|
|
+GLIBC_2.36 ufromfpxf64 F
|
|
+GLIBC_2.36 ufromfpxf64x F
|
|
+GLIBC_2.36 ufromfpxl F
|
|
+GLIBC_2.36 y0 F
|
|
+GLIBC_2.36 y0f F
|
|
+GLIBC_2.36 y0f128 F
|
|
+GLIBC_2.36 y0f32 F
|
|
+GLIBC_2.36 y0f32x F
|
|
+GLIBC_2.36 y0f64 F
|
|
+GLIBC_2.36 y0f64x F
|
|
+GLIBC_2.36 y0l F
|
|
+GLIBC_2.36 y1 F
|
|
+GLIBC_2.36 y1f F
|
|
+GLIBC_2.36 y1f128 F
|
|
+GLIBC_2.36 y1f32 F
|
|
+GLIBC_2.36 y1f32x F
|
|
+GLIBC_2.36 y1f64 F
|
|
+GLIBC_2.36 y1f64x F
|
|
+GLIBC_2.36 y1l F
|
|
+GLIBC_2.36 yn F
|
|
+GLIBC_2.36 ynf F
|
|
+GLIBC_2.36 ynf128 F
|
|
+GLIBC_2.36 ynf32 F
|
|
+GLIBC_2.36 ynf32x F
|
|
+GLIBC_2.36 ynf64 F
|
|
+GLIBC_2.36 ynf64x F
|
|
+GLIBC_2.36 ynl F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist
|
|
new file mode 100644
|
|
index 00000000..e69de29b
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist
|
|
new file mode 100644
|
|
index 00000000..c30f54c0
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist
|
|
@@ -0,0 +1,55 @@
|
|
+GLIBC_2.36 __b64_ntop F
|
|
+GLIBC_2.36 __b64_pton F
|
|
+GLIBC_2.36 __dn_count_labels F
|
|
+GLIBC_2.36 __fp_nquery F
|
|
+GLIBC_2.36 __fp_query F
|
|
+GLIBC_2.36 __fp_resstat F
|
|
+GLIBC_2.36 __hostalias F
|
|
+GLIBC_2.36 __loc_aton F
|
|
+GLIBC_2.36 __loc_ntoa F
|
|
+GLIBC_2.36 __p_cdname F
|
|
+GLIBC_2.36 __p_cdnname F
|
|
+GLIBC_2.36 __p_class F
|
|
+GLIBC_2.36 __p_class_syms D 0xa8
|
|
+GLIBC_2.36 __p_fqname F
|
|
+GLIBC_2.36 __p_fqnname F
|
|
+GLIBC_2.36 __p_option F
|
|
+GLIBC_2.36 __p_query F
|
|
+GLIBC_2.36 __p_rcode F
|
|
+GLIBC_2.36 __p_time F
|
|
+GLIBC_2.36 __p_type F
|
|
+GLIBC_2.36 __p_type_syms D 0x450
|
|
+GLIBC_2.36 __putlong F
|
|
+GLIBC_2.36 __putshort F
|
|
+GLIBC_2.36 __res_close F
|
|
+GLIBC_2.36 __res_hostalias F
|
|
+GLIBC_2.36 __res_isourserver F
|
|
+GLIBC_2.36 __res_nameinquery F
|
|
+GLIBC_2.36 __res_queriesmatch F
|
|
+GLIBC_2.36 __sym_ntop F
|
|
+GLIBC_2.36 __sym_ntos F
|
|
+GLIBC_2.36 __sym_ston F
|
|
+GLIBC_2.36 _getlong F
|
|
+GLIBC_2.36 _getshort F
|
|
+GLIBC_2.36 inet_net_ntop F
|
|
+GLIBC_2.36 inet_net_pton F
|
|
+GLIBC_2.36 inet_neta F
|
|
+GLIBC_2.36 ns_datetosecs F
|
|
+GLIBC_2.36 ns_format_ttl F
|
|
+GLIBC_2.36 ns_get16 F
|
|
+GLIBC_2.36 ns_get32 F
|
|
+GLIBC_2.36 ns_initparse F
|
|
+GLIBC_2.36 ns_makecanon F
|
|
+GLIBC_2.36 ns_msg_getflag F
|
|
+GLIBC_2.36 ns_name_ntol F
|
|
+GLIBC_2.36 ns_name_rollback F
|
|
+GLIBC_2.36 ns_parse_ttl F
|
|
+GLIBC_2.36 ns_parserr F
|
|
+GLIBC_2.36 ns_put16 F
|
|
+GLIBC_2.36 ns_put32 F
|
|
+GLIBC_2.36 ns_samedomain F
|
|
+GLIBC_2.36 ns_samename F
|
|
+GLIBC_2.36 ns_skiprr F
|
|
+GLIBC_2.36 ns_sprintrr F
|
|
+GLIBC_2.36 ns_sprintrrf F
|
|
+GLIBC_2.36 ns_subdomain F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist
|
|
new file mode 100644
|
|
index 00000000..e69de29b
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist
|
|
new file mode 100644
|
|
index 00000000..8658803d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist
|
|
@@ -0,0 +1,40 @@
|
|
+GLIBC_2.36 td_init F
|
|
+GLIBC_2.36 td_log F
|
|
+GLIBC_2.36 td_symbol_list F
|
|
+GLIBC_2.36 td_ta_clear_event F
|
|
+GLIBC_2.36 td_ta_delete F
|
|
+GLIBC_2.36 td_ta_enable_stats F
|
|
+GLIBC_2.36 td_ta_event_addr F
|
|
+GLIBC_2.36 td_ta_event_getmsg F
|
|
+GLIBC_2.36 td_ta_get_nthreads F
|
|
+GLIBC_2.36 td_ta_get_ph F
|
|
+GLIBC_2.36 td_ta_get_stats F
|
|
+GLIBC_2.36 td_ta_map_id2thr F
|
|
+GLIBC_2.36 td_ta_map_lwp2thr F
|
|
+GLIBC_2.36 td_ta_new F
|
|
+GLIBC_2.36 td_ta_reset_stats F
|
|
+GLIBC_2.36 td_ta_set_event F
|
|
+GLIBC_2.36 td_ta_setconcurrency F
|
|
+GLIBC_2.36 td_ta_thr_iter F
|
|
+GLIBC_2.36 td_ta_tsd_iter F
|
|
+GLIBC_2.36 td_thr_clear_event F
|
|
+GLIBC_2.36 td_thr_dbresume F
|
|
+GLIBC_2.36 td_thr_dbsuspend F
|
|
+GLIBC_2.36 td_thr_event_enable F
|
|
+GLIBC_2.36 td_thr_event_getmsg F
|
|
+GLIBC_2.36 td_thr_get_info F
|
|
+GLIBC_2.36 td_thr_getfpregs F
|
|
+GLIBC_2.36 td_thr_getgregs F
|
|
+GLIBC_2.36 td_thr_getxregs F
|
|
+GLIBC_2.36 td_thr_getxregsize F
|
|
+GLIBC_2.36 td_thr_set_event F
|
|
+GLIBC_2.36 td_thr_setfpregs F
|
|
+GLIBC_2.36 td_thr_setgregs F
|
|
+GLIBC_2.36 td_thr_setprio F
|
|
+GLIBC_2.36 td_thr_setsigpending F
|
|
+GLIBC_2.36 td_thr_setxregs F
|
|
+GLIBC_2.36 td_thr_sigsetmask F
|
|
+GLIBC_2.36 td_thr_tls_get_addr F
|
|
+GLIBC_2.36 td_thr_tlsbase F
|
|
+GLIBC_2.36 td_thr_tsd F
|
|
+GLIBC_2.36 td_thr_validate F
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h
|
|
new file mode 100644
|
|
index 00000000..835df05c
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h
|
|
@@ -0,0 +1,41 @@
|
|
+/* Copyright (C) 2020-2021 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/>. */
|
|
+
|
|
+/* Produced by this program:
|
|
+
|
|
+ #include <stdio.h>
|
|
+ #include <unistd.h>
|
|
+ #include <setjmp.h>
|
|
+ #include <stddef.h>
|
|
+
|
|
+ int main (int argc, char **argv)
|
|
+ {
|
|
+ printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf));
|
|
+ printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf));
|
|
+ printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf));
|
|
+ printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf));
|
|
+ printf ("#define MASK_WAS_SAVED_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __mask_was_saved));
|
|
+ printf ("#define SAVED_MASK_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __saved_mask));
|
|
+ } */
|
|
+
|
|
+# define JMP_BUF_SIZE 240
|
|
+# define JMP_BUF_ALIGN 8
|
|
+# define SIGJMP_BUF_SIZE 240
|
|
+# define SIGJMP_BUF_ALIGN 8
|
|
+# define MASK_WAS_SAVED_OFFSET 104
|
|
+# define SAVED_MASK_OFFSET 112
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/makecontext.c b/sysdeps/unix/sysv/linux/loongarch/makecontext.c
|
|
new file mode 100644
|
|
index 00000000..94a45bf4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/makecontext.c
|
|
@@ -0,0 +1,81 @@
|
|
+/* Create new context.
|
|
+ Copyright (C) 2022 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/asm.h>
|
|
+#include <sys/ucontext.h>
|
|
+#include <stdarg.h>
|
|
+#include <assert.h>
|
|
+
|
|
+void
|
|
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, long int a0,
|
|
+ long int a1, long int a2, long int a3, long int a4, ...)
|
|
+{
|
|
+ extern void __start_context (void) attribute_hidden;
|
|
+ unsigned long int *sp;
|
|
+
|
|
+ _Static_assert(LARCH_REG_NARGS == 8,
|
|
+ "__makecontext assumes 8 argument registers");
|
|
+
|
|
+ /* Set up the stack. */
|
|
+ sp = (unsigned long int *)
|
|
+ (((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ALMASK);
|
|
+
|
|
+ /* Set up the register context.
|
|
+ ra = s0 = 0, terminating the stack for backtracing purposes.
|
|
+ s1 = the function we must call.
|
|
+ s2 = the subsequent context to run. */
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_RA] = (uintptr_t) 0;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_S0] = (uintptr_t) 0;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_S1] = (uintptr_t) func;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_S2] = (uintptr_t) ucp->uc_link;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_SP] = (uintptr_t) sp;
|
|
+ ucp->uc_mcontext.__pc = (uintptr_t) &__start_context;
|
|
+
|
|
+ /* Put args in a0-a7, then put any remaining args on the stack. */
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + 0] = (uintptr_t) a0;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + 1] = (uintptr_t) a1;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + 2] = (uintptr_t) a2;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + 3] = (uintptr_t) a3;
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + 4] = (uintptr_t) a4;
|
|
+
|
|
+ if (__glibc_unlikely (argc > 5))
|
|
+ {
|
|
+ va_list vl;
|
|
+ va_start (vl, a4);
|
|
+
|
|
+ long int reg_args = argc < LARCH_REG_NARGS ? argc : LARCH_REG_NARGS;
|
|
+ for (long int i = 5; i < reg_args; i++)
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_A0 + i] = va_arg (vl, unsigned long int);
|
|
+
|
|
+ long int stack_args = argc - reg_args;
|
|
+ if (stack_args > 0)
|
|
+ {
|
|
+ sp = (unsigned long int *)
|
|
+ (((uintptr_t) sp - stack_args * sizeof (long int)) & ALMASK);
|
|
+ ucp->uc_mcontext.__gregs[LARCH_REG_SP] = (uintptr_t) sp;
|
|
+ for (long int i = 0; i < stack_args; i++)
|
|
+ sp[i] = va_arg (vl, unsigned long int);
|
|
+ }
|
|
+
|
|
+ va_end (vl);
|
|
+ }
|
|
+}
|
|
+
|
|
+weak_alias (__makecontext, makecontext)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/register-dump.h b/sysdeps/unix/sysv/linux/loongarch/register-dump.h
|
|
new file mode 100644
|
|
index 00000000..9000fc31
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/register-dump.h
|
|
@@ -0,0 +1,61 @@
|
|
+/* Dump registers.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <unistd.h>
|
|
+#include <string.h>
|
|
+#include <_itoa.h>
|
|
+
|
|
+static void
|
|
+hexvalue (unsigned long int value, char *buf, size_t len)
|
|
+{
|
|
+ char *cp = _itoa_word (value, buf + len, 16, 0);
|
|
+ while (cp > buf)
|
|
+ *--cp = '0';
|
|
+}
|
|
+
|
|
+#define REGDUMP_NREGS 32
|
|
+#define REGDUMP_PER_LINE (80 / (__WORDSIZE / 4 + 4))
|
|
+
|
|
+static void
|
|
+register_dump (int fd, ucontext_t *ctx)
|
|
+{
|
|
+ int i;
|
|
+ char regvalue[__WORDSIZE / 4 + 1];
|
|
+ char str[82 * ((REGDUMP_NREGS + REGDUMP_PER_LINE - 1) / REGDUMP_PER_LINE)];
|
|
+
|
|
+ static const char names[REGDUMP_NREGS][4]
|
|
+ = {"pc", "ra", "tp", "sp", "a0", "a1", "a2", "a3", "a4", "a5", "a6",
|
|
+ "a7", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "x",
|
|
+ "fp", "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8"};
|
|
+
|
|
+ str[0] = 0;
|
|
+ for (i = 0; i < REGDUMP_NREGS; i++)
|
|
+ {
|
|
+ strcat (str, names[i]);
|
|
+ strcat (str, " ");
|
|
+ hexvalue (ctx->uc_mcontext.__gregs[i], regvalue, __WORDSIZE / 4);
|
|
+ strcat (str, regvalue);
|
|
+
|
|
+ if ((i + 1) % REGDUMP_PER_LINE == 0)
|
|
+ strcat (str, "\n");
|
|
+ }
|
|
+
|
|
+ write (fd, str, strlen (str));
|
|
+}
|
|
+
|
|
+#define REGISTER_DUMP register_dump (fd, ctx)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/setcontext.S b/sysdeps/unix/sysv/linux/loongarch/setcontext.S
|
|
new file mode 100644
|
|
index 00000000..31d6de0f
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/setcontext.S
|
|
@@ -0,0 +1,100 @@
|
|
+/* Set current context.
|
|
+ Copyright (C) 2022 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/>. */
|
|
+#include "sys/regdef.h"
|
|
+#include "ucontext-macros.h"
|
|
+
|
|
+/* int __setcontext (const ucontext_t *ucp)
|
|
+
|
|
+ Restores the machine context in UCP and thereby resumes execution
|
|
+ in that context.
|
|
+
|
|
+ This implementation is intended to be used for *synchronous* context
|
|
+ switches only. Therefore, it does not have to restore anything
|
|
+ other than the PRESERVED state. */
|
|
+
|
|
+ .text
|
|
+LEAF (__setcontext)
|
|
+
|
|
+ addi.d sp, sp, -16
|
|
+ st.d a0, sp, 0 /* Save ucp to stack */
|
|
+
|
|
+/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */
|
|
+ li.d a3, _NSIG8
|
|
+ li.d a2, 0
|
|
+ li.d a1, UCONTEXT_SIGMASK
|
|
+ add.d a1, a1, a0
|
|
+ li.d a0, SIG_SETMASK
|
|
+
|
|
+ li.d a7, SYS_ify (rt_sigprocmask)
|
|
+ syscall 0
|
|
+
|
|
+ blt a0, $r0, 99f
|
|
+
|
|
+ ld.d t0, sp, 0 /* Load ucp to t0 */
|
|
+ cfi_def_cfa (12, 0)
|
|
+
|
|
+/* Note the contents of argument registers will be random
|
|
+ unless makecontext() has been called. */
|
|
+ RESTORE_INT_REG(ra, 1, t0)
|
|
+ RESTORE_INT_REG(sp, 3, t0)
|
|
+ RESTORE_INT_REG(a0, 4, t0)
|
|
+ RESTORE_INT_REG(a1, 5, t0)
|
|
+ RESTORE_INT_REG(a2, 6, t0)
|
|
+ RESTORE_INT_REG(a3, 7, t0)
|
|
+ RESTORE_INT_REG(a4, 8, t0)
|
|
+ RESTORE_INT_REG(a5, 9, t0)
|
|
+ RESTORE_INT_REG(a6, 10, t0)
|
|
+ RESTORE_INT_REG(a7, 11, t0)
|
|
+ RESTORE_INT_REG(x, 21, t0)
|
|
+ RESTORE_INT_REG(fp, 22, t0)
|
|
+ RESTORE_INT_REG(s0, 23, t0)
|
|
+ RESTORE_INT_REG(s1, 24, t0)
|
|
+ RESTORE_INT_REG(s2, 25, t0)
|
|
+ RESTORE_INT_REG(s3, 26, t0)
|
|
+ RESTORE_INT_REG(s4, 27, t0)
|
|
+ RESTORE_INT_REG(s5, 28, t0)
|
|
+ RESTORE_INT_REG(s6, 29, t0)
|
|
+ RESTORE_INT_REG(s7, 30, t0)
|
|
+ RESTORE_INT_REG(s8, 31, t0)
|
|
+
|
|
+ ld.d t1, t0, MCONTEXT_PC
|
|
+ jirl $r0,t1,0
|
|
+
|
|
+99:
|
|
+ addi.d sp, sp, 16
|
|
+ b __syscall_error
|
|
+
|
|
+PSEUDO_END (__setcontext)
|
|
+weak_alias (__setcontext, setcontext)
|
|
+
|
|
+LEAF (__start_context)
|
|
+
|
|
+ /* Terminate call stack by noting ra == 0. Happily, s0 == 0 here. */
|
|
+ cfi_register (1, 23)
|
|
+
|
|
+ /* Call the function passed to makecontext. */
|
|
+ jirl $r1,s1,0
|
|
+
|
|
+ /* Invoke subsequent context if present, else exit(0). */
|
|
+ ori a0, s2, 0
|
|
+ beqz s2, 1f
|
|
+ bl __setcontext
|
|
+1:
|
|
+ b HIDDEN_JUMPTARGET (exit)
|
|
+
|
|
+PSEUDO_END (__start_context)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/shlib-versions b/sysdeps/unix/sysv/linux/loongarch/shlib-versions
|
|
new file mode 100644
|
|
index 00000000..dc2220b4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/shlib-versions
|
|
@@ -0,0 +1,7 @@
|
|
+DEFAULT GLIBC_2.36
|
|
+
|
|
+%if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64
|
|
+ld=ld-linux-loongarch-lp64d.so.1
|
|
+%else
|
|
+%error cannot determine ABI
|
|
+%endif
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sigcontextinfo.h b/sysdeps/unix/sysv/linux/loongarch/sigcontextinfo.h
|
|
new file mode 100644
|
|
index 00000000..5e202bc0
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sigcontextinfo.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* LoongArch definitions for signal handling calling conventions.
|
|
+ Copyright (C) 2022 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 _SIGCONTEXTINFO_H
|
|
+#define _SIGCONTEXTINFO_H
|
|
+
|
|
+#include <stdint.h>
|
|
+#include <sys/ucontext.h>
|
|
+
|
|
+static inline uintptr_t
|
|
+sigcontext_get_pc (const ucontext_t *ctx)
|
|
+{
|
|
+ return ctx->uc_mcontext.__pc;
|
|
+}
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/swapcontext.S b/sysdeps/unix/sysv/linux/loongarch/swapcontext.S
|
|
new file mode 100644
|
|
index 00000000..bb22cd2f
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/swapcontext.S
|
|
@@ -0,0 +1,95 @@
|
|
+/* Save and set current context.
|
|
+ Copyright (C) 2022 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/>. */
|
|
+
|
|
+#include "ucontext-macros.h"
|
|
+
|
|
+/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */
|
|
+
|
|
+LEAF (__swapcontext)
|
|
+ ori a2, sp, 0 /* Save sp to a2 */
|
|
+ addi.d sp, sp, -16
|
|
+ st.d a1, sp, 0
|
|
+ ori t0, a1, 0
|
|
+
|
|
+ SAVE_INT_REG (ra, 1, a0)
|
|
+ SAVE_INT_REG (a2, 3, a0) /* Store sp */
|
|
+ SAVE_INT_REG (zero, 4, a0) /* return 0 by overwriting a0 */
|
|
+ SAVE_INT_REG (x, 21, a0)
|
|
+ SAVE_INT_REG (fp, 22, a0)
|
|
+ SAVE_INT_REG (s0, 23, a0)
|
|
+ SAVE_INT_REG (s1, 24, a0)
|
|
+ SAVE_INT_REG (s2, 25, a0)
|
|
+ SAVE_INT_REG (s3, 26, a0)
|
|
+ SAVE_INT_REG (s4, 27, a0)
|
|
+ SAVE_INT_REG (s5, 28, a0)
|
|
+ SAVE_INT_REG (s6, 29, a0)
|
|
+ SAVE_INT_REG (s7, 30, a0)
|
|
+ SAVE_INT_REG (s8, 31, a0)
|
|
+
|
|
+ st.d ra, a0, MCONTEXT_PC
|
|
+
|
|
+/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */
|
|
+ li.d a3, _NSIG8
|
|
+ li.d a2, UCONTEXT_SIGMASK
|
|
+ add.d a2, a2, a0
|
|
+ li.d a1, UCONTEXT_SIGMASK
|
|
+ add.d a1, a1, t0
|
|
+ li.d a0, SIG_SETMASK
|
|
+
|
|
+ li.d a7, SYS_ify (rt_sigprocmask)
|
|
+ syscall 0
|
|
+
|
|
+ blt a0, zero, 99f
|
|
+
|
|
+ ld.d t0, sp, 0 /* Load a1 to t0 */
|
|
+
|
|
+/* Note the contents of argument registers will be random
|
|
+ unless makecontext() has been called. */
|
|
+ RESTORE_INT_REG (ra, 1, t0)
|
|
+ RESTORE_INT_REG (sp, 3, t0)
|
|
+ RESTORE_INT_REG (a0, 4, t0)
|
|
+ RESTORE_INT_REG (a1, 5, t0)
|
|
+ RESTORE_INT_REG (a2, 6, t0)
|
|
+ RESTORE_INT_REG (a3, 7, t0)
|
|
+ RESTORE_INT_REG (a4, 8, t0)
|
|
+ RESTORE_INT_REG (a5, 9, t0)
|
|
+ RESTORE_INT_REG (a6, 10, t0)
|
|
+ RESTORE_INT_REG (a7, 11, t0)
|
|
+ RESTORE_INT_REG (x, 21, t0)
|
|
+ RESTORE_INT_REG (fp, 22, t0)
|
|
+ RESTORE_INT_REG (s0, 23, t0)
|
|
+ RESTORE_INT_REG (s1, 24, t0)
|
|
+ RESTORE_INT_REG (s2, 25, t0)
|
|
+ RESTORE_INT_REG (s3, 26, t0)
|
|
+ RESTORE_INT_REG (s4, 27, t0)
|
|
+ RESTORE_INT_REG (s5, 28, t0)
|
|
+ RESTORE_INT_REG (s6, 29, t0)
|
|
+ RESTORE_INT_REG (s7, 30, t0)
|
|
+ RESTORE_INT_REG (s8, 31, t0)
|
|
+
|
|
+ ld.d t1, t0, MCONTEXT_PC
|
|
+ jirl $r0, t1, 0
|
|
+
|
|
+
|
|
+99:
|
|
+ addi.d sp, sp, 16
|
|
+ b __syscall_error
|
|
+
|
|
+PSEUDO_END (__swapcontext)
|
|
+
|
|
+weak_alias (__swapcontext, swapcontext)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sys/ucontext.h b/sysdeps/unix/sysv/linux/loongarch/sys/ucontext.h
|
|
new file mode 100644
|
|
index 00000000..db86380d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sys/ucontext.h
|
|
@@ -0,0 +1,64 @@
|
|
+/* struct ucontext definition.
|
|
+ Copyright (C) 2022 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 */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sys/user.h b/sysdeps/unix/sysv/linux/loongarch/sys/user.h
|
|
new file mode 100644
|
|
index 00000000..640b9b33
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sys/user.h
|
|
@@ -0,0 +1,42 @@
|
|
+/* struct user_regs_struct definition for LoongArch.
|
|
+ Copyright (C) 2021 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 */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/syscall.c b/sysdeps/unix/sysv/linux/loongarch/syscall.c
|
|
new file mode 100644
|
|
index 00000000..d0067bc2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/syscall.c
|
|
@@ -0,0 +1,35 @@
|
|
+/* system call interface.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+
|
|
+long int
|
|
+syscall (long int syscall_number, long int arg1, long int arg2, long int arg3,
|
|
+ long int arg4, long int arg5, long int arg6, long int arg7)
|
|
+{
|
|
+ long int ret;
|
|
+
|
|
+ ret = INTERNAL_SYSCALL_NCS (syscall_number, 7, arg1, arg2, arg3, arg4, arg5,
|
|
+ arg6, arg7);
|
|
+
|
|
+ if (INTERNAL_SYSCALL_ERROR_P (ret))
|
|
+ return __syscall_error (ret);
|
|
+
|
|
+ return ret;
|
|
+}
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sysdep.S b/sysdeps/unix/sysv/linux/loongarch/sysdep.S
|
|
new file mode 100644
|
|
index 00000000..865de9b2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sysdep.S
|
|
@@ -0,0 +1,53 @@
|
|
+/* syscall error handlers
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+
|
|
+#if IS_IN (libc)
|
|
+# define errno __libc_errno
|
|
+#endif
|
|
+
|
|
+ENTRY (__syscall_error)
|
|
+/* Fall through to __syscall_set_errno */
|
|
+END (__syscall_error)
|
|
+
|
|
+/* Non-standard calling convention: argument in a0, return address in t0,
|
|
+ and clobber only t1.
|
|
+ */
|
|
+ENTRY (__syscall_set_errno)
|
|
+
|
|
+/* We got here because a0 < 0, but only codes in the range [-4095, -1]
|
|
+ represent errors. Otherwise, just return the result normally.
|
|
+ */
|
|
+ li.d t1, -4096
|
|
+ bgeu t1, a0, L (out)
|
|
+ sub.w a0, zero, a0
|
|
+#if RTLD_PRIVATE_ERRNO
|
|
+ la t1, rtld_errno
|
|
+#elif defined(__PIC__)
|
|
+ la.tls.ie t1, errno
|
|
+ add.d t1, tp, t1
|
|
+#else
|
|
+ la.tls.le t1, errno
|
|
+ add.d t1, tp, t1
|
|
+#endif
|
|
+ st.w a0, t1, 0
|
|
+ li.d a0, -1
|
|
+L (out):
|
|
+ ret
|
|
+END (__syscall_set_errno)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sysdep.h b/sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
|
new file mode 100644
|
|
index 00000000..b2587091
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
|
@@ -0,0 +1,320 @@
|
|
+/* Assembly macros for LoongArch.
|
|
+ Copyright (C) 2021 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 _LINUX_LOONGARCH_SYSDEP_H
|
|
+#define _LINUX_LOONGARCH_SYSDEP_H 1
|
|
+
|
|
+#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
|
|
+#include <tls.h>
|
|
+
|
|
+#ifdef __ASSEMBLER__
|
|
+
|
|
+#include <sys/asm.h>
|
|
+#define ret jirl zero, ra, 0
|
|
+#define L(label) .L##label
|
|
+
|
|
+/* Performs a system call, handling errors by setting errno. Linux indicates
|
|
+ errors by setting a0 to a value between -1 and -4095. */
|
|
+#undef PSEUDO
|
|
+#define PSEUDO(name, syscall_name, args) \
|
|
+ ENTRY (name); \
|
|
+ li.d a7, SYS_ify (syscall_name); \
|
|
+ syscall 0; \
|
|
+ li.d a7, -4096; \
|
|
+ bltu a7, a0, .Lsyscall_error##name;
|
|
+
|
|
+#undef PSEUDO_END
|
|
+#define PSEUDO_END(sym) \
|
|
+ SYSCALL_ERROR_HANDLER (sym); \
|
|
+ ret; \
|
|
+ END (sym);
|
|
+
|
|
+#if !IS_IN(libc)
|
|
+#if RTLD_PRIVATE_ERRNO
|
|
+
|
|
+#define SYSCALL_ERROR_HANDLER(name) \
|
|
+ .Lsyscall_error##name : la t0, rtld_errno; \
|
|
+ sub.w a0, zero, a0; \
|
|
+ st.w a0, t0, 0; \
|
|
+ li.d a0, -1;
|
|
+
|
|
+#else
|
|
+
|
|
+#define SYSCALL_ERROR_HANDLER(name) \
|
|
+ .Lsyscall_error##name : la.tls.ie t0, errno; \
|
|
+ add.d t0, tp, t0; \
|
|
+ sub.w a0, zero, a0; \
|
|
+ st.w a0, t0, 0; \
|
|
+ li.d a0, -1;
|
|
+
|
|
+#endif
|
|
+#else
|
|
+
|
|
+#define SYSCALL_ERROR_HANDLER(name) .Lsyscall_error##name : b __syscall_error;
|
|
+
|
|
+#endif
|
|
+
|
|
+/* Performs a system call, not setting errno. */
|
|
+#undef PSEUDO_NEORRNO
|
|
+#define PSEUDO_NOERRNO(name, syscall_name, args) \
|
|
+ ENTRY (name); \
|
|
+ li.d a7, SYS_ify (syscall_name); \
|
|
+ syscall 0;
|
|
+
|
|
+#undef PSEUDO_END_NOERRNO
|
|
+#define PSEUDO_END_NOERRNO(name) END (name);
|
|
+
|
|
+#undef ret_NOERRNO
|
|
+#define ret_NOERRNO ret
|
|
+
|
|
+/* Perfroms a system call, returning the error code. */
|
|
+#undef PSEUDO_ERRVAL
|
|
+#define PSEUDO_ERRVAL(name, syscall_name, args) \
|
|
+ PSEUDO_NOERRNO (name, syscall_name, args); \
|
|
+ slli.d a0, a0, 32; \
|
|
+ srai.d a0, a0, 32; /* sign_ext */ \
|
|
+ sub.d a0, zero, a0;
|
|
+
|
|
+#undef PSEUDO_END_ERRVAL
|
|
+#define PSEUDO_END_ERRVAL(name) END (name);
|
|
+
|
|
+#undef ret_ERRVAL
|
|
+#define ret_ERRVAL ret
|
|
+
|
|
+#endif /* __ASSEMBLER__ */
|
|
+
|
|
+/* In order to get __set_errno() definition in INLINE_SYSCALL. */
|
|
+#ifndef __ASSEMBLER__
|
|
+#include <errno.h>
|
|
+#endif
|
|
+
|
|
+#include <sysdeps/unix/sysdep.h>
|
|
+
|
|
+#undef SYS_ify
|
|
+#define SYS_ify(syscall_name) __NR_##syscall_name
|
|
+
|
|
+#ifndef __ASSEMBLER__
|
|
+
|
|
+#define VDSO_NAME "LINUX_5.10"
|
|
+#define VDSO_HASH 182947696
|
|
+
|
|
+/* List of system calls which are supported as vsyscalls. */
|
|
+#define HAVE_CLOCK_GETRES64_VSYSCALL "__vdso_clock_getres"
|
|
+#define HAVE_CLOCK_GETTIME64_VSYSCALL "__vdso_clock_gettime"
|
|
+#define HAVE_GETCPU_VSYSCALL "__vdso_getcpu"
|
|
+
|
|
+#define HAVE_CLONE3_WRAPPER 1
|
|
+
|
|
+#define INTERNAL_SYSCALL(name, nr, args...) \
|
|
+ internal_syscall##nr (SYS_ify (name), args)
|
|
+
|
|
+#define INTERNAL_SYSCALL_NCS(number, nr, args...) \
|
|
+ internal_syscall##nr (number, args)
|
|
+
|
|
+#define internal_syscall0(number, dummy...) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0"); \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "=r"(__a0) \
|
|
+ : "r"(__a7) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall1(number, arg0) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall2(number, arg0, arg1) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall3(number, arg0, arg1, arg2) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ long int _arg2 = (long int) (arg2); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ register long int __a2 asm ("$a2") = _arg2; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1), "r"(__a2) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall4(number, arg0, arg1, arg2, arg3) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ long int _arg2 = (long int) (arg2); \
|
|
+ long int _arg3 = (long int) (arg3); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ register long int __a2 asm ("$a2") = _arg2; \
|
|
+ register long int __a3 asm ("$a3") = _arg3; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1), "r"(__a2), "r"(__a3) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall5(number, arg0, arg1, arg2, arg3, arg4) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ long int _arg2 = (long int) (arg2); \
|
|
+ long int _arg3 = (long int) (arg3); \
|
|
+ long int _arg4 = (long int) (arg4); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ register long int __a2 asm ("$a2") = _arg2; \
|
|
+ register long int __a3 asm ("$a3") = _arg3; \
|
|
+ register long int __a4 asm ("$a4") = _arg4; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1), "r"(__a2), \
|
|
+ "r"(__a3), "r"(__a4) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall6(number, arg0, arg1, arg2, arg3, arg4, arg5) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ long int _arg2 = (long int) (arg2); \
|
|
+ long int _arg3 = (long int) (arg3); \
|
|
+ long int _arg4 = (long int) (arg4); \
|
|
+ long int _arg5 = (long int) (arg5); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ register long int __a2 asm ("$a2") = _arg2; \
|
|
+ register long int __a3 asm ("$a3") = _arg3; \
|
|
+ register long int __a4 asm ("$a4") = _arg4; \
|
|
+ register long int __a5 asm ("$a5") = _arg5; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1), "r"(__a2), "r"(__a3), \
|
|
+ "r"(__a4), "r"(__a5) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define internal_syscall7(number, arg0, arg1, arg2, arg3, arg4, arg5, arg6) \
|
|
+ ({ \
|
|
+ long int _sys_result; \
|
|
+\
|
|
+ { \
|
|
+ long int _arg0 = (long int) (arg0); \
|
|
+ long int _arg1 = (long int) (arg1); \
|
|
+ long int _arg2 = (long int) (arg2); \
|
|
+ long int _arg3 = (long int) (arg3); \
|
|
+ long int _arg4 = (long int) (arg4); \
|
|
+ long int _arg5 = (long int) (arg5); \
|
|
+ long int _arg6 = (long int) (arg6); \
|
|
+ register long int __a7 asm ("$a7") = number; \
|
|
+ register long int __a0 asm ("$a0") = _arg0; \
|
|
+ register long int __a1 asm ("$a1") = _arg1; \
|
|
+ register long int __a2 asm ("$a2") = _arg2; \
|
|
+ register long int __a3 asm ("$a3") = _arg3; \
|
|
+ register long int __a4 asm ("$a4") = _arg4; \
|
|
+ register long int __a5 asm ("$a5") = _arg5; \
|
|
+ register long int __a6 asm ("$a6") = _arg6; \
|
|
+ __asm__ volatile ("syscall 0\n\t" \
|
|
+ : "+r"(__a0) \
|
|
+ : "r"(__a7), "r"(__a1), "r"(__a2), "r"(__a3), \
|
|
+ "r"(__a4), "r"(__a5), "r"(__a6) \
|
|
+ : __SYSCALL_CLOBBERS); \
|
|
+ _sys_result = __a0; \
|
|
+ } \
|
|
+ _sys_result; \
|
|
+ })
|
|
+
|
|
+#define __SYSCALL_CLOBBERS \
|
|
+ "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
|
|
+
|
|
+extern long int __syscall_error (long int neg_errno);
|
|
+
|
|
+#endif /* ! __ASSEMBLER__ */
|
|
+
|
|
+/* Pointer mangling is not supported. */
|
|
+#define PTR_MANGLE(var) (void) (var)
|
|
+#define PTR_DEMANGLE(var) (void) (var)
|
|
+
|
|
+#endif /* linux/loongarch/sysdep.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/ucontext-macros.h b/sysdeps/unix/sysv/linux/loongarch/ucontext-macros.h
|
|
new file mode 100644
|
|
index 00000000..859eba46
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/ucontext-macros.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* Macros for ucontext routines.
|
|
+ Copyright (C) 2022 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 _LINUX_LOONGARCH_UCONTEXT_MACROS_H
|
|
+#define _LINUX_LOONGARCH_UCONTEXT_MACROS_H
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/asm.h>
|
|
+#include "ucontext_i.h"
|
|
+
|
|
+#define SAVE_INT_REG(name, num, base) \
|
|
+ REG_S name, base, ((num) *SZREG + MCONTEXT_GREGS)
|
|
+
|
|
+#define RESTORE_INT_REG(name, num, base) \
|
|
+ REG_L name, base, ((num) *SZREG + MCONTEXT_GREGS)
|
|
+
|
|
+#endif /* _LINUX_LOONGARCH_UCONTEXT_MACROS_H */
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/ucontext_i.sym b/sysdeps/unix/sysv/linux/loongarch/ucontext_i.sym
|
|
new file mode 100644
|
|
index 00000000..f27afad5
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/ucontext_i.sym
|
|
@@ -0,0 +1,31 @@
|
|
+#include <inttypes.h>
|
|
+#include <signal.h>
|
|
+#include <stddef.h>
|
|
+#include <sys/ucontext.h>
|
|
+
|
|
+-- Constants used by the rt_sigprocmask call.
|
|
+
|
|
+SIG_BLOCK
|
|
+SIG_SETMASK
|
|
+
|
|
+_NSIG8 (_NSIG / 8)
|
|
+
|
|
+-- Offsets of the fields in the ucontext_t structure.
|
|
+#define ucontext(member) offsetof (ucontext_t, member)
|
|
+#define stack(member) ucontext (uc_stack.member)
|
|
+#define mcontext(member) ucontext (uc_mcontext.member)
|
|
+
|
|
+UCONTEXT_FLAGS ucontext (__uc_flags)
|
|
+UCONTEXT_LINK ucontext (uc_link)
|
|
+UCONTEXT_STACK ucontext (uc_stack)
|
|
+UCONTEXT_MCONTEXT ucontext (uc_mcontext)
|
|
+UCONTEXT_SIGMASK ucontext (uc_sigmask)
|
|
+
|
|
+STACK_SP stack (ss_sp)
|
|
+STACK_SIZE stack (ss_size)
|
|
+STACK_FLAGS stack (ss_flags)
|
|
+
|
|
+MCONTEXT_PC mcontext (__pc)
|
|
+MCONTEXT_GREGS mcontext (__gregs)
|
|
+
|
|
+UCONTEXT_SIZE sizeof (ucontext_t)
|
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/vfork.S b/sysdeps/unix/sysv/linux/loongarch/vfork.S
|
|
new file mode 100644
|
|
index 00000000..585f98ee
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/loongarch/vfork.S
|
|
@@ -0,0 +1,50 @@
|
|
+/* vfork for Linux.
|
|
+ Copyright (C) 2021 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/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#define _ERRNO_H 1
|
|
+#include <bits/errno.h>
|
|
+
|
|
+/* Clone the calling process, but without copying the whole address space.
|
|
+ The calling process is suspended until the new process exits or is
|
|
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
|
|
+ and the process ID of the new process to the old process. */
|
|
+
|
|
+ENTRY (__vfork)
|
|
+
|
|
+ li.d a0, 0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */
|
|
+ add.d a1, zero, sp
|
|
+
|
|
+ /* Do the system call. */
|
|
+ li.d a7, __NR_clone
|
|
+ syscall 0
|
|
+
|
|
+ blt a0, zero ,L (error)
|
|
+
|
|
+ ret
|
|
+
|
|
+L (error):
|
|
+ b __syscall_error
|
|
+
|
|
+END (__vfork)
|
|
+
|
|
+libc_hidden_def (__vfork)
|
|
+
|
|
+weak_alias (__vfork, vfork)
|
|
+strong_alias (__vfork, __libc_vfork)
|
|
--
|
|
2.33.0
|
|
|