[dpdk-dev,v3,2/4] Provide initial versioning for all DPDK libraries

Message ID 1419349913-21674-2-git-send-email-nhorman@tuxdriver.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Neil Horman Dec. 23, 2014, 3:51 p.m. UTC
Add linker version script files to each DPDK library to put a stake in the
ground from which we can start cleaning up API's

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Thomas Monjalon <thomas.monjalon@6wind.com>
CC: "Richardson, Bruce" <bruce.richardson@intel.com>

---
Change Notes:

v2)
	* Updated export map to not require full path
---
 lib/librte_acl/Makefile                            |   2 +
 lib/librte_acl/rte_acl_version.map                 |  21 ++++
 lib/librte_cfgfile/Makefile                        |   2 +
 lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
 lib/librte_cmdline/Makefile                        |   2 +
 lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
 lib/librte_distributor/Makefile                    |   2 +
 lib/librte_distributor/rte_distributor_version.map |  16 +++
 lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
 lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  90 ++++++++++++++++
 lib/librte_eal/linuxapp/eal/Makefile               |   2 +
 lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  90 ++++++++++++++++
 lib/librte_ether/Makefile                          |   2 +
 lib/librte_ether/rte_ether_version.map             | 113 +++++++++++++++++++++
 lib/librte_hash/Makefile                           |   2 +
 lib/librte_hash/rte_hash_version.map               |  18 ++++
 lib/librte_ip_frag/Makefile                        |   2 +
 lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
 lib/librte_ivshmem/Makefile                        |   2 +
 lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
 lib/librte_kni/Makefile                            |   2 +
 lib/librte_kni/rte_kni_version.map                 |  20 ++++
 lib/librte_kvargs/Makefile                         |   2 +
 lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
 lib/librte_lpm/Makefile                            |   2 +
 lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
 lib/librte_malloc/Makefile                         |   2 +
 lib/librte_malloc/rte_malloc_version.map           |  19 ++++
 lib/librte_mbuf/Makefile                           |   2 +
 lib/librte_mbuf/rte_mbuf_version.map               |  14 +++
 lib/librte_mempool/Makefile                        |   2 +
 lib/librte_mempool/rte_mempool_version.map         |  18 ++++
 lib/librte_meter/Makefile                          |   2 +
 lib/librte_meter/rte_meter_version.map             |  13 +++
 lib/librte_pipeline/Makefile                       |   2 +
 lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
 lib/librte_pmd_af_packet/Makefile                  |   2 +
 .../rte_pmd_af_packet_version.map                  |   7 ++
 lib/librte_pmd_bond/Makefile                       |   2 +
 lib/librte_pmd_bond/rte_eth_bond_version.map       |  21 ++++
 lib/librte_pmd_e1000/Makefile                      |   2 +
 lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
 lib/librte_pmd_enic/Makefile                       |   2 +
 lib/librte_pmd_enic/rte_pmd_enic_version.map       |   5 +
 lib/librte_pmd_i40e/Makefile                       |   2 +
 lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
 lib/librte_pmd_ixgbe/Makefile                      |   2 +
 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
 lib/librte_pmd_pcap/Makefile                       |   2 +
 lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
 lib/librte_pmd_ring/Makefile                       |   2 +
 lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
 lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
 lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
 lib/librte_pmd_virtio/Makefile                     |   1 +
 lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
 lib/librte_pmd_vmxnet3/Makefile                    |   2 +
 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
 lib/librte_pmd_xenvirt/Makefile                    |   2 +
 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
 lib/librte_port/Makefile                           |   2 +
 lib/librte_port/rte_port_version.map               |  18 ++++
 lib/librte_power/Makefile                          |   2 +
 lib/librte_power/rte_power_version.map             |  18 ++++
 lib/librte_ring/Makefile                           |   2 +
 lib/librte_ring/rte_ring_version.map               |  12 +++
 lib/librte_sched/Makefile                          |   2 +
 lib/librte_sched/rte_sched_version.map             |  22 ++++
 lib/librte_table/Makefile                          |   2 +
 lib/librte_table/rte_table_version.map             |  22 ++++
 lib/librte_timer/Makefile                          |   2 +
 lib/librte_timer/rte_timer_version.map             |  16 +++
 lib/librte_vhost/Makefile                          |   2 +
 lib/librte_vhost/rte_vhost_version.map             |  14 +++
 mk/rte.lib.mk                                      |   2 +-
 75 files changed, 875 insertions(+), 8 deletions(-)
 create mode 100644 lib/librte_acl/rte_acl_version.map
 create mode 100644 lib/librte_cfgfile/rte_cfgfile_version.map
 create mode 100644 lib/librte_cmdline/rte_cmdline_version.map
 create mode 100644 lib/librte_distributor/rte_distributor_version.map
 create mode 100644 lib/librte_eal/bsdapp/eal/rte_eal_version.map
 create mode 100644 lib/librte_eal/linuxapp/eal/rte_eal_version.map
 create mode 100644 lib/librte_ether/rte_ether_version.map
 create mode 100644 lib/librte_hash/rte_hash_version.map
 create mode 100644 lib/librte_ip_frag/rte_ipfrag_version.map
 create mode 100644 lib/librte_ivshmem/rte_ivshmem_version.map
 create mode 100644 lib/librte_kni/rte_kni_version.map
 create mode 100644 lib/librte_kvargs/rte_kvargs_version.map
 create mode 100644 lib/librte_lpm/rte_lpm_version.map
 create mode 100644 lib/librte_malloc/rte_malloc_version.map
 create mode 100644 lib/librte_mbuf/rte_mbuf_version.map
 create mode 100644 lib/librte_mempool/rte_mempool_version.map
 create mode 100644 lib/librte_meter/rte_meter_version.map
 create mode 100644 lib/librte_pipeline/rte_pipeline_version.map
 create mode 100644 lib/librte_pmd_af_packet/rte_pmd_af_packet_version.map
 create mode 100644 lib/librte_pmd_bond/rte_eth_bond_version.map
 create mode 100644 lib/librte_pmd_e1000/rte_pmd_e1000_version.map
 create mode 100644 lib/librte_pmd_enic/rte_pmd_enic_version.map
 create mode 100644 lib/librte_pmd_i40e/rte_pmd_i40e_version.map
 create mode 100644 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
 create mode 100644 lib/librte_pmd_pcap/rte_pmd_pcap_version.map
 create mode 100644 lib/librte_pmd_ring/rte_eth_ring_version.map
 create mode 100644 lib/librte_pmd_virtio/rte_pmd_virtio_version.map
 create mode 100644 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
 create mode 100644 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
 create mode 100644 lib/librte_port/rte_port_version.map
 create mode 100644 lib/librte_power/rte_power_version.map
 create mode 100644 lib/librte_ring/rte_ring_version.map
 create mode 100644 lib/librte_sched/rte_sched_version.map
 create mode 100644 lib/librte_table/rte_table_version.map
 create mode 100644 lib/librte_timer/rte_timer_version.map
 create mode 100644 lib/librte_vhost/rte_vhost_version.map
  

Comments

Sergio Gonzalez Monroy Dec. 29, 2014, 4:21 p.m. UTC | #1
On Tue, Dec 23, 2014 at 10:51:51AM -0500, Neil Horman wrote:
> Add linker version script files to each DPDK library to put a stake in the
> ground from which we can start cleaning up API's
> 
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> CC: Thomas Monjalon <thomas.monjalon@6wind.com>
> CC: "Richardson, Bruce" <bruce.richardson@intel.com>
> 
> ---
> Change Notes:
> 
> v2)
> 	* Updated export map to not require full path
> ---
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
  
Thomas Monjalon Jan. 14, 2015, 3:29 p.m. UTC | #2
2014-12-23 10:51, Neil Horman:
> Add linker version script files to each DPDK library to put a stake in the
> ground from which we can start cleaning up API's

[...]

