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