diff mbox series

[v2] build: list symbols exports in a single file

Message ID 20210406175910.24450-1-david.marchand@redhat.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers show
Series [v2] build: list symbols exports in a single file | expand

Checks

Context Check Description
ci/iol-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/intel-Testing success Testing PASS
ci/github-robot success github build: passed
ci/travis-robot success travis build: passed
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

David Marchand April 6, 2021, 5:59 p.m. UTC
Rather than have two files that keeps getting out of sync, let's
annotate the version.map to generate the Windows export file.

Note: Existing version.map annotation achieved with:
$ for dir in lib/librte_eal drivers/common/mlx5; do
    ./buildtools/map-list-symbol.sh $dir/*.map |
    while read file version sym; do
      ! git grep -qw $sym $dir/*.def || continue;
      sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
    done;
  done

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since v1:
- removed unused python imports in map_to_win.py,
- fixed symbol map check to ignore comments,
- aligned common/mlx5 map with exports.def (all symbols exported by
  Windows are available in Linux too),
- annotated common/mlx5 map,
- updated SPDX check,
- updated ABI update tool,

---
 MAINTAINERS                                   |   1 -
 buildtools/map_to_win.py                      |   9 +-
 devtools/check-spdx-tag.sh                    |   2 +-
 devtools/check-symbol-maps.sh                 |  22 +-
 devtools/update_version_map_abi.py            |  12 +-
 .../common/mlx5/rte_common_mlx5_exports.def   |  75 ----
 drivers/common/mlx5/version.map               |  79 ++--
 lib/librte_eal/rte_eal_exports.def            | 336 ------------------
 lib/librte_eal/version.map                    | 136 +++----
 9 files changed, 123 insertions(+), 549 deletions(-)
 delete mode 100644 drivers/common/mlx5/rte_common_mlx5_exports.def
 delete mode 100644 lib/librte_eal/rte_eal_exports.def

Comments

Thomas Monjalon April 6, 2021, 6:52 p.m. UTC | #1
About the title, it is not a single file but one file per lib/driver.
I think it would better convey the idea by saying "remove .def files".

06/04/2021 19:59, David Marchand:
> Rather than have two files that keeps getting out of sync, let's
> annotate the version.map to generate the Windows export file.
> 
> Note: Existing version.map annotation achieved with:
> $ for dir in lib/librte_eal drivers/common/mlx5; do
>     ./buildtools/map-list-symbol.sh $dir/*.map |
>     while read file version sym; do
>       ! git grep -qw $sym $dir/*.def || continue;
>       sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
>     done;
>   done

This patch keeps the exact same behaviour, right?
There are a lot of symbols in EAL and mlx5 which should
be exported for Windows too, but it is open for future fixes, right?
David Marchand April 6, 2021, 8:09 p.m. UTC | #2
On Tue, Apr 6, 2021 at 8:53 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> About the title, it is not a single file but one file per lib/driver.
> I think it would better convey the idea by saying "remove .def files".

Ok.

>
> 06/04/2021 19:59, David Marchand:
> > Rather than have two files that keeps getting out of sync, let's
> > annotate the version.map to generate the Windows export file.
> >
> > Note: Existing version.map annotation achieved with:
> > $ for dir in lib/librte_eal drivers/common/mlx5; do
> >     ./buildtools/map-list-symbol.sh $dir/*.map |
> >     while read file version sym; do
> >       ! git grep -qw $sym $dir/*.def || continue;
> >       sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
> >     done;
> >   done
>
> This patch keeps the exact same behaviour, right?

I checked by sorting/diff'ing previously committed .def files for EAL
and common/mlx5 with the newly generated ones.
No difference, once aligning the mlx5 version.map.

There is one change in behavior.
I thought as exports.def being a subset of the map files, and this
patch enforces it.
It seems there were some tries at going the opposite way, looking at
the comment in check-symbol-maps.sh.
But looking at the current common/mlx5 state, I don't see this as a
requirement (Linux and Windows share the same interface).


> There are a lot of symbols in EAL and mlx5 which should
> be exported for Windows too, but it is open for future fixes, right?

Not sure I get this question.

We have exports missing in EAL for some series posted on the ml
waiting for merges.
I suspect some recent merged changes have issues too (but did not check yet).
This current patch does not address such issues and we need fixes
afterwards if this is what you mean.
Thomas Monjalon April 6, 2021, 10:39 p.m. UTC | #3
06/04/2021 22:09, David Marchand:
> On Tue, Apr 6, 2021 at 8:53 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > About the title, it is not a single file but one file per lib/driver.
> > I think it would better convey the idea by saying "remove .def files".
> 
> Ok.
> 
> >
> > 06/04/2021 19:59, David Marchand:
> > > Rather than have two files that keeps getting out of sync, let's
> > > annotate the version.map to generate the Windows export file.
> > >
> > > Note: Existing version.map annotation achieved with:
> > > $ for dir in lib/librte_eal drivers/common/mlx5; do
> > >     ./buildtools/map-list-symbol.sh $dir/*.map |
> > >     while read file version sym; do
> > >       ! git grep -qw $sym $dir/*.def || continue;
> > >       sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
> > >     done;
> > >   done
> >
> > This patch keeps the exact same behaviour, right?
> 
> I checked by sorting/diff'ing previously committed .def files for EAL
> and common/mlx5 with the newly generated ones.
> No difference, once aligning the mlx5 version.map.
> 
> There is one change in behavior.
> I thought as exports.def being a subset of the map files, and this
> patch enforces it.
> It seems there were some tries at going the opposite way, looking at
> the comment in check-symbol-maps.sh.
> But looking at the current common/mlx5 state, I don't see this as a
> requirement (Linux and Windows share the same interface).
> 
> 
> > There are a lot of symbols in EAL and mlx5 which should
> > be exported for Windows too, but it is open for future fixes, right?
> 
> Not sure I get this question.
> 
> We have exports missing in EAL for some series posted on the ml
> waiting for merges.
> I suspect some recent merged changes have issues too (but did not check yet).
> This current patch does not address such issues and we need fixes
> afterwards if this is what you mean.

Yes this is what I mean.
I wanted to make clear to people in Cc list that some fixes are required
as follow-up: some symbols in EAL and mlx5 are missing for Windows.
David Marchand April 7, 2021, 8:16 a.m. UTC | #4
On Tue, Apr 6, 2021 at 10:09 PM David Marchand
<david.marchand@redhat.com> wrote:
> We have exports missing in EAL for some series posted on the ml
> waiting for merges.
> I suspect some recent merged changes have issues too (but did not check yet).
> This current patch does not address such issues and we need fixes
> afterwards if this is what you mean.

I did a first pass.

I see symbols from rte_random.c and rte_version.c not exported, while
those files are compiled for Windows.
Could you explain why these are not exported?
Dmitry Kozlyuk April 7, 2021, 8:53 a.m. UTC | #5
2021-04-07 10:16 (UTC+0200), David Marchand:
> On Tue, Apr 6, 2021 at 10:09 PM David Marchand
> <david.marchand@redhat.com> wrote:
> > We have exports missing in EAL for some series posted on the ml
> > waiting for merges.
> > I suspect some recent merged changes have issues too (but did not check yet).
> > This current patch does not address such issues and we need fixes
> > afterwards if this is what you mean.  
> 
> I did a first pass.
> 
> I see symbols from rte_random.c and rte_version.c not exported, while
> those files are compiled for Windows.
> Could you explain why these are not exported?

These are just forgotten, can be safely exported.
Thomas Monjalon April 7, 2021, 8:57 a.m. UTC | #6
07/04/2021 10:53, Dmitry Kozlyuk:
> 2021-04-07 10:16 (UTC+0200), David Marchand:
> > On Tue, Apr 6, 2021 at 10:09 PM David Marchand
> > <david.marchand@redhat.com> wrote:
> > > We have exports missing in EAL for some series posted on the ml
> > > waiting for merges.
> > > I suspect some recent merged changes have issues too (but did not check yet).
> > > This current patch does not address such issues and we need fixes
> > > afterwards if this is what you mean.  
> > 
> > I did a first pass.
> > 
> > I see symbols from rte_random.c and rte_version.c not exported, while
> > those files are compiled for Windows.
> > Could you explain why these are not exported?
> 
> These are just forgotten, can be safely exported.

I prefer we don't mix fixes with this format rework.
Please send fixes on top of this patch.
Cc'ed Tal & Ophir for mlx5.
Tal Shnaiderman April 7, 2021, 11:38 a.m. UTC | #7
> Subject: Re: [PATCH v2] build: list symbols exports in a single file
> 
> External email: Use caution opening links or attachments
> 
> 
> 07/04/2021 10:53, Dmitry Kozlyuk:
> > 2021-04-07 10:16 (UTC+0200), David Marchand:
> > > On Tue, Apr 6, 2021 at 10:09 PM David Marchand
> > > <david.marchand@redhat.com> wrote:
> > > > We have exports missing in EAL for some series posted on the ml
> > > > waiting for merges.
> > > > I suspect some recent merged changes have issues too (but did not
> check yet).
> > > > This current patch does not address such issues and we need fixes
> > > > afterwards if this is what you mean.
> > >
> > > I did a first pass.
> > >
> > > I see symbols from rte_random.c and rte_version.c not exported,
> > > while those files are compiled for Windows.
> > > Could you explain why these are not exported?
> >
> > These are just forgotten, can be safely exported.
> 
> I prefer we don't mix fixes with this format rework.
> Please send fixes on top of this patch.
> Cc'ed Tal & Ophir for mlx5.
> 

Thanks David for resolving the duplication.

For mlx5, the functions mlx5_devx_cmd_*, mlx5_mp_* and mlx5_memory_stat_dump are compiled but currently not used.

I can send a separate patch exporting all of them to be more aligned with Linux, or we can export them whenever we'll actually start using them.

Regardless: 

Tested-by: Tal Shnaiderman <talshn@nvidia.com>
Thomas Monjalon April 8, 2021, 2:51 p.m. UTC | #8
06/04/2021 19:59, David Marchand:
> Rather than have two files that keeps getting out of sync, let's
> annotate the version.map to generate the Windows export file.
> 
> Note: Existing version.map annotation achieved with:
> $ for dir in lib/librte_eal drivers/common/mlx5; do
>     ./buildtools/map-list-symbol.sh $dir/*.map |
>     while read file version sym; do
>       ! git grep -qw $sym $dir/*.def || continue;
>       sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
>     done;
>   done
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>

Acked-by: Thomas Monjalon <thomas@monjalon.net>

That's a nice improvement.
Fixes to remove WINDOWS_NO_EXPORT annotations would be great to see
from the original authors of the concerned symbols.

I think we should merge this patch quickly to avoid having more
discrepancies with the coming EAL patches.
David Marchand April 8, 2021, 4:11 p.m. UTC | #9
On Tue, Apr 6, 2021 at 7:59 PM David Marchand <david.marchand@redhat.com> wrote:
>
> Rather than have two files that keeps getting out of sync, let's
> annotate the version.map to generate the Windows export file.
>
> Note: Existing version.map annotation achieved with:
> $ for dir in lib/librte_eal drivers/common/mlx5; do
>     ./buildtools/map-list-symbol.sh $dir/*.map |
>     while read file version sym; do
>       ! git grep -qw $sym $dir/*.def || continue;
>       sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
>     done;
>   done
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>

Tested-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>

Updated commitlog and sorted common/mlx5 updates (from offlist
comments with Thomas).

Applied, thanks.
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 0ec5588540..f2d600d0cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -333,7 +333,6 @@  M: Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>
 M: Dmitry Malloy <dmitrym@microsoft.com>
 M: Pallavi Kadam <pallavi.kadam@intel.com>
 F: lib/librte_eal/windows/
-F: lib/librte_eal/rte_eal_exports.def
 F: buildtools/map_to_win.py
 F: doc/guides/windows_gsg/
 
diff --git a/buildtools/map_to_win.py b/buildtools/map_to_win.py
index 2a6cb88605..aa1752cacd 100644
--- a/buildtools/map_to_win.py
+++ b/buildtools/map_to_win.py
@@ -3,11 +3,10 @@ 
 # Copyright(c) 2019 Intel Corporation
 
 import sys
-from os.path import dirname, basename, join, exists
 
 
 def is_function_line(ln):
-    return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln
+    return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln and "# WINDOWS_NO_EXPORT" not in ln
 
 # MinGW keeps the original .map file but replaces per_lcore* to __emutls_v.per_lcore*
 def create_mingw_map_file(input_map, output_map):
@@ -24,12 +23,6 @@  def main(args):
         create_mingw_map_file(args[1], args[2])
         return 0
 
-# special case, allow override if an def file already exists alongside map file
-    override_file = join(dirname(args[1]), basename(args[2]))
-    if exists(override_file):
-        with open(override_file) as f_in:
-            functions = f_in.readlines()
-
 # generate def file from map file.
 # This works taking indented lines only which end with a ";" and which don't
 # have a colon in them, i.e. the lines defining functions only.
diff --git a/devtools/check-spdx-tag.sh b/devtools/check-spdx-tag.sh
index a0ec1ed5b6..3f2912e922 100755
--- a/devtools/check-spdx-tag.sh
+++ b/devtools/check-spdx-tag.sh
@@ -25,7 +25,7 @@  check_spdx() {
 	':^*/Kbuild' ':^*/README' \
 	':^license/' ':^config/' ':^buildtools/' \
 	':^*.cocci' ':^*.abignore' \
-	':^*.def' ':^*.map' ':^*.ini' ':^*.data' ':^*.cfg' ':^*.txt' \
+	':^*.map' ':^*.ini' ':^*.data' ':^*.cfg' ':^*.txt' \
 	':^*.svg' ':^*.png'\
 	> $tmpfile
 
diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
index c3cbcaf720..f06353fc75 100755
--- a/devtools/check-symbol-maps.sh
+++ b/devtools/check-symbol-maps.sh
@@ -12,7 +12,7 @@  ret=0
 find_orphan_symbols ()
 {
     for map in $(find lib drivers -name '*.map') ; do
-        for sym in $(sed -rn 's,^([^}]*_.*);,\1,p' $map) ; do
+        for sym in $(sed -rn 's,^([^}]*_.*);.*$,\1,p' $map) ; do
             if echo $sym | grep -q '^per_lcore_' ; then
                 symsrc=${sym#per_lcore_}
             elif echo $sym | grep -q '^__rte_.*_trace_' ; then
@@ -35,24 +35,4 @@  if [ -n "$orphan_symbols" ] ; then
     ret=1
 fi
 
-find_orphan_windows_symbols ()
-{
-    for def in $(find lib drivers -name '*_exports.def') ; do
-        if echo $def | grep -q 'common_mlx5' ; then
-            continue # mlx5 exports different symbols per OS
-        fi
-        map=$(dirname $def)/version.map
-        for sym in $(grep -v ^EXPORTS $def); do
-            grep -q $sym $map || echo $sym
-        done
-    done
-}
-
-orphan_windows_symbols=$(find_orphan_windows_symbols)
-if [ -n "$orphan_windows_symbols" ] ; then
-    echo "Found only in Windows export file:"
-    echo "$orphan_windows_symbols" | sed 's,^,\t,'
-    ret=1
-fi
-
 exit $ret
diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
index d3068bbd2d..d17b02a327 100755
--- a/devtools/update_version_map_abi.py
+++ b/devtools/update_version_map_abi.py
@@ -15,13 +15,17 @@ 
 
 
 def __parse_map_file(f_in):
-    # match function name, followed by semicolon, followed by EOL, optionally
-    # with whitespace in between each item
+    # match function name, followed by semicolon, followed by EOL or comments,
+    # optionally with whitespace in between each item
     func_line_regex = re.compile(r"\s*"
+                                 r"(?P<line>"
                                  r"(?P<func>[a-zA-Z_0-9]+)"
                                  r"\s*"
                                  r";"
                                  r"\s*"
+                                 r"(?P<comment>#.+)?"
+                                 r")"
+                                 r"\s*"
                                  r"$")
     # match section name, followed by opening bracked, followed by EOL,
     # optionally with whitespace in between each item
@@ -99,7 +103,7 @@  def __parse_map_file(f_in):
         # is this a function?
         match = func_line_regex.match(line)
         if match:
-            stable_lines.add(match.group("func"))
+            stable_lines.add(match.group("line"))
 
     return has_stable, stable_lines, experimental_lines, internal_lines
 
@@ -116,7 +120,7 @@  def __generate_stable_abi(f_out, abi_major, lines):
 
         # print all stable lines, alphabetically sorted
         for line in sorted(lines):
-            print("\t{};".format(line), file=f_out)
+            print("\t{}".format(line), file=f_out)
 
         # another blank line
         print(file=f_out)
diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
deleted file mode 100644
index fd62b806ca..0000000000
--- a/drivers/common/mlx5/rte_common_mlx5_exports.def
+++ /dev/null
@@ -1,75 +0,0 @@ 
-EXPORTS
-	haswell_broadwell_cpu
-
-	mlx5_common_init
-
-	mlx5_create_mr_ext
-
-	mlx5_devx_cmd_alloc_pd
-	mlx5_devx_cmd_create_cq
-	mlx5_devx_cmd_create_flex_parser
-	mlx5_devx_cmd_create_qp
-	mlx5_devx_cmd_create_rq
-	mlx5_devx_cmd_create_rqt
-	mlx5_devx_cmd_create_sq
-	mlx5_devx_cmd_create_tir
-	mlx5_devx_cmd_create_td
-	mlx5_devx_cmd_create_tis
-	mlx5_devx_cmd_create_virtq
-	mlx5_devx_cmd_destroy
-	mlx5_devx_cmd_flow_counter_alloc
-	mlx5_devx_cmd_flow_counter_query
-	mlx5_devx_cmd_flow_dump
-	mlx5_devx_cmd_mkey_create
-	mlx5_devx_cmd_modify_qp_state
-	mlx5_devx_cmd_modify_rq
-	mlx5_devx_cmd_modify_rqt
-	mlx5_devx_cmd_modify_sq
-	mlx5_devx_cmd_modify_tir
-	mlx5_devx_cmd_modify_virtq
-	mlx5_devx_cmd_qp_query_tis_td
-	mlx5_devx_cmd_query_hca_attr
-	mlx5_devx_cmd_query_parse_samples
-	mlx5_devx_cmd_query_virtq
-	mlx5_devx_cmd_register_read
-	mlx5_devx_get_out_command_status
-	mlx5_devx_cmd_create_flow_hit_aso_obj
-	mlx5_devx_cmd_create_geneve_tlv_option
-
-	mlx5_devx_cq_create
-	mlx5_devx_cq_destroy
-	mlx5_devx_rq_create
-	mlx5_devx_rq_destroy
-	mlx5_devx_sq_create
-	mlx5_devx_sq_destroy
-
-	mlx5_glue
-
-	mlx5_malloc_mem_select
-	mlx5_mr_btree_init
-	mlx5_mr_btree_free
-	mlx5_mr_btree_dump
-	mlx5_mr_addr2mr_bh
-	mlx5_mr_release_cache
-	mlx5_mr_dump_cache
-	mlx5_mr_rebuild_cache
-	mlx5_mr_insert_cache
-	mlx5_mr_lookup_cache
-	mlx5_mr_lookup_list
-	mlx5_mr_create_primary
-	mlx5_mr_flush_local_cache
-	mlx5_mp_req_queue_state_modify
-	mlx5_mr_free
-
-	mlx5_pci_driver_register
-
-	mlx5_malloc
-	mlx5_realloc
-	mlx5_free
-
-	mlx5_os_alloc_pd
-	mlx5_os_dealloc_pd
-	mlx5_os_dereg_mr
-	mlx5_os_reg_mr
-	mlx5_os_umem_reg
-	mlx5_os_umem_dereg
diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
index 91f3fa5779..299c17cd26 100644
--- a/drivers/common/mlx5/version.map
+++ b/drivers/common/mlx5/version.map
@@ -3,12 +3,12 @@  INTERNAL {
 
 	mlx5_common_init;
 
-	mlx5_common_verbs_reg_mr;
-	mlx5_common_verbs_dereg_mr;
+	mlx5_common_verbs_reg_mr; # WINDOWS_NO_EXPORT
+	mlx5_common_verbs_dereg_mr; # WINDOWS_NO_EXPORT
 
 	mlx5_create_mr_ext;
 
-	mlx5_dev_to_pci_addr;
+	mlx5_dev_to_pci_addr; # WINDOWS_NO_EXPORT
 
 	mlx5_devx_cmd_alloc_pd;
 	mlx5_devx_cmd_create_cq;
@@ -20,7 +20,7 @@  INTERNAL {
 	mlx5_devx_cmd_create_tir;
 	mlx5_devx_cmd_create_td;
 	mlx5_devx_cmd_create_tis;
-	mlx5_devx_cmd_create_virtio_q_counters;
+	mlx5_devx_cmd_create_virtio_q_counters; # WINDOWS_NO_EXPORT
 	mlx5_devx_cmd_create_virtq;
 	mlx5_devx_cmd_create_flow_hit_aso_obj;
 	mlx5_devx_cmd_create_geneve_tlv_option;
@@ -38,14 +38,14 @@  INTERNAL {
 	mlx5_devx_cmd_qp_query_tis_td;
 	mlx5_devx_cmd_query_hca_attr;
 	mlx5_devx_cmd_query_parse_samples;
-	mlx5_devx_cmd_query_virtio_q_counters;
+	mlx5_devx_cmd_query_virtio_q_counters; # WINDOWS_NO_EXPORT
 	mlx5_devx_cmd_query_virtq;
-	mlx5_devx_cmd_queue_counter_alloc;
-	mlx5_devx_cmd_queue_counter_query;
+	mlx5_devx_cmd_queue_counter_alloc; # WINDOWS_NO_EXPORT
+	mlx5_devx_cmd_queue_counter_query; # WINDOWS_NO_EXPORT
 	mlx5_devx_cmd_register_read;
-	mlx5_devx_cmd_wq_query;
+	mlx5_devx_cmd_wq_query; # WINDOWS_NO_EXPORT
 	mlx5_devx_get_out_command_status;
-	mlx5_devx_alloc_uar;
+	mlx5_devx_alloc_uar; # WINDOWS_NO_EXPORT
 
 	mlx5_devx_cq_create;
 	mlx5_devx_cq_destroy;
@@ -54,15 +54,15 @@  INTERNAL {
 	mlx5_devx_sq_create;
 	mlx5_devx_sq_destroy;
 
-	mlx5_get_ifname_sysfs;
+	mlx5_get_ifname_sysfs; # WINDOWS_NO_EXPORT
 
-	mlx5_mp_init_primary;
-	mlx5_mp_uninit_primary;
-	mlx5_mp_init_secondary;
-	mlx5_mp_uninit_secondary;
-	mlx5_mp_req_mr_create;
+	mlx5_mp_init_primary; # WINDOWS_NO_EXPORT
+	mlx5_mp_uninit_primary; # WINDOWS_NO_EXPORT
+	mlx5_mp_init_secondary; # WINDOWS_NO_EXPORT
+	mlx5_mp_uninit_secondary; # WINDOWS_NO_EXPORT
+	mlx5_mp_req_mr_create; # WINDOWS_NO_EXPORT
 	mlx5_mp_req_queue_state_modify;
-	mlx5_mp_req_verbs_cmd_fd;
+	mlx5_mp_req_verbs_cmd_fd; # WINDOWS_NO_EXPORT
 
 	mlx5_mr_btree_init;
 	mlx5_mr_btree_free;
@@ -78,31 +78,40 @@  INTERNAL {
 	mlx5_mr_flush_local_cache;
 	mlx5_mr_free;
 
-	mlx5_nl_allmulti;
-	mlx5_nl_devlink_family_id_get;
-	mlx5_nl_driver_reload;
-	mlx5_nl_enable_roce_get;
-	mlx5_nl_enable_roce_set;
-	mlx5_nl_ifindex;
-	mlx5_nl_init;
-	mlx5_nl_mac_addr_add;
-	mlx5_nl_mac_addr_flush;
-	mlx5_nl_mac_addr_remove;
-	mlx5_nl_mac_addr_sync;
-	mlx5_nl_portnum;
-	mlx5_nl_promisc;
-	mlx5_nl_switch_info;
-	mlx5_nl_vf_mac_addr_modify;
-	mlx5_nl_vlan_vmwa_create;
-	mlx5_nl_vlan_vmwa_delete;
+	mlx5_nl_allmulti; # WINDOWS_NO_EXPORT
+	mlx5_nl_devlink_family_id_get; # WINDOWS_NO_EXPORT
+	mlx5_nl_driver_reload; # WINDOWS_NO_EXPORT
+	mlx5_nl_enable_roce_get; # WINDOWS_NO_EXPORT
+	mlx5_nl_enable_roce_set; # WINDOWS_NO_EXPORT
+	mlx5_nl_ifindex; # WINDOWS_NO_EXPORT
+	mlx5_nl_init; # WINDOWS_NO_EXPORT
+	mlx5_nl_mac_addr_add; # WINDOWS_NO_EXPORT
+	mlx5_nl_mac_addr_flush; # WINDOWS_NO_EXPORT
+	mlx5_nl_mac_addr_remove; # WINDOWS_NO_EXPORT
+	mlx5_nl_mac_addr_sync; # WINDOWS_NO_EXPORT
+	mlx5_nl_portnum; # WINDOWS_NO_EXPORT
+	mlx5_nl_promisc; # WINDOWS_NO_EXPORT
+	mlx5_nl_switch_info; # WINDOWS_NO_EXPORT
+	mlx5_nl_vf_mac_addr_modify; # WINDOWS_NO_EXPORT
+	mlx5_nl_vlan_vmwa_create; # WINDOWS_NO_EXPORT
+	mlx5_nl_vlan_vmwa_delete; # WINDOWS_NO_EXPORT
 
-	mlx5_translate_port_name;
+	mlx5_translate_port_name; # WINDOWS_NO_EXPORT
 
 	mlx5_malloc_mem_select;
-	mlx5_memory_stat_dump;
+	mlx5_memory_stat_dump; # WINDOWS_NO_EXPORT
 	mlx5_malloc;
 	mlx5_realloc;
 	mlx5_free;
 
 	mlx5_pci_driver_register;
+
+	haswell_broadwell_cpu;
+	mlx5_glue;
+	mlx5_os_alloc_pd;
+	mlx5_os_dealloc_pd;
+	mlx5_os_dereg_mr;
+	mlx5_os_reg_mr;
+	mlx5_os_umem_reg;
+	mlx5_os_umem_dereg;
 };
diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def
deleted file mode 100644
index c320077547..0000000000
--- a/lib/librte_eal/rte_eal_exports.def
+++ /dev/null
@@ -1,336 +0,0 @@ 
-EXPORTS
-	__rte_panic
-	per_lcore__lcore_id
-	per_lcore__rte_errno
-	per_lcore__thread_id
-	rte_bus_dump
-	rte_bus_find
-	rte_bus_find_by_device
-	rte_bus_find_by_name
-	rte_bus_get_iommu_class
-	rte_bus_probe
-	rte_bus_register
-	rte_bus_scan
-	rte_bus_unregister
-	rte_calloc
-	rte_calloc_socket
-	rte_cpu_get_flag_enabled
-	rte_cpu_get_flag_name
-	rte_ctrl_thread_create
-	rte_delay_us
-	rte_delay_us_block
-	rte_delay_us_callback_register
-	rte_dev_is_probed
-	rte_dev_probe
-	rte_dev_remove
-	rte_devargs_add
-	rte_devargs_dump
-	rte_devargs_insert
-	rte_devargs_next
-	rte_devargs_parse
-	rte_devargs_parsef
-	rte_devargs_remove
-	rte_devargs_type_count
-	rte_dump_physmem_layout
-	rte_dump_stack
-	rte_dump_tailq
-	rte_eal_alarm_cancel
-	rte_eal_alarm_set
-	rte_eal_cleanup
-	rte_eal_get_lcore_state
-	rte_eal_get_physmem_size
-	rte_eal_get_runtime_dir
-	rte_eal_has_hugepages
-	rte_eal_has_pci
-	rte_eal_hotplug_add
-	rte_eal_hotplug_remove
-	rte_eal_init
-	rte_eal_iova_mode
-	rte_eal_lcore_role
-	rte_eal_mbuf_user_pool_ops
-	rte_eal_mp_remote_launch
-	rte_eal_mp_wait_lcore
-	rte_eal_process_type
-	rte_eal_remote_launch
-	rte_eal_tailq_lookup
-	rte_eal_tailq_register
-	rte_eal_using_phys_addrs
-	rte_eal_wait_lcore
-	rte_epoll_ctl
-	rte_epoll_wait
-	rte_exit
-	rte_free
-	rte_get_main_lcore
-	rte_get_next_lcore
-	rte_get_tsc_hz
-	rte_hexdump
-	rte_hypervisor_get
-	rte_intr_allow_others
-	rte_intr_callback_register
-	rte_intr_callback_unregister
-	rte_intr_cap_multiple
-	rte_intr_disable
-	rte_intr_dp_is_en
-	rte_intr_efd_disable
-	rte_intr_efd_enable
-	rte_intr_enable
-	rte_intr_free_epoll_fd
-	rte_intr_rx_ctl
-	rte_intr_tls_epfd
-	rte_lcore_count
-	rte_lcore_has_role
-	rte_lcore_index
-	rte_lcore_is_enabled
-	rte_lcore_to_socket_id
-	rte_log
-	rte_log_cur_msg_loglevel
-	rte_log_cur_msg_logtype
-	rte_log_dump
-	rte_log_get_global_level
-	rte_log_get_level
-	rte_log_get_stream
-	rte_log_register
-	rte_log_set_global_level
-	rte_log_set_level
-	rte_log_set_level_pattern
-	rte_log_set_level_regexp
-	rte_malloc
-	rte_malloc_dump_stats
-	rte_malloc_get_socket_stats
-	rte_malloc_set_limit
-	rte_malloc_socket
-	rte_malloc_validate
-	rte_malloc_virt2iova
-	rte_mcfg_mem_read_lock
-	rte_mcfg_mem_read_unlock
-	rte_mcfg_mem_write_lock
-	rte_mcfg_mem_write_unlock
-	rte_mcfg_mempool_read_lock
-	rte_mcfg_mempool_read_unlock
-	rte_mcfg_mempool_write_lock
-	rte_mcfg_mempool_write_unlock
-	rte_mcfg_tailq_read_lock
-	rte_mcfg_tailq_read_unlock
-	rte_mcfg_tailq_write_lock
-	rte_mcfg_tailq_write_unlock
-	rte_mem_lock_page
-	rte_mem_virt2iova
-	rte_mem_virt2phy
-	rte_memdump
-	rte_memory_get_nchannel
-	rte_memory_get_nrank
-	rte_memzone_dump
-	rte_memzone_free
-	rte_memzone_lookup
-	rte_memzone_reserve
-	rte_memzone_reserve_aligned
-	rte_memzone_reserve_bounded
-	rte_memzone_walk
-	rte_openlog_stream
-	rte_rand
-	rte_realloc
-	rte_reciprocal_value
-	rte_reciprocal_value_u64
-	rte_rtm_supported
-	rte_service_attr_get
-	rte_service_attr_reset_all
-	rte_service_component_register
-	rte_service_component_runstate_set
-	rte_service_component_unregister
-	rte_service_dump
-	rte_service_finalize
-	rte_service_get_by_name
-	rte_service_get_count
-	rte_service_get_name
-	rte_service_lcore_add
-	rte_service_lcore_attr_get
-	rte_service_lcore_attr_reset_all
-	rte_service_lcore_count
-	rte_service_lcore_count_services
-	rte_service_lcore_del
-	rte_service_lcore_list
-	rte_service_lcore_reset_all
-	rte_service_lcore_start
-	rte_service_lcore_stop
-	rte_service_map_lcore_get
-	rte_service_map_lcore_set
-	rte_service_may_be_active
-	rte_service_probe_capability
-	rte_service_run_iter_on_app_lcore
-	rte_service_runstate_get
-	rte_service_runstate_set
-	rte_service_set_runstate_mapped_check
-	rte_service_set_stats_enable
-	rte_service_start_with_defaults
-	rte_set_application_usage_hook
-	rte_socket_count
-	rte_socket_id
-	rte_socket_id_by_idx
-	rte_strerror
-	rte_strscpy
-	rte_strsplit
-	rte_sys_gettid
-	rte_thread_get_affinity
-	rte_thread_set_affinity
-	rte_thread_setname
-	rte_vfio_container_dma_map
-	rte_vfio_container_dma_unmap
-	rte_vlog
-	rte_zmalloc
-	rte_zmalloc_socket
-
-	rte_mp_action_register
-	rte_mp_action_unregister
-	rte_mp_reply
-	rte_mp_sendmsg
-
-	rte_dev_event_callback_register
-	rte_dev_event_callback_unregister
-	rte_fbarray_attach
-	rte_fbarray_destroy
-	rte_fbarray_detach
-	rte_fbarray_dump_metadata
-	rte_fbarray_find_contig_free
-	rte_fbarray_find_contig_used
-	rte_fbarray_find_idx
-	rte_fbarray_find_next_free
-	rte_fbarray_find_next_n_free
-	rte_fbarray_find_next_n_used
-	rte_fbarray_find_next_used
-	rte_fbarray_get
-	rte_fbarray_init
-	rte_fbarray_is_used
-	rte_fbarray_set_free
-	rte_fbarray_set_used
-	rte_log_register_type_and_pick_level
-	rte_malloc_dump_heaps
-	rte_mem_alloc_validator_register
-	rte_mem_alloc_validator_unregister
-	rte_mem_check_dma_mask
-	rte_mem_event_callback_register
-	rte_mem_event_callback_unregister
-	rte_mem_iova2virt
-	rte_mem_virt2memseg
-	rte_mem_virt2memseg_list
-	rte_memseg_contig_walk
-	rte_memseg_list_walk
-	rte_memseg_walk
-	rte_mp_request_async
-	rte_mp_request_sync
-
-	rte_class_find
-	rte_class_find_by_name
-	rte_class_register
-	rte_class_unregister
-	rte_dev_iterator_init
-	rte_dev_iterator_next
-	rte_fbarray_find_prev_free
-	rte_fbarray_find_prev_n_free
-	rte_fbarray_find_prev_n_used
-	rte_fbarray_find_prev_used
-	rte_fbarray_find_rev_contig_free
-	rte_fbarray_find_rev_contig_used
-	rte_memseg_contig_walk_thread_unsafe
-	rte_memseg_list_walk_thread_unsafe
-	rte_memseg_walk_thread_unsafe
-
-	rte_delay_us_sleep
-	rte_dev_event_callback_process
-	rte_malloc_heap_create
-	rte_malloc_heap_destroy
-	rte_malloc_heap_get_socket
-	rte_malloc_heap_memory_add
-	rte_malloc_heap_memory_attach
-	rte_malloc_heap_memory_detach
-	rte_malloc_heap_memory_remove
-	rte_malloc_heap_socket_is_external
-	rte_mem_check_dma_mask_thread_unsafe
-	rte_mem_set_dma_mask
-	rte_memseg_get_fd
-	rte_memseg_get_fd_offset
-	rte_memseg_get_fd_offset_thread_unsafe
-	rte_memseg_get_fd_thread_unsafe
-
-	rte_extmem_attach
-	rte_extmem_detach
-	rte_extmem_register
-	rte_extmem_unregister
-
-	rte_dev_dma_map
-	rte_dev_dma_unmap
-	rte_fbarray_find_biggest_free
-	rte_fbarray_find_biggest_used
-	rte_fbarray_find_rev_biggest_free
-	rte_fbarray_find_rev_biggest_used
-	rte_intr_callback_unregister_pending
-	rte_realloc_socket
-
-	rte_intr_ack
-	rte_lcore_cpuset
-	rte_lcore_to_cpu_id
-	rte_mcfg_timer_lock
-	rte_mcfg_timer_unlock
-	rte_mcfg_get_single_file_segments
-
-	rte_thread_is_intr
-
-	__rte_eal_trace_alarm_cancel
-	__rte_eal_trace_alarm_set
-	__rte_eal_trace_generic_double
-	__rte_eal_trace_generic_float
-	__rte_eal_trace_generic_func
-	__rte_eal_trace_generic_i16
-	__rte_eal_trace_generic_i32
-	__rte_eal_trace_generic_i64
-	__rte_eal_trace_generic_i8
-	__rte_eal_trace_generic_int
-	__rte_eal_trace_generic_long
-	__rte_eal_trace_generic_ptr
-	__rte_eal_trace_generic_str
-	__rte_eal_trace_generic_u16
-	__rte_eal_trace_generic_u32
-	__rte_eal_trace_generic_u64
-	__rte_eal_trace_generic_u8
-	__rte_eal_trace_generic_void
-	__rte_eal_trace_intr_callback_register
-	__rte_eal_trace_intr_callback_unregister
-	__rte_eal_trace_intr_enable
-	__rte_eal_trace_intr_disable
-	__rte_eal_trace_mem_free
-	__rte_eal_trace_mem_malloc
-	__rte_eal_trace_mem_realloc
-	__rte_eal_trace_mem_zmalloc
-	__rte_eal_trace_memzone_free
-	__rte_eal_trace_memzone_lookup
-	__rte_eal_trace_memzone_reserve
-	__rte_eal_trace_thread_lcore_ready
-	__rte_eal_trace_thread_remote_launch
-	__rte_trace_mem_per_thread_alloc
-	__rte_trace_point_emit_field
-	__rte_trace_point_register
-	per_lcore_trace_mem
-	per_lcore_trace_point_sz
-	rte_log_can_log
-
-	rte_lcore_callback_register
-	rte_lcore_callback_unregister
-	rte_lcore_dump
-	rte_lcore_iterate
-	rte_mp_disable
-	rte_service_lcore_may_be_active
-	rte_thread_register
-	rte_thread_unregister
-
-	rte_epoll_wait_interruptible
-	rte_vect_get_max_simd_bitwidth
-	rte_vect_set_max_simd_bitwidth
-
-	rte_thread_key_create
-	rte_thread_key_delete
-	rte_thread_value_get
-	rte_thread_value_set
-
-	rte_mem_lock
-	rte_mem_map
-	rte_mem_page_size
-	rte_mem_unmap
diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map
index e23745ae6e..151330b1b5 100644
--- a/lib/librte_eal/version.map
+++ b/lib/librte_eal/version.map
@@ -2,8 +2,8 @@  DPDK_21 {
 	global:
 
 	__rte_panic;
-	eal_parse_sysfs_value;
-	eal_timer_source;
+	eal_parse_sysfs_value; # WINDOWS_NO_EXPORT
+	eal_timer_source; # WINDOWS_NO_EXPORT
 	per_lcore__lcore_id;
 	per_lcore__rte_errno;
 	per_lcore__thread_id;
@@ -20,9 +20,9 @@  DPDK_21 {
 	rte_calloc_socket;
 	rte_cpu_get_flag_enabled;
 	rte_cpu_get_flag_name;
-	rte_cpu_is_supported;
+	rte_cpu_is_supported; # WINDOWS_NO_EXPORT
 	rte_ctrl_thread_create;
-	rte_cycles_vmware_tsc_map;
+	rte_cycles_vmware_tsc_map; # WINDOWS_NO_EXPORT
 	rte_delay_us;
 	rte_delay_us_block;
 	rte_delay_us_callback_register;
@@ -43,7 +43,7 @@  DPDK_21 {
 	rte_eal_alarm_cancel;
 	rte_eal_alarm_set;
 	rte_eal_cleanup;
-	rte_eal_create_uio_dev;
+	rte_eal_create_uio_dev; # WINDOWS_NO_EXPORT
 	rte_eal_get_lcore_state;
 	rte_eal_get_physmem_size;
 	rte_eal_get_runtime_dir;
@@ -51,34 +51,34 @@  DPDK_21 {
 	rte_eal_has_pci;
 	rte_eal_hotplug_add;
 	rte_eal_hotplug_remove;
-	rte_eal_hpet_init;
+	rte_eal_hpet_init; # WINDOWS_NO_EXPORT
 	rte_eal_init;
-	rte_eal_iopl_init;
+	rte_eal_iopl_init; # WINDOWS_NO_EXPORT
 	rte_eal_iova_mode;
 	rte_eal_lcore_role;
 	rte_eal_mbuf_user_pool_ops;
 	rte_eal_mp_remote_launch;
 	rte_eal_mp_wait_lcore;
-	rte_eal_primary_proc_alive;
+	rte_eal_primary_proc_alive; # WINDOWS_NO_EXPORT
 	rte_eal_process_type;
 	rte_eal_remote_launch;
 	rte_eal_tailq_lookup;
 	rte_eal_tailq_register;
 	rte_eal_using_phys_addrs;
-	rte_eal_vfio_intr_mode;
+	rte_eal_vfio_intr_mode; # WINDOWS_NO_EXPORT
 	rte_eal_wait_lcore;
 	rte_epoll_ctl;
 	rte_epoll_wait;
 	rte_exit;
 	rte_free;
-	rte_get_hpet_cycles;
-	rte_get_hpet_hz;
+	rte_get_hpet_cycles; # WINDOWS_NO_EXPORT
+	rte_get_hpet_hz; # WINDOWS_NO_EXPORT
 	rte_get_main_lcore;
 	rte_get_next_lcore;
 	rte_get_tsc_hz;
 	rte_hexdump;
 	rte_hypervisor_get;
-	rte_hypervisor_get_name;
+	rte_hypervisor_get_name; # WINDOWS_NO_EXPORT
 	rte_intr_allow_others;
 	rte_intr_callback_register;
 	rte_intr_callback_unregister;
@@ -91,12 +91,12 @@  DPDK_21 {
 	rte_intr_free_epoll_fd;
 	rte_intr_rx_ctl;
 	rte_intr_tls_epfd;
-	rte_keepalive_create;
-	rte_keepalive_dispatch_pings;
-	rte_keepalive_mark_alive;
-	rte_keepalive_mark_sleep;
-	rte_keepalive_register_core;
-	rte_keepalive_register_relay_callback;
+	rte_keepalive_create; # WINDOWS_NO_EXPORT
+	rte_keepalive_dispatch_pings; # WINDOWS_NO_EXPORT
+	rte_keepalive_mark_alive; # WINDOWS_NO_EXPORT
+	rte_keepalive_mark_sleep; # WINDOWS_NO_EXPORT
+	rte_keepalive_register_core; # WINDOWS_NO_EXPORT
+	rte_keepalive_register_relay_callback; # WINDOWS_NO_EXPORT
 	rte_lcore_count;
 	rte_lcore_has_role;
 	rte_lcore_index;
@@ -159,7 +159,7 @@  DPDK_21 {
 	rte_service_component_unregister;
 	rte_service_dump;
 	rte_service_finalize;
-	rte_service_get_by_id;
+	rte_service_get_by_id; # WINDOWS_NO_EXPORT
 	rte_service_get_by_name;
 	rte_service_get_count;
 	rte_service_get_name;
@@ -187,7 +187,7 @@  DPDK_21 {
 	rte_socket_count;
 	rte_socket_id;
 	rte_socket_id_by_idx;
-	rte_srand;
+	rte_srand; # WINDOWS_NO_EXPORT
 	rte_strerror;
 	rte_strscpy;
 	rte_strsplit;
@@ -195,26 +195,26 @@  DPDK_21 {
 	rte_thread_get_affinity;
 	rte_thread_set_affinity;
 	rte_thread_setname;
-	rte_uuid_compare;
-	rte_uuid_is_null;
-	rte_uuid_parse;
-	rte_uuid_unparse;
-	rte_version;
-	rte_vfio_clear_group;
-	rte_vfio_container_create;
-	rte_vfio_container_destroy;
+	rte_uuid_compare; # WINDOWS_NO_EXPORT
+	rte_uuid_is_null; # WINDOWS_NO_EXPORT
+	rte_uuid_parse; # WINDOWS_NO_EXPORT
+	rte_uuid_unparse; # WINDOWS_NO_EXPORT
+	rte_version; # WINDOWS_NO_EXPORT
+	rte_vfio_clear_group; # WINDOWS_NO_EXPORT
+	rte_vfio_container_create; # WINDOWS_NO_EXPORT
+	rte_vfio_container_destroy; # WINDOWS_NO_EXPORT
 	rte_vfio_container_dma_map;
 	rte_vfio_container_dma_unmap;
-	rte_vfio_container_group_bind;
-	rte_vfio_container_group_unbind;
-	rte_vfio_enable;
-	rte_vfio_get_container_fd;
-	rte_vfio_get_group_fd;
-	rte_vfio_get_group_num;
-	rte_vfio_is_enabled;
-	rte_vfio_noiommu_is_enabled;
-	rte_vfio_release_device;
-	rte_vfio_setup_device;
+	rte_vfio_container_group_bind; # WINDOWS_NO_EXPORT
+	rte_vfio_container_group_unbind; # WINDOWS_NO_EXPORT
+	rte_vfio_enable; # WINDOWS_NO_EXPORT
+	rte_vfio_get_container_fd; # WINDOWS_NO_EXPORT
+	rte_vfio_get_group_fd; # WINDOWS_NO_EXPORT
+	rte_vfio_get_group_num; # WINDOWS_NO_EXPORT
+	rte_vfio_is_enabled; # WINDOWS_NO_EXPORT
+	rte_vfio_noiommu_is_enabled; # WINDOWS_NO_EXPORT
+	rte_vfio_release_device; # WINDOWS_NO_EXPORT
+	rte_vfio_setup_device; # WINDOWS_NO_EXPORT
 	rte_vlog;
 	rte_zmalloc;
 	rte_zmalloc_socket;
@@ -234,8 +234,8 @@  EXPERIMENTAL {
 	# added in 18.05
 	rte_dev_event_callback_register;
 	rte_dev_event_callback_unregister;
-	rte_dev_event_monitor_start;
-	rte_dev_event_monitor_stop;
+	rte_dev_event_monitor_start; # WINDOWS_NO_EXPORT
+	rte_dev_event_monitor_stop; # WINDOWS_NO_EXPORT
 	rte_fbarray_attach;
 	rte_fbarray_destroy;
 	rte_fbarray_detach;
@@ -288,8 +288,8 @@  EXPERIMENTAL {
 	# added in 18.11
 	rte_delay_us_sleep;
 	rte_dev_event_callback_process;
-	rte_dev_hotplug_handle_disable;
-	rte_dev_hotplug_handle_enable;
+	rte_dev_hotplug_handle_disable; # WINDOWS_NO_EXPORT
+	rte_dev_hotplug_handle_enable; # WINDOWS_NO_EXPORT
 	rte_malloc_heap_create;
 	rte_malloc_heap_destroy;
 	rte_malloc_heap_get_socket;
@@ -327,7 +327,7 @@  EXPERIMENTAL {
 	rte_lcore_to_cpu_id;
 	rte_mcfg_timer_lock;
 	rte_mcfg_timer_unlock;
-	rte_rand_max;
+	rte_rand_max; # WINDOWS_NO_EXPORT
 
 	# added in 19.11
 	rte_mcfg_get_single_file_segments;
@@ -373,22 +373,22 @@  EXPERIMENTAL {
 	per_lcore_trace_mem;
 	per_lcore_trace_point_sz;
 	rte_log_can_log;
-	rte_thread_getname;
-	rte_trace_dump;
-	rte_trace_is_enabled;
-	rte_trace_metadata_dump;
-	rte_trace_mode_get;
-	rte_trace_mode_set;
-	rte_trace_pattern;
-	rte_trace_point_disable;
-	rte_trace_point_enable;
-	rte_trace_point_is_enabled;
-	rte_trace_point_lookup;
-	rte_trace_regexp;
-	rte_trace_save;
+	rte_thread_getname; # WINDOWS_NO_EXPORT
+	rte_trace_dump; # WINDOWS_NO_EXPORT
+	rte_trace_is_enabled; # WINDOWS_NO_EXPORT
+	rte_trace_metadata_dump; # WINDOWS_NO_EXPORT
+	rte_trace_mode_get; # WINDOWS_NO_EXPORT
+	rte_trace_mode_set; # WINDOWS_NO_EXPORT
+	rte_trace_pattern; # WINDOWS_NO_EXPORT
+	rte_trace_point_disable; # WINDOWS_NO_EXPORT
+	rte_trace_point_enable; # WINDOWS_NO_EXPORT
+	rte_trace_point_is_enabled; # WINDOWS_NO_EXPORT
+	rte_trace_point_lookup; # WINDOWS_NO_EXPORT
+	rte_trace_regexp; # WINDOWS_NO_EXPORT
+	rte_trace_save; # WINDOWS_NO_EXPORT
 
 	# added in 20.08
-	rte_eal_vfio_get_vf_token;
+	rte_eal_vfio_get_vf_token; # WINDOWS_NO_EXPORT
 	rte_lcore_callback_register;
 	rte_lcore_callback_unregister;
 	rte_lcore_dump;
@@ -398,29 +398,29 @@  EXPERIMENTAL {
 	rte_thread_unregister;
 
 	# added in 20.11
-	__rte_eal_trace_generic_size_t;
-	rte_cpu_get_intrinsics_support;
+	__rte_eal_trace_generic_size_t; # WINDOWS_NO_EXPORT
+	rte_cpu_get_intrinsics_support; # WINDOWS_NO_EXPORT
 	rte_epoll_wait_interruptible;
 	rte_service_lcore_may_be_active;
 	rte_vect_get_max_simd_bitwidth;
 	rte_vect_set_max_simd_bitwidth;
 
 	# added in 21.02
-	rte_power_monitor;
-	rte_power_monitor_wakeup;
-	rte_power_pause;
+	rte_power_monitor; # WINDOWS_NO_EXPORT
+	rte_power_monitor_wakeup; # WINDOWS_NO_EXPORT
+	rte_power_pause; # WINDOWS_NO_EXPORT
 
 	# added in 21.05
 	rte_thread_key_create;
 	rte_thread_key_delete;
 	rte_thread_value_get;
 	rte_thread_value_set;
-	rte_version_minor;
-	rte_version_month;
-	rte_version_prefix;
-	rte_version_release;
-	rte_version_suffix;
-	rte_version_year;
+	rte_version_minor; # WINDOWS_NO_EXPORT
+	rte_version_month; # WINDOWS_NO_EXPORT
+	rte_version_prefix; # WINDOWS_NO_EXPORT
+	rte_version_release; # WINDOWS_NO_EXPORT
+	rte_version_suffix; # WINDOWS_NO_EXPORT
+	rte_version_year; # WINDOWS_NO_EXPORT
 };
 
 INTERNAL {