9 #ifndef ALLOW_EXPERIMENTAL_API 11 #ifdef RTE_TOOLCHAIN_MSVC 12 #define __rte_experimental 14 #define __rte_experimental \ 15 __attribute__((deprecated("Symbol is not yet part of stable ABI"), \ 16 section(".text.experimental"))) 21 #ifdef RTE_TOOLCHAIN_MSVC 22 #define __rte_experimental 24 #define __rte_experimental \ 25 __attribute__((section(".text.experimental"))) 30 #ifndef __has_attribute 32 #define __has_attribute(x) 0 35 #if !defined ALLOW_INTERNAL_API && __has_attribute(error) 37 #ifdef RTE_TOOLCHAIN_MSVC 38 #define __rte_internal 40 #define __rte_internal \ 41 __attribute__((error("Symbol is not public ABI"), \ 42 section(".text.internal"))) 45 #elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) 47 #ifdef RTE_TOOLCHAIN_MSVC 48 #define __rte_internal 50 #define __rte_internal \ 51 _Pragma("GCC diagnostic push") \ 52 _Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \ 53 __attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \ 54 section(".text.internal"))) \ 55 _Pragma("GCC diagnostic pop") 60 #ifdef RTE_TOOLCHAIN_MSVC 61 #define __rte_internal 63 #define __rte_internal \ 64 __attribute__((section(".text.internal")))