Module Name:    src
Committed By:   rin
Date:           Mon May 31 11:57:28 UTC 2021

Modified Files:
        src/sys/lib/libunwind: Registers.hpp

Log Message:
PR toolchain/55837

Fix logic error in copyFloatVectorRegister() for arm; copy s0-s31 or
d0-d31, not both.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/lib/libunwind/Registers.hpp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/lib/libunwind/Registers.hpp
diff -u src/sys/lib/libunwind/Registers.hpp:1.25 src/sys/lib/libunwind/Registers.hpp:1.26
--- src/sys/lib/libunwind/Registers.hpp:1.25	Mon May 31 11:54:01 2021
+++ src/sys/lib/libunwind/Registers.hpp	Mon May 31 11:57:28 2021
@@ -400,19 +400,20 @@ public:
 #endif
       memcpy((uint8_t *)(fpreg + dnum) + part * sizeof(fpreg[0]) / 2,
         addr, sizeof(fpreg[0]) / 2);
-    }
-    if (num <= REGNO_ARM32_D15) {
-      if ((flags & FLAGS_VFPV2_USED) == 0) {
-        lazyVFPv2();
-        flags |= FLAGS_VFPV2_USED;
-      }
     } else {
-      if ((flags & FLAGS_VFPV3_USED) == 0) {
-        lazyVFPv3();
-        flags |= FLAGS_VFPV3_USED;
+      if (num <= REGNO_ARM32_D15) {
+        if ((flags & FLAGS_VFPV2_USED) == 0) {
+          lazyVFPv2();
+          flags |= FLAGS_VFPV2_USED;
+        }
+      } else {
+        if ((flags & FLAGS_VFPV3_USED) == 0) {
+          lazyVFPv3();
+          flags |= FLAGS_VFPV3_USED;
+        }
       }
+      memcpy(fpreg + (num - REGNO_ARM32_D0), addr, sizeof(fpreg[0]));
     }
-    memcpy(fpreg + (num - REGNO_ARM32_D0), addr, sizeof(fpreg[0]));
   }
 
   __dso_hidden void lazyVFPv2();

Reply via email to