Add relocation to movw/movt of external global
Change-Id: I889b55388eba0d4ef587d5247754d8ecb6ea32b3
diff --git a/include/impl/ELFObject.hxx b/include/impl/ELFObject.hxx
index 7adfde5..dd954fc 100644
--- a/include/impl/ELFObject.hxx
+++ b/include/impl/ELFObject.hxx
@@ -219,9 +219,18 @@
}
break;
case R_ARM_MOVT_ABS:
- S >>= 16;
case R_ARM_MOVW_ABS_NC:
{
+ if (S==0 && sym->getType() == STT_NOTYPE)
+ {
+ void *ext_sym = find_sym(context, sym->getName());
+ S = (Inst_t)(uintptr_t)ext_sym;
+ sym->setAddress(ext_sym);
+ }
+ if (rel->getType() == R_ARM_MOVT_ABS) {
+ S >>= 16;
+ }
+
// No need sign extend.
A = ((*inst & 0xF0000) >> 4) | (*inst & 0xFFF);
uint32_t result = (S+A);