>  lib/librte_acl/Makefile                            |   2 +
>  lib/librte_acl/rte_acl_version.map                 |  21 ++++
>  lib/librte_cfgfile/Makefile                        |   2 +
>  lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
>  lib/librte_cmdline/Makefile                        |   2 +
>  lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
>  lib/librte_distributor/Makefile                    |   2 +
>  lib/librte_distributor/rte_distributor_version.map |  16 +++
>  lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
>  lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  90 ++++++++++++++++
>  lib/librte_eal/linuxapp/eal/Makefile               |   2 +
>  lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  90 ++++++++++++++++
>  lib/librte_ether/Makefile                          |   2 +
>  lib/librte_ether/rte_ether_version.map             | 113 +++++++++++++++++++++
>  lib/librte_hash/Makefile                           |   2 +
>  lib/librte_hash/rte_hash_version.map               |  18 ++++
>  lib/librte_ip_frag/Makefile                        |   2 +
>  lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
>  lib/librte_ivshmem/Makefile                        |   2 +
>  lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
>  lib/librte_kni/Makefile                            |   2 +
>  lib/librte_kni/rte_kni_version.map                 |  20 ++++
>  lib/librte_kvargs/Makefile                         |   2 +
>  lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
>  lib/librte_lpm/Makefile                            |   2 +
>  lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
>  lib/librte_malloc/Makefile                         |   2 +
>  lib/librte_malloc/rte_malloc_version.map           |  19 ++++
>  lib/librte_mbuf/Makefile                           |   2 +
>  lib/librte_mbuf/rte_mbuf_version.map               |  14 +++
>  lib/librte_mempool/Makefile                        |   2 +
>  lib/librte_mempool/rte_mempool_version.map         |  18 ++++
>  lib/librte_meter/Makefile                          |   2 +
>  lib/librte_meter/rte_meter_version.map             |  13 +++
>  lib/librte_pipeline/Makefile                       |   2 +
>  lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
>  lib/librte_pmd_af_packet/Makefile                  |   2 +
>  .../rte_pmd_af_packet_version.map                  |   7 ++
>  lib/librte_pmd_bond/Makefile                       |   2 +
>  lib/librte_pmd_bond/rte_eth_bond_version.map       |  21 ++++
>  lib/librte_pmd_e1000/Makefile                      |   2 +
>  lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
>  lib/librte_pmd_enic/Makefile                       |   2 +
>  lib/librte_pmd_enic/rte_pmd_enic_version.map       |   5 +
>  lib/librte_pmd_i40e/Makefile                       |   2 +
>  lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
>  lib/librte_pmd_ixgbe/Makefile                      |   2 +
>  lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
>  lib/librte_pmd_pcap/Makefile                       |   2 +
>  lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
>  lib/librte_pmd_ring/Makefile                       |   2 +
>  lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
>  lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
>  lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
>  lib/librte_pmd_virtio/Makefile                     |   1 +
>  lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
>  lib/librte_pmd_vmxnet3/Makefile                    |   2 +
>  lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
>  lib/librte_pmd_xenvirt/Makefile                    |   2 +
>  lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
>  lib/librte_port/Makefile                           |   2 +
>  lib/librte_port/rte_port_version.map               |  18 ++++
>  lib/librte_power/Makefile                          |   2 +
>  lib/librte_power/rte_power_version.map             |  18 ++++
>  lib/librte_ring/Makefile                           |   2 +
>  lib/librte_ring/rte_ring_version.map               |  12 +++
>  lib/librte_sched/Makefile                          |   2 +
>  lib/librte_sched/rte_sched_version.map             |  22 ++++
>  lib/librte_table/Makefile                          |   2 +
>  lib/librte_table/rte_table_version.map             |  22 ++++
>  lib/librte_timer/Makefile                          |   2 +
>  lib/librte_timer/rte_timer_version.map             |  16 +++
>  lib/librte_vhost/Makefile                          |   2 +
>  lib/librte_vhost/rte_vhost_version.map             |  14 +++

Honestly, this patch is difficult to review.
How have you populated .map files? Did you use some script?

[...]

> --- a/mk/rte.lib.mk
> +++ b/mk/rte.lib.mk
> -CPU_LDFLAGS += --version-script=$(EXPORT_MAP)
> +CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)

I guess this change should go in patch 1 which introduced this option.
  
Neil Horman Jan. 14, 2015, 4:24 p.m. UTC | #3
On Wed, Jan 14, 2015 at 04:29:29PM +0100, Thomas Monjalon wrote:
> 2014-12-23 10:51, Neil Horman:
> > Add linker version script files to each DPDK library to put a stake in the
> > ground from which we can start cleaning up API's
> 
> [...]
> 
> >  lib/librte_acl/Makefile                            |   2 +
> >  lib/librte_acl/rte_acl_version.map                 |  21 ++++
> >  lib/librte_cfgfile/Makefile                        |   2 +
> >  lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
> >  lib/librte_cmdline/Makefile                        |   2 +
> >  lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
> >  lib/librte_distributor/Makefile                    |   2 +
> >  lib/librte_distributor/rte_distributor_version.map |  16 +++
> >  lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
> >  lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  90 ++++++++++++++++
> >  lib/librte_eal/linuxapp/eal/Makefile               |   2 +
> >  lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  90 ++++++++++++++++
> >  lib/librte_ether/Makefile                          |   2 +
> >  lib/librte_ether/rte_ether_version.map             | 113 +++++++++++++++++++++
> >  lib/librte_hash/Makefile                           |   2 +
> >  lib/librte_hash/rte_hash_version.map               |  18 ++++
> >  lib/librte_ip_frag/Makefile                        |   2 +
> >  lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
> >  lib/librte_ivshmem/Makefile                        |   2 +
> >  lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
> >  lib/librte_kni/Makefile                            |   2 +
> >  lib/librte_kni/rte_kni_version.map                 |  20 ++++
> >  lib/librte_kvargs/Makefile                         |   2 +
> >  lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
> >  lib/librte_lpm/Makefile                            |   2 +
> >  lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
> >  lib/librte_malloc/Makefile                         |   2 +
> >  lib/librte_malloc/rte_malloc_version.map           |  19 ++++
> >  lib/librte_mbuf/Makefile                           |   2 +
> >  lib/librte_mbuf/rte_mbuf_version.map               |  14 +++
> >  lib/librte_mempool/Makefile                        |   2 +
> >  lib/librte_mempool/rte_mempool_version.map         |  18 ++++
> >  lib/librte_meter/Makefile                          |   2 +
> >  lib/librte_meter/rte_meter_version.map             |  13 +++
> >  lib/librte_pipeline/Makefile                       |   2 +
> >  lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
> >  lib/librte_pmd_af_packet/Makefile                  |   2 +
> >  .../rte_pmd_af_packet_version.map                  |   7 ++
> >  lib/librte_pmd_bond/Makefile                       |   2 +
> >  lib/librte_pmd_bond/rte_eth_bond_version.map       |  21 ++++
> >  lib/librte_pmd_e1000/Makefile                      |   2 +
> >  lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
> >  lib/librte_pmd_enic/Makefile                       |   2 +
> >  lib/librte_pmd_enic/rte_pmd_enic_version.map       |   5 +
> >  lib/librte_pmd_i40e/Makefile                       |   2 +
> >  lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
> >  lib/librte_pmd_ixgbe/Makefile                      |   2 +
> >  lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
> >  lib/librte_pmd_pcap/Makefile                       |   2 +
> >  lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
> >  lib/librte_pmd_ring/Makefile                       |   2 +
> >  lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
> >  lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
> >  lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
> >  lib/librte_pmd_virtio/Makefile                     |   1 +
> >  lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
> >  lib/librte_pmd_vmxnet3/Makefile                    |   2 +
> >  lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
> >  lib/librte_pmd_xenvirt/Makefile                    |   2 +
> >  lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
> >  lib/librte_port/Makefile                           |   2 +
> >  lib/librte_port/rte_port_version.map               |  18 ++++
> >  lib/librte_power/Makefile                          |   2 +
> >  lib/librte_power/rte_power_version.map             |  18 ++++
> >  lib/librte_ring/Makefile                           |   2 +
> >  lib/librte_ring/rte_ring_version.map               |  12 +++
> >  lib/librte_sched/Makefile                          |   2 +
> >  lib/librte_sched/rte_sched_version.map             |  22 ++++
> >  lib/librte_table/Makefile                          |   2 +
> >  lib/librte_table/rte_table_version.map             |  22 ++++
> >  lib/librte_timer/Makefile                          |   2 +
> >  lib/librte_timer/rte_timer_version.map             |  16 +++
> >  lib/librte_vhost/Makefile                          |   2 +
> >  lib/librte_vhost/rte_vhost_version.map             |  14 +++
> 
> Honestly, this patch is difficult to review.
> How have you populated .map files? Did you use some script?
> 
I did it the same way I did it the first time I posted this patch way back for
1.8.  I used the libraries' exported header files as a starting point, and
stripped them so that only the function symbols remained (as those are the only
symbols that can be versioned).  I tagged those with a version number, and the
appropriate version script boilerplate syntax.

