Re: www/firefox on earmv6hf

Rin Okuyama <[email protected]> Sun, 11 May 2025 13:24:03 +0900
Newsgroups gmane.os.netbsd.devel.packages,gmane.os.netbsd.devel.toolchain
Message-ID <[email protected]>
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
libunwind_arm_20250511.patch (text/plain, 1.5 KB)
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,