Bugzilla – Bug 1202431
windows:mingw:win{32|64}/mingw{32|64}-filesystem: Enormous amount of time needed to scan binaries for debug source files
Last modified: 2024-05-03 16:02:14 UTC
On a local build of a mingw32 package, I found that collecting debug source files takes an enormous amount of time for larger files after switching to using i686-w64-mingw32-objdump. user@host:~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12> ls -l bin/assistant.exe -rwxr-xr-x 1 abuild abuild 33248482 Aug 16 09:45 bin/assistant.exe user@host:~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12> time i686-w64-mingw32-objdump -Wi ./bin/assistant.exe > /dev/null real 0m32.688s user 0m7.956s sys 0m24.732s user@host:~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12> time i686-w64-mingw32-objdump -Wi ./bin/assistant.exe | i686-w64-mingw32-objdump-srcfiles real 0m33.906s user 0m11.772s sys 0m25.278s The second call shows that retrieving debug information through i686-w64-mingw32-objdump is the cause.
This is also an issue on OBS: [ 666s] + /usr/lib/rpm/mingw32-find-debuginfo.sh /home/abuild/rpmbuild/BUILD 1 [ 666s] extracting debug info from /home/abuild/rpmbuild/BUILDROOT/mingw32-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/i686-w64-mingw32/sys-root/mingw/bin/assistant-qt5.exe [ 752s] ~/rpmbuild/BUILDROOT/mingw32-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/i686-w64-mingw32/sys-root/mingw/bin ~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12 ... [ 2313s] creating debugsource file structure This means that extracting the source file information from the binaries of the mentioned package takes 1647 seconds, which is about 27 minutes.
Running the same tool from the linux host did not have this problem as shown below: $ grep PRETTY_NAME /etc/os-release PRETTY_NAME="openSUSE Leap 15.3" $ rpm -q -f `which i686-w64-mingw32-objdump` mingw32-cross-binutils-2.38-lp153.10.5.x86_64 $ time i686-w64-mingw32-objdump -Wi /home/osc/build-root/openSUSE_Leap_15.4-x86_64/home/abuild/rpmbuild/BUILD/qttools-everywhere-src-5.12.12/bin/assistant.exe >/dev/null real 0m2,881s user 0m2,844s sys 0m0,036s $ time i686-w64-mingw32-objdump -Wi /home/osc/build-root/openSUSE_Leap_15.3-x86_64/home/abuild/rpmbuild/BUILD/qttools-everywhere-src-5.12.12/bin/assistant.exe >/dev/null real 0m3,027s user 0m2,982s sys 0m0,032s Also running the tool from the build root does not have this issue: $ time /home/osc/build-root/openSUSE_Leap_15.3-x86_64/usr/i686-w64-mingw32/bin/objdump -Wi /home/osc/build-root/openSUSE_Leap_15.3-x86_64/home/abuild/rpmbuild/BUILD/qttools-everywhere-src-5.12.12/bin/assistant.exe >/dev/null real 0m2,949s user 0m2,906s sys 0m0,040s
Here are additional info about the time required by syscalls 1. host $ strace -c i686-w64-mingw32-objdump -Wi /home/osc/build-root/openSUSE_Leap_15.3-x86_64/home/abuild/rpmbuild/BUILD/qttools-everywhere-src-5.12.12/bin/assistant.exe >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 50,00 0,015723 0 84831 write 49,33 0,015512 360 43 read 0,67 0,000211 2 81 brk 0,00 0,000000 0 9 close 0,00 0,000000 0 9 8 stat 0,00 0,000000 0 11 fstat 0,00 0,000000 0 45 lseek 0,00 0,000000 0 21 mmap 0,00 0,000000 0 6 mprotect 0,00 0,000000 0 11 munmap 0,00 0,000000 0 1 1 ioctl 0,00 0,000000 0 1 1 access 0,00 0,000000 0 1 execve 0,00 0,000000 0 2 fcntl 0,00 0,000000 0 1 arch_prctl 0,00 0,000000 0 36 27 openat 0,00 0,000000 0 1 prlimit64 ------ ----------- ----------- --------- --------- ---------------- 100.00 0,031446 85110 37 total 2. osc chroot build@linux:~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12/bin> strace -c i686-w64-mingw32-objdump -Wi assistant.exe >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 76.40 2.981323 8 358601 munmap 20.18 0.787442 2 358608 mmap 3.26 0.127279 1 84831 write 0.15 0.006036 147 41 read 0.00 0.000130 1 109 brk 0.00 0.000004 0 45 lseek 0.00 0.000000 0 4 close 0.00 0.000000 0 1 stat 0.00 0.000000 0 6 fstat 0.00 0.000000 0 6 mprotect 0.00 0.000000 0 1 1 ioctl 0.00 0.000000 0 1 1 access 0.00 0.000000 0 1 execve 0.00 0.000000 0 2 fcntl 0.00 0.000000 0 1 arch_prctl 0.00 0.000000 0 4 openat 0.00 0.000000 0 1 prlimit64 ------ ----------- ----------- --------- --------- ---------------- 100.00 3.902214 802263 2 total
Created attachment 860901 [details] Screenshot from callgrind results running in a chrooted osc build environment As can be seen from the attached screenshot, most of the time is spent accessing unaligned memory.
Created attachment 860902 [details] Screenshot from callgrind results running on the linux host Comparison with execution on the associated Linux host shows that the same function (__memset_avx2_erms) takes 0.00% of execution time, while in a chroot container or from an obs worker it takes about 90%.
This is also a problem with the x64_64 build variant: [ 317s] + /usr/lib/rpm/mingw64-find-debuginfo.sh /home/abuild/rpmbuild/BUILD 1 [ 318s] extracting debug info from /home/abuild/rpmbuild/BUILDROOT/mingw64-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/x86_64-w64-mingw32/sys-root/mingw/bin/assistant-qt5.exe [ 397s] ~/rpmbuild/BUILDROOT/mingw64-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/x86_64-w64-mingw32/sys-root/mingw/bin ~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12 [ 397s] ~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12 [ 397s] extracting debug info from /home/abuild/rpmbuild/BUILDROOT/mingw64-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/x86_64-w64-mingw32/sys-root/mingw/bin/designer-qt5.exe [ 457s] ~/rpmbuild/BUILDROOT/mingw64-libqt5-qttools-src-5.12.12-lp153.2.1.x86_64/usr/x86_64-w64-mingw32/sys-root/mingw/bin ~/rpmbuild/BUILD/qttools-everywhere-src-5.12.12 ... [ 1159s] creating debugsource file structure which needs about 14 minutes to extract the debug source file names.
Reported upstream at https://sourceware.org/bugzilla/show_bug.cgi?id=29505
(In reply to Ralf Habacker from comment #7) > Reported upstream at https://sourceware.org/bugzilla/show_bug.cgi?id=29505 It turned out that the slowness was caused by the presence of the environment variables MALLOC_CHECK_ and MALLOC_PERTURB_, which are located in the package "aaa_base-malloccheck" and are required by the package "post-build-checks". Running objdump in the chroot environment with $ export MALLOC_CHECK_=0 $ export MALLOC_PERTURB_=0 $ time i686-w64-mingw32-objdump -Wi bin/assistant.exe > /dev/null real 0m4.396s user 0m4.134s sys 0m0.024s shows that the required has been reduced from about 34 seconds to 4. All packages that do not specify '#!BuildIgnore: post-build-checks' will be affected by this issue.
With https://build.opensuse.org/request/show/999357 and https://build.opensuse.org/request/show/999356, the time required has been massively reduced, but is still significantly higher than before the switch to the objdump solution required by the update to binutils 2.38.
Ralf, is this still something to keep open?
(In reply to Fridrich Strba from comment #10) > Ralf, is this still something to keep open? Extracting debug symbols for a larger package currently still takes 10 minutes https://build.opensuse.org/build/windows:mingw:win32/openSUSE_Leap_15.4/x86_64/mingw32-clang13/_log per build. If you think this is ok, we can close this. Otherwise, there are two potential ways to fix this. 1. use the objdump option -WL with any necessary adjustments https://sourceware.org/bugzilla/show_bug.cgi?id=29505#c15 2. extend LD so that debug symbols are written directly to a debug file https://sourceware.org/bugzilla/show_bug.cgi?id=29505#c17 With the first option there is an estimate that it could be up to 95% faster, but might need to be extended to get all relevant information. For the second option there is no estimation of the time gain yet.
(In reply to Ralf Habacker from comment #11) > With the first option there is an estimate that it could be up to 95% > faster, but might need to be extended to get all relevant information. I did a quick check on a project I'm working on. With the actual solution I get: $ i686-w64-mingw32-objdump -Wi ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | /usr/bin/i686-w64-mingw32-objdump-srcfiles | sort /home/abuild/rpmbuild/BUILD/mingw32-cross-gcc-13.2.0/gcc-13.2.0/build/i686-w64-mingw32/libgcc/../../../libgcc/config/i386/cygwin.S /home/abuild/rpmbuild/BUILD/mingw32-cross-gcc-13.2.0/gcc-13.2.0/build/i686-w64-mingw32/libgcc/../../../libgcc/libgcc2.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/cinitexe.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/crtdll.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/CRT_fp10.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/dllentry.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/dllmain.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/gccmain.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/mingw_helpers.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/natstart.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/pesect.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/pseudo-reloc.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/pseudo-reloc-list.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/tlsmcrt.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/tlssup.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/crt/tlsthrd.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/misc/onexit_table.c /home/abuild/rpmbuild/BUILD/mingw-w64-v11.0.1/mingw-w64-crt/stdio/acrt_iob_func.c /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/mocs_compilation.cpp /home/user/src/alkimia-master/src/alkcompany.cpp /home/user/src/alkimia-master/src/alkdateformat.cpp /home/user/src/alkimia-master/src/alkdownloadengine.cpp /home/user/src/alkimia-master/src/alkenvironment.cpp /home/user/src/alkimia-master/src/alknewstuffengine.cpp /home/user/src/alkimia-master/src/alknewstuffstore.cpp /home/user/src/alkimia-master/src/alknewstuffwidget.cpp /home/user/src/alkimia-master/src/alkonlinequote.cpp /home/user/src/alkimia-master/src/alkonlinequote_p.cpp /home/user/src/alkimia-master/src/alkonlinequotesource.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofile.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofilemanager.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofile_p.cpp /home/user/src/alkimia-master/src/alkonlinequoteswidget.cpp /home/user/src/alkimia-master/src/alkonlinequoteuploaddialog.cpp /home/user/src/alkimia-master/src/alkutils.cpp /home/user/src/alkimia-master/src/alkvalue.cpp /home/user/src/alkimia-master/src/alkwebpage.cpp There are some unrelated file, no include header and only one generated file from the build dir included. The total number of project related source files are: $ i686-w64-mingw32-objdump -Wi ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | /usr/bin/i686-w64-mingw32-objdump-srcfiles | sort | grep /alkimia-master 19 Using mingw objdump -WL: $ i686-w64-mingw32-objdump -WL ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | gawk '$1 ~ /^\/home.*:$/ { gsub(/:/,"", $1); print $1}' | xargs realpath | sort | uniq | wc -l 42 $ i686-w64-mingw32-objdump -WL ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | gawk '$1 ~ /^\/home.*:$/ { gsub(/:/,"", $1); print $1}' | xargs realpath | sort | uniq /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkcompany.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkdownloadengine.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alknewstuffengine.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alknewstuffwidget.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequote.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequote_p.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofile.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofilemanager.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofile_p.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequoteswidget.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequoteuploaddialog.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkwebpage.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alkdownloadengine.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alknewstuffengine.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alknewstuffwidget.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alkonlinequoteswidget.moc /home/user/src/alkimia-master/src/alkcompany.cpp /home/user/src/alkimia-master/src/alkdateformat.cpp /home/user/src/alkimia-master/src/alkdownloadengine.cpp /home/user/src/alkimia-master/src/alkdownloadengine.h /home/user/src/alkimia-master/src/alkexception.h /home/user/src/alkimia-master/src/alknewstuffengine.cpp /home/user/src/alkimia-master/src/alknewstuffengine.h /home/user/src/alkimia-master/src/alknewstuffwidget.cpp /home/user/src/alkimia-master/src/alknewstuffwidget.h /home/user/src/alkimia-master/src/alkonlinequote.cpp /home/user/src/alkimia-master/src/alkonlinequote.h /home/user/src/alkimia-master/src/alkonlinequote_p.cpp /home/user/src/alkimia-master/src/alkonlinequotesource.cpp /home/user/src/alkimia-master/src/alkonlinequotesource.h /home/user/src/alkimia-master/src/alkonlinequotesource_p.h /home/user/src/alkimia-master/src/alkonlinequotesprofile.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofilemanager.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofile_p.cpp /home/user/src/alkimia-master/src/alkonlinequoteswidget.cpp /home/user/src/alkimia-master/src/alkonlinequoteswidget.h /home/user/src/alkimia-master/src/alkonlinequoteuploaddialog.cpp /home/user/src/alkimia-master/src/alkonlinequoteuploaddialog.h /home/user/src/alkimia-master/src/alkutils.cpp /home/user/src/alkimia-master/src/alkvalue.cpp /home/user/src/alkimia-master/src/alkwebpage.cpp /home/user/src/alkimia-master/src/alkwebpage.h This way include header and more generated source files are included. With native objdump I get: $ objdump -WL ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | gawk '$1 ~ /^\/home.*:$/ { gsub(/:/,"", $1); print $1}' | xargs realpath | sort | uniq | wc -l 48 $ objdump -WL ../alkimia-master-qt5-mingw32-build/bin/libalkimia5-8.dll | gawk '$1 ~ /^\/home.*:$/ { gsub(/:/,"", $1); print $1}' | xargs realpath | sort | uniq /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkcompany.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkdownloadengine.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alknewstuffengine.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alknewstuffwidget.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequote.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequote_p.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofile.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofilemanager.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequotesprofile_p.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequoteswidget.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkonlinequoteuploaddialog.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/EWIEGA46WW/moc_alkwebpage.cpp /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alkdownloadengine.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alknewstuffengine.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alknewstuffwidget.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/alkimia_autogen/include/alkonlinequoteswidget.moc /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequotedetails.h /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequotesdebug.h /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequotes.h /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequotesprofiledetails.h /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequotesprofiles.h /home/user/src/alkimia-master-qt5-mingw32-build/src/ui_alkonlinequoteuploaddialog.h /home/user/src/alkimia-master/src/alkcompany.cpp /home/user/src/alkimia-master/src/alkdateformat.cpp /home/user/src/alkimia-master/src/alkdownloadengine.cpp /home/user/src/alkimia-master/src/alkdownloadengine.h /home/user/src/alkimia-master/src/alkexception.h /home/user/src/alkimia-master/src/alknewstuffengine.cpp /home/user/src/alkimia-master/src/alknewstuffengine.h /home/user/src/alkimia-master/src/alknewstuffwidget.cpp /home/user/src/alkimia-master/src/alknewstuffwidget.h /home/user/src/alkimia-master/src/alkonlinequote.cpp /home/user/src/alkimia-master/src/alkonlinequote.h /home/user/src/alkimia-master/src/alkonlinequote_p.cpp /home/user/src/alkimia-master/src/alkonlinequotesource.cpp /home/user/src/alkimia-master/src/alkonlinequotesource.h /home/user/src/alkimia-master/src/alkonlinequotesource_p.h /home/user/src/alkimia-master/src/alkonlinequotesprofile.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofilemanager.cpp /home/user/src/alkimia-master/src/alkonlinequotesprofile_p.cpp /home/user/src/alkimia-master/src/alkonlinequoteswidget.cpp /home/user/src/alkimia-master/src/alkonlinequoteswidget.h /home/user/src/alkimia-master/src/alkonlinequoteuploaddialog.cpp /home/user/src/alkimia-master/src/alkonlinequoteuploaddialog.h /home/user/src/alkimia-master/src/alkutils.cpp /home/user/src/alkimia-master/src/alkvalue.cpp /home/user/src/alkimia-master/src/alkwebpage.cpp /home/user/src/alkimia-master/src/alkwebpage.h With native objdump also include files generated from qt ui files are included Conclusion: The use of native objdump with -WL options seems to be a real step forward.
(In reply to Ralf Habacker from comment #12) > Conclusion: The use of native objdump with -WL options seems to be a real > step forward. I checked an additional package $ osc checkout windows:mingw:win32/mingw32-dbus-1 $ cd $_ $ osc build openSUSE_Leap_15.5 $ osc chroot openSUSE_Leap_15.5 and with the current implementation I get $ i686-w64-mingw32-objdump -Wi /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll | i686-w64-mingw32-objdump-srcfiles | grep /home/abuild/rpmbuild/BUILD/dbus-1.14.4 | wc -l 47 $ i686-w64-mingw32-objdump -Wi /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll | i686-w64-mingw32-objdump-srcfiles | grep /home/abuild/rpmbuild/BUILD/dbus-1.14.4 /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-address.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-auth.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-bus.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-connection.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-credentials.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-errors.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-keyring.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-marshal-header.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-marshal-byteswap.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-marshal-recursive.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-marshal-validate.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-message.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-misc.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-nonce.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-object-tree.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-pending-call.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-resources.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-server.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-server-debug-pipe.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-server-socket.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-server-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-sha.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-signature.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-syntax.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-timeout.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-threads.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-transport.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-transport-socket.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-watch.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-dataslot.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-file.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-hash.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-internals.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-list.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-marshal-basic.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-memory.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-mempool.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-pipe.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-string.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-file-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-pipe-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-sysdeps-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-sysdeps-thread-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-transport-win.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-sysdeps.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-test-tap.c /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-init-win.cpp there are no header included. This issue is tracked with bug 1221463. With the mingw objdump and the parameter -WL I get $ i686-w64-mingw32-objdump -WL /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll | gawk '$1 ~ /^\/.*:$/ && $1 ~ SRCDIR { gsub(/:/,"", $1); print $1}' SRCDIR=/home/abuild/rpmbuild/BUILD/dbus-1.14.4/ | xargs realpath | sort | uniq /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll which returns an incomplete list of files With the native objdump $ objdump -WL /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll | gawk '$1 ~ /^\/.*:$/ && $1 ~ SRCDIR { gsub(/:/,"", $1); print $1}' SRCDIR=/home/abuild/rpmbuild/BUILD/dbus-1.14.4/ | xargs realpath | sort | uniq /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/.libs/libdbus-1-3.dll /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-credentials.h /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-internals.h /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-string.h /home/abuild/rpmbuild/BUILD/dbus-1.14.4/dbus/dbus-sysdeps.h also an uncomplete list is returned. The situation is therefore not clear-cut - the current solution generates partially incomplete file lists and the envisaged solution also requires adjustments.
I just saw at https://www.prevanders.net/dwarf.html#introduction, that there is a dwarfdump tool available, which can read PE files https://www.prevanders.net/dwarf.html#libdwarf-20190104 I did a quick test to see what the differences are compared to the current solution: osc co windows:mingw:win32/mingw32-libvsg && cd $_ osc build openSUSE_Leap_15.5 time find /home/osc/build-root/openSUSE_Leap_15.5-x86_64/home/abuild/rpmbuild/BUILD/VulkanSceneGraph-1.0.9/ -name '*.dll' | xargs objdump -Wi | /usr/bin/i686-w64-mingw32-objdump-srcfiles > /dev/null real 0m15,122s user 0m23,000s sys 0m0,723s Most of the time is spent analyzing the binary file with objdump: time find /home/osc/build-root/openSUSE_Leap_15.5-x86_64/home/abuild/rpmbuild/BUILD/VulkanSceneGraph-1.0.9/ -name '*.dll' | xargs objdump -Wi > /dev/null real 0m14,426s user 0m14,234s sys 0m0,187s And now the same with dwarfdump, which was built in release mode: time find /home/osc/build-root/openSUSE_Leap_15.5-x86_64/home/abuild/rpmbuild/BUILD/VulkanSceneGraph-1.0.9/ -name '*.dll' | xargs ../libdwarf-code-build/src/bin/dwarfdump/dwarfdump -i > /dev/null real 0m26,076s user 0m25,212s sys 0m0,490s It takes about 1.85 times more time than the current solution.