DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/4] allow pmdinfo to be inserted and parsed using MSVC
@ 2025-04-11 19:39 Andre Muezerie
  2025-04-11 19:39 ` [PATCH 1/4] eal: add macro to embed information in binaries Andre Muezerie
                   ` (6 more replies)
  0 siblings, 7 replies; 27+ messages in thread
From: Andre Muezerie @ 2025-04-11 19:39 UTC (permalink / raw)
  Cc: dev, Andre Muezerie

DPDK uses GCC attribute "used" through macro __rte_used to indicate
that a variable not referenced in the code should be assumed being
used and therefore not be optimized away. This technique is used to embed
information in the binaries, by having crafted information stored in
them.

MSVC offers similar functionality, but it differs significantly: MSVC
requires a pragma to be used to send a command to the linker telling it
explicitly the name of the symbol that should be included (even if not
referenced). As a side-effect, variables called out to be included cannot
be static, otherwise their symbols are not "seen" by the linker. This
restriction requires some DPDK code to be refactored.

Macro RTE_INCLUDE is used in this patch to ensure these special variables
make it to the final binaries.

The elimination of "static" for some of these variables caused name
clashes when __COUNTER__ predefined macro was used. As a workaround,
predefined macro __LINE__ was used instead. However, when __COUNTER__
was used directly from a header file, __LINE__ had to be used from the
.c files, otherwise it would also not result in a unique symbol. This
required a parameter to be added to some macros so that the __LINE__
could be passed from the .c file to the macro defined in the header
(which was originally using __COUNTER__).

With this patchset commands like the one below provide the same JSON
output as would be obtained on Linux.

python usertools\dpdk-pmdinfo.py build\app\dpdk-testpmd.exe

