<div dir="ltr"><div>On Fri, Sep 23, 2016 at 4:58 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">Hi Vitaly,<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Can you go over the exact use case with a bit more details? (i.e. without assuming we’re all familiar with the product, who are the user, and how are they using it).<div class="gmail_msg">That’d help to understand the need dump an external library source code directly inside LLVM.</div></div></div></blockquote><div><br></div>Sanitizer runtime supports weak hooks for symbolizer interface.<div><a href="http://llvm-cs.pcc.me.uk/projects/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc#328">http://llvm-cs.pcc.me.uk/projects/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc#328</a><br></div><div>If these symbols are defined, runtime will use them instead of invoking llvm-symbolizer tool.<br></div><div>So it would be nice to have this library in clang distribution and make clang driver link this library with sanitizer runtimes.</div><div><br></div><div>Library includes llvm::symbolize::LLVMSymbolizer with dependencies, mostly from LLVM plus zlib.</div><div>Library must not be instrumented with sanitizes and do not depend on any instrumented code. So using LTO and -internalize-public-api-list flag we make sure that library exports only weak hooks like:<span class="inbox-inbox-Apple-converted-space"> </span><a class="inbox-inbox-inbox-inbox-r65 inbox-inbox-inbox-inbox-r inbox-inbox-inbox-inbox-def inbox-inbox-cremed cremed" href="http://llvm-cs.pcc.me.uk/projects/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc/r__sanitizer_symbolize_demangle" style="color:inherit;text-decoration:none">__sanitizer_symbolize_*</a> symbols, and has undefined symbols only from libc.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Also have you consider changing the LLVM build system to build zlib optionally as an external project? (Like we can include clang -DLLVM_EXTERNAL_CLANG_DIR=….) </div></div></div></div></blockquote><div><br></div><div>Maybe -<span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif">DLLVM_EXTERNAL_ZLIB is OK </span>temporarily, <span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif">but long temp it does not sound like convenient solution.</span></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">— </div></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">Mehdi</div></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Sep 23, 2016, at 4:35 PM, Vitaly Buka <<a href="mailto:vitalybuka@google.com" class="gmail_msg cremed" target="_blank">vitalybuka@google.com</a>> wrote:</div><br class="m_-1919089186742790992Apple-interchange-newline gmail_msg"><div class="gmail_msg"><div dir="ltr" class="gmail_msg">Yes, zlib build for LTO will work, but user will have to build this lib from zlib source code anyway.</div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Fri, Sep 23, 2016 at 4:01 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com" class="gmail_msg cremed" target="_blank">mehdi.amini@apple.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Sep 23, 2016, at 1:44 PM, Vitaly Buka via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg cremed" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="gmail_msg m_-1919089186742790992m_-163904877724336964Apple-interchange-newline"><div class="gmail_msg"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">Hi all,</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Is it possible to add zlib source code into llvm repo? Any advice on how to do so?</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I'd like to setup build of symbolizer as a static library with no external dependencies except libc. </div><div class="gmail_msg">Similar to <a href="https://github.com/google/sanitizers/blob/master/address-sanitizer/internal_symbolizer/howto" class="gmail_msg m_-1919089186742790992m_-163904877724336964cremed cremed" target="_blank">https://github.com/google/sanitizers/blob/master/address-sanitizer/internal_symbolizer/howto</a>.</div><div class="gmail_msg">Then the library can be linked into sanitized program and avoid dependency on standalone llvm-symbolizer tool.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Out solution uses LTO and internalize everything but symbolizer API, so we have no symbol conflicts with instrumented binary. <br class="gmail_msg"></div><div class="gmail_msg">For LTO we need zlib in source code.</div></div></div></blockquote></div><br class="gmail_msg"></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">This is not clear to me.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">It seems that what you want ultimately is a build where zlib would be LTO together with your program?</div><div class="gmail_msg">Assuming this is correct, you don’t need the source code for zlib, but you need a static archive of zlib build for LTO.</div><div class="gmail_msg">(What may be missing, is the ability to the LLVM build system to select a static zlib archive to link to?)</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">— </div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">Mehdi</div><div class="gmail_msg"><br class="gmail_msg"></div></div></blockquote></div>
</div></blockquote></div><br class="gmail_msg"></div></div></div></div></blockquote></div></div>