From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 4DEC2C86E for ; Fri, 26 Jun 2015 12:13:18 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga103.fm.intel.com with ESMTP; 26 Jun 2015 03:13:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,683,1427785200"; d="scan'208";a="514590277" Received: from irsmsx104.ger.corp.intel.com ([163.33.3.159]) by FMSMGA003.fm.intel.com with ESMTP; 26 Jun 2015 03:13:16 -0700 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.117]) by IRSMSX104.ger.corp.intel.com ([169.254.5.171]) with mapi id 14.03.0224.002; Fri, 26 Jun 2015 11:13:15 +0100 From: "Gajdzica, MaciejX T" To: Neil Horman , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCHv3 2/3] rte_compat: Add MAP_STATIC_SYMBOL macro Thread-Index: AQHQr1RUDdEL8YbJVEuWAazEn1sjF52+kkng Date: Fri, 26 Jun 2015 10:13:15 +0000 Message-ID: <9CC680510C0AC140A846FED2EF7F9628138487D9@IRSMSX102.ger.corp.intel.com> References: <1435088014-18973-1-git-send-email-nhorman@tuxdriver.com> <1435242949-31520-1-git-send-email-nhorman@tuxdriver.com> <1435242949-31520-2-git-send-email-nhorman@tuxdriver.com> In-Reply-To: <1435242949-31520-2-git-send-email-nhorman@tuxdriver.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCHv3 2/3] rte_compat: Add MAP_STATIC_SYMBOL macro X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jun 2015 10:13:19 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Neil Horman > Sent: Thursday, June 25, 2015 4:36 PM > To: dev@dpdk.org > Subject: [dpdk-dev] [PATCHv3 2/3] rte_compat: Add MAP_STATIC_SYMBOL > macro >=20 > It was pointed out in my examples that doing shared library symbol versio= ning by > partitioning symbols to version specific functions (as opposed to leaving= the > latest symol version at the base symbol name), neglects to take into acco= unt > static builds. Add a macro to handle that. If you choose a versioning a= pproach > that uniquely names every version of the symbol, then this macro lets you= map > your symbol choice to the base name when building a static library >=20 > Also, while I'm at it, since we're documenting this in the guide, take th= e > abbreviated example out of the header >=20 > Signed-off-by: Neil Horman > CC: thomas.monjalon@6wind.com Acked-by: Maciej Gajdzica > --- > lib/librte_compat/rte_compat.h | 35 ++++++++++++++++++----------------- > 1 file changed, 18 insertions(+), 17 deletions(-) >=20 > diff --git a/lib/librte_compat/rte_compat.h b/lib/librte_compat/rte_compa= t.h > index 75920a1..d7768d5 100644 > --- a/lib/librte_compat/rte_compat.h > +++ b/lib/librte_compat/rte_compat.h > @@ -49,22 +49,8 @@ > * Assumptions: DPDK 2.(X) contains a function int foo(char *string) > * DPDK 2.(X+1) needs to change foo to be int foo(int index= ) > * > - * To accomplish this: > - * 1) Edit lib//library_version.map to add a DPDK_2.(X+1) node,= in > which > - * foo is exported as a global symbol. > - * > - * 2) rename the existing function int foo(char *string) to > - * int foo_v20(char *string) > - * > - * 3) Add this macro immediately below the function > - * VERSION_SYMBOL(foo, _v20, 2.0); > - * > - * 4) Implement a new version of foo. > - * char foo(int value, int otherval) { ...} > - * > - * 5) Mark the newest version as the default version > - * BIND_DEFAULT_SYMBOL(foo, _v21, 2.1); > - * > + * Refer to the guidelines document in the docs subdirectory for > + details on the > + * use of these macros > */ >=20 > /* > @@ -72,6 +58,8 @@ > * 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 > */ >=20 > /* > @@ -96,6 +84,19 @@ > #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)) >=20 > +/* > + * 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 > @@ -104,7 +105,7 @@ > #define __vsym > #define BASE_SYMBOL(b, n) > #define BIND_DEFAULT_SYMBOL(b, e, n) > - > +#define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias( RTE_STR(p)))) > /* > * RTE_BUILD_SHARED_LIB=3Dn > */ > -- > 2.1.0