diff options
| author | qiuyiuestc <[email protected]> | 2010-12-13 00:33:07 +0000 |
|---|---|---|
| committer | qiuyiuestc <[email protected]> | 2010-12-13 00:33:07 +0000 |
| commit | b7e62fb73391b9d4965e64492838b438dbdf725c (patch) | |
| tree | d525008cb605c137e622cc478f2baf9d8948ed42 | |
| parent | 0c7ed9c903589ec44b651b9aad5fc1a5aa793704 (diff) | |
update elf loader for R_ARM_RELATIVE type relocation
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1196 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | src/module.c | 6 | ||||
| -rw-r--r-- | src/module.h | 1 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/module.c b/src/module.c index 16a3a21d76..23d1eae8f4 100644 --- a/src/module.c +++ b/src/module.c @@ -163,6 +163,8 @@ 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: + break; default: return -1; } @@ -337,14 +339,14 @@ 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 != 0) + if(sym->st_shndx != SHT_NULL || ELF_ST_TYPE(sym->st_info) == STB_LOCAL ) { rt_module_arm_relocate( module, rel, (Elf32_Addr)(module->module_space + sym->st_value)); } - else if(linked == RT_FALSE) + else if(!linked) { Elf32_Addr addr; #ifdef RT_MODULE_DEBUG diff --git a/src/module.h b/src/module.h index 6d4a97754f..1adef7b740 100644 --- a/src/module.h +++ b/src/module.h @@ -161,6 +161,7 @@ typedef struct { #define R_ARM_ABS32 2
#define R_ARM_GLOB_DAT 21
#define R_ARM_JUMP_SLOT 22
+#define R_ARM_RELATIVE 23
#define R_ARM_PLT32 27
#define R_ARM_CALL 28
#define R_ARM_JUMP24 29
|