Not sure what I can do to make review simpler.  But if you have a suggestion,
I'm happy to listen.

> [...]
> 
> > --- a/mk/rte.lib.mk
> > +++ b/mk/rte.lib.mk
> > -CPU_LDFLAGS += --version-script=$(EXPORT_MAP)
> > +CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
> 
> I guess this change should go in patch 1 which introduced this option.
> 
I can, though its not really necessecary, since I didn't list any EXPORT_MAP
variables in patch 1.

Regards
Neil


> -- 
> Thomas
>
  

Patch

diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
index 65e566d..45cbf80 100644
--- a/lib/librte_acl/Makefile
+++ b/lib/librte_acl/Makefile
@@ -37,6 +37,8 @@  LIB = librte_acl.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := rte_acl_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
 
diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
new file mode 100644
index 0000000..9f05a86
--- /dev/null
+++ b/lib/librte_acl/rte_acl_version.map
@@ -0,0 +1,21 @@ 
+DPDK_1.8 {
+	global:
+	rte_acl_create;
+	rte_acl_find_existing;
+	rte_acl_free;
+	rte_acl_add_rules;
+	rte_acl_reset_rules;
+	rte_acl_build;
+	rte_acl_reset;
+	rte_acl_classify;
+	rte_acl_dump;
+	rte_acl_list_dump;
+	rte_acl_ipv4vlan_add_rules;
+	rte_acl_ipv4vlan_build;
+	rte_acl_classify_scalar;
+	rte_acl_classify_alg;
+	rte_acl_set_ctx_classify;
+
+	local: *;
+};
+
diff --git a/lib/librte_cfgfile/Makefile b/lib/librte_cfgfile/Makefile
index 55e8701..a4f73de 100644
--- a/lib/librte_cfgfile/Makefile
+++ b/lib/librte_cfgfile/Makefile
@@ -39,6 +39,8 @@  LIB = librte_cfgfile.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_cfgfile_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_cfgfile/rte_cfgfile_version.map b/lib/librte_cfgfile/rte_cfgfile_version.map
new file mode 100644
index 0000000..10ecea6
--- /dev/null
+++ b/lib/librte_cfgfile/rte_cfgfile_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+	rte_cfgfile_load;
+	rte_cfgfile_num_sections;
+	rte_cfgfile_sections;
+	rte_cfgfile_has_section;
+	rte_cfgfile_section_num_entries;
+	rte_cfgfile_section_entries;
+	rte_cfgfile_get_entry;
+	rte_cfgfile_has_entry;
+	rte_cfgfile_close;
+
+	local: *;
+};
diff --git a/lib/librte_cmdline/Makefile b/lib/librte_cmdline/Makefile
index 7eae449..3c71831 100644
--- a/lib/librte_cmdline/Makefile
+++ b/lib/librte_cmdline/Makefile
@@ -36,6 +36,8 @@  LIB = librte_cmdline.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_cmdline_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := cmdline.c
 SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_cirbuf.c
diff --git a/lib/librte_cmdline/rte_cmdline_version.map b/lib/librte_cmdline/rte_cmdline_version.map
new file mode 100644
index 0000000..7616eff
--- /dev/null
+++ b/lib/librte_cmdline/rte_cmdline_version.map
@@ -0,0 +1,69 @@ 
+DPDK_1.8 {
+	global:
+	cmdline_new;
+	cmdline_set_prompt;
+	cmdline_free;
+	cmdline_printf;
+	cmdline_in;
+	cmdline_write_char;
+	cmdline_interact;
+	cmdline_quit;
+	cmdline_parse;
+	cmdline_complete;
+	cmdline_isendoftoken;
+	cmdline_parse_num;
+	cmdline_get_help_num;
+	cmdline_parse_ipaddr;
+	cmdline_get_help_ipaddr;
+	cmdline_parse_etheraddr;
+	cmdline_get_help_etheraddr;
+	cmdline_parse_string;
+	cmdline_complete_get_nb_string;
+	cmdline_complete_get_elt_string;
+	cmdline_get_help_string;
+	cmdline_parse_portlist;
+	cmdline_get_help_portlist;
+	cmdline_token_string_ops;
+	cmdline_token_num_ops;
+	cmdline_token_string_ops;
+	cmdline_token_ipaddr_ops;
+	cmdline_token_etheraddr_ops;
+	vt100_init;
+	vt100_parser;
+	cmdline_file_new;
+	cmdline_stdin_new;
+	cmdline_stdin_exit;
+	cirbuf_init;
+	cirbuf_add_head_safe;
+	cirbuf_add_head;
+	cirbuf_add_tail_safe;
+	cirbuf_add_tail;
+	cirbuf_del_head_safe;
+	cirbuf_del_head;
+	cirbuf_del_tail_safe;
+	cirbuf_del_tail;
+	cirbuf_get_head;
+	cirbuf_get_tail;
+	cirbuf_add_buf_head;
+	cirbuf_add_buf_tail;
+	cirbuf_del_buf_head;
+	cirbuf_del_buf_tail;
+	cirbuf_get_buf_head;
+	cirbuf_get_buf_tail;
+	cirbuf_align_left;
+	cirbuf_align_right;
+	rdline_init;
+	rdline_newline;
+	rdline_stop;
+	rdline_quit;
+	rdline_restart;
+	rdline_redisplay;
+	rdline_reset;
+	rdline_char_in;
+	rdline_get_buffer;
+	rdline_add_history;
+	rdline_clear_history;
+	rdline_get_history_item;
+
+	local: *;
+};
diff --git a/lib/librte_distributor/Makefile b/lib/librte_distributor/Makefile
index 36699f8..3674a2c 100644
--- a/lib/librte_distributor/Makefile
+++ b/lib/librte_distributor/Makefile
@@ -37,6 +37,8 @@  LIB = librte_distributor.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := rte_distributor_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) := rte_distributor.c
 
diff --git a/lib/librte_distributor/rte_distributor_version.map b/lib/librte_distributor/rte_distributor_version.map
new file mode 100644
index 0000000..b81ddc8
--- /dev/null
+++ b/lib/librte_distributor/rte_distributor_version.map
@@ -0,0 +1,16 @@ 
+DPDK_1.8 {
+
+	global:
+	rte_distributor_create;
+	rte_distributor_process;
+	rte_distributor_returned_pkts;
+	rte_distributor_flush;
+	rte_distributor_clear_returns;
+	rte_distributor_get_pkt;
+	rte_distributor_return_pkt;
+	rte_distributor_request_pkt;
+	rte_distributor_poll_pkt;
+
+	local: *;
+};
+
diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
index d434882..0b5f9d9 100644
--- a/lib/librte_eal/bsdapp/eal/Makefile
+++ b/lib/librte_eal/bsdapp/eal/Makefile
@@ -46,6 +46,8 @@  CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_ring
 CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_pcap
 CFLAGS += $(WERROR_FLAGS) -O3
 
