<div dir="ltr">Hi Artem,<div><br></div><div>Thanks for the bug report! It should certainly be possible to use safestack with CFI in non-trapping mode, or indeed with any other sanitizer. I've sent <a href="https://reviews.llvm.org/D29545">https://reviews.llvm.org/D29545</a> for review which should fix this bug.</div><div><br></div><div>Peter</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 31, 2017 at 11:34 AM, Artem Dinaburg via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I am using clang++3.9 to build a simple program with both CFI and safe-stack. I am getting linker errors when combining -fsanitize=safe-stack, -fsanitize=cfi, and -fno-sanitize-trap=all. Combining safe-stack and CFI without -fno-sanitize-trap=all works as expected.<br>
<br>
It looks like clang is attempting to link in two compiler-rt libraries, one for ubsan and one for safestack, and this causes multiply defined symbols.<br>
<br>
Is this the expected behavior? Can only one sanitizer at a time have trapping disabled?<br>
<br>
The command line to trigger is below.<br>
<br>
---<br>
$ clang++-3.9 -flto -fvisibility=default -fsanitize=safe-stack -fsanitize=cfi -fuse-ld=gold -fno-sanitize-trap=all hello.cpp<br>
... lots of multiply defined symbol errors...<br>
/usr/bin/ld.gold: error: /usr/lib/llvm-3.9/bin/../lib/<wbr>clang/3.9.1/lib/linux/<wbr>libclang_rt.safestack-x86_64.<wbr>a(sanitizer_common_nolibc.cc.<wbr>o): multiple definition of '__sanitizer::Abort()'<br>
/usr/bin/ld.gold: /usr/lib/llvm-3.9/bin/../lib/<wbr>clang/3.9.1/lib/linux/<wbr>libclang_rt.ubsan_standalone-<wbr>x86_64.a(sanitizer_posix_<wbr>libcdep.cc.o): previous definition here<br>
/usr/bin/ld.gold: error: /usr/lib/llvm-3.9/bin/../lib/<wbr>clang/3.9.1/lib/linux/<wbr>libclang_rt.safestack-x86_64.<wbr>a(sanitizer_common_nolibc.cc.<wbr>o): multiple definition of '__sanitizer::SleepForSeconds(<wbr>int)'<br>
/usr/bin/ld.gold: /usr/lib/llvm-3.9/bin/../lib/<wbr>clang/3.9.1/lib/linux/<wbr>libclang_rt.ubsan_standalone-<wbr>x86_64.a(sanitizer_posix_<wbr>libcdep.cc.o): previous definition here<br>
clang: error: linker command failed with exit code 1 (use -v to see invocation)<br>
---<br>
<br>
hello.cpp:<br>
---<br>
#include <iostream><br>
<br>
int main(int argc, const char* argv[]) {<br>
    std::cout << "Hello, World\n";<br>
    return 0;<br>
}<br>
---<br>
<br>
Thanks,<br>
Artem<br>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>