Andre Muezerie (4):
  eal: add macro to embed information in binaries
  buildtools: use macro to embed information in binaries
  usertools: parse strings from PE images
  drivers: use macro to embed information in binaries

 buildtools/gen-pmdinfo-cfile.py               |  6 ++-
 buildtools/meson.build                        |  8 +++-
 buildtools/pmdinfogen.py                      |  5 +-
 drivers/baseband/acc/rte_acc100_pmd.c         |  4 +-
 drivers/baseband/acc/rte_vrb_pmd.c            |  4 +-
 .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c         |  4 +-
 drivers/baseband/fpga_lte_fec/fpga_lte_fec.c  |  4 +-
 drivers/baseband/la12xx/bbdev_la12xx.c        |  2 +-
 drivers/baseband/null/bbdev_null.c            |  2 +-
 .../baseband/turbo_sw/bbdev_turbo_software.c  |  2 +-
 drivers/bus/auxiliary/bus_auxiliary_driver.h  |  4 +-
 drivers/bus/cdx/bus_cdx_driver.h              |  7 ++-
 drivers/bus/dpaa/bus_dpaa_driver.h            |  4 +-
 drivers/bus/fslmc/bus_fslmc_driver.h          |  8 ++--
 drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c      |  2 +-
 drivers/bus/fslmc/portal/dpaa2_hw_dpci.c      |  2 +-
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      |  2 +-
 drivers/bus/fslmc/portal/dpaa2_hw_dprc.c      |  2 +-
 drivers/bus/ifpga/bus_ifpga_driver.h          |  4 +-
 drivers/bus/pci/bus_pci_driver.h              |  4 +-
 drivers/bus/platform/bus_platform_driver.h    |  4 +-
 drivers/bus/uacce/bus_uacce_driver.h          |  4 +-
 drivers/bus/vdev/bus_vdev_driver.h            |  4 +-
 drivers/bus/vmbus/bus_vmbus_driver.h          |  4 +-
 drivers/common/mlx5/mlx5_common.c             |  2 +-
 drivers/common/mlx5/mlx5_common_pci.c         |  2 +-
 drivers/common/nitrox/nitrox_device.c         |  2 +-
 drivers/common/qat/qat_device.c               |  2 +-
 drivers/common/zsda/zsda_device.c             |  2 +-
 drivers/compress/isal/isal_compress_pmd.c     |  2 +-
 drivers/compress/mlx5/mlx5_compress.c         |  2 +-
 drivers/compress/octeontx/otx_zip_pmd.c       |  2 +-
 drivers/compress/uadk/uadk_compress_pmd.c     |  2 +-
 drivers/compress/zlib/zlib_pmd.c              |  2 +-
 drivers/crypto/armv8/rte_armv8_pmd.c          |  2 +-
 drivers/crypto/bcmfs/bcmfs_device.c           |  3 +-
 drivers/crypto/caam_jr/caam_jr.c              |  2 +-
 drivers/crypto/ccp/rte_ccp_pmd.c              |  2 +-
 drivers/crypto/cnxk/cn10k_cryptodev.c         |  2 +-
 drivers/crypto/cnxk/cn9k_cryptodev.c          |  2 +-
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c   |  2 +-
 drivers/crypto/dpaa_sec/dpaa_sec.c            |  2 +-
 drivers/crypto/ionic/ionic_crypto_vdev.c      |  2 +-
 drivers/crypto/ipsec_mb/pmd_aesni_gcm.c       |  3 +-
 drivers/crypto/ipsec_mb/pmd_aesni_mb.c        |  3 +-
 drivers/crypto/ipsec_mb/pmd_chacha_poly.c     |  3 +-
 drivers/crypto/ipsec_mb/pmd_kasumi.c          |  2 +-
 drivers/crypto/ipsec_mb/pmd_snow3g.c          |  2 +-
 drivers/crypto/ipsec_mb/pmd_zuc.c             |  2 +-
 drivers/crypto/mlx5/mlx5_crypto.c             |  2 +-
 drivers/crypto/mvsam/rte_mrvl_pmd.c           |  2 +-
 drivers/crypto/null/null_crypto_pmd.c         |  2 +-
 drivers/crypto/octeontx/otx_cryptodev.c       |  2 +-
 drivers/crypto/openssl/rte_openssl_pmd.c      |  3 +-
 drivers/crypto/scheduler/scheduler_pmd.c      |  3 +-
 drivers/crypto/uadk/uadk_crypto_pmd.c         |  2 +-
 drivers/crypto/virtio/virtio_cryptodev.c      |  2 +-
 drivers/crypto/virtio/virtio_user_cryptodev.c |  2 +-
 drivers/dma/cnxk/cnxk_dmadev.c                |  2 +-
 drivers/dma/dpaa/dpaa_qdma.c                  |  2 +-
 drivers/dma/dpaa2/dpaa2_qdma.c                |  2 +-
 drivers/dma/hisilicon/hisi_dmadev.c           |  2 +-
 drivers/dma/idxd/idxd_pci.c                   |  2 +-
 drivers/dma/ioat/ioat_dmadev.c                |  2 +-
 drivers/dma/odm/odm_dmadev.c                  |  2 +-
 drivers/dma/skeleton/skeleton_dmadev.c        |  2 +-
 drivers/event/cnxk/cn10k_eventdev.c           |  2 +-
 drivers/event/cnxk/cn20k_eventdev.c           |  2 +-
 drivers/event/cnxk/cn9k_eventdev.c            |  2 +-
 drivers/event/dlb2/pf/dlb2_pf.c               |  4 +-
 drivers/event/dpaa/dpaa_eventdev.c            |  2 +-
 drivers/event/dpaa2/dpaa2_eventdev.c          |  2 +-
 drivers/event/dpaa2/dpaa2_hw_dpcon.c          |  2 +-
 drivers/event/dsw/dsw_evdev.c                 |  2 +-
 drivers/event/octeontx/ssovf_evdev.c          |  3 +-
 drivers/event/octeontx/ssovf_probe.c          |  4 +-
 drivers/event/octeontx/timvf_probe.c          |  2 +-
 drivers/event/opdl/opdl_evdev.c               |  2 +-
 drivers/event/skeleton/skeleton_eventdev.c    |  4 +-
 drivers/event/sw/sw_evdev.c                   |  2 +-
 drivers/gpu/cuda/cuda.c                       |  2 +-
 drivers/mempool/cnxk/cnxk_mempool.c           |  2 +-
 drivers/mempool/octeontx/octeontx_fpavf.c     |  2 +-
 drivers/ml/cnxk/cn10k_ml_dev.c                |  2 +-
 drivers/ml/cnxk/mvtvm_ml_dev.c                |  2 +-
 drivers/net/af_packet/rte_eth_af_packet.c     |  2 +-
 drivers/net/af_xdp/rte_eth_af_xdp.c           |  2 +-
 drivers/net/ark/ark_ethdev.c                  |  2 +-
 drivers/net/atlantic/atl_ethdev.c             |  2 +-
 drivers/net/avp/avp_ethdev.c                  |  2 +-
 drivers/net/axgbe/axgbe_ethdev.c              |  2 +-
 drivers/net/bnx2x/bnx2x_ethdev.c              |  5 +-
 drivers/net/bnxt/bnxt_ethdev.c                |  2 +-
 drivers/net/bonding/rte_eth_bond_pmd.c        |  2 +-
 drivers/net/cnxk/cn10k_ethdev.c               |  2 +-
 drivers/net/cnxk/cn20k_ethdev.c               |  2 +-
 drivers/net/cnxk/cn9k_ethdev.c                |  2 +-
 drivers/net/cnxk/cnxk_eswitch.c               |  2 +-
 drivers/net/cnxk/cnxk_ethdev_sec.c            |  2 +-
 drivers/net/cxgbe/cxgbe_ethdev.c              |  2 +-
 drivers/net/cxgbe/cxgbevf_ethdev.c            |  2 +-
 drivers/net/dpaa/dpaa_ethdev.c                |  2 +-
 drivers/net/dpaa2/dpaa2_ethdev.c              |  2 +-
 drivers/net/dpaa2/dpaa2_mux.c                 |  2 +-
 drivers/net/dpaa2/dpaa2_ptp.c                 |  2 +-
 drivers/net/ena/ena_ethdev.c                  |  2 +-
 drivers/net/enetc/enetc_ethdev.c              |  2 +-
 drivers/net/enetfec/enet_ethdev.c             |  2 +-
 drivers/net/enic/enic_ethdev.c                |  2 +-
 drivers/net/failsafe/failsafe.c               |  2 +-
 drivers/net/gve/gve_ethdev.c                  |  2 +-
 drivers/net/hinic/hinic_pmd_ethdev.c          |  2 +-
 drivers/net/hns3/hns3_ethdev.c                |  2 +-
 drivers/net/hns3/hns3_ethdev_vf.c             |  2 +-
 drivers/net/intel/cpfl/cpfl_ethdev.c          |  2 +-
 drivers/net/intel/e1000/em_ethdev.c           |  2 +-
 drivers/net/intel/e1000/igb_ethdev.c          |  4 +-
 drivers/net/intel/e1000/igc_ethdev.c          |  2 +-
 drivers/net/intel/fm10k/fm10k_ethdev.c        |  2 +-
 drivers/net/intel/i40e/i40e_ethdev.c          |  2 +-
 drivers/net/intel/iavf/iavf_ethdev.c          |  2 +-
 drivers/net/intel/ice/ice_dcf_ethdev.c        |  2 +-
 drivers/net/intel/ice/ice_ethdev.c            |  2 +-
 drivers/net/intel/idpf/idpf_ethdev.c          |  2 +-
 drivers/net/intel/ipn3ke/ipn3ke_ethdev.c      |  2 +-
 drivers/net/intel/ixgbe/ixgbe_ethdev.c        |  4 +-
 drivers/net/ionic/ionic_dev_pci.c             |  2 +-
 drivers/net/ionic/ionic_dev_vdev.c            |  3 +-
 drivers/net/mana/mana.c                       |  2 +-
 drivers/net/memif/rte_eth_memif.c             |  2 +-
 drivers/net/mlx4/mlx4.c                       |  2 +-
 drivers/net/mlx5/mlx5.c                       |  2 +-
 drivers/net/mvneta/mvneta_ethdev.c            |  2 +-
 drivers/net/mvpp2/mrvl_ethdev.c               |  2 +-
 drivers/net/netvsc/hn_ethdev.c                |  2 +-
 drivers/net/nfb/nfb_ethdev.c                  |  2 +-
 drivers/net/nfp/nfp_ethdev.c                  |  2 +-
 drivers/net/ngbe/ngbe_ethdev.c                |  2 +-
 drivers/net/ngbe/ngbe_ethdev_vf.c             |  2 +-
 drivers/net/ntnic/ntnic_ethdev.c              |  2 +-
 drivers/net/null/rte_eth_null.c               |  2 +-
 drivers/net/octeon_ep/otx_ep_ethdev.c         |  2 +-
 drivers/net/octeontx/base/octeontx_pkivf.c    |  2 +-
 drivers/net/octeontx/base/octeontx_pkovf.c    |  2 +-
 drivers/net/octeontx/octeontx_ethdev.c        |  3 +-
 drivers/net/pcap/pcap_ethdev.c                |  2 +-
 drivers/net/pfe/pfe_ethdev.c                  |  2 +-
 drivers/net/qede/qede_ethdev.c                |  4 +-
 drivers/net/r8169/r8169_ethdev.c              |  2 +-
 drivers/net/ring/rte_eth_ring.c               |  2 +-
 drivers/net/sfc/sfc_ethdev.c                  |  2 +-
 drivers/net/softnic/rte_eth_softnic.c         |  2 +-
 drivers/net/tap/rte_eth_tap.c                 |  4 +-
 drivers/net/thunderx/nicvf_ethdev.c           |  2 +-
 drivers/net/txgbe/txgbe_ethdev.c              |  2 +-
 drivers/net/txgbe/txgbe_ethdev_vf.c           |  2 +-
 drivers/net/vdev_netvsc/vdev_netvsc.c         |  2 +-
 drivers/net/vhost/rte_eth_vhost.c             |  2 +-
 drivers/net/virtio/virtio_pci_ethdev.c        |  2 +-
 drivers/net/virtio/virtio_user_ethdev.c       |  2 +-
 drivers/net/vmxnet3/vmxnet3_ethdev.c          |  2 +-
 drivers/net/xsc/xsc_ethdev.c                  |  2 +-
 drivers/net/zxdh/zxdh_ethdev.c                |  2 +-
 drivers/raw/cnxk_bphy/cnxk_bphy.c             |  2 +-
 drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c         |  2 +-
 drivers/raw/cnxk_gpio/cnxk_gpio.c             |  2 +-
 drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c         |  2 +-
 drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c         |  2 +-
 drivers/raw/gdtc/gdtc_rawdev.c                |  2 +-
 drivers/raw/ifpga/afu_pmd_core.c              |  2 +-
 drivers/raw/ifpga/ifpga_rawdev.c              |  4 +-
 drivers/raw/ntb/ntb.c                         |  2 +-
 drivers/raw/skeleton/skeleton_rawdev.c        |  2 +-
 drivers/regex/cn9k/cn9k_regexdev.c            |  2 +-
 drivers/regex/mlx5/mlx5_regex.c               |  2 +-
 drivers/vdpa/ifc/ifcvf_vdpa.c                 |  2 +-
 drivers/vdpa/mlx5/mlx5_vdpa.c                 |  2 +-
 drivers/vdpa/sfc/sfc_vdpa.c                   |  2 +-
 lib/eal/common/eal_common_options.c           |  2 +-
 lib/eal/include/rte_common.h                  |  6 +++
 lib/eal/include/rte_dev.h                     | 14 ++----
 usertools/dpdk-pmdinfo.py                     | 47 ++++++++++++++++---
 182 files changed, 273 insertions(+), 228 deletions(-)

