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