Bug 1202431 - windows:mingw:win{32|64}/mingw{32|64}-filesystem: Enormous amount of time needed to scan binaries for debug source files
Summary: windows:mingw:win{32|64}/mingw{32|64}-filesystem: Enormous amount of time nee...
Status: NEW
Alias: None
Product: openSUSE.org
Classification: openSUSE
Component: 3rd party software (show other bugs)
Version: unspecified
Hardware: Other Other
: P5 - None : Normal (vote)
Target Milestone: ---
Assignee: Ralf Habacker
QA Contact: E-mail List
URL: https://sourceware.org/bugzilla/show_...
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-08-16 10:29 UTC by Ralf Habacker
Modified: 2024-05-03 16:02 UTC (History)
3 users (show)

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments
Screenshot from callgrind results running in a chrooted osc build environment (284.04 KB, image/png)
2022-08-18 12:48 UTC, Ralf Habacker
Details
Screenshot from callgrind results running on the linux host (394.45 KB, image/png)
2022-08-18 12:58 UTC, Ralf Habacker
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ralf Habacker 2022-08-16 10:29:25 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.
Comment 1 Ralf Habacker 2022-08-18 08:05:10 UTC
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.
Comment 2 Ralf Habacker 2022-08-18 08:21:13 UTC
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
Comment 3 Ralf Habacker 2022-08-18 08:28:12 UTC
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
Comment 4 Ralf Habacker 2022-08-18 12:48:02 UTC
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.
Comment 5 Ralf Habacker 2022-08-18 12:58:18 UTC
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%.
Comment 6 Ralf Habacker 2022-08-18 13:11:40 UTC
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.
Comment 7 Ralf Habacker 2022-08-19 07:42:38 UTC
Reported upstream at https://sourceware.org/bugzilla/show_bug.cgi?id=29505
Comment 8 Ralf Habacker 2022-08-25 12:25:15 UTC
(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.
Comment 9 Ralf Habacker 2022-09-10 07:55:18 UTC
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.
Comment 10 Fridrich Strba 2024-03-13 20:04:18 UTC
Ralf, is this still something to keep open?
Comment 11 Ralf Habacker 2024-03-14 11:43:50 UTC
(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.
Comment 12 Ralf Habacker 2024-03-14 13:47:14 UTC
(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.
Comment 13 Ralf Habacker 2024-03-15 11:18:39 UTC
(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.
Comment 14 Ralf Habacker 2024-05-03 16:02:14 UTC
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.