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"), \
16section(".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
40#define __rte_internal \
41__attribute__((error("Symbol is not public ABI"), \
42section(".text.internal")))
45#elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if)
47#ifdef RTE_TOOLCHAIN_MSVC
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"), \
54section(".text.internal"))) \
55_Pragma("GCC diagnostic pop")
60#ifdef RTE_TOOLCHAIN_MSVC
63#define __rte_internal \
64__attribute__((section(".text.internal")))