diff --git a/components/libdl/SConscript b/components/libdl/SConscript new file mode 100644 index 0000000000000000000000000000000000000000..df7c8814ca63575764cbc1168e1e0eed37d7cc2c --- /dev/null +++ b/components/libdl/SConscript @@ -0,0 +1,26 @@ +Import('env') +Import('projects') +Import('RTT_ROOT') +Import('rtconfig') + +# group definitions +group = {} +group['name'] = 'libdl' +group['src'] = Glob('*.c') +group['depend'] = 'RT_USING_LIBDL' +group['CCFLAGS'] = '' +group['CPPPATH'] = [RTT_ROOT + '/components/libdl'] +group['CPPDEFINES'] = '' +group['LINKFLAGS'] = '' + +# add group to project list +projects.append(group) + +env.Append(CCFLAGS = group['CCFLAGS']) +env.Append(CPPPATH = group['CPPPATH']) +env.Append(CPPDEFINES = group['CPPDEFINES']) +env.Append(LINKFLAGS = group['LINKFLAGS']) + +objs = env.Object(group['src']) + +Return('objs') diff --git a/components/libdl/dlclose.c b/components/libdl/dlclose.c new file mode 100644 index 0000000000000000000000000000000000000000..e040a2139675e94c8b8a077b8035516067bec0b2 --- /dev/null +++ b/components/libdl/dlclose.c @@ -0,0 +1,36 @@ +/* + * File : dlclose.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-11-17 yi.qiu first version + */ + +#include +#include + +int rt_dlclose (void *handle) +{ + rt_module_t module; + + RT_ASSERT(handle != RT_NULL); + + module = (rt_module_t)handle; + module->nref--; + + if(module->nref <= 0) + { + rt_module_unload(module); + } + + return RT_TRUE; +} + +RTM_EXPORT(rt_dlclose) + diff --git a/components/libdl/dlerror.c b/components/libdl/dlerror.c new file mode 100644 index 0000000000000000000000000000000000000000..a4728a8a88df2f5479bc5e257b052173b579c8d4 --- /dev/null +++ b/components/libdl/dlerror.c @@ -0,0 +1,24 @@ +/* + * File : dlerror.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-11-17 yi.qiu first version + */ + +#include +#include + +const char *rt_dlerror(void) +{ + return "TODO"; +} + +RTM_EXPORT(rt_dlerror) + diff --git a/components/libdl/dlfcn.h b/components/libdl/dlfcn.h new file mode 100644 index 0000000000000000000000000000000000000000..eea1d02d4bd02e20be84fe50cde39d8c87037eeb --- /dev/null +++ b/components/libdl/dlfcn.h @@ -0,0 +1,16 @@ +#ifndef __DLFCN_H_ +#define __DLFCN_H_ + +#define RTLD_LAZY 0x00000 +#define RTLD_NOW 0x00001 + +#define RTLD_LOCAL 0x00000 +#define RTLD_GLOBAL 0x10000 + +#define RTLD_DEFAULT ((void*)1) +#define RTLD_NEXT ((void*)2) + +void *rt_dlopen (const char *filename, int flag); +const char *rt_dlerror(void); +void *rt_dlsym(void *handle, const char *symbol); +int rt_dlclose (void *handle); diff --git a/components/libdl/dlopen.c b/components/libdl/dlopen.c new file mode 100644 index 0000000000000000000000000000000000000000..d392a945230a32d3640b3e7676323f9a8dba9f76 --- /dev/null +++ b/components/libdl/dlopen.c @@ -0,0 +1,39 @@ +/* + * File : dlopen.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-11-17 yi.qiu first version + */ + +#include +#include + +void* rt_dlopen(const char *filename, int flags) +{ + rt_module_t module; + + RT_ASSERT(filename != RT_NULL); + + /* find in module list */ + module = rt_module_find(filename); + + if(module) + { + module->nref++; + return (void*)module; + } + else + { + module = rt_module_open(filename); + } +} + +RTM_EXPORT(rt_dlopen) + diff --git a/components/libdl/dlsym.c b/components/libdl/dlsym.c new file mode 100644 index 0000000000000000000000000000000000000000..d1b5266ce1ba035aed26be0eacfc8f220e7260f5 --- /dev/null +++ b/components/libdl/dlsym.c @@ -0,0 +1,35 @@ +/* + * File : dlsym.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-11-17 yi.qiu first version + */ + +#include +#include + +void* rt_dlsym(void *handle, const char* symbol) +{ + int i; + rt_module_t module = (rt_module_t)handle; + + RT_ASSERT(handle != RT_NULL); + + for(i=0; insym; i++) + { + if (rt_strcmp(module->symtab[i].name, symbol) == 0) + return (void*)module->symtab[i].addr; + } + + return RT_NULL; +} + +RTM_EXPORT(rt_dlsym) +