Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Runner] Fix MSAN C++ compiler with LLVM 13 #366

Merged
merged 1 commit into from
Jan 27, 2024

Conversation

giordano
Copy link
Member

@giordano giordano commented Jan 27, 2024

Trying to build JuliaPackaging/Yggdrasil#7872 on master for x86_64-linux-gnu-cxx11-sanitize+memory (see JuliaPackaging/Yggdrasil#7872 (comment)):

sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # echo 'int main (void) { return 0; }' | SUPER_VERBOSE=1 c++ -x c++ - -g -O2
ccache /opt/x86_64-linux-musl/bin/clang++ -target x86_64-linux-gnu --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -D_GLIBCXX_USE_CXX11_ABI=1 -stdlib=libstdc++ -march=x86-64 -mtune=generic -fsanitize=memory -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0 -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/x86_64-linux-gnu -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/backward -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/include -x c++ - -g -O2 -rtlib=libgcc -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -fuse-ld=x86_64-linux-gnu -fsanitize=memory
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -z now -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crt1.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crti.o /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/crtbegin.o -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0 -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64 -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a.syms --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms /tmp/--fa2059.o -lstdc++ -lm --no-as-needed -lpthread -lrt -lm -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/crtend.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crtn.o
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: warning: libc.musl-x86_64.so.1, needed by /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib/../lib64/libstdc++.so, not found (try using -rpath or -rpath-link)
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: a.out: hidden symbol `fstat' in /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib64/libc_nonshared.a(fstat.oS) is referenced by DSO
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: final link failed: Bad value
clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # 

On this PR:

sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # echo 'int main (void) { return 0; }' | SUPER_VERBOSE=1 c++ -x c++ - -g -O2
ccache /opt/x86_64-linux-musl/bin/clang++ -target x86_64-linux-gnu --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -D_GLIBCXX_USE_CXX11_ABI=1 -stdlib=libstdc++ --gcc-toolchain=/opt/x86_64-linux-gnu -march=x86-64 -mtune=generic -fsanitize=memory -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0 -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/x86_64-linux-gnu -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/backward -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/include -x c++ - -g -O2 -rtlib=libgcc -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -fuse-ld=x86_64-linux-gnu -fsanitize=memory
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -z now -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crt1.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crti.o /opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/crtbegin.o -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/../../../../x86_64-linux-gnu/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64 -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/../../../../x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a.syms --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms /tmp/--c81f80.o -lstdc++ -lm --no-as-needed -lpthread -lrt -lm -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc /opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/crtend.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crtn.o
sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # 

Note the completely different linker invocation, on master we're picking up directories and libraries/object files from the host environment, in this PR we only use target directories/libraries, and MSAN libraries under "host" directories (but just because they're installed there, they're coming from the target LLVMCompileRT build).

It's a bit complicated to test this properly because it requires setting up the MSAN compiler, for which we don't have a straightforward way to do it.

@gbaraldi
Copy link
Contributor

Why is it using clang13? I think we might need a version check for clang for this.

@giordano
Copy link
Member Author

Why is it using clang13?

Because we don't have compiler rt for llvm 16 yet: JuliaPackaging/Yggdrasil#7877

think we might need a version check for clang for this.

It's there already.

@gbaraldi
Copy link
Contributor

Oh I missed that :(. I guess reviewing code from the phone isn’t the best

@giordano giordano merged commit a4ef056 into JuliaPackaging:master Jan 27, 2024
10 checks passed
@giordano giordano deleted the mg/msan-c++-compiler branch January 27, 2024 16:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants