|
@@ -163,7 +163,11 @@ static int rt_module_arm_relocate(struct rt_module* module, Elf32_Rel *rel, Elf3
|
|
rt_kprintf("R_ARM_JUMP_SLOT: 0x%x -> 0x%x 0x%x\n", where, *where, sym_val);
|
|
rt_kprintf("R_ARM_JUMP_SLOT: 0x%x -> 0x%x 0x%x\n", where, *where, sym_val);
|
|
#endif
|
|
#endif
|
|
break;
|
|
break;
|
|
- case R_ARM_RELATIVE:
|
|
|
|
|
|
+ case R_ARM_RELATIVE:
|
|
|
|
+ *where += (Elf32_Addr)sym_val;
|
|
|
|
+#ifdef RT_MODULE_DEBUG
|
|
|
|
+ rt_kprintf("R_ARM_RELATIVE: 0x%x -> 0x%x 0x%x\n", where, *where, sym_val);
|
|
|
|
+#endif
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
return -1;
|
|
return -1;
|
|
@@ -339,7 +343,7 @@ rt_module_t rt_module_load(const rt_uint8_t* name, void* module_ptr)
|
|
#ifdef RT_MODULE_DEBUG
|
|
#ifdef RT_MODULE_DEBUG
|
|
rt_kprintf("relocate symbol %s shndx %d\n", strtab + sym->st_name, sym->st_shndx);
|
|
rt_kprintf("relocate symbol %s shndx %d\n", strtab + sym->st_name, sym->st_shndx);
|
|
#endif
|
|
#endif
|
|
- if(sym->st_shndx != SHT_NULL || ELF_ST_TYPE(sym->st_info) == STB_LOCAL )
|
|
|
|
|
|
+ if((sym->st_shndx != SHT_NULL) || (ELF_ST_BIND(sym->st_info) == STB_LOCAL))
|
|
{
|
|
{
|
|
rt_module_arm_relocate(
|
|
rt_module_arm_relocate(
|
|
module,
|
|
module,
|