tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: www/firefox on earmv6hf



Hi,

On 2025/05/09 10:31, Jörg Sonnenberger wrote:
On 5/9/25 3:28 AM, Rin Okuyama wrote:
Hi,

I am who added this assertion to libunwind.

As described in the comment, numbering schemes for VFP
registers are different for GCC and LLVM :(

That shouldn't matter and the logic was supposed to place them in the same location, so the assert is just wrong.

Hmm, with the attached patch, the assertions are dropped.

John, can you try this patch?

// My guess is that clang-style CFI directives in inline asm
// codes compiled by gcc, or vice versa. Although the assertions
// will be removed anyway, I'm just curious about how these fire...

Thanks,
rin
diff --git a/sys/lib/libunwind/Registers.hpp b/sys/lib/libunwind/Registers.hpp
index d10c7c44548..90890ee8ee1 100644
--- a/sys/lib/libunwind/Registers.hpp
+++ b/sys/lib/libunwind/Registers.hpp
@@ -383,8 +383,6 @@ enum {
 
 #define	FLAGS_VFPV2_USED		0x1
 #define	FLAGS_VFPV3_USED		0x2
-#define	FLAGS_LEGACY_VFPV2_REGNO	0x4
-#define	FLAGS_EXTENDED_VFPV2_REGNO	0x8
 
 class Registers_arm32 {
 public:
@@ -439,14 +437,6 @@ public:
     assert(validFloatVectorRegister(num));
     const void *addr = reinterpret_cast<const void *>(addr_);
     if (num >= REGNO_ARM32_S0 && num <= REGNO_ARM32_S31) {
-      /*
-       * XXX
-       * There are two numbering schemes for VFPv2 registers: s0-s31
-       * (used by GCC) and d0-d15 (used by LLVM). We won't support both
-       * schemes simultaneously in a same frame.
-       */
-      assert((flags & FLAGS_EXTENDED_VFPV2_REGNO) == 0);
-      flags |= FLAGS_LEGACY_VFPV2_REGNO;
       if ((flags & FLAGS_VFPV2_USED) == 0) {
         lazyVFPv2();
         flags |= FLAGS_VFPV2_USED;
@@ -464,12 +454,6 @@ public:
         addr, sizeof(fpreg[0]) / 2);
     } else {
       if (num <= REGNO_ARM32_D15) {
-	/*
-	 * XXX
-	 * See XXX comment above.
-	 */
-        assert((flags & FLAGS_LEGACY_VFPV2_REGNO) == 0);
-        flags |= FLAGS_EXTENDED_VFPV2_REGNO;
         if ((flags & FLAGS_VFPV2_USED) == 0) {
           lazyVFPv2();
           flags |= FLAGS_VFPV2_USED;
@@ -496,8 +480,6 @@ private:
 
 #undef	FLAGS_VFPV2_USED
 #undef	FLAGS_VFPV3_USED
-#undef	FLAGS_LEGACY_VFPV2_REGNO
-#undef	FLAGS_EXTENDED_VFPV2_REGNO
 
 enum {
   DWARF_VAX_R0 = 0,


Home | Main Index | Thread Index | Old Index