|Summary:||sci-misc/boinc fails to link with LLD because of /usr/lib in the link command line|
|Product:||Gentoo Linux||Reporter:||Agostino Sarubbo <ago>|
|Component:||Current packages||Assignee:||Gentoo Science Related Packages <sci>|
|Severity:||normal||CC:||fsvm88, jstein, sven.eden|
|Package list:||Runtime testing required:||---|
|Bug Depends on:|
Disable explicit library search paths for lglu32, lglut32
Disable explicit library search paths for libssl
Description Agostino Sarubbo 2020-07-10 08:04:22 UTC
https://blogs.gentoo.org/ago/2020/07/04/gentoo-tinderbox/ Issue: sci-misc/boinc fails to link with LLD because of /usr/lib in the link command line. Discovered on: amd64 (internal ref: tinderbox) NOTE: This PR gives an idea about a fix: https://github.com/PhotoFlare/photoflare/pull/248/files.
Comment 1 Agostino Sarubbo 2020-07-10 08:04:30 UTC
Created attachment 648718 [details] build.log build log and emerge --info
Comment 2 Agostino Sarubbo 2020-07-10 08:04:33 UTC
Created attachment 648720 [details] other.tar.bz2 other logs
Comment 3 Sven Eden 2020-08-23 15:13:57 UTC
Thanks for the information! I've got a new laptop and haven't boinc set up, yet. That should be updated anyway, so I'll look into that.
Comment 4 Sven Eden 2020-11-07 22:49:02 UTC
There is something odd in the build.log: -------- /usr/lib/gcc/x86_64-pc-linux-gnu/10.1.0/../../../../lib64/crt1.o is incompatible with elf_x86_64 -------- I have that file with gcc-9.3.0 and iot says: -------- ~ $ file /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../lib64/crt1.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), for GNU/Linux 3.2.0, not stripped -------- So, according to your log, ldd says that "ELF 64-bit" is incompatible with elf_x86_64 ? I'll check for hardcoded paths, but could you please check your box?
Comment 5 Sven Eden 2020-11-08 13:08:00 UTC
Actually what you are complaining about is an upstream bug. See: https://bugs.llvm.org/show_bug.cgi?id=42802 I'll try to get rid of the wrong library paths, but actually we should not do this. The BOINC build system is very complex, and it is LDD that is doing wrong here. The Blocker is the only reason why I do not mark this as WONTFIX.
Comment 6 Sven Eden 2020-11-08 13:36:43 UTC
*** Bug 741588 has been marked as a duplicate of this bug. ***
Comment 7 Fabio Scaccabarozzi 2020-11-10 22:13:48 UTC
Created attachment 670826 [details, diff] Disable explicit library search paths for lglu32, lglut32
Comment 8 Fabio Scaccabarozzi 2020-11-10 22:14:08 UTC
Created attachment 670829 [details, diff] Disable explicit library search paths for libssl
Comment 9 Fabio Scaccabarozzi 2020-11-10 22:19:12 UTC
The issue is that configure checks for libssl (and non-critical lglu32/lglut32) prepend additional library search paths, -L/usr and -L/usr/lib, which are 32-bit search paths, but we're building a 64-bit project. When -lcurl is checked, SSL_LIBS gets also appended as part of the test, and fails. Since we're running autotools at the beginning of the ebuild anyway, we can patch the m4/*.m4 files, have them regenerated right after patching and have the build work again. According also to the upstream bug, it seems that ld.bfd and ld.gold happily ignore the non-matching files in the wrong search paths, while ld.lld actually complains (in my opinion, a saner behavior). By dropping the attached two patches in /etc/portage/patches, I can finally build boinc properly.
Comment 10 Sven Eden 2020-11-11 07:26:25 UTC
Thanks alot. The first patche is already in my PR, but I missed the check_ssl.m4 issue. I will update my PR now.
Comment 11 Sven Eden 2020-11-11 07:38:09 UTC
PR edited. Please note that it is a PR to bump to boinc-7.16.11
Comment 12 Sven Eden 2020-11-11 09:12:16 UTC
(In reply to Fabio Scaccabarozzi from comment #9) > According also to the upstream bug, it seems that ld.bfd and ld.gold happily > ignore the non-matching files in the wrong search paths, while ld.lld > actually complains (in my opinion, a saner behavior). No. Just no. ld.bfd and ld.gold do complain and go on searching for a match. ld.lld breaks off without even looking at alternatives, although there are paths left to check. If the behavior of ld.lld was sane, then -------- ~ # find /usr/lib /usr/lib64 -name 'libkms.so' /usr/lib/libkms.so /usr/lib64/libkms.so -------- must not show the match in /usr/lib64 either. But it does. Which is actually the purpose of searching&finding. I do not know what the rationale on breaking off the search by ld.lld is, but it is causing a lot of trouble without a single advantage in return.
Comment 13 Fabio Scaccabarozzi 2020-11-11 09:44:06 UTC
(In reply to Sven Eden from comment #12) > I do not know what the rationale on breaking off the search by ld.lld is, > but it is causing a lot of trouble without a single advantage in return. Having thought it through some more, I think you're correct, it is *not* saner behavior. I tried to make up a case where you'd want to completely prevent linking if an incompatible library is found first, but couldn't think of any. I'll try and see if I can come up with a patch for LLD to submit to the upstream bug tracker.
Comment 14 Fabio Scaccabarozzi 2020-11-11 22:11:47 UTC
Quick update: spent 3-4h poking at it, but the LLD code is much more complex than anticipated, and checking of the format of the object files happens after the full file paths are detected (couldn't find a trivial way to plug it in). I have updated the upstream bug with the code and archive to reproduce as was already requested.
Comment 15 Fabio Scaccabarozzi 2020-11-12 18:49:14 UTC
Upstream bug was closed as RESOLVED-WONTFIX. I do agree with them that is boinc's build system being broken here (it's explicitly passing the wrong folder, and we should upstream those fixes also), on the other hand I still agree that the search&find behavior of LLD is worse than BFD's...
Comment 16 Sven Eden 2020-11-13 15:42:29 UTC
(In reply to Fabio Scaccabarozzi from comment #15) > Upstream bug was closed as RESOLVED-WONTFIX. I already thought it would... > I do agree with them that is boinc's build system being broken here (it's > explicitly passing the wrong folder, and we should upstream those fixes > also) Yes, that is a good idea. See: https://github.com/BOINC/boinc/issues/4095
Comment 17 Sven Eden 2020-11-14 16:39:40 UTC
Upstream asked me to PR our patch, so here we go: https://github.com/BOINC/boinc/pull/4099
Comment 18 Sven Eden 2020-11-15 17:12:50 UTC
(In reply to Sven Eden from comment #17) > Upstream asked me to PR our patch, so here we go: > https://github.com/BOINC/boinc/pull/4099 It got merged. :-)
Comment 19 Sven Eden 2020-12-10 08:15:56 UTC
Unfortunately the Fix did not make it into 7.16.14, so our patch will have to stay for now.
Comment 20 Larry the Git Cow 2021-01-18 13:38:37 UTC
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e9b2020e1f608225d8fd30a16b4b7a1dcb9f214f commit e9b2020e1f608225d8fd30a16b4b7a1dcb9f214f Author: Sven Eden <email@example.com> AuthorDate: 2020-11-08 14:21:41 +0000 Commit: Joonas Niilola <firstname.lastname@example.org> CommitDate: 2021-01-18 13:37:24 +0000 sci-misc/boinc: V7.16.14 bump, EAPI 7 upgrade, bug fixes, GLEP 81 This version bump also fixes the following issues: * The user/group management is now done according to GLEP 81 * /etc/init.d/boinc: Ensure correct RUNTIMEDIR permissions (#684074) * /etc/init.d/boinc: The password does no longer need to be submitted * Hardcoded library search paths to /lib and /usr/lib have been removed or switched to /lib64 and /usr/lib64, if those are the regular library directories on the emerging system. (#732024) Closes: https://bugs.gentoo.org/684074 Closes: https://bugs.gentoo.org/717580 Closes: https://bugs.gentoo.org/732024 Package-Manager: Portage-3.0.9, Repoman-3.0.2 Signed-off-by: Sven Eden <email@example.com> Signed-off-by: Joonas Niilola <firstname.lastname@example.org> sci-misc/boinc/Manifest | 1 + sci-misc/boinc/boinc-7.16.14.ebuild | 205 +++++++++++++++++++++ sci-misc/boinc/files/boinc-7.16-fix_webview.patch | 11 ++ .../boinc/files/boinc-7.16-remove-usr_lib.patch | 89 +++++++++ sci-misc/boinc/files/boinc.init.in | 53 +----- sci-misc/boinc/metadata.xml | 44 +++-- 6 files changed, 342 insertions(+), 61 deletions(-)