Просмотр исходного кода

Fix issue of thumb relocation R_ARM_THM_MOVT_ABS (#1723)

Huang Qi 3 лет назад
Родитель
Сommit
4e5ba6f6ef
1 измененных файлов с 5 добавлено и 0 удалено
  1. 5 0
      core/iwasm/aot/arch/aot_reloc_thumb.c

+ 5 - 0
core/iwasm/aot/arch/aot_reloc_thumb.c

@@ -409,6 +409,11 @@ apply_relocation(AOTModule *module, uint8 *target_section_addr,
                 || reloc_type == R_ARM_THM_MOVT_PREL)
                 offset >>= 16;
 
+            upper = (uint16)((upper & 0xfbf0) | ((offset & 0xf000) >> 12)
+                             | ((offset & 0x0800) >> 1));
+            lower = (uint16)((lower & 0x8f00) | ((offset & 0x0700) << 4)
+                             | (offset & 0x00ff));
+
             *(uint16 *)(target_section_addr + reloc_offset) = upper;
             *(uint16 *)(target_section_addr + reloc_offset + 2) = lower;
             break;