1 /* 2 * Copyright (c) 2006-2021, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 */ 9 10 #ifndef __RTM_H__ 11 #define __RTM_H__ 12 13 #include <rtdef.h> 14 #include <rtthread.h> 15 16 #ifdef RT_USING_MODULE 17 struct rt_module_symtab 18 { 19 void *addr; 20 const char *name; 21 }; 22 23 #if defined(_MSC_VER) 24 #pragma section("RTMSymTab$f",read) 25 #define RTM_EXPORT(symbol) \ 26 __declspec(allocate("RTMSymTab$f"))const char __rtmsym_##symbol##_name[] = "__vs_rtm_"#symbol; 27 #pragma comment(linker, "/merge:RTMSymTab=mytext") 28 29 #elif defined(__MINGW32__) 30 #define RTM_EXPORT(symbol) 31 32 #else 33 #define RTM_EXPORT(symbol) \ 34 const char __rtmsym_##symbol##_name[] rt_section(".rodata.name") = #symbol; \ 35 const struct rt_module_symtab __rtmsym_##symbol rt_section("RTMSymTab")= \ 36 { \ 37 (void *)&symbol, \ 38 __rtmsym_##symbol##_name \ 39 }; 40 #endif 41 42 #else 43 #define RTM_EXPORT(symbol) 44 #endif 45 46 #endif 47