xref: /nrf52832-nimble/rt-thread/components/libc/libdl/dlmodule.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2018/08/11     Bernard      the first version
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #ifndef RT_DL_MODULE_H__
12*10465441SEvalZero #define RT_DL_MODULE_H__
13*10465441SEvalZero 
14*10465441SEvalZero #include <rtthread.h>
15*10465441SEvalZero 
16*10465441SEvalZero #define RT_DLMODULE_STAT_INIT       0x00
17*10465441SEvalZero #define RT_DLMODULE_STAT_RUNNING    0x01
18*10465441SEvalZero #define RT_DLMODULE_STAT_CLOSING    0x02
19*10465441SEvalZero #define RT_DLMODULE_STAT_CLOSED     0x03
20*10465441SEvalZero 
21*10465441SEvalZero struct rt_dlmodule;
22*10465441SEvalZero typedef void* rt_addr_t;
23*10465441SEvalZero 
24*10465441SEvalZero typedef void (*rt_dlmodule_init_func_t)(struct rt_dlmodule *module);
25*10465441SEvalZero typedef void (*rt_dlmodule_cleanup_func_t)(struct rt_dlmodule *module);
26*10465441SEvalZero typedef int  (*rt_dlmodule_entry_func_t)(int argc, char** argv);
27*10465441SEvalZero 
28*10465441SEvalZero struct rt_dlmodule
29*10465441SEvalZero {
30*10465441SEvalZero     struct rt_object parent;
31*10465441SEvalZero     rt_list_t object_list;  /* objects inside this module */
32*10465441SEvalZero 
33*10465441SEvalZero     rt_uint8_t stat;        /* status of module */
34*10465441SEvalZero 
35*10465441SEvalZero     /* main thread of this module */
36*10465441SEvalZero     rt_uint16_t priority;
37*10465441SEvalZero     rt_uint32_t stack_size;
38*10465441SEvalZero     struct rt_thread *main_thread;
39*10465441SEvalZero     /* the return code */
40*10465441SEvalZero     int ret_code;
41*10465441SEvalZero 
42*10465441SEvalZero     /* VMA base address for the first LOAD segment */
43*10465441SEvalZero     rt_uint32_t vstart_addr;
44*10465441SEvalZero 
45*10465441SEvalZero     /* module entry, RT_NULL for dynamic library */
46*10465441SEvalZero     rt_dlmodule_entry_func_t  entry_addr;
47*10465441SEvalZero     char *cmd_line;         /* command line */
48*10465441SEvalZero 
49*10465441SEvalZero     rt_addr_t   mem_space;  /* memory space */
50*10465441SEvalZero     rt_uint32_t mem_size;   /* sizeof memory space */
51*10465441SEvalZero 
52*10465441SEvalZero     /* init and clean function */
53*10465441SEvalZero     rt_dlmodule_init_func_t     init_func;
54*10465441SEvalZero     rt_dlmodule_cleanup_func_t  cleanup_func;
55*10465441SEvalZero 
56*10465441SEvalZero     rt_uint16_t nref;       /* reference count */
57*10465441SEvalZero 
58*10465441SEvalZero     rt_uint16_t nsym;       /* number of symbols in the module */
59*10465441SEvalZero     struct rt_module_symtab *symtab;    /* module symbol table */
60*10465441SEvalZero };
61*10465441SEvalZero 
62*10465441SEvalZero struct rt_dlmodule *dlmodule_create(void);
63*10465441SEvalZero rt_err_t dlmodule_destroy(struct rt_dlmodule* module);
64*10465441SEvalZero 
65*10465441SEvalZero struct rt_dlmodule *dlmodule_self(void);
66*10465441SEvalZero 
67*10465441SEvalZero struct rt_dlmodule *dlmodule_load(const char* pgname);
68*10465441SEvalZero struct rt_dlmodule *dlmodule_exec(const char* pgname, const char* cmd, int cmd_size);
69*10465441SEvalZero void dlmodule_exit(int ret_code);
70*10465441SEvalZero 
71*10465441SEvalZero struct rt_dlmodule *dlmodule_find(const char *name);
72*10465441SEvalZero 
73*10465441SEvalZero rt_uint32_t dlmodule_symbol_find(const char *sym_str);
74*10465441SEvalZero 
75*10465441SEvalZero #endif
76