patch 'buildtools: fix build with clang 17 and ASan' has been queued to stable release 23.11.2
Xueming Li
xuemingl at nvidia.com
Mon Aug 12 14:48:47 CEST 2024
Hi,
FYI, your patch has been queued to stable release 23.11.2
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/14/24. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://git.dpdk.org/dpdk-stable/log/?h=23.11-staging
This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=23.11-staging&id=aafeb830bc49268349189d0b0b6d76559e8358ca
Thanks.
Xueming Li <xuemingl at nvidia.com>
---
>From aafeb830bc49268349189d0b0b6d76559e8358ca Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand at redhat.com>
Date: Thu, 11 Jul 2024 11:35:36 +0200
Subject: [PATCH] buildtools: fix build with clang 17 and ASan
Cc: Xueming Li <xuemingl at nvidia.com>
[ upstream commit e1d8a879abac499a66801bb8238d59ba52f4fc6b ]
ASan included in clang 17 and later suffixes symbols.
$ nm build/drivers/libtmp_rte_net_null.a | grep this_pmd
0000000000000000 r this_pmd_name3
0000000000000000 n this_pmd_name3.f2cd16678ab09dba8fd23405d8d11fce
This breaks the detection of driver symbols in pmdinfogen which then
creates duplicate symbols "_pmd_info" in many drivers. Such duplicate
symbols trigger a link error.
$ grep -w _pmd_info build/drivers/rte_net_*.pmd.c
build/drivers/rte_net_af_packet.pmd.c:const char _pmd_info[]
__attribute__((used)) =
"PMD_INFO_STRING= {\"name\": \"\", \"pci_ids\": []}";
build/drivers/rte_net_null.pmd.c:const char _pmd_info[]
__attribute__((used)) =
"PMD_INFO_STRING= {\"name\": \"\", \"pci_ids\": []}";
A simple reproducer:
$ CC=clang meson setup build -Denable_apps=test-pmd -Ddisable_libs=* \
-Denable_drivers=net/null,net/af_packet -Dtests=false \
-Db_lundef=false -Db_sanitize=address
$ ninja -C build
Before this patch, the pmdinfogen script was relying on a symbol name
starting with this_pmd_name.
On the other hand, what this script needs is symbols whose names are
this_pmd_name ## __COUNTER__, see below an example for PCI driver
symbols (the same applies to other buses).
$ git grep -w RTE_PMD_EXPORT_NAME drivers/bus/pci/bus_pci_driver.h
drivers/bus/pci/bus_pci_driver.h:RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
$ git grep -B1 this_pmd_name lib/eal/
lib/eal/include/rte_dev.h-#define RTE_PMD_EXPORT_NAME(name, idx) \
lib/eal/include/rte_dev.h:static const char
RTE_PMD_EXPORT_NAME_ARRAY(this_pmd_name, idx) \
$ git grep define.RTE_PMD_EXPORT_NAME_ARRAY lib/eal/include/rte_dev.h
lib/eal/include/rte_dev.h:#define
RTE_PMD_EXPORT_NAME_ARRAY(n, idx) n##idx[]
Adjust the symbol filter for both ELF and COFF implementations.
Bugzilla ID: 1466
Reported-by: Ali Alnubani <alialnu at nvidia.com>
Reported-by: Song Jiale <songx.jiale at intel.com>
Signed-off-by: David Marchand <david.marchand at redhat.com>
Tested-by: Song Jiale <songx.jiale at intel.com>
---
buildtools/pmdinfogen.py | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/buildtools/pmdinfogen.py b/buildtools/pmdinfogen.py
index 2a44f17bda..dfb89500c0 100755
--- a/buildtools/pmdinfogen.py
+++ b/buildtools/pmdinfogen.py
@@ -6,6 +6,7 @@
import argparse
import ctypes
import json
+import re
import sys
import tempfile
@@ -66,11 +67,11 @@ class ELFImage:
return [symbol]
return None
- def find_by_prefix(self, prefix):
- prefix = prefix.encode("utf-8") if self._legacy_elftools else prefix
+ def find_by_pattern(self, pattern):
+ pattern = pattern.encode("utf-8") if self._legacy_elftools else pattern
for i in range(self._symtab.num_symbols()):
symbol = self._symtab.get_symbol(i)
- if symbol.name.startswith(prefix):
+ if re.match(pattern, symbol.name):
yield ELFSymbol(self._image, symbol)
@@ -97,9 +98,9 @@ class COFFImage:
def is_big_endian(self):
return False
- def find_by_prefix(self, prefix):
+ def find_by_pattern(self, pattern):
for symbol in self._image.symbols:
- if symbol.name.startswith(prefix):
+ if re.match(pattern, symbol.name):
yield COFFSymbol(self._image, symbol)
def find_by_name(self, name):
@@ -199,7 +200,7 @@ class Driver:
def load_drivers(image):
drivers = []
- for symbol in image.find_by_prefix("this_pmd_name"):
+ for symbol in image.find_by_pattern("^this_pmd_name[0-9]+$"):
drivers.append(Driver.load(image, symbol))
return drivers
--
2.34.1
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2024-08-12 20:44:04.201813065 +0800
+++ 0050-buildtools-fix-build-with-clang-17-and-ASan.patch 2024-08-12 20:44:02.055069287 +0800
@@ -1 +1 @@
-From e1d8a879abac499a66801bb8238d59ba52f4fc6b Mon Sep 17 00:00:00 2001
+From aafeb830bc49268349189d0b0b6d76559e8358ca Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit e1d8a879abac499a66801bb8238d59ba52f4fc6b ]
@@ -49 +51,0 @@
-Cc: stable at dpdk.org
More information about the stable
mailing list