+EXPORT_MAP := rte_eal_version.map
+
 # specific to linuxapp exec-env
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) := eal.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_memory.c
diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
new file mode 100644
index 0000000..498130d
--- /dev/null
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -0,0 +1,90 @@ 
+DPDK_1.8 {
+	global:
+	rte_eal_alarm_set;
+	rte_eal_alarm_cancel;
+	rte_exit;
+	rte_cpu_get_flag_enabled;
+	rte_cpu_check_supported;
+	rte_get_tsc_hz;
+	rte_get_hpet_cycles;
+	rte_get_hpet_hz;
+	rte_eal_hpet_init;
+	rte_delay_us;
+	rte_dump_stack;
+	rte_dump_registers;
+	__rte_panic;
+	rte_eal_devargs_add;
+	rte_eal_devargs_type_count;
+	rte_eal_devargs_dump;
+	rte_eal_driver_register;
+	rte_eal_driver_unregister;
+	rte_eal_dev_init;
+	rte_eal_init;
+	rte_set_application_usage_hook;
+	rte_eal_has_hugepages;
+	rte_strerror;
+	rte_hexdump;
+	rte_memdump;
+	rte_intr_callback_register;
+	rte_intr_callback_unregister;
+	rte_intr_enable;
+	rte_intr_disable;
+	rte_eal_remote_launch;
+	rte_eal_mp_remote_launch;
+	rte_eal_get_lcore_state;
+	rte_eal_wait_lcore;
+	rte_eal_mp_wait_lcore;
+	rte_openlog_stream;
+	rte_set_log_level;
+	rte_set_log_type;
+	rte_log_cur_msg_loglevel;
+	rte_log_cur_msg_logtype;
+	rte_log_set_history;
+	rte_log_dump_history;
+	rte_log_add_in_history;
+	rte_log;
+	rte_vlog;
+	rte_mem_lock_page;
+	rte_mem_virt2phy;
+	rte_eal_get_physmem_layout;
+	rte_dump_physmem_layout;
+	rte_eal_get_physmem_size;
+	rte_memory_get_nchannel;
+	rte_memory_get_nrank;
+	rte_mem_phy2mch;
+	rte_xen_dom0_memory_init;
+	rte_xen_dom0_memory_attach;
+	rte_memzone_reserve;
+	rte_memzone_reserve_aligned;
+	rte_memzone_reserve_bounded;
+	rte_memzone_lookup;
+	rte_memzone_dump;
+	rte_memzone_walk;
+	rte_eal_pci_probe;
+	rte_eal_pci_dump;
+	rte_eal_pci_register;
+	rte_eal_pci_unregister;
+	rte_snprintf;
+	rte_strsplit;
+	rte_eal_tailq_reserve;
+	rte_eal_tailq_reserve_by_idx;
+	rte_dump_tailq;
+	rte_eal_tailq_lookup;
+	rte_eal_tailq_lookup_by_idx;
+	lcore_config;
+	per_lcore__lcore_id;
+	eal_timer_source;
+	rte_cycles_vmware_tsc_map;
+	rte_eal_get_configuration;
+	rte_logs;
+	rte_eal_lcore_role;
+	test_mp_secondary;
+	rte_eal_process_type;
+	per_lcore__rte_errno;
+	pci_device_list;
+	devargs_list;
+	eal_parse_sysfs_value;
+	pci_driver_list;
+
+	local: *;
+};
diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
index 72ecf3a..bae8af1 100644
--- a/lib/librte_eal/linuxapp/eal/Makefile
+++ b/lib/librte_eal/linuxapp/eal/Makefile
@@ -33,6 +33,8 @@  include $(RTE_SDK)/mk/rte.vars.mk
 
 LIB = librte_eal.a
 
+EXPORT_MAP := rte_eal_version.map
+
 VPATH += $(RTE_SDK)/lib/librte_eal/common
 
 CFLAGS += -I$(SRCDIR)/include
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
new file mode 100644
index 0000000..498130d
--- /dev/null
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -0,0 +1,90 @@ 
+DPDK_1.8 {
+	global:
+	rte_eal_alarm_set;
+	rte_eal_alarm_cancel;
+	rte_exit;
+	rte_cpu_get_flag_enabled;
+	rte_cpu_check_supported;
+	rte_get_tsc_hz;
+	rte_get_hpet_cycles;
+	rte_get_hpet_hz;
+	rte_eal_hpet_init;
+	rte_delay_us;
+	rte_dump_stack;
+	rte_dump_registers;
+	__rte_panic;
+	rte_eal_devargs_add;
+	rte_eal_devargs_type_count;
+	rte_eal_devargs_dump;
+	rte_eal_driver_register;
+	rte_eal_driver_unregister;
+	rte_eal_dev_init;
+	rte_eal_init;
+	rte_set_application_usage_hook;
+	rte_eal_has_hugepages;
+	rte_strerror;
+	rte_hexdump;
+	rte_memdump;
+	rte_intr_callback_register;
+	rte_intr_callback_unregister;
+	rte_intr_enable;
+	rte_intr_disable;
+	rte_eal_remote_launch;
+	rte_eal_mp_remote_launch;
+	rte_eal_get_lcore_state;
+	rte_eal_wait_lcore;
+	rte_eal_mp_wait_lcore;
+	rte_openlog_stream;
+	rte_set_log_level;
+	rte_set_log_type;
+	rte_log_cur_msg_loglevel;
+	rte_log_cur_msg_logtype;
+	rte_log_set_history;
+	rte_log_dump_history;
+	rte_log_add_in_history;
+	rte_log;
+	rte_vlog;
+	rte_mem_lock_page;
+	rte_mem_virt2phy;
+	rte_eal_get_physmem_layout;
+	rte_dump_physmem_layout;
+	rte_eal_get_physmem_size;
+	rte_memory_get_nchannel;
+	rte_memory_get_nrank;
+	rte_mem_phy2mch;
+	rte_xen_dom0_memory_init;
+	rte_xen_dom0_memory_attach;
+	rte_memzone_reserve;
+	rte_memzone_reserve_aligned;
+	rte_memzone_reserve_bounded;
+	rte_memzone_lookup;
+	rte_memzone_dump;
+	rte_memzone_walk;
+	rte_eal_pci_probe;
+	rte_eal_pci_dump;
+	rte_eal_pci_register;
+	rte_eal_pci_unregister;
+	rte_snprintf;
+	rte_strsplit;
+	rte_eal_tailq_reserve;
+	rte_eal_tailq_reserve_by_idx;
+	rte_dump_tailq;
+	rte_eal_tailq_lookup;
+	rte_eal_tailq_lookup_by_idx;
+	lcore_config;
+	per_lcore__lcore_id;
+	eal_timer_source;
+	rte_cycles_vmware_tsc_map;
+	rte_eal_get_configuration;
+	rte_logs;
+	rte_eal_lcore_role;
+	test_mp_secondary;
+	rte_eal_process_type;
+	per_lcore__rte_errno;
+	pci_device_list;
+	devargs_list;
+	eal_parse_sysfs_value;
+	pci_driver_list;
+
+	local: *;
+};
diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile
index a461c31..80ad78d 100644
--- a/lib/librte_ether/Makefile
+++ b/lib/librte_ether/Makefile
@@ -39,6 +39,8 @@  LIB = libethdev.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_ether_version.map
+
 SRCS-y += rte_ethdev.c
 
 #
diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map
new file mode 100644
index 0000000..dbd0eca
--- /dev/null
+++ b/lib/librte_ether/rte_ether_version.map
@@ -0,0 +1,113 @@ 
+DPDK_1.8 {
+	global:
+	rte_eth_driver_register;
+	rte_eth_dev_configure;
+	rte_eth_rx_queue_setup;
+	rte_eth_tx_queue_setup;
+	rte_eth_dev_socket_id;
+	rte_eth_dev_rx_queue_start;
+	rte_eth_dev_rx_queue_stop;
+	rte_eth_dev_tx_queue_start;
+	rte_eth_dev_tx_queue_stop;
+	rte_eth_dev_start;
+	rte_eth_dev_stop;
+	rte_eth_dev_set_link_up;
+	rte_eth_dev_set_link_down;
+	rte_eth_dev_close;
+	rte_eth_promiscuous_enable;
+	rte_eth_promiscuous_disable;
+	rte_eth_promiscuous_get;
+	rte_eth_allmulticast_enable;
+	rte_eth_allmulticast_disable;
+	rte_eth_allmulticast_get;
+	rte_eth_link;
+	rte_eth_link_get_nowait;
+	rte_eth_stats;
+	rte_eth_stats_reset;
+	rte_eth_dev_set_tx_queue_stats_mapping;
+	rte_eth_dev_set_rx_queue_stats_mapping;
+	rte_eth_macaddr_get;
+	rte_eth_dev_info_get;
+	rte_eth_dev_get_mtu;
+	rte_eth_dev_set_mtu;
+	rte_eth_dev_vlan_filter;
+	rte_eth_dev_set_vlan_strip_on_queue;
+	rte_eth_dev_set_vlan_ether_type;
+	rte_eth_dev_set_vlan_offload;
+	rte_eth_dev_get_vlan_offload;
+	rte_eth_dev_set_vlan_pvid;
+	rte_eth_rx_burst;
+	rte_eth_rx_queue_count;
+	rte_eth_rx_descriptor_done;
+	rte_eth_tx_burst;
+	rte_eth_dev_fdir_add_signature_filter;
+	rte_eth_dev_fdir_update_signature_filter;
+	rte_eth_dev_fdir_remove_signature_filter;
+	rte_eth_dev_fdir_get_infos;
+	rte_eth_dev_fdir_add_perfect_filter;
+	rte_eth_dev_fdir_update_perfect_filter;
+	rte_eth_dev_fdir_remove_perfect_filter;
+	rte_eth_dev_fdir_set_masks;
+	rte_eth_dev_callback_register;
+	rte_eth_dev_callback_unregister;
+	rte_eth_dev_callback_process;
+	rte_eth_led_on;
+	rte_eth_led_off;
+	rte_eth_dev_flow_ctrl_get;
+	rte_eth_dev_flow_ctrl_set;
+	rte_eth_dev_priority_flow_ctrl_set;
+	rte_eth_dev_mac_addr_add;
+	rte_eth_dev_mac_addr_remove;
+	rte_eth_dev_rss_reta_update;
+	rte_eth_dev_rss_reta_query;
+	rte_eth_dev_uc_hash_table_set;
+	rte_eth_dev_uc_all_hash_table_set;
+	rte_eth_dev_set_vf_rxmode;
+	rte_eth_dev_set_vf_tx;
+	rte_eth_dev_set_vf_rx;
+	rte_eth_dev_set_vf_vlan_filter;
+	rte_eth_mirror_rule_set;
+	rte_eth_mirror_rule_reset;
+	rte_eth_set_queue_rate_limit;
+	rte_eth_set_vf_rate_limit;
+	rte_eth_dev_bypass_init;
+	rte_eth_dev_bypass_state_show;
+	rte_eth_dev_bypass_state_set;
+	rte_eth_dev_bypass_event_show;
+	rte_eth_dev_bypass_event_store;
+	rte_eth_dev_wd_timeout_store;
+	rte_eth_dev_bypass_ver_show;
+	rte_eth_dev_bypass_wd_timeout_show;
+	rte_eth_dev_bypass_wd_reset;
+	rte_eth_dev_rss_hash_update;
+	rte_eth_dev_rss_hash_conf_get;
+	rte_eth_dev_add_syn_filter;
+	rte_eth_dev_remove_syn_filter;
+	rte_eth_dev_get_syn_filter;
+	rte_eth_dev_add_ethertype_filter;
+	rte_eth_dev_remove_ethertype_filter;
+	rte_eth_dev_get_ethertype_filter;
+	rte_eth_dev_add_2tuple_filter;
+	rte_eth_dev_remove_2tuple_filter;
+	rte_eth_dev_get_2tuple_filter;
+	rte_eth_dev_add_5tuple_filter;
+	rte_eth_dev_remove_5tuple_filter;
+	rte_eth_dev_get_5tuple_filter;
+	rte_eth_dev_add_flex_filter;
+	rte_eth_dev_remove_flex_filter;
+	rte_eth_dev_get_flex_filter;
+	rte_eth_dev_count;
+	rte_eth_link_get;
+	rte_eth_devices;
+	rte_eth_stats_get;
+	rte_eth_dev_allocate;
+	_rte_eth_dev_callback_process;
+	rte_eth_dev_filter_ctrl;
+	rte_eth_dev_udp_tunnel_delete;
+	rte_eth_dev_udp_tunnel_add;
+	rte_eth_xstats_get;
+	rte_eth_xstats_reset;
+	rte_eth_dev_filter_supported;
+	local: *;
+};
+
diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
index 95e4c09..bec61ab 100644
--- a/lib/librte_hash/Makefile
+++ b/lib/librte_hash/Makefile
@@ -37,6 +37,8 @@  LIB = librte_hash.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := rte_hash_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_HASH) := rte_hash.c
 SRCS-$(CONFIG_RTE_LIBRTE_HASH) += rte_fbk_hash.c
diff --git a/lib/librte_hash/rte_hash_version.map b/lib/librte_hash/rte_hash_version.map
new file mode 100644
index 0000000..2a34313
--- /dev/null
+++ b/lib/librte_hash/rte_hash_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+	rte_fbk_hash_find_existing;
+	rte_fbk_hash_create;
+	rte_fbk_hash_free;
+	rte_hash_create;
+	rte_hash_find_existing;
+	rte_hash_free;
+	rte_hash_add_key;
+	rte_hash_add_key_with_hash;
+	rte_hash_del_key;
+	rte_hash_del_key_with_hash;
+	rte_hash_lookup;
+	rte_hash_lookup_with_hash;
+	rte_hash_lookup_bulk;
+
+	local: *;
+};
diff --git a/lib/librte_ip_frag/Makefile b/lib/librte_ip_frag/Makefile
index 8c00d39..aa88578 100644
--- a/lib/librte_ip_frag/Makefile
+++ b/lib/librte_ip_frag/Makefile
@@ -37,6 +37,8 @@  LIB = librte_ip_frag.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := rte_ipfrag_version.map
+
 #source files
 ifeq ($(CONFIG_RTE_MBUF_REFCNT),y)
 SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_fragmentation.c
diff --git a/lib/librte_ip_frag/rte_ipfrag_version.map b/lib/librte_ip_frag/rte_ipfrag_version.map
new file mode 100644
index 0000000..afe1a0b
--- /dev/null
+++ b/lib/librte_ip_frag/rte_ipfrag_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_ip_frag_table_create;
+	rte_ipv6_fragment_packet;
+	rte_ipv6_frag_reassemble_packet;
+	rte_ipv4_fragment_packet;
+	rte_ipv4_frag_reassemble_packet;
+	rte_ip_frag_free_death_row;
+	rte_ip_frag_table_statistics_dump;
+
+	local: *;
+};
+
diff --git a/lib/librte_ivshmem/Makefile b/lib/librte_ivshmem/Makefile
index 536814c..068ee10 100644
--- a/lib/librte_ivshmem/Makefile
+++ b/lib/librte_ivshmem/Makefile
@@ -36,6 +36,8 @@  LIB = librte_ivshmem.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_ivshmem_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte_ivshmem.c
 
