diff options
Diffstat (limited to 'components/libdl')
| -rw-r--r-- | components/libdl/SConscript | 26 | ||||
| -rw-r--r-- | components/libdl/dlclose.c | 36 | ||||
| -rw-r--r-- | components/libdl/dlerror.c | 24 | ||||
| -rw-r--r-- | components/libdl/dlfcn.h | 16 | ||||
| -rw-r--r-- | components/libdl/dlopen.c | 39 | ||||
| -rw-r--r-- | components/libdl/dlsym.c | 35 |
6 files changed, 176 insertions, 0 deletions
diff --git a/components/libdl/SConscript b/components/libdl/SConscript new file mode 100644 index 0000000000..df7c8814ca --- /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 0000000000..e040a21396 --- /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 <rtthread.h>
+#include <rtm.h>
+
+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 0000000000..a4728a8a88 --- /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 <rtthread.h>
+#include <rtm.h>
+
+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 0000000000..eea1d02d4b --- /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 0000000000..d392a94523 --- /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 <rtthread.h>
+#include <rtm.h>
+
+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 0000000000..d1b5266ce1 --- /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 <rtthread.h>
+#include <rtm.h>
+
+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; i<module->nsym; i++)
+ {
+ if (rt_strcmp(module->symtab[i].name, symbol) == 0)
+ return (void*)module->symtab[i].addr;
+ }
+
+ return RT_NULL;
+}
+
+RTM_EXPORT(rt_dlsym)
+
|
