On Mon Nov 02 12:23:47 +0200 2015, Panu Matilainen wrote: > On 11/01/2015 08:17 PM, Thomas Monjalon wrote: > >2015-10-19 08:36, Eric Kinzie: > >> Size of struct rte_eth_bond_8023ad_conf changed. Increment LIBABIVER > >> and version bond_mode_8023ad_setup and bond_mode_8023ad_conf_get > >> functions. > >[...] > >>+VERSION_SYMBOL(bond_mode_8023ad_setup, _v20, 2.0); > >[...] > >>+BIND_DEFAULT_SYMBOL(bond_mode_8023ad_setup, _v22, 2.2); > >>+MAP_STATIC_SYMBOL(void bond_mode_8023ad_setup(struct rte_eth_dev *dev, > >>struct rte_eth_bond_8023ad_conf *conf), \ > >>+ bond_mode_8023ad_setup_v22); > > > >I'm sorry it doesn't work well when trying to build a combined lib: > > > >ld: libdpdk.so: version node not found for symbol > >bond_mode_8023ad_setup@@DPDK_2.2 > > > >The symbols are OK in the .o file: > >0000000000002340 g F .text 0000000000000171 > >bond_mode_8023ad_setup@@DPDK_2.2 > >0000000000002260 g F .text 00000000000000da bond_mode_8023ad_setup at > >DPDK_2.0 > >0000000000002260 g F .text 00000000000000da bond_mode_8023ad_setup_v20 > >0000000000002340 g F .text 0000000000000171 bond_mode_8023ad_setup_v22 > >0000000000000000 *UND* 0000000000000000 bond_mode_8023ad_setup > > > >I don't understand the problem and I am considering disabling versioning in > >combined library. > > > >Any idea? > > > > The .map additions look incorrect to me: > > >diff --git a/drivers/net/bonding/rte_eth_bond_version.map > >b/drivers/net/bonding/rte_eth_bond_version.map > >index 22bd920..7f78717 100644 > >--- a/drivers/net/bonding/rte_eth_bond_version.map > >+++ b/drivers/net/bonding/rte_eth_bond_version.map > >@@ -17,6 +17,9 @@ DPDK_2.0 { > > rte_eth_bond_slaves_get; > > rte_eth_bond_xmit_policy_get; > > rte_eth_bond_xmit_policy_set; > >+ rte_eth_bond_8023ad_ext_collect; > >+ rte_eth_bond_8023ad_ext_distrib; > >+ rte_eth_bond_8023ad_ext_slowtx; > > These symbols didn't exist in DPDK 2.0 but are only being added > here. So why are they being added to the 2.0 section?
Yes, I think these should probably be moved. > > > > local: *; > > }; > >@@ -27,3 +30,10 @@ DPDK_2.1 { > > rte_eth_bond_free; > > > > } DPDK_2.0; > >+ > >+DPDK_2.2 { > >+ local > >+ > >+ bond_mode_8023ad_conf_get; > >+ bond_mode_8023ad_setup; > >+} DPDK_2.1; > > These are marked local, as in, "not exported" which doesn't seem > right. Also they're lacking the rte_eth_ prefix. AFAICS this is what > the symbol export map should look like here: These were not exported to begin with. But after versioning these functions, they are exported unless explicitly declared to be local here. > DPDK_2.2 { > global: > > rte_eth_bond_8023ad_ext_collect; > rte_eth_bond_8023ad_ext_distrib; > rte_eth_bond_8023ad_ext_slowtx; > rte_eth_bond_mode_8023ad_conf_get; > rte_eth_bond_mode_8023ad_setup; > } DPDK_2.1; > > That said, problems with symbol versioning and the combined library > were predicted from the start, once the individual library versions > start advancing. For one, the combined library itself is not > versioned at all it is offending the ABI policy all the time. > > Replacing the library with a linker script, as suggested before by > Neil Horman and Sergio Gonzales Monroy would eliminate these > problems. > > - Panu - > >