diff --git a/lib/librte_ivshmem/rte_ivshmem_version.map b/lib/librte_ivshmem/rte_ivshmem_version.map
new file mode 100644
index 0000000..a204339
--- /dev/null
+++ b/lib/librte_ivshmem/rte_ivshmem_version.map
@@ -0,0 +1,13 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_ivshmem_metadata_create;
+	rte_ivshmem_metadata_add_memzone;
+	rte_ivshmem_metadata_add_ring;
+	rte_ivshmem_metadata_add_mempool;
+	rte_ivshmem_metadata_cmdline_generate;
+	rte_ivshmem_metadata_dump;
+
+	local: *;
+};
+
diff --git a/lib/librte_kni/Makefile b/lib/librte_kni/Makefile
index 5267304..93a516d 100644
--- a/lib/librte_kni/Makefile
+++ b/lib/librte_kni/Makefile
@@ -36,6 +36,8 @@  LIB = librte_kni.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
 
+EXPORT_MAP := rte_kni_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_KNI) := rte_kni.c
 
diff --git a/lib/librte_kni/rte_kni_version.map b/lib/librte_kni/rte_kni_version.map
new file mode 100644
index 0000000..7db39a3
--- /dev/null
+++ b/lib/librte_kni/rte_kni_version.map
@@ -0,0 +1,20 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_kni_alloc;
+	rte_kni_create;
+	rte_kni_release;
+	rte_kni_handle_request;
+	rte_kni_rx_burst;
+	rte_kni_tx_burst;
+	rte_kni_get_port_id;
+	rte_kni_get;
+	rte_kni_info_get;
+	rte_kni_register_handlers;
+	rte_kni_unregister_handlers;
+	rte_kni_close;
+	rte_kni_init;
+
+	local: *;
+};
+
diff --git a/lib/librte_kvargs/Makefile b/lib/librte_kvargs/Makefile
index b09359a..b1c34f3 100644
--- a/lib/librte_kvargs/Makefile
+++ b/lib/librte_kvargs/Makefile
@@ -38,6 +38,8 @@  LIB = librte_kvargs.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_kvargs_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) := rte_kvargs.c
 
diff --git a/lib/librte_kvargs/rte_kvargs_version.map b/lib/librte_kvargs/rte_kvargs_version.map
new file mode 100644
index 0000000..7873c8c
--- /dev/null
+++ b/lib/librte_kvargs/rte_kvargs_version.map
@@ -0,0 +1,10 @@ 
+DPDK_1.8 {
+
+	global:
+	rte_kvargs_parse;
+	rte_kvargs_free;
+	rte_kvargs_process;
+	rte_kvargs_count;
+
+	local: *;
+};
diff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile
index fa94163..8214630 100644
--- a/lib/librte_lpm/Makefile
+++ b/lib/librte_lpm/Makefile
@@ -37,6 +37,8 @@  LIB = librte_lpm.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := rte_lpm_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c
 
diff --git a/lib/librte_lpm/rte_lpm_version.map b/lib/librte_lpm/rte_lpm_version.map
new file mode 100644
index 0000000..8ae9318
--- /dev/null
+++ b/lib/librte_lpm/rte_lpm_version.map
@@ -0,0 +1,24 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_lpm_create;
+	rte_lpm_find_existing;
+	rte_lpm_free;
+	rte_lpm_add;
+	rte_lpm_is_rule_present;
+	rte_lpm_delete;
+	rte_lpm_delete_all;
+	rte_lpm6_create;
+	rte_lpm6_find_existing;
+	rte_lpm6_free;
+	rte_lpm6_add;
+	rte_lpm6_is_rule_present;
+	rte_lpm6_delete;
+	rte_lpm6_delete_bulk_func;
+	rte_lpm6_delete_all;
+	rte_lpm6_lookup;
+	rte_lpm6_lookup_bulk_func;
+
+	local: *;
+};
+
diff --git a/lib/librte_malloc/Makefile b/lib/librte_malloc/Makefile
index ba87e34..15b7eed 100644
--- a/lib/librte_malloc/Makefile
+++ b/lib/librte_malloc/Makefile
@@ -36,6 +36,8 @@  LIB = librte_malloc.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_malloc_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MALLOC) := rte_malloc.c malloc_elem.c malloc_heap.c
 
diff --git a/lib/librte_malloc/rte_malloc_version.map b/lib/librte_malloc/rte_malloc_version.map
new file mode 100644
index 0000000..77db879
--- /dev/null
+++ b/lib/librte_malloc/rte_malloc_version.map
@@ -0,0 +1,19 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_malloc;
+	rte_zmalloc;
+	rte_calloc;
+	rte_realloc;
+	rte_malloc_socket;
+	rte_zmalloc_socket;
+	rte_calloc_socket;
+	rte_free;
+	rte_malloc_validate;
+	rte_malloc_get_socket_stats;
+	rte_malloc_dump_stats;
+	rte_malloc_set_limit;
+	rte_malloc_virt2phy;
+
+	local: *;
+};
diff --git a/lib/librte_mbuf/Makefile b/lib/librte_mbuf/Makefile
index 9b45ba4..03becae 100644
--- a/lib/librte_mbuf/Makefile
+++ b/lib/librte_mbuf/Makefile
@@ -36,6 +36,8 @@  LIB = librte_mbuf.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_mbuf_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MBUF) := rte_mbuf.c
 
diff --git a/lib/librte_mbuf/rte_mbuf_version.map b/lib/librte_mbuf/rte_mbuf_version.map
new file mode 100644
index 0000000..7260507
--- /dev/null
+++ b/lib/librte_mbuf/rte_mbuf_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mbuf_sanity_check;
+	rte_ctrlmbuf_init;
+	rte_pktmbuf_init;
+	rte_pktmbuf_pool_init;
+	rte_pktmbuf_dump;
+	rte_get_rx_ol_flag_name;
+	rte_get_tx_ol_flag_name;
+
+	local: *;
+};
+
diff --git a/lib/librte_mempool/Makefile b/lib/librte_mempool/Makefile
index 9939e10..31d1a71 100644
--- a/lib/librte_mempool/Makefile
+++ b/lib/librte_mempool/Makefile
@@ -36,6 +36,8 @@  LIB = librte_mempool.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_mempool_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MEMPOOL) +=  rte_mempool.c
 ifeq ($(CONFIG_RTE_LIBRTE_XEN_DOM0),y)
diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map
new file mode 100644
index 0000000..7a19982
--- /dev/null
+++ b/lib/librte_mempool/rte_mempool_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mempool_create;
+	rte_mempool_xmem_create;
+	rte_dom0_mempool_create;
+	rte_mempool_dump;
+	rte_mempool_audit;
+	rte_mempool_list_dump;
+	rte_mempool_lookup;
+	rte_mempool_calc_obj_size;
+	rte_mempool_xmem_size;
+	rte_mempool_xmem_usage;
+	rte_mempool_walk;
+	rte_mempool_count;
+
+	local: *;
+};
diff --git a/lib/librte_meter/Makefile b/lib/librte_meter/Makefile
index b25c0cc..c4a7a32 100644
--- a/lib/librte_meter/Makefile
+++ b/lib/librte_meter/Makefile
@@ -39,6 +39,8 @@  LIB = librte_meter.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_meter_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
new file mode 100644
index 0000000..51a73b1
--- /dev/null
+++ b/lib/librte_meter/rte_meter_version.map
@@ -0,0 +1,13 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_meter_srtcm_config;
+	rte_meter_trtcm_config;
+	rte_meter_srtcm_color_blind_check;
+	rte_meter_srtcm_color_aware_check;
+	rte_meter_trtcm_color_blind_check;
+	rte_meter_trtcm_color_aware_check;
+
+	local: *;
+};
+
diff --git a/lib/librte_pipeline/Makefile b/lib/librte_pipeline/Makefile
index cf8fde8..15b58df 100644
--- a/lib/librte_pipeline/Makefile
+++ b/lib/librte_pipeline/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pipeline.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pipeline_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pipeline/rte_pipeline_version.map b/lib/librte_pipeline/rte_pipeline_version.map
new file mode 100644
index 0000000..f868b96
--- /dev/null
+++ b/lib/librte_pipeline/rte_pipeline_version.map
@@ -0,0 +1,23 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_pipeline_create;
+	rte_pipeline_free;
+	rte_pipeline_check;
+	rte_pipeline_run;
+	rte_pipeline_flush;
+	rte_pipeline_table_create;
+	rte_pipeline_table_default_entry_add;
+	rte_pipeline_table_default_entry_delete;
+	rte_pipeline_table_entry_add;
+	rte_pipeline_table_entry_delete;
+	rte_pipeline_port_in_create;
+	rte_pipeline_port_in_connect_to_table;
+	rte_pipeline_port_in_enable;
+	rte_pipeline_port_in_disable;
+	rte_pipeline_port_out_create;
+	rte_pipeline_port_out_packet_insert;
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_af_packet/Makefile b/lib/librte_pmd_af_packet/Makefile
index 6955e5c..85a7860 100644
--- a/lib/librte_pmd_af_packet/Makefile
+++ b/lib/librte_pmd_af_packet/Makefile
@@ -38,6 +38,8 @@  include $(RTE_SDK)/mk/rte.vars.mk
 #
 LIB = librte_pmd_af_packet.a
 
+EXPORT_MAP := rte_pmd_af_packet_version.map
+
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
diff --git a/lib/librte_pmd_af_packet/rte_pmd_af_packet_version.map b/lib/librte_pmd_af_packet/rte_pmd_af_packet_version.map
new file mode 100644
index 0000000..c68beae
--- /dev/null
+++ b/lib/librte_pmd_af_packet/rte_pmd_af_packet_version.map
@@ -0,0 +1,7 @@ 
+DPDK_1.8 {
+	global:
+	rte_pmd_af_packet_devinit;
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_bond/Makefile b/lib/librte_pmd_bond/Makefile
index cdff126..074110a 100644
--- a/lib/librte_pmd_bond/Makefile
+++ b/lib/librte_pmd_bond/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_bond.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_eth_bond_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_bond/rte_eth_bond_version.map b/lib/librte_pmd_bond/rte_eth_bond_version.map
new file mode 100644
index 0000000..206b53e
--- /dev/null
+++ b/lib/librte_pmd_bond/rte_eth_bond_version.map
@@ -0,0 +1,21 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_eth_bond_create;
+	rte_eth_bond_slave_add;
+	rte_eth_bond_slave_remove;
+	rte_eth_bond_mode_set;
+	rte_eth_bond_mode_get;
+	rte_eth_bond_primary_set;
+	rte_eth_bond_primary_get;
+	rte_eth_bond_slaves_get;
+	rte_eth_bond_active_slaves_get;
+	rte_eth_bond_mac_address_set;
+	rte_eth_bond_mac_address_reset;
+	rte_eth_bond_xmit_policy_set;
+	rte_eth_bond_xmit_policy_get;
+	rte_eth_bond_link_monitoring_set;
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_e1000/Makefile b/lib/librte_pmd_e1000/Makefile
index 14bc4a2..cd14444 100644
--- a/lib/librte_pmd_e1000/Makefile
+++ b/lib/librte_pmd_e1000/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_e1000.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pmd_e1000_version.map
+
 ifeq ($(CC), icc)
 #
 # CFLAGS for icc
diff --git a/lib/librte_pmd_e1000/rte_pmd_e1000_version.map b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_enic/Makefile b/lib/librte_pmd_enic/Makefile
index a2a623f..697231c 100644
--- a/lib/librte_pmd_enic/Makefile
+++ b/lib/librte_pmd_enic/Makefile
@@ -37,6 +37,8 @@  include $(RTE_SDK)/mk/rte.vars.mk
 #
 LIB = librte_pmd_enic.a
 
+EXPORT_MAP := rte_pmd_enic_version.map
+
 CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_enic/vnic/
 CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_enic/
 CFLAGS += -O3
diff --git a/lib/librte_pmd_enic/rte_pmd_enic_version.map b/lib/librte_pmd_enic/rte_pmd_enic_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_enic/rte_pmd_enic_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
index 98e4bdf..73de373 100644
--- a/lib/librte_pmd_i40e/Makefile
+++ b/lib/librte_pmd_i40e/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_i40e.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pmd_i40e_version.map
+
 #
 # Add extra flags for base driver files (also known as shared code)
 # to disable warnings
diff --git a/lib/librte_pmd_i40e/rte_pmd_i40e_version.map b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
index 3588047..e0a17f6 100644
--- a/lib/librte_pmd_ixgbe/Makefile
+++ b/lib/librte_pmd_ixgbe/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_ixgbe.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pmd_ixgbe_version.map
+
 ifeq ($(CC), icc)
 #
 # CFLAGS for icc
diff --git a/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_pcap/Makefile b/lib/librte_pmd_pcap/Makefile
index c5c214d..cb6678e 100644
--- a/lib/librte_pmd_pcap/Makefile
+++ b/lib/librte_pmd_pcap/Makefile
@@ -40,6 +40,8 @@  LIB = librte_pmd_pcap.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pmd_pcap_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_pcap/rte_pmd_pcap_version.map b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_ring/Makefile b/lib/librte_pmd_ring/Makefile
index b57e421..aa1b461 100644
--- a/lib/librte_pmd_ring/Makefile
+++ b/lib/librte_pmd_ring/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_ring.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_eth_ring_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
index 4f1b6ed..df7b583 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.c
+++ b/lib/librte_pmd_ring/rte_eth_ring.c
@@ -473,7 +473,7 @@  out:
 	return ret;
 }
 
-int
+static int
 rte_pmd_ring_devinit(const char *name, const char *params)
 {
 	struct rte_kvargs *kvlist;
diff --git a/lib/librte_pmd_ring/rte_eth_ring.h b/lib/librte_pmd_ring/rte_eth_ring.h
index e6ae19e..d36489a 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.h
+++ b/lib/librte_pmd_ring/rte_eth_ring.h
@@ -50,12 +50,6 @@  int rte_eth_from_rings(const char *name,
 int rte_eth_ring_pair_create(const char *name, const unsigned numa_node);
 int rte_eth_ring_pair_attach(const char *name, const unsigned numa_node);
 
-/**
- * For use by test apps only. Called as part of EAL init to set up any dummy NICs
- * configured on command line.
- */
-int rte_pmd_ring_devinit(const char *name, const char *params);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/librte_pmd_ring/rte_eth_ring_version.map b/lib/librte_pmd_ring/rte_eth_ring_version.map
new file mode 100644
index 0000000..5edaa3d
--- /dev/null
+++ b/lib/librte_pmd_ring/rte_eth_ring_version.map
@@ -0,0 +1,10 @@ 
+DPDK_1.8 {
+
+	global:
+
+	rte_eth_from_rings;
+	rte_eth_ring_pair_create;
+	rte_eth_ring_pair_attach;
+
+	local: *;
+};
diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
index 456095b..d979c59 100644
--- a/lib/librte_pmd_virtio/Makefile
+++ b/lib/librte_pmd_virtio/Makefile
@@ -39,6 +39,7 @@  LIB = librte_pmd_virtio_uio.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_pmd_virtio_version.map
 
 #
 # all source are stored in SRCS-y
diff --git a/lib/librte_pmd_virtio/rte_pmd_virtio_version.map b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
index 6872c74..f3ab178 100644
--- a/lib/librte_pmd_vmxnet3/Makefile
+++ b/lib/librte_pmd_vmxnet3/Makefile
@@ -66,6 +66,8 @@  endif
 
 VPATH += $(RTE_SDK)/lib/librte_pmd_vmxnet3/vmxnet3
 
+EXPORT_MAP := rte_pmd_vmxnet3_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_xenvirt/Makefile b/lib/librte_pmd_xenvirt/Makefile
index 01bfcaa..4510603 100644
--- a/lib/librte_pmd_xenvirt/Makefile
+++ b/lib/librte_pmd_xenvirt/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_xenvirt.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_eth_xenvirt_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
new file mode 100644
index 0000000..66199b1
--- /dev/null
+++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
@@ -0,0 +1,8 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mempool_gntalloc_create;
+
+	local: *;
+};
+
diff --git a/lib/librte_port/Makefile b/lib/librte_port/Makefile
index 82b5192..266ed39 100644
--- a/lib/librte_port/Makefile
+++ b/lib/librte_port/Makefile
@@ -39,6 +39,8 @@  LIB = librte_port.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_port_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_port/rte_port_version.map b/lib/librte_port/rte_port_version.map
new file mode 100644
index 0000000..57ccaa3
--- /dev/null
+++ b/lib/librte_port/rte_port_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+	rte_port_ring_reader_ops;
+	rte_port_ring_writer_ops;
+	rte_port_ethdev_reader_ops;
+	rte_port_ethdev_writer_ops;
+	rte_port_ring_reader_ipv4_frag_ops;
+	rte_port_ring_writer_ipv4_ras_ops;
+	rte_port_ring_reader_ops;
+	rte_port_ring_writer_ops;
+	rte_port_sched_reader_ops;
+	rte_port_sched_writer_ops;
+	rte_port_source_ops;
+	rte_port_sink_ops;
+
+	local: *;
+};
+
diff --git a/lib/librte_power/Makefile b/lib/librte_power/Makefile
index d672a5a..0547dcd 100644
--- a/lib/librte_power/Makefile
+++ b/lib/librte_power/Makefile
@@ -36,6 +36,8 @@  LIB = librte_power.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
 