--
2.49.0.vfs.0.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2025-04-17 17:10 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-11 19:39 [PATCH 0/4] allow pmdinfo to be inserted and parsed using MSVC Andre Muezerie
2025-04-11 19:39 ` [PATCH 1/4] eal: add macro to embed information in binaries Andre Muezerie
2025-04-11 19:39 ` [PATCH 2/4] buildtools: use " Andre Muezerie
2025-04-11 20:07   ` Dmitry Kozlyuk
2025-04-11 19:39 ` [PATCH 3/4] usertools: parse strings from PE images Andre Muezerie
2025-04-11 20:09   ` Dmitry Kozlyuk
2025-04-11 19:39 ` [PATCH 4/4] drivers: use macro to embed information in binaries Andre Muezerie
2025-04-15  1:21 ` [PATCH v2 0/4] allow pmdinfo to be inserted and parsed using MSVC Andre Muezerie
2025-04-15  1:21   ` [PATCH v2 1/4] eal: add macro to embed information in binaries Andre Muezerie
2025-04-15  1:21   ` [PATCH v2 2/4] buildtools: use " Andre Muezerie
2025-04-15  7:44     ` Dmitry Kozlyuk
2025-04-15 14:36       ` Andre Muezerie
2025-04-15  1:21   ` [PATCH v2 3/4] usertools: parse strings from PE images Andre Muezerie
2025-04-15 11:19     ` Robin Jarry
2025-04-15  1:21   ` [PATCH v2 4/4] drivers: use macro to embed information in binaries Andre Muezerie
2025-04-16  0:05     ` Stephen Hemminger
2025-04-17 17:10       ` Andre Muezerie
2025-04-15 22:31 ` [PATCH v3 0/4] allow pmdinfo to be inserted and parsed using MSVC Andre Muezerie
2025-04-15 22:31   ` [PATCH v3 1/4] eal: add macro to embed information in binaries Andre Muezerie
2025-04-15 22:31   ` [PATCH v3 2/4] buildtools: use " Andre Muezerie
2025-04-15 22:31   ` [PATCH v3 3/4] usertools: parse strings from PE images Andre Muezerie
2025-04-15 22:31   ` [PATCH v3 4/4] drivers: use macro to embed information in binaries Andre Muezerie
2025-04-16 21:44 ` [PATCH v4 0/4] allow pmdinfo to be inserted and parsed using MSVC Andre Muezerie
2025-04-16 21:44   ` [PATCH v4 1/4] eal: add macro to embed information in binaries Andre Muezerie
2025-04-16 21:44   ` [PATCH v4 2/4] buildtools: use " Andre Muezerie
2025-04-16 21:44   ` [PATCH v4 3/4] usertools: parse strings from PE images Andre Muezerie
2025-04-16 21:44   ` [PATCH v4 4/4] drivers: use macro to embed information in binaries Andre Muezerie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).