[PATCH v7] usertools: rewrite pmdinfo
Olivier Matz
olivier.matz at 6wind.com
Wed Oct 12 17:16:56 CEST 2022
Hi,
On Tue, Oct 11, 2022 at 12:44:56AM +0200, Thomas Monjalon wrote:
> 04/10/2022 21:29, Robin Jarry:
> > dpdk-pmdinfo.py does not produce any parseable output. The -r/--raw flag
> > merely prints multiple independent JSON lines which cannot be fed
> > directly to any JSON parser. Moreover, the script complexity is rather
> > high for such a simple task: extracting PMD_INFO_STRING from .rodata ELF
> > sections. Rewrite it so that it can produce valid JSON.
> >
> > Remove the PCI database parsing for PCI-ID to Vendor-Device names
> > conversion. This should be done by external scripts (if really needed).
> >
> > The script passes flake8, black, isort and pylint checks.
> >
> > I have tested this with a matrix of python/pyelftools versions:
> >
> > pyelftools
> > 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29
> > 3.6 ok ok ok ok ok ok ok ok
> > 3.7 ok ok ok ok ok ok ok ok
> > Python 3.8 ok ok ok ok ok ok ok ok
> > 3.9 ok ok ok ok ok *ok ok ok
> > 3.10 fail fail fail fail ok ok ok ok
> >
> > * Also tested on FreeBSD
> >
> > All failures with python 3.10 are related to the same issue:
> >
> > File "elftools/construct/lib/container.py", line 5, in <module>
> > from collections import MutableMapping
> > ImportError: cannot import name 'MutableMapping' from 'collections'
> >
> > Python 3.10 support is only available since pyelftools 0.26. The script
> > will only work with Python 3.6 and later.
> >
> > Update the minimal system requirements, docs and release notes.
> >
> > Signed-off-by: Robin Jarry <rjarry at redhat.com>
> > Tested-by: Ferruh Yigit <ferruh.yigit at amd.com>
> > Tested-by: Olivier Matz <olivier.matz at 6wind.com>
> > Acked-by: Bruce Richardson <bruce.richardson at intel.com>
>
> Applied, thanks.
As discussed off-list with Robin, it appears that "ldd" is not available
on buildroot-based images. See:
http://lists.busybox.net/pipermail/buildroot/2013-July/074927.html
The link is quite old but it seems it's still true today if we don't
build the toolchain.
Robin suggested this patch:
--- a/usertools/dpdk-pmdinfo.py
+++ b/usertools/dpdk-pmdinfo.py
@@ -290,8 +290,10 @@ def get_needed_libs(path: Path) -> Iterator[Path]:
"""
Extract the dynamic library dependencies from an ELF executable.
"""
+ env = os.environ.copy()
+ env["LD_TRACE_LOADED_OBJECTS"] = "1"
with subprocess.Popen(
- ["ldd", str(path)], stdout=subprocess.PIPE, stderr=subprocess.PIPE
+ [str(path)], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env
) as proc:
out, err = proc.communicate()
if proc.returncode != 0:
One subtle difference is that the patched version won't work on
non-executable files, but I don't think it can happen in real-life.
An alternative for us is to provide a simple "ldd" shell script in our
buildroot-based images.
I don't have a strong opinion, I'll tend to say that the patch is a
better option. Any comment?
Thanks,
Olivier
More information about the dev
mailing list