13 #ifndef ALLOW_EXPERIMENTAL_API
15 #ifdef RTE_TOOLCHAIN_MSVC
16 #define __rte_experimental
18 #define __rte_experimental \
19 __attribute__((deprecated("Symbol is not yet part of stable ABI"), \
20 section(".text.experimental")))
25 #ifdef RTE_TOOLCHAIN_MSVC
26 #define __rte_experimental
28 #define __rte_experimental \
29 __attribute__((section(".text.experimental")))
34 #ifndef __has_attribute
36 #define __has_attribute(x) 0
39 #if !defined ALLOW_INTERNAL_API && __has_attribute(error)
41 #ifdef RTE_TOOLCHAIN_MSVC
42 #define __rte_internal
44 #define __rte_internal \
45 __attribute__((error("Symbol is not public ABI"), \
46 section(".text.internal")))
49 #elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if)
51 #ifdef RTE_TOOLCHAIN_MSVC
52 #define __rte_internal
54 #define __rte_internal \
55 _Pragma("GCC diagnostic push") \
56 _Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \
57 __attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
58 section(".text.internal"))) \
59 _Pragma("GCC diagnostic pop")
64 #ifdef RTE_TOOLCHAIN_MSVC
65 #define __rte_internal
67 #define __rte_internal \
68 __attribute__((section(".text.internal")))