Quuxplusone / LLVMBugzillaTest

0 stars 0 forks source link

r369233 breaks linking of packages in Chrome OS #42062

Open Quuxplusone opened 5 years ago

Quuxplusone commented 5 years ago
Bugzilla Link PR43092
Status NEW
Importance P enhancement
Reported by Manoj Gupta (manojgupta@google.com)
Reported on 2019-08-22 10:23:58 -0700
Last modified on 2019-08-30 23:24:53 -0700
Version unspecified
Hardware PC Linux
CC george.burgess.iv@gmail.com, htmldeveloper@gmail.com, i@maskray.me, llozano@chromium.org, llvm-bugs@lists.llvm.org, manojgupta@google.com, zhizhouy@google.com
Fixed by commit(s)
Attachments
Blocks
Blocked by
See also
Post r369233: [MC] Don't emit .symver redirected symbols to the symbol table
(https://reviews.llvm.org/rL369233), some packages in Chrome OS fail to link
with gold linker.

https://ci.chromium.org/p/chromeos/builders/general/Try/b8904712082539323888

Some error logs:
alsa-lib-1.1.6-r3: libtool: link: armv7a-cros-linux-gnueabihf-clang -shared  -
fPIC -DPIC  .libs/conf.o .libs/confmisc.o .libs/input.o .libs/output.o
.libs/async.o .libs/error.o .libs/dlmisc.o .libs/socket.o .libs/shmarea.o
.libs/userfile.o .libs/names.o  -Wl,--whole-archive control/.libs/libcontrol.a
mixer/.libs/libmixer.a pcm/.libs/libpcm.a timer/.libs/libtimer.a
rawmidi/.libs/librawmidi.a hwdep/.libs/libhwdep.a seq/.libs/libseq.a
ucm/.libs/libucm.a topology/.libs/libtopology.a -Wl,--no-whole-archive  -Wl,--
as-needed -lm -ldl -lpthread -lrt  -O2 -march=armv8-a+crc -mtune=cortex-
a57.cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard -g -Wl,--version-
script=Versions -Wl,--no-undefined -Wl,-O2   -Wl,-soname -Wl,libasound.so.2 -o
.libs/libasound.so.2.0.0
alsa-lib-1.1.6-r3: ../../../alsa-lib-1.1.6/src/mixer/simple_abst.c:130: error:
undefined reference to '__snd_dlopen'
alsa-lib-1.1.6-r3: ../../../alsa-lib-1.1.6/src/pcm/pcm_params.c:2335: error:
undefined reference to '__snd_pcm_hw_params_get_access'
alsa-lib-1.1.6-r3: ../../../alsa-lib-1.1.6/src/pcm/pcm_params.c:2336: error:
undefined reference to '__snd_pcm_hw_params_get_format'

fuse-common-3.2.6-r2: [44/64] armv7a-cros-linux-gnueabihf-clang  -o
lib/libfuse3.so.3.2.6 'lib/76b5a35@@fuse3@sha/fuse.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop_mt.c.o'
'lib/76b5a35@@fuse3@sha/fuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/fuse_opt.c.o' 'lib/76b5a35@@fuse3@sha/fuse_signals.c.o'
'lib/76b5a35@@fuse3@sha/buffer.c.o' 'lib/76b5a35@@fuse3@sha/cuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/helper.c.o' 'lib/76b5a35@@fuse3@sha/modules_subdir.c.o'
'lib/76b5a35@@fuse3@sha/mount.c.o' 'lib/76b5a35@@fuse3@sha/mount_util.c.o'
'lib/76b5a35@@fuse3@sha/modules_iconv.c.o' -Wl,--no-undefined -Wl,--as-needed -
shared -fPIC -Wl,--start-group -Wl,-soname,libfuse3.so.3 -Wl,--version-
script,/build/kevin/tmp/portage/sys-fs/fuse-common-3.2.6-r2/work/fuse-
3.2.6/lib/fuse_versionscript -ldl -lrt -Wl,--end-group -pthread -O2 -pipe -
march=armv8-a+crc -mtune=cortex-a57.cortex-a53 -mfpu=crypto-neon-fp-armv8 -
mfloat-abi=hard -g -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-
tables -Wl,-O2 -Wl,--as-needed
fuse-common-3.2.6-r2: FAILED: lib/libfuse3.so.3.2.6
fuse-common-3.2.6-r2: armv7a-cros-linux-gnueabihf-clang  -o
lib/libfuse3.so.3.2.6 'lib/76b5a35@@fuse3@sha/fuse.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop_mt.c.o'
'lib/76b5a35@@fuse3@sha/fuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/fuse_opt.c.o' 'lib/76b5a35@@fuse3@sha/fuse_signals.c.o'
'lib/76b5a35@@fuse3@sha/buffer.c.o' 'lib/76b5a35@@fuse3@sha/cuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/helper.c.o' 'lib/76b5a35@@fuse3@sha/modules_subdir.c.o'
'lib/76b5a35@@fuse3@sha/mount.c.o' 'lib/76b5a35@@fuse3@sha/mount_util.c.o'
'lib/76b5a35@@fuse3@sha/modules_iconv.c.o' -Wl,--no-undefined -Wl,--as-needed -
shared -fPIC -Wl,--start-group -Wl,-soname,libfuse3.so.3 -Wl,--version-
script,/build/kevin/tmp/portage/sys-fs/fuse-common-3.2.6-r2/work/fuse-
3.2.6/lib/fuse_versionscript -ldl -lrt -Wl,--end-group -pthread -O2 -pipe -
march=armv8-a+crc -mtune=cortex-a57.cortex-a53 -mfpu=crypto-neon-fp-armv8 -
mfloat-abi=hard -g -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-
tables -Wl,-O2 -Wl,--as-needed
fuse-common-3.2.6-r2: ../fuse-3.2.6/lib/cuse_lowlevel.c:356: error: undefined
reference to 'fuse_session_loop_mt_32'
fuse-common-3.2.6-r2: ../fuse-3.2.6/lib/helper.c:311: error: undefined
reference to 'fuse_new_31'
fuse-common-3.2.6-r2: ../fuse-3.2.6/lib/helper.c:339: error: undefined
reference to 'fuse_loop_mt_32'

The working build logs with source files/old objects are at
https://drive.google.com/drive/folders/1qD5uxkiCHCsh3GJG9M7ADCzHekaUkyrk?usp=sharing
Quuxplusone commented 5 years ago
Easier repro:

$ git clone https://github.com/libfuse/libfuse.git
$ mkdir libfuse/build && cd libfuse/build
$ CC=/path/to/clang CXX=/path/to/clang++ meson ..

Linker will error out with same errors:
clang  -o lib/libfuse3.so.3.6.2 'lib/76b5a35@@fuse3@sha/fuse.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop.c.o'
'lib/76b5a35@@fuse3@sha/fuse_loop_mt.c.o'
'lib/76b5a35@@fuse3@sha/fuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/fuse_opt.c.o' 'lib/76b5a35@@fuse3@sha/fuse_signals.c.o'
'lib/76b5a35@@fuse3@sha/buffer.c.o' 'lib/76b5a35@@fuse3@sha/cuse_lowlevel.c.o'
'lib/76b5a35@@fuse3@sha/helper.c.o' 'lib/76b5a35@@fuse3@sha/modules_subdir.c.o'
'lib/76b5a35@@fuse3@sha/mount_util.c.o' 'lib/76b5a35@@fuse3@sha/mount.c.o'
'lib/76b5a35@@fuse3@sha/modules_iconv.c.o' -Wl,--no-undefined -Wl,--as-needed -
shared -fPIC -Wl,--start-group -Wl,-soname,libfuse3.so.3 -Wl,--version-
script,build/libfuse/lib/fuse_versionscript -ldl -lrt -Wl,--end-group -pthread

../lib/fuse.c:4538: error: undefined reference to 'fuse_session_loop_mt_32'
../lib/cuse_lowlevel.c:356: error: undefined reference to
'fuse_session_loop_mt_32'
../lib/helper.c:316: error: undefined reference to 'fuse_new_31'
../lib/helper.c:344: error: undefined reference to 'fuse_loop_mt_32'
Quuxplusone commented 5 years ago

Reverted in r369790

Quuxplusone commented 5 years ago
Sorry for the trouble I caused. This is related to a nasty .symver issue
involving the assembler the linker. As the description said:

  In lld, if it sees f and f@v1:

      --version-script =(printf 'v1 {};') => f and f@v1
      --version-script =(printf 'v1 { f; };') => f@v1 and f@@v1

  It can be argued that @@@ added on 2000-11-13 corrected the @ and @@ mistake.

I hope we can handle .symver in a clean way (not an indirect symbol as used in
GNU ld).

Eventually I hope .symver @ and @@ can be a rename as @@@ does. The way fuse
and alsa-lib use .symver may be less than ideal. Let me check if fuse and alsa-
lib can be patched.