LoongArch: Fix soft-float bug about _dl_runtime_resolve{,lsx,lasx}
authorcaiyinyu <caiyinyu@loongson.cn>
Tue, 11 Jul 2023 03:57:12 +0000 (11:57 +0800)
committercaiyinyu <caiyinyu@loongson.cn>
Tue, 11 Jul 2023 03:57:12 +0000 (11:57 +0800)
sysdeps/loongarch/dl-machine.h
sysdeps/loongarch/dl-trampoline.S
sysdeps/loongarch/dl-trampoline.h

index 02ce17852c2408ba8302d4d8fda51f3a9b8c3788..51ce9af84b09d9cca6437e7801f0ea15f75cdce8 100644 (file)
@@ -270,7 +270,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
   /* If using PLTs, fill in the first two entries of .got.plt.  */
   if (l->l_info[DT_JMPREL])
     {
-#if HAVE_LOONGARCH_VEC_ASM
+#if HAVE_LOONGARCH_VEC_ASM && !defined __loongarch_soft_float
       extern void _dl_runtime_resolve_lasx (void) attribute_hidden;
       extern void _dl_runtime_resolve_lsx (void) attribute_hidden;
 #endif
@@ -300,7 +300,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
          /* This function will get called to fix up the GOT entry
             indicated by the offset on the stack, and then jump to
             the resolved address.  */
-#if HAVE_LOONGARCH_VEC_ASM
+#if HAVE_LOONGARCH_VEC_ASM && !defined __loongarch_soft_float
          if (SUPPORT_LASX)
            gotplt[0] = (ElfW(Addr)) &_dl_runtime_resolve_lasx;
          else if (SUPPORT_LSX)
index 2a561b713614cda51de56533712c78a5fed4e88a..f6ba5e443c9dceb10bf5eac891bec159aa7db852 100644 (file)
@@ -19,7 +19,7 @@
 #include <sysdep.h>
 #include <sys/asm.h>
 
-#if HAVE_LOONGARCH_VEC_ASM
+#if HAVE_LOONGARCH_VEC_ASM && !defined __loongarch_soft_float
 #define USE_LASX
 #define _dl_runtime_resolve _dl_runtime_resolve_lasx
 #include "dl-trampoline.h"
index f60634a55a8d413a865ea67fe9056e99e27bf830..02375286f8da6f1a9511059ebda73da57df1d25d 100644 (file)
 
 /* Assembler veneer called from the PLT header code for lazy loading.
    The PLT header passes its own args in t0-t2.  */
-#ifndef __loongarch_soft_float
-# ifdef USE_LASX
-#  define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG - 8 * SZXREG) & ALMASK))
-# elif defined USE_LSX
-#  define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG - 8 * SZVREG) & ALMASK))
-# else
-#  define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG) & ALMASK))
-# endif
+#ifdef USE_LASX
+# define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG - 8 * SZXREG) & ALMASK))
+#elif defined USE_LSX
+# define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG - 8 * SZVREG) & ALMASK))
+#elif !defined __loongarch_soft_float
+# define FRAME_SIZE (-((-9 * SZREG - 8 * SZFREG) & ALMASK))
 #else
 # define FRAME_SIZE (-((-9 * SZREG) & ALMASK))
 #endif