pmdinfogen: fix endianness with cross-compilation
authorNeil Horman <nhorman@tuxdriver.com>
Fri, 18 Nov 2016 18:47:52 +0000 (13:47 -0500)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 1 Dec 2016 15:11:51 +0000 (16:11 +0100)
commit112fc39b829039ee4ade210c464d26fecde7eac0
tree7d972e078d9772b4c6c06eeed3ec95a49f008b36
parent814c8822ef7b2255004d2130083b7d8ce852b733
pmdinfogen: fix endianness with cross-compilation

pmdinfogen has a bug in which, during build, it pulls in rte_byteorder.h to
obtain the rte macros for byteswapping between the cpu byte order and big or
little endian.  Unfortunately, pmdinfogen is a tool that is only meant to be run
during the build of dpdk components, and so, it runs on the host.  In cross
compile environments however, the rte_byteorder.h is configured using a target
cpu, who's endianness may differ from that of the host, leading to improper
swapping.

The fix is to use host system defined byte swapping routines rather than the
dpdk provided routines.  Note that we are using non posix compliant routines, as
the posix compliant api only addresses 16 and 32 bit swaps, and we also need 64
bit swaps.  Those macros exist (via endian.h), but BSD and Linux put that header
in different locations so some ifdeffery is required.

Tested successfully by myself on Linux and BSD systems.

Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility")

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Bruce Richardson <bruce.richardson@intel.com>
buildtools/pmdinfogen/pmdinfogen.h