Bug 34801

Summary: ld doesn't support LTO optimized libraries produced by lld
Product: Sisyphus Reporter: Konstantin A Lepikhov (L.A. Kostis) <lakostis>
Component: binutilsAssignee: Gleb F-Malinovskiy <glebfm>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: darktemplaralt, glebfm, lav, vt
Version: unstableKeywords: relnote
Hardware: all   
OS: Linux   
URL: https://sourceware.org/bugzilla/show_bug.cgi?id=20104

Description Konstantin A Lepikhov (L.A. Kostis) 2018-04-12 20:36:36 MSK
См. описание бага по ссылке, такая же ошибка воспроизводится при пересборке пакета castxml с помощью clang/llvm:

[ 54%] Linking CXX executable ../bin/castxml
/usr/lib64/libclangFrontend.a: error adding symbols: File format not
recognized
clang-6.0: error: linker command failed with exit code 1 (use -v to see
invocation)
make[2]: *** [src/CMakeFiles/castxml.dir/build.make:210: bin/castxml] Error 1

Есть еще баг в debian - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=767323, где опять же говорится, что такие ошибки это проблема ld, а не сборки clang/llvm.
Comment 1 Dmitry V. Levin 2018-04-19 20:54:42 MSK
(In reply to comment #0)
> См. описание бага по ссылке, такая же ошибка воспроизводится при пересборке
> пакета castxml с помощью clang/llvm:
> 
> [ 54%] Linking CXX executable ../bin/castxml
> /usr/lib64/libclangFrontend.a: error adding symbols: File format not
> recognized

В какой версии GNU ld или GNU gold поддерживается этот формат объектных файлов, которые производит clang/lld?  Есть ли основания полагать, что такая поддержка вообще будет реализована?

GNU и LLVM - это разные экосистемы.  Я полагаю, что при сохранении нынешних тенденций развития GNU и LLVM совместимость между ними будет неуклонно снижаться.
Comment 2 Konstantin A Lepikhov (L.A. Kostis) 2018-04-20 00:13:09 MSK
(In reply to comment #1)
> (In reply to comment #0)
> > См. описание бага по ссылке, такая же ошибка воспроизводится при пересборке
> > пакета castxml с помощью clang/llvm:
> > 
> > [ 54%] Linking CXX executable ../bin/castxml
> > /usr/lib64/libclangFrontend.a: error adding symbols: File format not
> > recognized
> 
> В какой версии GNU ld или GNU gold поддерживается этот формат объектных файлов,
> которые производит clang/lld?  Есть ли основания полагать, что такая поддержка
> вообще будет реализована?
Мне кажется, тут все даже интереснее:
https://svn.boost.org/trac10/ticket/12565

> Explicityly passing linkflags="-plugin /usr/x86_64-pc-linux-gnu/binutils-bin/lib/bfd-plugins/LLVMgold.so" fixes this.

Я попробую проверить это в нашей ситуации.

> 
> GNU и LLVM - это разные экосистемы.  Я полагаю, что при сохранении нынешних
> тенденций развития GNU и LLVM совместимость между ними будет неуклонно
> снижаться.
Тогда нужно принять решение, мы планируем параллельную поддержку этих экосистем или нет. Иначе придется продолжать собирать llvm в режиме совместимости с gcc и без clang в ущерб возможностей и производительности.
Comment 3 Dmitry V. Levin 2018-04-20 00:51:28 MSK
(In reply to comment #2)
> Мне кажется, тут все даже интереснее:
> https://svn.boost.org/trac10/ticket/12565
> 
> > Explicityly passing linkflags="-plugin /usr/x86_64-pc-linux-gnu/binutils-bin/lib/bfd-plugins/LLVMgold.so" fixes this.
> 
> Я попробую проверить это в нашей ситуации.

Это очень правдоподобный рецепт.

> > GNU и LLVM - это разные экосистемы.  Я полагаю, что при сохранении нынешних
> > тенденций развития GNU и LLVM совместимость между ними будет неуклонно
> > снижаться.
> Тогда нужно принять решение, мы планируем параллельную поддержку этих экосистем
> или нет. Иначе придется продолжать собирать llvm в режиме совместимости с gcc и
> без clang в ущерб возможностей и производительности.

Да, но хотелось бы делать информированный выбор.
Comment 4 Konstantin A Lepikhov (L.A. Kostis) 2018-05-02 00:03:31 MSK
(In reply to comment #3)
<skip> 
> > > GNU и LLVM - это разные экосистемы.  Я полагаю, что при сохранении нынешних
> > > тенденций развития GNU и LLVM совместимость между ними будет неуклонно
> > > снижаться.
> > Тогда нужно принять решение, мы планируем параллельную поддержку этих экосистем
> > или нет. Иначе придется продолжать собирать llvm в режиме совместимости с gcc и
> > без clang в ущерб возможностей и производительности.
> 
> Да, но хотелось бы делать информированный выбор.

Пока выбор очень прост - переходить на llvm везде, где требуется llvm. Например, castxml собрался при замене ld на lld.

Но в этом случае получается несовместимость по сборочным флагам и опциям, поскольку я никак не стремился к gcc.
Comment 5 Konstantin A Lepikhov (L.A. Kostis) 2018-06-11 23:54:01 MSK
*** Bug 35018 has been marked as a duplicate of this bug. ***
Comment 6 Vitaly Chikunov 2018-06-15 19:48:22 MSK
По результатам сборки bcc, предлагаю вернуть совместимость статических libclang и libLLVM с GNU ld.
Comment 7 Dmitry V. Levin 2018-06-15 19:51:10 MSK
(In reply to comment #6)
> По результатам сборки bcc, предлагаю вернуть совместимость статических libclang
> и libLLVM с GNU ld.

Я не понимаю, почему это баг на binutils.