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 <rja...@redhat.com> > > Tested-by: Ferruh Yigit <ferruh.yi...@amd.com> > > Tested-by: Olivier Matz <olivier.m...@6wind.com> > > Acked-by: Bruce Richardson <bruce.richard...@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