+EXPORT_MAP := rte_power_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_POWER) := rte_power.c rte_power_acpi_cpufreq.c
 SRCS-$(CONFIG_RTE_LIBRTE_POWER) += rte_power_kvm_vm.c guest_channel.c
diff --git a/lib/librte_power/rte_power_version.map b/lib/librte_power/rte_power_version.map
new file mode 100644
index 0000000..061bca7
--- /dev/null
+++ b/lib/librte_power/rte_power_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+	rte_power_init;
+	rte_power_exit;
+	rte_power_freqs;
+	rte_power_get_freq;
+	rte_power_set_freq;
+	rte_power_freq_up;
+	rte_power_freq_down;
+	rte_power_freq_max;
+	rte_power_freq_min;
+	rte_power_set_env;
+	rte_power_get_env;
+	rte_power_unset_env;
+	
+	local: *;
+};
+
diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile
index 2380a43..b437dc5 100644
--- a/lib/librte_ring/Makefile
+++ b/lib/librte_ring/Makefile
@@ -36,6 +36,8 @@  LIB = librte_ring.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_ring_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_RING) := rte_ring.c
 
diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map
new file mode 100644
index 0000000..6c28af9
--- /dev/null
+++ b/lib/librte_ring/rte_ring_version.map
@@ -0,0 +1,12 @@ 
+DPDK_1.8 {
+	global:
+	rte_ring_get_memsize;
+	rte_ring_init;
+	rte_ring_create;
+	rte_ring_set_water_mark;
+	rte_ring_dump;
+	rte_ring_list_dump;
+	rte_ring_lookup;
+
+	local: *;
+};
diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
index 1a25b21..48f280a 100644
--- a/lib/librte_sched/Makefile
+++ b/lib/librte_sched/Makefile
@@ -41,6 +41,8 @@  CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+EXPORT_MAP := rte_sched_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_sched/rte_sched_version.map b/lib/librte_sched/rte_sched_version.map
new file mode 100644
index 0000000..b5877ce
--- /dev/null
+++ b/lib/librte_sched/rte_sched_version.map
@@ -0,0 +1,22 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_approx;
+	rte_red_rt_data_init;
+	rte_red_config_init;
+	rte_sched_port_config;
+	rte_sched_port_free;
+	rte_sched_subport_config;
+	rte_sched_pipe_config;
+	rte_sched_port_get_memory_footprint;
+	rte_sched_subport_read_stats;
+	rte_sched_queue_read_stats;
+	rte_sched_port_enqueue;
+	rte_sched_port_dequeue;
+	rte_red_log2_1_minus_Wq;
+	rte_red_pow2_frac_inv;
+	rte_red_rand_val;
+	rte_red_rand_seed;
+
+	local: *;
+};
diff --git a/lib/librte_table/Makefile b/lib/librte_table/Makefile
index dd684cc..4e1a54a 100644
--- a/lib/librte_table/Makefile
+++ b/lib/librte_table/Makefile
@@ -39,6 +39,8 @@  LIB = librte_table.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := rte_table_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_table/rte_table_version.map b/lib/librte_table/rte_table_version.map
new file mode 100644
index 0000000..86f16b8
--- /dev/null
+++ b/lib/librte_table/rte_table_version.map
@@ -0,0 +1,22 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_table_stub_ops;
+	rte_table_lpm_ops;
+	rte_table_array_ops;
+	rte_table_hash_key8_lru_ops;
+	rte_table_hash_key8_lru_dosig_ops;
+	rte_table_hash_key8_ext_ops;
+	rte_table_hash_key8_ext_dosig_ops;
+	rte_table_lpm_ipv6_ops;
+	rte_table_hash_key16_lru_ops;
+	rte_table_hash_key32_lru_ops;
+	rte_table_hash_key16_ext_ops;
+	rte_table_hash_key32_ext_ops;
+	rte_table_acl_ops;
+	rte_table_hash_lru_ops;
+	rte_table_hash_ext_ops;
+
+	local: *;
+};
+
diff --git a/lib/librte_timer/Makefile b/lib/librte_timer/Makefile
index 07eb0c6..9fb6079 100644
--- a/lib/librte_timer/Makefile
+++ b/lib/librte_timer/Makefile
@@ -36,6 +36,8 @@  LIB = librte_timer.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := rte_timer_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_TIMER) := rte_timer.c
 
diff --git a/lib/librte_timer/rte_timer_version.map b/lib/librte_timer/rte_timer_version.map
new file mode 100644
index 0000000..00b6b52
--- /dev/null
+++ b/lib/librte_timer/rte_timer_version.map
@@ -0,0 +1,16 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_timer_subsystem_init;
+	rte_timer_init;
+	rte_timer_reset;
+	rte_timer_reset_sync;
+	rte_timer_stop;
+	rte_timer_stop_sync;
+	rte_timer_pending;
+	rte_timer_manage;
+	rte_timer_dump_stats;
+
+	local: *;
+};
+
diff --git a/lib/librte_vhost/Makefile b/lib/librte_vhost/Makefile
index c008d64..96a7dd0 100644
--- a/lib/librte_vhost/Makefile
+++ b/lib/librte_vhost/Makefile
@@ -34,6 +34,8 @@  include $(RTE_SDK)/mk/rte.vars.mk
 # library name
 LIB = librte_vhost.a
 
+EXPORT_MAP := rte_vhost_version.map
+
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -D_FILE_OFFSET_BITS=64 -lfuse
 LDFLAGS += -lfuse
 # all source are stored in SRCS-y
diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
new file mode 100644
index 0000000..7685bb8
--- /dev/null
+++ b/lib/librte_vhost/rte_vhost_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+	rte_vhost_feature_disable;
+	rte_vhost_feature_enable;
+	rte_vhost_feature_get;
+	rte_vhost_enable_guest_notification;
+	rte_vhost_driver_register;
+	rte_vhost_driver_callback_register;
+	rte_vhost_driver_session_start;
+	rte_vhost_enqueue_burst;
+	rte_vhost_dequeue_burst;
+
+	local: *;
+};
diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
index 75e3652..1d3b646 100644
--- a/mk/rte.lib.mk
+++ b/mk/rte.lib.mk
@@ -41,7 +41,7 @@  VPATH += $(SRCDIR)
 ifeq ($(RTE_BUILD_SHARED_LIB),y)
 LIB := $(patsubst %.a,%.so,$(LIB))
 
-CPU_LDFLAGS += --version-script=$(EXPORT_MAP)
+CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
 
 endif