-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The compat.h header file provided macros for two purposes: 1. it provided the macros for marking functions as rte_experimental 2. it provided the macros for doing function versioning Although these were in the same file, #1 is something that is for use by public header files, which #2 is for internal use only. Therefore, we can split these into two headers, keeping #1 in rte_compat.h and #2 in a new file rte_function_versioning.h. For "make" builds, since internal objects pick up the headers from the "include/" folder, we need to add the new header to the installation list, but for "meson" builds it does not need to be installed as it's not for public use. The rework also serves to allow the use of the function versioning macros to files that actually need them, so the use of experimental functions does not need including of the versioning code. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Reviewed-by: Andrzej Ostruszka <amo@semihalf.com>
- Loading branch information
1 parent
7edbf7d
commit dc61aa7
Showing
12 changed files
with
91 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* SPDX-License-Identifier: BSD-3-Clause | ||
* Copyright(c) 2015 Neil Horman <nhorman@tuxdriver.com>. | ||
* All rights reserved. | ||
*/ | ||
|
||
#ifndef _RTE_FUNCTION_VERSIONING_H_ | ||
#define _RTE_FUNCTION_VERSIONING_H_ | ||
#include <rte_common.h> | ||
|
||
#ifdef RTE_BUILD_SHARED_LIB | ||
|
||
/* | ||
* Provides backwards compatibility when updating exported functions. | ||
* When a symol is exported from a library to provide an API, it also provides a | ||
* calling convention (ABI) that is embodied in its name, return type, | ||
* arguments, etc. On occasion that function may need to change to accommodate | ||
* new functionality, behavior, etc. When that occurs, it is desirable to | ||
* allow for backwards compatibility for a time with older binaries that are | ||
* dynamically linked to the dpdk. To support that, the __vsym and | ||
* VERSION_SYMBOL macros are created. They, in conjunction with the | ||
* <library>_version.map file for a given library allow for multiple versions of | ||
* a symbol to exist in a shared library so that older binaries need not be | ||
* immediately recompiled. | ||
* | ||
* Refer to the guidelines document in the docs subdirectory for details on the | ||
* use of these macros | ||
*/ | ||
|
||
/* | ||
* Macro Parameters: | ||
* b - function base name | ||
* e - function version extension, to be concatenated with base name | ||
* n - function symbol version string to be applied | ||
* f - function prototype | ||
* p - full function symbol name | ||
*/ | ||
|
||
/* | ||
* VERSION_SYMBOL | ||
* Creates a symbol version table entry binding symbol <b>@DPDK_<n> to the internal | ||
* function name <b>_<e> | ||
*/ | ||
#define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n)) | ||
|
||
/* | ||
* BIND_DEFAULT_SYMBOL | ||
* Creates a symbol version entry instructing the linker to bind references to | ||
* symbol <b> to the internal symbol <b>_<e> | ||
*/ | ||
#define BIND_DEFAULT_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@@DPDK_" RTE_STR(n)) | ||
#define __vsym __attribute__((used)) | ||
|
||
/* | ||
* MAP_STATIC_SYMBOL | ||
* If a function has been bifurcated into multiple versions, none of which | ||
* are defined as the exported symbol name in the map file, this macro can be | ||
* used to alias a specific version of the symbol to its exported name. For | ||
* example, if you have 2 versions of a function foo_v1 and foo_v2, where the | ||
* former is mapped to foo@DPDK_1 and the latter is mapped to foo@DPDK_2 when | ||
* building a shared library, this macro can be used to map either foo_v1 or | ||
* foo_v2 to the symbol foo when building a static library, e.g.: | ||
* MAP_STATIC_SYMBOL(void foo(), foo_v2); | ||
*/ | ||
#define MAP_STATIC_SYMBOL(f, p) | ||
|
||
#else | ||
/* | ||
* No symbol versioning in use | ||
*/ | ||
#define VERSION_SYMBOL(b, e, n) | ||
#define __vsym | ||
#define BIND_DEFAULT_SYMBOL(b, e, n) | ||
#define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p)))) | ||
/* | ||
* RTE_BUILD_SHARED_LIB=n | ||
*/ | ||
#endif | ||
|
||
#endif /* _RTE_FUNCTION_VERSIONING_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters