DPDK 22.11.4
rte_compat.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015 Neil Horman <nhorman@tuxdriver.com>.
3 * All rights reserved.
4 */
5
6#ifndef _RTE_COMPAT_H_
7#define _RTE_COMPAT_H_
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13#ifndef ALLOW_EXPERIMENTAL_API
14
15#define __rte_experimental \
16__attribute__((deprecated("Symbol is not yet part of stable ABI"), \
17section(".text.experimental")))
18
19#else
20
21#define __rte_experimental \
22__attribute__((section(".text.experimental")))
23
24#endif
25
26#ifndef __has_attribute
27/* if no has_attribute assume no support for attribute too */
28#define __has_attribute(x) 0
29#endif
30
31#if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */
32
33#define __rte_internal \
34__attribute__((error("Symbol is not public ABI"), \
35section(".text.internal")))
36
37#elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /* For clang */
38
39#define __rte_internal \
40_Pragma("GCC diagnostic push") \
41_Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \
42__attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
43section(".text.internal"))) \
44_Pragma("GCC diagnostic pop")
45
46#else
47
48#define __rte_internal \
49__attribute__((section(".text.internal")))
50
51#endif
52
53#ifdef __cplusplus
54}
55#endif
56
57#endif /* _RTE_COMPAT_H_ */