diff --git a/src/system/libroot/posix/arch/riscv64/Jamfile b/src/system/libroot/posix/arch/riscv64/Jamfile index 7ee7d1ba29..124eace65a 100644 --- a/src/system/libroot/posix/arch/riscv64/Jamfile +++ b/src/system/libroot/posix/arch/riscv64/Jamfile @@ -5,6 +5,8 @@ for architectureObject in [ MultiArchSubDirSetup riscv64 ] { on $(architectureObject) { local architecture = $(TARGET_PACKAGING_ARCH) ; + UsePrivateHeaders [ FDirName system arch $(TARGET_ARCH) ] ; + local genericSources = setjmp_save_sigs.c longjmp_return.c diff --git a/src/system/libroot/posix/glibc/arch/riscv64/Jamfile b/src/system/libroot/posix/glibc/arch/riscv64/Jamfile index ba38192712..027bcaf842 100644 --- a/src/system/libroot/posix/glibc/arch/riscv64/Jamfile +++ b/src/system/libroot/posix/glibc/arch/riscv64/Jamfile @@ -1,139 +1,114 @@ SubDir HAIKU_TOP src system libroot posix glibc arch riscv64 ; -SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc arch $(TARGET_ARCH) ; -SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc include arch - $(TARGET_ARCH) ; +SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc include arch $(TARGET_ARCH) ; SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc include arch generic ; SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc include ; +SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc libio ; SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc stdlib ; SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc math ; -SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc libio ; SubDirSysHdrs $(HAIKU_TOP) src system libroot posix glibc ; SubDirHdrs $(HAIKU_TOP) src system libroot posix glibc arch generic ; UsePrivateHeaders libroot ; +if $(OPTIM) = -O0 { + OPTIM = -O ; +} + +# don't compile with debugging +DEBUG = 0 ; + SubDirCcFlags -D_GNU_SOURCE -D_IEEE_LIBM ; local genericSources = - branred.c - cmp.c dbl2mpn.c divrem.c - dosincos.c - halfulp.c - memrchr.c - mpa.c mpatan.c mpatan2.c mpexp.c mplog.c mpn2dbl.c - mpn2flt.c mpn2ldbl.c mpsqrt.c mptan.c - mul.c mul_n.c - sincos32.c - slowexp.c - slowpow.c + lshift.c rshift.c submul_1.c + s_finite.c s_finitef.c + add_n.c sub_n.c + addmul_1.c mul_1.c - e_acosh.c e_acoshf.c # e_acoshl.c - e_atan2.c e_atan2f.c # e_atan2l.c - e_atanh.c e_atanhf.c # e_atanhl.c - e_cosh.c e_coshf.c # e_coshl.c - e_exp.c e_expf.c - e_fmod.c e_fmodf.c # e_fmodl.c - e_gamma_r.c e_gammaf_r.c - e_hypot.c e_hypotf.c # e_hypotl.c - e_j0.c e_j0f.c - e_j1.c e_j1f.c - e_jn.c e_jnf.c - e_lgamma_r.c e_lgammaf_r.c - e_log.c e_logf.c - e_log10.c e_log10f.c - e_pow.c e_powf.c # e_powl.c - e_rem_pio2f.c - e_remainder.c e_remainderf.c # e_remainderl.c - e_scalb.c e_scalbf.c # e_scalbl.c - e_sinh.c e_sinhf.c # e_sinhl.c - k_cos.c k_cosf.c - k_sin.c k_sinf.c - k_rem_pio2.c k_rem_pio2f.c # k_rem_pio2l.c - k_tan.c k_tanf.c - s_asinh.c s_asinhf.c # s_asinhl.c - s_atan.c s_atanf.c # s_atanl.c - s_cbrt.c s_cbrtf.c # s_cbrtl.c - s_ceil.c s_ceilf.c # s_ceill.c - s_copysign.c s_copysignf.c # s_copysignl.c - s_cos.c s_cosf.c - s_erf.c s_erff.c # s_erfl.c - s_expm1f.c s_expm1.c - s_fabs.c s_fabsf.c # s_fabsl.S - s_finite.c s_finitef.c # s_finitel.c - s_floor.c s_floorf.c # s_floorl.c - s_fma.c s_fmaf.c # s_fmal.c - s_fmax.c s_fmaxf.c # s_fmaxl.c - s_fmin.c s_fminf.c # s_fminl.c - s_fpclassify.c s_fpclassifyf.c # s_fpclassifyl.c - s_frexp.c s_frexpf.c # s_frexpl.c - s_ilogb.c s_ilogbf.c - s_isinf.c s_isinff.c # s_isinfl.c - s_ldexp.c s_ldexpf.c # s_ldexpl.c - s_llrint.c s_llrintf.c # s_llrintl.c - s_log1p.c s_log1pf.c - s_logb.c s_logbf.c # s_logbl.c - s_lrint.c s_lrintf.c # s_lrintl.c - s_lround.c s_lroundf.c - s_modf.c s_modff.c # s_modfl.c - s_nan.c s_nanf.c # s_nanl.c - s_nextafter.c s_nextafterf.c # s_nextafterl.c - s_nexttoward.c # s_nexttowardf.c s_nexttowardl.c - s_round.c s_roundf.c # s_roundl.c - s_scalbn.c s_scalbnf.c # s_scalbnl.c - s_signbit.c s_signbitf.c # s_signbitl.c - s_significand.c s_significandf.c - s_signgam.c - s_sin.c s_sinf.c # s_sinl.c - s_sincos.c s_sincosf.c - s_tan.c s_tanf.c - s_tanh.c s_tanhf.c - s_trunc.c s_truncf.c - t_exp.c - w_acos.c w_acosf.c # w_acosl.c - w_acosh.c w_acoshf.c # w_acoshl.c - w_atan2.c w_atan2f.c # w_atan2l.c - w_asin.c w_asinf.c # w_asinl.c - w_atanh.c w_atanhf.c # w_atanhl.c - w_cosh.c w_coshf.c # w_coshl.c - w_drem.c w_dremf.c # w_dreml.c - w_exp.c w_expf.c # w_expl.c - w_fmod.c w_fmodf.c # w_fmodl.c - w_hypot.c w_hypotf.c # w_hypotl.c - w_j0.c w_j0f.c - w_j1.c w_j1f.c - w_jn.c w_jnf.c - w_lgamma.c w_lgammaf.c - w_lgamma_r.c w_lgammaf_r.c - w_log.c w_logf.c # w_logl.c - w_log10.c w_log10f.c # w_log10l.c - w_pow.c w_powf.c # w_powl.c - w_remainder.c w_remainderf.c # w_remainderl.c - w_scalb.c w_scalbf.c # w_scalbl.c - w_sinh.c w_sinhf.c # w_sinhl.c - # no asm for m68k in glibc - w_sqrt.c w_sqrtf.c # w_sqrtl.c + cmp.c dbl2mpn.c divrem.c + mpn2dbl.c mpn2flt.c mpn2ldbl.c + mul.c mul_n.c + s_isinf.c s_isinff.c + s_isnan.c s_isnanf.c + s_signbit.c s_signbitf.c #s_signbitl.c + + s_nan.c s_nanf.c s_nanl.c + e_hypot.c e_hypotf.c #e_hypotl.c + w_hypot.c w_hypotf.c w_hypotl.c + s_fpclassify.c s_fpclassifyf.c + s_clog.c s_clogf.c s_clogl.c + s_log1p.c s_log1pf.c s_log1pl.c + s_csqrt.c s_csqrtf.c s_csqrtl.c + s_floor.c s_floorf.c + s_ceil.c s_ceilf.c + s_modf.c + w_powf.c e_powf.c + w_pow.c e_pow.c slowpow.c + w_exp.c e_exp.c slowexp.c + s_frexp.c s_expm1.c + dosincos.c + doasin.c + sincos32.c + branred.c + halfulp.c + mpa.c mplog.c mpexp.c + s_sin.c + s_atan.c s_atanf.c #s_atanl.c + s_tan.c + e_asin.c e_asinl.c + w_asin.c w_asinl.c + e_log10.c w_log10.c + e_logf.c e_logl.c + e_acos.c w_acos.c + e_atan2.c #e_atan2l.c + w_atan2.c w_atan2l.c mpatan2.c mpatan.c mptan.c mpsqrt.c w_sqrt.c w_sqrtf.c + e_sqrtl.c + e_fmod.c w_fmod.c + e_log.c w_log.c + e_cosh.c w_cosh.c + e_sinh.c w_sinh.c + s_cosf.c k_cosf.c + s_sinf.c k_sinf.c + s_ldexp.c s_ldexpf.c + s_scalbnf.c s_scalbn.c + s_copysign.c s_copysignf.c #s_copysignl.c + s_tanh.c s_tanf.c k_tanf.c + s_lround.c s_lroundf.c s_round.c s_roundf.c + s_rint.c s_rintf.c s_lrintf.c + e_fmodf.c w_fmodf.c + e_atan2f.c w_atan2f.c + e_rem_pio2f.c k_rem_pio2f.c + + memrchr.c ; +local architectureObject ; +for architectureObject in [ MultiArchSubDirSetup riscv64 ] { + on $(architectureObject) { + local architecture = $(TARGET_PACKAGING_ARCH) ; -MergeObject <$(TARGET_ARCH)>posix_gnu_arch_$(TARGET_ARCH)_generic.o : - $(genericSources) -; + MergeObject <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_generic.o : + $(genericSources) + ; + MergeObject <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_others.o : + e_sqrt.c + e_sqrtf.c + ; -#MergeObject <$(TARGET_ARCH)>posix_gnu_arch_$(TARGET_ARCH)_other.o : -# ; + MergeObjectFromObjects <$(architecture)>posix_gnu_arch_$(TARGET_ARCH).o + : : + <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_generic.o + <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_others.o + ; - -MergeObjectFromObjects <$(TARGET_ARCH)>posix_gnu_arch_$(TARGET_ARCH).o - : : - <$(TARGET_ARCH)>posix_gnu_arch_$(TARGET_ARCH)_generic.o - # <$(TARGET_ARCH)>posix_gnu_arch_$(TARGET_ARCH)_other.o -; - - -SEARCH on [ FGristFiles $(genericSources) ] - = [ FDirName $(HAIKU_TOP) src system libroot posix glibc arch - generic ] ; + SEARCH on [ FGristFiles $(genericSources) ] + = [ FDirName $(HAIKU_TOP) src system libroot posix + glibc arch generic ] + [ FDirName $(HAIKU_TOP) src system libroot posix + glibc arch generic longdouble 128bit ] ; + } +} diff --git a/src/system/libroot/posix/glibc/include/arch/sparc/math-underflow.h b/src/system/libroot/posix/glibc/include/arch/generic/math-underflow.h similarity index 100% rename from src/system/libroot/posix/glibc/include/arch/sparc/math-underflow.h rename to src/system/libroot/posix/glibc/include/arch/generic/math-underflow.h diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/endian.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/endian.h new file mode 100644 index 0000000000..4aaf559d4f --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/endian.h @@ -0,0 +1,5 @@ +#ifndef _ENDIAN_H +# error "Never use directly; include instead." +#endif + +#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenv.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenv.h new file mode 100644 index 0000000000..d7a01d8c57 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenv.h @@ -0,0 +1,75 @@ +/* Floating point environment, RISC-V version. + Copyright (C) 1998-2019 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 + . */ + +#ifndef _FENV_H +# error "Never use directly; include instead." +#endif + +enum + { + FE_INEXACT = +#define FE_INEXACT (0x01) + FE_INEXACT, + FE_UNDERFLOW = +#define FE_UNDERFLOW (0x02) + FE_UNDERFLOW, + FE_OVERFLOW = +#define FE_OVERFLOW (0x04) + FE_OVERFLOW, + FE_DIVBYZERO = +#define FE_DIVBYZERO (0x08) + FE_DIVBYZERO, + FE_INVALID = +#define FE_INVALID (0x10) + FE_INVALID + }; + +#define FE_ALL_EXCEPT \ + (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) + +enum + { + FE_TONEAREST = +#define FE_TONEAREST (0x0) + FE_TONEAREST, + FE_TOWARDZERO = +#define FE_TOWARDZERO (0x1) + FE_TOWARDZERO, + FE_DOWNWARD = +#define FE_DOWNWARD (0x2) + FE_DOWNWARD, + FE_UPWARD = +#define FE_UPWARD (0x3) + FE_UPWARD + }; + + +typedef unsigned int fexcept_t; +typedef unsigned int fenv_t; + +/* If the default argument is used we use this value. */ +#define FE_DFL_ENV ((__const fenv_t *) -1) + +// #if __GLIBC_USE (IEC_60559_BFP_EXT) +#if 0 +/* 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/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenvinline.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenvinline.h new file mode 100644 index 0000000000..bd1a30dfa2 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/fenvinline.h @@ -0,0 +1,9 @@ +/* This file provides inline versions of floating-pint environment + handling functions. If there were any. */ + +#ifndef __NO_MATH_INLINES + +/* Here is where the code would go. */ + +#endif + diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/floatn.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/floatn.h new file mode 100644 index 0000000000..fb31be29e6 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/floatn.h @@ -0,0 +1,97 @@ +/* Macros to control TS 18661-3 glibc features on ldbl-128 platforms. + Copyright (C) 2017-2019 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 + . */ + +#ifndef _BITS_FLOATN_H +#define _BITS_FLOATN_H + +#include +#include + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the IEEE 754 binary128 format, and this + glibc includes corresponding *f128 interfaces for it. */ +#ifndef __NO_LONG_DOUBLE_MATH +# define __HAVE_FLOAT128 1 +#else +/* glibc does not support _Float128 for platforms where long double is + normally binary128 when building with long double as binary64. + GCC's default for supported scalar modes does not support it either + in that case. */ +# define __HAVE_FLOAT128 0 +#endif + +/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct + from the default float, double and long double types in this glibc. */ +#define __HAVE_DISTINCT_FLOAT128 0 + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the right format for _Float64x, and this + glibc includes corresponding *f64x interfaces for it. */ +#define __HAVE_FLOAT64X __HAVE_FLOAT128 + +/* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format + of long double. Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has + the format of _Float128, which must be different from that of long + double. */ +#define __HAVE_FLOAT64X_LONG_DOUBLE __HAVE_FLOAT128 + +#ifndef __ASSEMBLER__ + +/* Defined to concatenate the literal suffix to be used with _Float128 + types, if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +/* The literal suffix f128 exists only since GCC 7.0. */ +# define __f128(x) x##l +# else +# define __f128(x) x##f128 +# endif +# endif + +/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +# define __CFLOAT128 _Complex long double +# else +# define __CFLOAT128 _Complex _Float128 +# endif +# endif + +/* The remaining of this file provides support for older compilers. */ +# if __HAVE_FLOAT128 + +/* The type _Float128 exists only since GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus +typedef long double _Float128; +# endif + +/* Various built-in functions do not exist before GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf128() (__builtin_huge_vall ()) +# define __builtin_inff128() (__builtin_infl ()) +# define __builtin_nanf128(x) (__builtin_nanl (x)) +# define __builtin_nansf128(x) (__builtin_nansl (x)) +# endif + +# endif + +#endif /* !__ASSEMBLER__. */ + +#include + +#endif /* _BITS_FLOATN_H */ diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h new file mode 100644 index 0000000000..4870e3c4ff --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/huge_val.h @@ -0,0 +1,8 @@ +#ifndef _MATH_H +# error "Never use directly; include instead." +#endif + + +# define HUGE_VAL (__builtin_huge_val()) +# define HUGE_VALF (__builtin_huge_valf()) +# define HUGE_VALL (__builtin_huge_vall()) diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/hwcap.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/hwcap.h new file mode 100644 index 0000000000..a991029f02 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/hwcap.h @@ -0,0 +1,51 @@ +/* Defines for bits in AT_HWCAP. + Copyright (C) 2011-2018 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 + . */ + +#if !defined(_SYS_AUXV_H) && !defined(_SYSDEPS_SYSDEP_H) +# error "Never include directly; use instead." +#endif + +#define HWCAP_SPARC_FLUSH 0x00000001 +#define HWCAP_SPARC_STBAR 0x00000002 +#define HWCAP_SPARC_SWAP 0x00000004 +#define HWCAP_SPARC_MULDIV 0x00000008 +#define HWCAP_SPARC_V9 0x00000010 +#define HWCAP_SPARC_ULTRA3 0x00000020 +#define HWCAP_SPARC_BLKINIT 0x00000040 +#define HWCAP_SPARC_N2 0x00000080 +#define HWCAP_SPARC_MUL32 0x00000100 +#define HWCAP_SPARC_DIV32 0x00000200 +#define HWCAP_SPARC_FSMULD 0x00000400 +#define HWCAP_SPARC_V8PLUS 0x00000800 +#define HWCAP_SPARC_POPC 0x00001000 +#define HWCAP_SPARC_VIS 0x00002000 +#define HWCAP_SPARC_VIS2 0x00004000 +#define HWCAP_SPARC_ASI_BLK_INIT 0x00008000 +#define HWCAP_SPARC_FMAF 0x00010000 +#define HWCAP_SPARC_VIS3 0x00020000 +#define HWCAP_SPARC_HPC 0x00040000 +#define HWCAP_SPARC_RANDOM 0x00080000 +#define HWCAP_SPARC_TRANS 0x00100000 +#define HWCAP_SPARC_FJFMAU 0x00200000 +#define HWCAP_SPARC_IMA 0x00400000 +#define HWCAP_SPARC_ASI_CACHE_SPARING \ + 0x00800000 +#define HWCAP_SPARC_PAUSE 0x01000000 +#define HWCAP_SPARC_CBCOND 0x02000000 +#define HWCAP_SPARC_CRYPTO 0x04000000 +#define HWCAP_SPARC_ADP 0x08000000 diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/link.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/link.h new file mode 100644 index 0000000000..124d9573aa --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/link.h @@ -0,0 +1,56 @@ +/* Machine-specific declarations for dynamic linker interface. RISC-V version. + Copyright (C) 2005-2019 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 + . */ + +#ifndef _LINK_H +# error "Never include directly; use instead." +#endif + +typedef struct La_riscv_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_riscv_regs; + +/* Return values for calls from PLT on RISC-V. */ +typedef struct La_riscv_retval +{ + unsigned long int lrv_a0; + unsigned long int lrv_a1; + double lrv_fa0; + double lrv_fa1; +} La_riscv_retval; + +__BEGIN_DECLS + +extern ElfW(Addr) la_riscv_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + La_riscv_regs *__regs, + unsigned int *__flags, + const char *__symname, + long int *__framesizep); +extern unsigned int la_riscv_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + const La_riscv_regs *__inregs, + La_riscv_retval *__outregs, + const char *__symname); + +__END_DECLS diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/long-double.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/long-double.h new file mode 100644 index 0000000000..df9d588df5 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/long-double.h @@ -0,0 +1,20 @@ +/* Properties of long double type. ldbl-128 version. + Copyright (C) 2016-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* long double is distinct from double, so there is nothing to + define here. */ diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h new file mode 100644 index 0000000000..13b271dec2 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathdef.h @@ -0,0 +1,31 @@ +#if !defined _MATH_H && !defined _COMPLEX_H +# error "Never use directly; include instead" +#endif + +#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF +# define _MATH_H_MATHDEF 1 + +typedef float float_t; +typedef double double_t; + +/* The values returned by `ilogb' for 0 and NaN respectively. */ +# define FP_ILOGB0 (-2147483647) +# define FP_ILOGBNAN (2147483647) + +# define INFINITY (__builtin_inff()) + +/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l} + builtins are supported. */ +# if __FP_FAST_FMA +# define FP_FAST_FMA 1 +# endif + +# if __FP_FAST_FMAF +# define FP_FAST_FMAF 1 +# endif + +# if __FP_FAST_FMAL +# define FP_FAST_FMAL 1 +# endif + +#endif /* ISO C99 */ diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathinline.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathinline.h new file mode 100644 index 0000000000..b9b3f6efab --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/mathinline.h @@ -0,0 +1,22 @@ +#ifndef _MATH_H +# error "Never use directly; include instead." +#endif + +#define __NTH(fct) __attribute__ ((__nothrow__)) fct + +#ifndef __extern_always_inline +# define __MATH_INLINE __inline +#else +# define __MATH_INLINE __extern_always_inline +#endif + +#if defined __USE_ISOC99 + +# define isgreater(x, y) __builtin_isgreater (x, y) +# define isgreaterequal(x, y) __builtin_isgreaterequal (x, y) +# define isless(x, y) __builtin_isless (x, y) +# define islessequal(x, y) __builtin_islessequal (x, y) +# define islessgreater(x, y) __builtin_islessgreater (x, y) +# define isunordered(x, y) __builtin_isunordered (x, y) + +#endif diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h new file mode 100644 index 0000000000..c17012bcaa --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/nan.h @@ -0,0 +1,5 @@ +#ifndef _MATH_H +# error "Never use directly; include instead." +#endif + +# define NAN (__builtin_nanf ("")) diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/setjmp.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/setjmp.h new file mode 100644 index 0000000000..3d37b73689 --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/setjmp.h @@ -0,0 +1,39 @@ +/* Define the machine-dependent type `jmp_buf'. RISC-V version. + Copyright (C) 2011-2019 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 + . */ + +#ifndef _RISCV_BITS_SETJMP_H +#define _RISCV_BITS_SETJMP_H + +typedef struct __jmp_buf_internal_tag + { + /* Program counter. */ + long int __pc; + /* Callee-saved registers. */ + long int __regs[12]; + /* Stack pointer. */ + long int __sp; + + /* Callee-saved floating point registers. */ +#if defined __riscv_float_abi_double + double __fpregs[12]; +#elif !defined __riscv_float_abi_soft +# error unsupported FLEN +#endif + } __jmp_buf[1]; + +#endif /* _RISCV_BITS_SETJMP_H */ diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/bits/wordsize.h b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/wordsize.h new file mode 100644 index 0000000000..0b8cd8fefd --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/bits/wordsize.h @@ -0,0 +1,29 @@ +/* Determine the wordsize from the preprocessor defines. RISC-V version. + Copyright (C) 2002-2019 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 + . */ + +#if __riscv_xlen == (__SIZEOF_POINTER__ * 8) +# define __WORDSIZE __riscv_xlen +#else +# error unsupported ABI +#endif + +#if __riscv_xlen == 64 +# define __WORDSIZE_TIME64_COMPAT32 1 +#else +# error "rv32i-based targets are not supported" +#endif diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/config.h b/src/system/libroot/posix/glibc/include/arch/riscv64/config.h new file mode 100644 index 0000000000..557c4695ed --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/config.h @@ -0,0 +1,235 @@ +//#if !defined __ASSEMBLER__ && !defined _ISOMAC && !defined __OPTIMIZE__ +//# error "glibc cannot be compiled without optimization" +//#endif + +/* Another evil option when it comes to compiling the C library is + --ffast-math since it alters the ABI. */ +#if defined __FAST_MATH__ && !defined TEST_FAST_MATH +# error "glibc must not be compiled with -ffast-math" +#endif + +/* Define if using GNU ld, with support for weak symbols in a.out, + and for symbol set and warning messages extensions in a.out and ELF. + This implies HAVE_WEAK_SYMBOLS; set by --with-gnu-ld. */ +#define HAVE_GNU_LD 1 + +/* Define if using ELF, which supports weak symbols. + This implies HAVE_ASM_WEAK_DIRECTIVE set by --with-elf. */ +#define HAVE_ELF 1 + +/* Define if using XCOFF. Set by --with-xcoff. */ +#undef HAVE_XCOFF + +/* Define if weak symbols are available via the `.weak' directive. */ +#define HAVE_ASM_WEAK_DIRECTIVE 1 + +/* Define if weak symbols are available via the `.weakext' directive. */ +#undef HAVE_ASM_WEAKEXT_DIRECTIVE + +/* Define to the assembler line separator character for multiple + assembler instructions per line. Default is `;' */ +#undef ASM_LINE_SEP + +/* Define if not using ELF, but `.init' and `.fini' sections are available. */ +#undef HAVE_INITFINI + +/* Define if __attribute__((section("foo"))) puts quotes around foo. */ +/*#define HAVE_SECTION_QUOTES 1 + [zooey]: defining this causes assembler errors, and I don't think + that any BeOS-gcc actually produces quotes in sections... +*/ +#undef HAVE_SECTION_QUOTES + +/* Define if using the GNU assembler, gas. */ +#define HAVE_GNU_AS 1 + +/* Define if the assembler supports the `.set' directive. */ +#define HAVE_ASM_SET_DIRECTIVE 1 + +/* Define to the name of the assembler's directive for + declaring a symbol global (default `.globl'). */ +#define ASM_GLOBAL_DIRECTIVE .globl + +/* Define to the prefix before `object' or `function' in the + assembler's `.type' directive, if it has one. */ +#undef ASM_TYPE_DIRECTIVE_PREFIX + +/* Define a symbol_name as a global .symbol_name for ld. */ +#undef HAVE_ASM_GLOBAL_DOT_NAME + +/* Define if the assembler generates debugging information directly. */ +#undef HAVE_CPP_ASM_DEBUGINFO + +/* Define if _Unwind_Find_FDE should be exported from glibc. */ +#undef EXPORT_UNWIND_FIND_FDE + +/* Define to use GNU libio instead of GNU stdio. + This is defined by configure under --enable-libio. */ +#define USE_IN_LIBIO 1 + +/* Define if using ELF and the assembler supports the `.previous' + directive. */ +#define HAVE_ASM_PREVIOUS_DIRECTIVE 1 + +/* Define if using ELF and the assembler supports the `.popsection' + directive. */ +#undef HAVE_ASM_POPSECTION_DIRECTIVE + +/* Define if versioning of the library is wanted. */ +#undef DO_VERSIONING + +/* Defined to the oldest ABI we support, like 2.1. */ +#undef GLIBC_OLDEST_ABI + +/* Define if static NSS modules are wanted. */ +#undef DO_STATIC_NSS + +/* Define if gcc uses DWARF2 unwind information for exception support. */ +#define HAVE_DWARF2_UNWIND_INFO 1 + +/* Define if gcc uses DWARF2 unwind information for exception support + with static variable. */ +#define HAVE_DWARF2_UNWIND_INFO_STATIC 1 + +/* Define if the compiler supports __builtin_expect. */ +#undef HAVE_BUILTIN_EXPECT + +/* Define if the compiler supports __builtin_memset. */ +#undef HAVE_BUILTIN_MEMSET + +/* Define if the __thread keyword is supported. */ +#undef HAVE___THREAD + +/* Define if the compiler supports __attribute__((tls_model(""))). */ +#undef HAVE_TLS_MODEL_ATTRIBUTE + +/* Define if the regparm attribute shall be used for local functions + (gcc on ix86 only). */ +#define USE_REGPARMS 0 + +/* Defined on PowerPC if the GCC being used has a problem with clobbering + certain registers (CR0, MQ, CTR, LR) in asm statements. */ +#undef BROKEN_PPC_ASM_CR0 + +/* Defined on SPARC if ld doesn't handle R_SPARC_WDISP22 against .hidden + symbol. sysdeps/sparc/sparc32/elf/configure. */ +#undef BROKEN_SPARC_WDISP22 + +/* Define if the linker supports the -z combreloc option. */ +#undef HAVE_Z_COMBRELOC + +/* Define if the assembler supported .protected. */ +#undef HAVE_PROTECTED + +/* Define if the assembler supported .hidden. */ +#undef HAVE_HIDDEN + +/* Define if the compiler supports __attribute__ ((visibility (...))). */ +#undef HAVE_VISIBILITY_ATTRIBUTE + +/* Define if the compiler doesn't support __attribute__ ((visibility (...))) + together with __asm__ redirection properly. */ +#undef HAVE_BROKEN_VISIBILITY_ATTRIBUTE + +/* Define if the compiler doesn't support __attribute__ ((alias (...))) + together with __asm__ redirection properly. */ +#undef HAVE_BROKEN_ALIAS_ATTRIBUTE + +/* Define if _rtld_local structure should be forced into .sdata section. */ +#undef HAVE_SDATA_SECTION + +/* Define if binutils support TLS handling. */ +#undef HAVE_TLS_SUPPORT + +/* Define if the linker supports .preinit_array/.init_array/.fini_array + sections. */ +#undef HAVE_INITFINI_ARRAY + +/* Define if the access to static and hidden variables is position independent + and does not need relocations. */ +#undef PI_STATIC_AND_HIDDEN + +/* Define this to disable the `hidden_proto' et al macros in + include/libc-symbols.h that avoid PLT slots in the shared objects. */ +#undef NO_HIDDEN + + +/* Defined to some form of __attribute__ ((...)) if the compiler supports + a different, more efficient calling convention. */ +#if USE_REGPARMS && !defined PROF && !defined __BOUNDED_POINTERS__ +# define internal_function __attribute__ ((regparm (3), stdcall)) +#endif + +/* Linux specific: minimum supported kernel version. */ +#undef __LINUX_KERNEL_VERSION + +/* Override abi-tags ABI version if necessary. */ +#undef __ABI_TAG_VERSION + +/* An extension in gcc 2.96 and up allows the subtraction of two + local labels. */ +#undef HAVE_SUBTRACT_LOCAL_LABELS + +/* bash 2.0 introduced the _XXX_GNU_nonoption_argv_flags_ variable to help + getopt determine whether a parameter is a flag or not. This features + was disabled later since it caused trouble. We are by default therefore + disabling the support as well. */ +#undef USE_NONOPTION_FLAGS + +/* Mach/Hurd specific: define if mig supports the `retcode' keyword. */ +#undef HAVE_MIG_RETCODE + +/* Mach specific: define if the `host_page_size' RPC is available. */ +#undef HAVE_HOST_PAGE_SIZE + +/* Mach/i386 specific: define if the `i386_io_perm_*' RPCs are available. */ +#undef HAVE_I386_IO_PERM_MODIFY + +/* Mach/i386 specific: define if the `i386_set_gdt' RPC is available. */ +#undef HAVE_I386_SET_GDT + +/* + */ + +#ifndef _LIBC + +/* These symbols might be defined by some sysdeps configures. + They are used only in miscellaneous generator programs, not + in compiling libc itself. */ + +/* sysdeps/generic/configure.in */ +#undef HAVE_PSIGNAL + +/* sysdeps/unix/configure.in */ +#define HAVE_STRERROR + +/* sysdeps/unix/common/configure.in */ +#undef HAVE_SYS_SIGLIST +#undef HAVE__SYS_SIGLIST +#undef HAVE__CTYPE_ +#undef HAVE___CTYPE_ +#undef HAVE___CTYPE +#undef HAVE__CTYPE__ +#undef HAVE__CTYPE +#undef HAVE__LOCP + +#endif + +/* + */ + +#ifdef _LIBC + +/* The zic and zdump programs need these definitions. */ + +#define HAVE_STRERROR 1 + +/* The locale code needs these definitions. */ + +#define HAVE_REGEX 1 + +//#define HAVE_MMAP 1 +#undef HAVE_MMAP + +#endif + diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/math_ldbl.h b/src/system/libroot/posix/glibc/include/arch/riscv64/math_ldbl.h new file mode 100644 index 0000000000..b9ff8dadaf --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/math_ldbl.h @@ -0,0 +1,79 @@ +#ifndef _MATH_PRIVATE_H_ +#error "Never use directly; include instead." +#endif + +/* A union which permits us to convert between a long double and + three 32 bit ints. */ + +typedef union +{ + long double value; + struct + { + u_int32_t lsw; + u_int32_t msw; + int sign_exponent:16; + unsigned int empty1:16; + unsigned int empty0:32; + } parts; +} ieee_long_double_shape_type; + +/* Get three 32 bit ints from a double. */ + +#define GET_LDOUBLE_WORDS(exp,ix0,ix1,d) \ +do { \ + ieee_long_double_shape_type ew_u; \ + ew_u.value = (d); \ + (exp) = ew_u.parts.sign_exponent; \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (0) + +/* Set a double from two 32 bit ints. */ + +#define SET_LDOUBLE_WORDS(d,exp,ix0,ix1) \ +do { \ + ieee_long_double_shape_type iw_u; \ + iw_u.parts.sign_exponent = (exp); \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (0) + +/* Get the more significant 32 bits of a long double mantissa. */ + +#define GET_LDOUBLE_MSW(v,d) \ +do { \ + ieee_long_double_shape_type sh_u; \ + sh_u.value = (d); \ + (v) = sh_u.parts.msw; \ +} while (0) + +/* Set the more significant 32 bits of a long double mantissa from an int. */ + +#define SET_LDOUBLE_MSW(d,v) \ +do { \ + ieee_long_double_shape_type sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ +} while (0) + +/* Get int from the exponent of a long double. */ + +#define GET_LDOUBLE_EXP(exp,d) \ +do { \ + ieee_long_double_shape_type ge_u; \ + ge_u.value = (d); \ + (exp) = ge_u.parts.sign_exponent; \ +} while (0) + +/* Set exponent of a long double from an int. */ + +#define SET_LDOUBLE_EXP(d,exp) \ +do { \ + ieee_long_double_shape_type se_u; \ + se_u.value = (d); \ + se_u.parts.sign_exponent = (exp); \ + (d) = se_u.value; \ +} while (0) diff --git a/src/system/libroot/posix/glibc/include/arch/riscv64/stackinfo.h b/src/system/libroot/posix/glibc/include/arch/riscv64/stackinfo.h new file mode 100644 index 0000000000..b5f10c6c0b --- /dev/null +++ b/src/system/libroot/posix/glibc/include/arch/riscv64/stackinfo.h @@ -0,0 +1,8 @@ +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +/* On riscv the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +#endif /* stackinfo.h */ +