summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorqiuyiuestc <[email protected]>2010-04-21 16:59:06 +0000
committerqiuyiuestc <[email protected]>2010-04-21 16:59:06 +0000
commit38c432620f3c1df2e88dc892dbd24ef19a198bd2 (patch)
treefa99ba53b1b63c04aaba7d701e391bcddf88ae6b /src
parent146d88b0507c173919e1e8f8dee9f5c9157731fc (diff)
module developing
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@663 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src')
-rw-r--r--src/idle.c5
-rw-r--r--src/module.c10
-rw-r--r--src/object.c6
3 files changed, 19 insertions, 2 deletions
diff --git a/src/idle.c b/src/idle.c
index a86be531c2..2354a21aac 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -79,6 +79,11 @@ static void rt_thread_idle_entry(void* parameter)
/* release thread's stack */
rt_free(thread->stack_addr);
+#ifdef RT_USING_MODULE
+ /* release thread point in module */
+ if(thread->module_parent != RT_NULL)
+ thread->module_parent->module_thread = RT_NULL;
+#endif
/* delete thread object */
rt_object_delete((rt_object_t)thread);
}
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);
}
}
diff --git a/src/object.c b/src/object.c
index 3843326b61..e9d45f3bbc 100644
--- a/src/object.c
+++ b/src/object.c
@@ -180,8 +180,14 @@ void rt_object_init(struct rt_object* object, enum rt_object_class_type type, co
register rt_base_t temp;
struct rt_object_information* information;
+#ifdef RT_USING_MODULE
+ /* get module object information */
+ information = (rt_current_module != RT_NULL) ?
+ &rt_current_module->module_object[type] : &rt_object_container[type];
+#else
/* get object information */
information = &rt_object_container[type];
+#endif
/* init object's parameters */