From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oo1-xc34.google.com (mail-oo1-xc34.google.com [IPv6:2607:f8b0:4864:20::c34]) by sourceware.org (Postfix) with ESMTPS id 15EFA3839045 for ; Tue, 30 Aug 2022 13:00:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 15EFA3839045 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oo1-xc34.google.com with SMTP id t15-20020a4a96cf000000b0044e0142ec24so687434ooi.8 for ; Tue, 30 Aug 2022 06:00:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:from:to:cc; bh=zv0QOiSsotOkn5KE5Dsxamw1HAZAJuWrjv4N5K7o70M=; b=K+GLFh4IstsTdX0jKOcL5qLUNqTmgd1uF9FPH5Qx3/qvj2AMAaae3e8/XVcceq61zK 2UdZj987r+Jd2cYNUZNWLj+orCfK0hu+kI1O2T92N9yoYPnHR5pTbvQqZulQ44QKeA95 yFaeYacDJPJZ1YSLRIPlyb5SrMtpKUcScnn0gXthHu2DXfEK8uHO5a1xz+PcziWePJSW /wc8fTA93ipWvpHf8N/gZZq/bSIdEpDxcod29hdl/wqzsvO8/a9Dh2s02cbNOfBHjZpE t85W+VQNkKHAsssrixxxqI4Aoh9WME5HvcuCvwSxSIU11OWyg5Brv0rPlfojnkql8Xw+ 5/Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc; bh=zv0QOiSsotOkn5KE5Dsxamw1HAZAJuWrjv4N5K7o70M=; b=OxLCiRRjr4NtrtqLVvmD7+Hglmc8W14JISusxPMWZHW1W+ODaI3R6RhCtcZ04PO90y sFx3ozZZ3lL3uVhuXOKbGlXRzr4gtq7WQ3WSObmWsDEkQNYIeabRvID3GIU5mmaiXFfH ZrNGBWbdKSoNy1gUBgB8VEzpiN5Co3yBmnZI8SIcKkE0NtE07Ubt7Dy/jiLXIxNh3hV6 36c55U8tEDDQgSDWkmdyZAUpwsd/ae8qwHsOBJIDtfxG9RDQQA149b8GG7jmboWXh95P 7n5hWOUvOFCAk5LeEcH8fxGdiTs5o6QF26cfgAUk2ngFJ6Fs77Wg4stT5zjt8aZTqfTU i8ng== X-Gm-Message-State: ACgBeo1qibLehEKALJnrUooCJcIjg+qWhz8KJlZX7lzhlGTMkcAt7FCn +u4PBOApAfzJW0U1L7DKcPFOOA== X-Google-Smtp-Source: AA6agR7j6f9lmdlRY3Mvw/b45zoRFFETx8RUIrCX/UVzRTIpXwhhBH5JA8ZxYfT3AXnLTDmSY+5C/A== X-Received: by 2002:a4a:e6d2:0:b0:445:6fb:498a with SMTP id v18-20020a4ae6d2000000b0044506fb498amr7194260oot.96.1661864403557; Tue, 30 Aug 2022 06:00:03 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c0:745e:449b:a205:b33e:4a53? ([2804:1b3:a7c0:745e:449b:a205:b33e:4a53]) by smtp.gmail.com with ESMTPSA id f31-20020a4a8922000000b0044b22632d51sm6671076ooi.2.2022.08.30.06.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 30 Aug 2022 06:00:03 -0700 (PDT) Message-ID: Date: Tue, 30 Aug 2022 10:00:00 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.2.0 Subject: Re: [PATCH 1/1] LoongArch: Add soft float support. Content-Language: en-US To: caiyinyu , 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> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20220830110204.969133-2-caiyinyu@loongson.cn> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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: 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