From 38c432620f3c1df2e88dc892dbd24ef19a198bd2 Mon Sep 17 00:00:00 2001 From: qiuyiuestc Date: Wed, 21 Apr 2010 16:59:06 +0000 Subject: module developing git-svn-id: https://rt-thread.googlecode.com/svn/trunk@663 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- src/module.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/module.c') diff --git a/src/module.c b/src/module.c index 9e936713ee..af980541cb 100644 --- a/src/module.c +++ b/src/module.c @@ -255,9 +255,15 @@ struct rt_module* rt_module_load(void* module_ptr, const rt_uint8_t* name) if (IS_PROG(shdr[index]) && IS_AW(shdr[index])) { module->module_data = (rt_uint32_t)ptr; - rt_memset(ptr, 0, shdr[index].sh_size); + rt_memcpy(ptr, (rt_uint8_t*)elf_module + shdr[index].sh_offset, shdr[index].sh_size); ptr += shdr[index].sh_size; } + + /* load bss section */ + if (IS_NOPROG(shdr[index]) && IS_AW(shdr[index])) + { + rt_memset(ptr, 0, shdr[index].sh_size); + } } /* set module entry */ @@ -316,7 +322,7 @@ struct rt_module* rt_module_load(void* module_ptr, const rt_uint8_t* name) { /* relocate object in data section */ rt_module_arm_relocate(module, rel, - (Elf32_Addr)(ptr + sym->st_value), + (Elf32_Addr)(module->module_data + sym->st_value), module_addr); } } -- cgit v1.3.1