[llvm-dev] Strange clang behavior when compiled against musl

Dmitry Golovin via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 9 01:42:19 PST 2016


I have managed to compile llvm and clang against musl, but it behaves really strange:

At first I tried to launch the compiler with musl dynamic loader:

    $ LD_LIBRARY_PATH=/path/to/musl/lib /path/to/musl/lib/ld-musl-x86_64.so.1 /path/to/llvm/bin/clang -v
    clang version 4.0.0 (https://github.com/llvm-mirror/clang 40adebeca0f99006d407508653c2cbd270a1a51c) (https://github.com/llvm-mirror/llvm 943496ffc4e7cb9d7dd6f5119325a7583e2cc31f)
    Target: x86_64-pc-linux-musl
    Thread model: posix
    InstalledDir: /path/to/llvm/bin

It worked, but couldn't compile binaries:

    $ LD_LIBRARY_PATH=/path/to/musl/lib /path/to/musl/lib/ld-musl-x86_64.so.1 /path/to/llvm/bin/clang -v -c hello.c
    clang version 4.0.0 (https://github.com/llvm-mirror/clang 40adebeca0f99006d407508653c2cbd270a1a51c) (https://github.com/llvm-mirror/llvm 943496ffc4e7cb9d7dd6f5119325a7583e2cc31f)
    Target: x86_64-pc-linux-musl
    Thread model: posix
    InstalledDir: /path/to/llvm/bin
     "/path/to/musl/lib/ld-musl-x86_64.so.1" -cc1 -triple x86_64-pc-linux-musl -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /path/to/hello/hello.gcno -resource-dir /path/to/musl/lib/clang/4.0.0 -isysroot /path/to/musl -internal-isystem /path/to/musl/usr/local/include -internal-isystem /path/to/musl/lib/clang/4.0.0/include -internal-externc-isystem /path/to/musl/include -internal-externc-isystem /path/to/musl/usr/include -fdebug-compilation-dir /path/to/hello -ferror-limit 19 -fmessage-length 80 -fobjc-runtime=gcc -fdiagnostics-show-option -o hello.o -x c hello.c
    /path/to/musl/lib/ld-musl-x86_64.so.1: cannot load -cc1: No such file or directory

As you can see it is trying to execute a compilation command with omitted clang binary path.

So I thought that it would work in chroot with nothing but musl and clang in it. So I chrooted to a newly created directory, put musl and clang in it, and it still didn't work:

    (chroot)$ clang -v -I/include -c hello.c
    clang version 4.0.0 (https://github.com/llvm-mirror/clang 40adebeca0f99006d407508653c2cbd270a1a51c) (https://github.com/llvm-mirror/llvm 943496ffc4e7cb9d7dd6f5119325a7583e2cc31f)
    Target: x86_64-pc-linux-musl
    Thread model: posix
    InstalledDir: /bin
     "" -cc1 -triple x86_64-pc-linux-musl -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /hello/hello.gcno -resource-dir ../lib/clang/4.0.0 -I /include -isysroot /path/to/musl -internal-isystem /path/to/musl/usr/local/include -internal-isystem ../lib/clang/4.0.0/include -internal-externc-isystem /path/to/musl/include -internal-externc-isystem /path/to/musl/usr/include -fdebug-compilation-dir /hello -ferror-limit 19 -fmessage-length 139 -fobjc-runtime=gcc -fdiagnostics-show-option -o hello.o -x c hello.c
    error: unable to execute command: Executable "" doesn't exist!

So it still doesn't launch clang as it should. But if I just copy and paste the produced line replacing `""` with `clang` it works and produces fine object file.

What else can I try to make it work? Does clang have public bugzilla?

Where can I send my musl support patches?


More information about the llvm-dev mailing list