From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 385433851147 for ; Wed, 31 Aug 2022 12:00:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 385433851147 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from [10.20.4.187] (unknown [10.20.4.187]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxbWtrTQ9jUNgNAA--.14149S3; Wed, 31 Aug 2022 20:00:43 +0800 (CST) From: caiyinyu Subject: Re: [PATCH 1/1] LoongArch: Add soft float support. To: Adhemerval Zanella Netto , libc-alpha@sourceware.org, joseph_myers@mentor.com, carlos@redhat.com, i.swmail@xen0n.name, xry111@xry111.site Cc: xuchenghua@loongson.cn References: <20220830110204.969133-1-caiyinyu@loongson.cn> <20220830110204.969133-2-caiyinyu@loongson.cn> Message-ID: Date: Wed, 31 Aug 2022 20:00:43 +0800 User-Agent: Mozilla/5.0 (X11; Linux mips64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8CxbWtrTQ9jUNgNAA--.14149S3 X-Coremail-Antispam: 1UD129KBjvAXoW3uw1UWw47CrWDZF1rKw1Utrb_yoW8AFWfZo WrJFW7Xw1xCr4akrs0ka90qry2gr1jkw4UAay7Zan8CF48AF1UGFW8C3Z09rZxX3s8Wr43 Ga4agrZrArWIgrn8n29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUY77k0a2IF6w4kM7kC6x804xWl14x267AKxVW8JVW5JwAFc2x0 x2IEx4CE42xK8VAvwI8IcIk0rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj4 1l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0 I7IYx2IY6xkF7I0E14v26r4j6F4UM28EF7xvwVC2z280aVAFwI0_Cr1j6rxdM28EF7xvwV C2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC 0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr 1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcVAKI48JMxk0xIA0c2IEe2xFo4CEbIxvr21l c2xSY4AK6svPMxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I 8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWU twCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x 0267AKxVWUJVW8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_ Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7IU5 6c_DUUUUU== X-CM-SenderInfo: 5fdl5xhq1xqz5rrqw2lrqou0/ X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile index 41c3449670..746d4c2c8f 100644 --- a/sysdeps/loongarch/Makefile +++ b/sysdeps/loongarch/Makefile @@ -5,11 +5,3 @@ 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 Why move this to be Linux specific? It won't matter in the end though. The rest looks ok. I did this to follow the example of other architectures (like riscv arc aarch64 arm mips...) though there seems to be no difference. I need help to include this patch since there are some changes in common file build-many-glibcs.py. 在 2022/8/30 下午9:00, Adhemerval Zanella Netto 写道: > > On 30/08/22 08:02, caiyinyu wrote: >> --- >> scripts/build-many-glibcs.py | 4 ++ >> sysdeps/loongarch/Makefile | 8 --- >> sysdeps/loongarch/__longjmp.S | 2 + >> sysdeps/loongarch/bits/setjmp.h | 3 ++ >> sysdeps/loongarch/dl-trampoline.S | 11 +++- >> sysdeps/loongarch/fpu_control.h | 13 +++++ >> sysdeps/loongarch/nofpu/Implies | 1 + >> .../loongarch/nofpu/math-tests-exceptions.h | 28 ++++++++++ >> sysdeps/loongarch/nofpu/math-tests-rounding.h | 27 ++++++++++ >> sysdeps/loongarch/preconfigure | 1 - >> sysdeps/loongarch/preconfigure.ac | 1 - >> sysdeps/loongarch/setjmp.S | 2 + >> sysdeps/unix/sysv/linux/loongarch/Makefile | 9 ++++ >> sysdeps/unix/sysv/linux/loongarch/configure | 51 +++++++++++++++++-- >> .../unix/sysv/linux/loongarch/configure.ac | 22 ++++++-- >> .../unix/sysv/linux/loongarch/ldd-rewrite.sed | 2 +- >> .../unix/sysv/linux/loongarch/shlib-versions | 2 + >> 17 files changed, 168 insertions(+), 19 deletions(-) >> create mode 100644 sysdeps/loongarch/nofpu/Implies >> create mode 100644 sysdeps/loongarch/nofpu/math-tests-exceptions.h >> create mode 100644 sysdeps/loongarch/nofpu/math-tests-rounding.h >> >> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py >> index 98f02104a2..db632b18a3 100755 >> --- a/scripts/build-many-glibcs.py >> +++ b/scripts/build-many-glibcs.py >> @@ -222,6 +222,10 @@ class Context(object): >> os_name='linux-gnu', >> variant='lp64d', >> gcc_cfg=['--with-abi=lp64d','--disable-multilib']) >> + self.add_config(arch='loongarch64', >> + os_name='linux-gnu', >> + variant='lp64s', >> + gcc_cfg=['--with-abi=lp64s','--disable-multilib']) >> self.add_config(arch='m68k', >> os_name='linux-gnu', >> gcc_cfg=['--disable-multilib']) >> diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile >> index 41c3449670..746d4c2c8f 100644 >> --- a/sysdeps/loongarch/Makefile >> +++ b/sysdeps/loongarch/Makefile >> @@ -5,11 +5,3 @@ 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 > Why move this to be Linux specific? It won't matter in the end though. > > The rest looks ok. > >> diff --git a/sysdeps/loongarch/__longjmp.S b/sysdeps/loongarch/__longjmp.S >> index 4207376f5e..d6a99fcbc8 100644 >> --- a/sysdeps/loongarch/__longjmp.S >> +++ b/sysdeps/loongarch/__longjmp.S >> @@ -41,6 +41,7 @@ ENTRY (__longjmp) >> 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 >> @@ -49,6 +50,7 @@ ENTRY (__longjmp) >> 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 a0, a0, a1 # a0 = (a1 == 0) ? 1 : a1 >> diff --git a/sysdeps/loongarch/bits/setjmp.h b/sysdeps/loongarch/bits/setjmp.h >> index 42f8fa7657..8b323ad2b6 100644 >> --- a/sysdeps/loongarch/bits/setjmp.h >> +++ b/sysdeps/loongarch/bits/setjmp.h >> @@ -31,8 +31,11 @@ typedef struct __jmp_buf_internal_tag >> 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]; >> >> diff --git a/sysdeps/loongarch/dl-trampoline.S b/sysdeps/loongarch/dl-trampoline.S >> index ad8ab0fda7..9a8f580971 100644 >> --- a/sysdeps/loongarch/dl-trampoline.S >> +++ b/sysdeps/loongarch/dl-trampoline.S >> @@ -21,8 +21,11 @@ >> >> /* Assembler veneer called from the PLT header code for lazy loading. >> The PLT header passes its own args in t0-t2. */ >> - >> -# define FRAME_SIZE (-((-10 * SZREG - 8 * SZFREG) & ALMASK)) >> +#ifdef __loongarch_soft_float >> +#define FRAME_SIZE (-((-10 * SZREG) & ALMASK)) >> +#else >> +#define FRAME_SIZE (-((-10 * SZREG - 8 * SZFREG) & ALMASK)) >> +#endif >> >> ENTRY (_dl_runtime_resolve) >> >> @@ -39,6 +42,7 @@ ENTRY (_dl_runtime_resolve) >> 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 >> @@ -47,6 +51,7 @@ ENTRY (_dl_runtime_resolve) >> 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 */ >> SLLI a1, t1, 1 >> @@ -67,6 +72,7 @@ ENTRY (_dl_runtime_resolve) >> 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 >> @@ -75,6 +81,7 @@ ENTRY (_dl_runtime_resolve) >> 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 >> >> ADDI sp, sp, FRAME_SIZE >> >> diff --git a/sysdeps/loongarch/fpu_control.h b/sysdeps/loongarch/fpu_control.h >> index 1cccc933a5..f482395dba 100644 >> --- a/sysdeps/loongarch/fpu_control.h >> +++ b/sysdeps/loongarch/fpu_control.h >> @@ -51,6 +51,17 @@ >> >> #include >> >> +#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 */ >> @@ -86,4 +97,6 @@ extern void __loongarch_fpu_setcw (fpu_control_t) __THROW; >> /* 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/nofpu/Implies b/sysdeps/loongarch/nofpu/Implies >> new file mode 100644 >> index 0000000000..abcbadb25f >> --- /dev/null >> +++ b/sysdeps/loongarch/nofpu/Implies >> @@ -0,0 +1 @@ >> +ieee754/soft-fp >> diff --git a/sysdeps/loongarch/nofpu/math-tests-exceptions.h b/sysdeps/loongarch/nofpu/math-tests-exceptions.h >> new file mode 100644 >> index 0000000000..b22bb01d0e >> --- /dev/null >> +++ b/sysdeps/loongarch/nofpu/math-tests-exceptions.h >> @@ -0,0 +1,28 @@ >> +/* Configuration for math tests: support for exceptions. >> + 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 >> + . */ >> + >> +#ifndef LOONGARCH_NOFPU_MATH_TESTS_EXCEPTIONS_H >> +#define LOONGARCH_NOFPU_MATH_TESTS_EXCEPTIONS_H 1 >> + >> +/* We support setting floating-point exception flags on hard-float >> + targets. These are not supported on soft-float targets. */ >> +#define EXCEPTION_TESTS_float 0 >> +#define EXCEPTION_TESTS_double 0 >> +#define EXCEPTION_TESTS_long_double 0 >> + >> +#endif /* math-tests-exceptions.h. */ >> diff --git a/sysdeps/loongarch/nofpu/math-tests-rounding.h b/sysdeps/loongarch/nofpu/math-tests-rounding.h >> new file mode 100644 >> index 0000000000..5322e481b9 >> --- /dev/null >> +++ b/sysdeps/loongarch/nofpu/math-tests-rounding.h >> @@ -0,0 +1,27 @@ >> +/* Configuration for math tests: rounding mode support. >> + 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 >> + . */ >> + >> +#ifndef LOONGARCH_NOFPU_MATH_TESTS_ROUNDING_H >> +#define LOONGARCH_NOFPU_MATH_TESTS_ROUNDING_H 1 >> + >> +/* On soft-float targets we only support the "to nearest" rounding mode. */ >> +#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) >> +#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) >> +#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) >> + >> +#endif /* math-tests-rounding.h. */ >> diff --git a/sysdeps/loongarch/preconfigure b/sysdeps/loongarch/preconfigure >> index 118963cda6..f2d1a0d87b 100644 >> --- a/sysdeps/loongarch/preconfigure >> +++ b/sysdeps/loongarch/preconfigure >> @@ -12,7 +12,6 @@ loongarch*) >> 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 >> diff --git a/sysdeps/loongarch/preconfigure.ac b/sysdeps/loongarch/preconfigure.ac >> index 1aba743c15..67e4357013 100644 >> --- a/sysdeps/loongarch/preconfigure.ac >> +++ b/sysdeps/loongarch/preconfigure.ac >> @@ -12,7 +12,6 @@ loongarch*) >> case "$float_abi" in >> soft) >> abi_flen=0 >> - AC_MSG_ERROR([loongarch does not yet support soft floating-point ABI!!], 1) >> ;; >> single) >> AC_MSG_ERROR([glibc does not yet support the single floating-point ABI!!], 1) >> diff --git a/sysdeps/loongarch/setjmp.S b/sysdeps/loongarch/setjmp.S >> index 298bb02a82..9b1cdea48c 100644 >> --- a/sysdeps/loongarch/setjmp.S >> +++ b/sysdeps/loongarch/setjmp.S >> @@ -50,6 +50,7 @@ ENTRY (__sigsetjmp) >> 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 >> @@ -58,6 +59,7 @@ ENTRY (__sigsetjmp) >> 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 >> diff --git a/sysdeps/unix/sysv/linux/loongarch/Makefile b/sysdeps/unix/sysv/linux/loongarch/Makefile >> index 91bd35800a..c84a1762ed 100644 >> --- a/sysdeps/unix/sysv/linux/loongarch/Makefile >> +++ b/sysdeps/unix/sysv/linux/loongarch/Makefile >> @@ -1,3 +1,12 @@ >> ifeq ($(subdir),stdlib) >> gen-as-const-headers += ucontext_i.sym >> endif >> + >> +abi-variants := lp64s lp64d >> + >> +ifeq (,$(filter $(default-abi),$(abi-variants))) >> +$(error Unknown ABI $(default-abi), must be one of $(abi-variants)) >> +endif >> + >> +abi-lp64s-condition := __WORDSIZE == 64 && defined __loongarch_soft_float >> +abi-lp64d-condition := __WORDSIZE == 64 && defined __loongarch_double_float >> diff --git a/sysdeps/unix/sysv/linux/loongarch/configure b/sysdeps/unix/sysv/linux/loongarch/configure >> index 60a410303e..28216c165e 100644 >> --- a/sysdeps/unix/sysv/linux/loongarch/configure >> +++ b/sysdeps/unix/sysv/linux/loongarch/configure >> @@ -151,11 +151,56 @@ if test $libc_cv_loongarch_int_abi = no; then >> as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5 >> fi >> >> +libc_cv_loongarch_float_abi=no >> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext >> +/* end confdefs.h. */ >> +#ifdef __loongarch_double_float >> + yes >> + #endif >> + >> +_ACEOF >> +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | >> + $EGREP "yes" >/dev/null 2>&1; then : >> + libc_cv_loongarch_float_abi=d >> +fi >> +rm -f conftest* >> + >> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext >> +/* end confdefs.h. */ >> +#ifdef __loongarch_soft_float >> + yes >> + #endif >> + >> +_ACEOF >> +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | >> + $EGREP "yes" >/dev/null 2>&1; then : >> + libc_cv_loongarch_float_abi=s >> +fi >> +rm -f conftest* >> + >> +if test "$libc_cv_loongarch_float_abi" = no; then >> + as_fn_error $? "Unable to determine floating-point ABI" "$LINENO" 5 >> +fi >> + >> config_vars="$config_vars >> -default-abi = $libc_cv_loongarch_int_abi" >> +default-abi = $libc_cv_loongarch_int_abi$libc_cv_loongarch_float_abi" >> >> -case $libc_cv_loongarch_int_abi in >> -lp64) >> +case $libc_cv_loongarch_int_abi$libc_cv_loongarch_float_abi in >> +lp64s) >> + test -n "$libc_cv_slibdir" || >> +case "$prefix" in >> +/usr | /usr/) >> + libc_cv_slibdir='/lib64/sf' >> + libc_cv_rtlddir='/lib64' >> + if test "$libdir" = '${exec_prefix}/lib'; then >> + libdir='${exec_prefix}/lib64/sf'; >> + # Locale data can be shared between 32-bit and 64-bit libraries. >> + libc_cv_complocaledir='${exec_prefix}/lib/locale' >> + fi >> + ;; >> +esac >> + ;; >> +lp64d) >> test -n "$libc_cv_slibdir" || >> case "$prefix" in >> /usr | /usr/) >> diff --git a/sysdeps/unix/sysv/linux/loongarch/configure.ac b/sysdeps/unix/sysv/linux/loongarch/configure.ac >> index 7de1e95ff6..04e9150a9b 100644 >> --- a/sysdeps/unix/sysv/linux/loongarch/configure.ac >> +++ b/sysdeps/unix/sysv/linux/loongarch/configure.ac >> @@ -11,10 +11,26 @@ 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]) >> +libc_cv_loongarch_float_abi=no >> +AC_EGREP_CPP(yes, [#ifdef __loongarch_double_float >> + yes >> + #endif >> + ],libc_cv_loongarch_float_abi=d) >> +AC_EGREP_CPP(yes, [#ifdef __loongarch_soft_float >> + yes >> + #endif >> + ],libc_cv_loongarch_float_abi=s) >> +if test "$libc_cv_loongarch_float_abi" = no; then >> + AC_MSG_ERROR([Unable to determine floating-point ABI]) >> +fi >> + >> +LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi$libc_cv_loongarch_float_abi]) >> >> -case $libc_cv_loongarch_int_abi in >> -lp64) >> +case $libc_cv_loongarch_int_abi$libc_cv_loongarch_float_abi in >> +lp64s) >> + LIBC_SLIBDIR_RTLDDIR([lib64/sf], [lib64]) >> + ;; >> +lp64d) >> LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) >> ;; >> esac >> diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed >> index f8976fd239..cdbe5c3dc5 100644 >> --- a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed >> +++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed >> @@ -1 +1 @@ >> -s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_ >> +s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/ld-linux-loongarch-\)\(lp\|ilp\)\(64\|32\)\(d\|s\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\264\4lp64d\8 \264\4lp64s\8"_ >> diff --git a/sysdeps/unix/sysv/linux/loongarch/shlib-versions b/sysdeps/unix/sysv/linux/loongarch/shlib-versions >> index dc2220b4be..5f40e7f5ec 100644 >> --- a/sysdeps/unix/sysv/linux/loongarch/shlib-versions >> +++ b/sysdeps/unix/sysv/linux/loongarch/shlib-versions >> @@ -2,6 +2,8 @@ DEFAULT GLIBC_2.36 >> >> %if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64 >> ld=ld-linux-loongarch-lp64d.so.1 >> +%elif LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 0 >> +ld=ld-linux-loongarch-lp64s.so.1 >> %else >> %error cannot determine ABI >> %endif