diff --git a/src/module.c b/src/module.c index 23d1eae8f484b4ca600f6e72ee086f09741b7ac9..b42c39defd794f50d12ba290d141ec10759cbad4 100644 --- a/src/module.c +++ b/src/module.c @@ -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); #endif 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; default: return -1; @@ -339,7 +343,7 @@ rt_module_t rt_module_load(const rt_uint8_t* name, void* module_ptr) #ifdef RT_MODULE_DEBUG rt_kprintf("relocate symbol %s shndx %d\n", strtab + sym->st_name, sym->st_shndx); #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( module, diff --git a/src/rtm.c b/src/rtm.c index 2143f58bb306ae9d3cb62aa9a710961c005cc550..70f86facb8d6a679d0800f46c50551d8bacdc377 100644 --- a/src/rtm.c +++ b/src/rtm.c @@ -154,6 +154,7 @@ RTM_EXPORT(rt_sprintf) /* * misc interface symbol */ +extern int __aeabi_idiv; extern int __aeabi_ddiv; extern int __aeabi_dmul; extern int __aeabi_i2d; @@ -165,10 +166,12 @@ RTM_EXPORT(__aeabi_ddiv) RTM_EXPORT(__aeabi_dmul) RTM_EXPORT(__aeabi_i2d) RTM_EXPORT(__aeabi_uidiv) +RTM_EXPORT(__aeabi_idiv) RTM_EXPORT(__aeabi_uidivmod) RTM_EXPORT(__aeabi_d2iz) RTM_EXPORT(strcmp) RTM_EXPORT(rand) +RTM_EXPORT(memset) #ifdef RT_USING_NEWLIB