<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 27, 2013 at 10:37 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Is there any way we can make this work in the MSVC build too?<br>
</blockquote><div><br></div><div>Hm... I don't know if we need this for Windows/MSVC - what is the link strategy for -fsanitize=foo</div><div>flag there (do we also link sanitizer runtimes into executables, but not into dll's and therfore have to</div>
<div>export all the necessary symbols?)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im"><br>
On Tue, Aug 27, 2013 at 8:08 AM, Alexey Samsonov <<a href="mailto:samsonov@google.com">samsonov@google.com</a>> wrote:<br>
> Author: samsonov<br>
> Date: Tue Aug 27 10:08:02 2013<br>
> New Revision: 189356<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=189356&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=189356&view=rev</a><br>
> Log:<br>
> Properly generate lists of exported symbols for sanitizer runtimes<br>
><br>
> This change adds a Python script that is invoked for<br>
> the just-built sanitizer runtime to generate the list of exported symbols<br>
> passed to the linker. By default, it contains interceptors and sanitizer<br>
> interface functions, but can be extended with tool-specific lists.<br>
><br>
</div>...<br>
<div class="im">> --- compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake (added)<br>
> +++ compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake Tue Aug 27 10:08:02 2013<br>
> @@ -0,0 +1,22 @@<br>
> +include(LLVMParseArguments)<br>
> +<br>
> +set(SANITIZER_GEN_DYNAMIC_LIST<br>
> +  ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/gen_dynamic_list.py)<br>
> +<br>
> +# Create a target "<name>-symbols" that would generate the list of symbols<br>
> +# that need to be exported from sanitizer runtime "<name>". Function<br>
> +# interceptors are exported automatically, user can also provide files with<br>
> +# symbol names that should be exported as well.<br>
> +#   add_sanitizer_rt_symbols(<name> <files with extra symbols to export>)<br>
> +macro(add_sanitizer_rt_symbols name)<br>
> +  get_target_property(libfile ${name} LOCATION)<br>
> +  set(symsfile "${libfile}.syms")<br>
> +  add_custom_target(${name}-symbols ALL<br>
> +    COMMAND ${SANITIZER_GEN_DYNAMIC_LIST} ${libfile} ${ARGN}<br>
> +      > ${symsfile}<br>
<br>
</div>I think this should be COMMAND ${PYTHON_EXECUTABLE}<br>
${SANITIZER_GEN_DYNAMIC_LIST}<br>
<br>
Otherwise, Windows won't know how to open/run the .py file.<br>
<div><div class="h5"><br>
> --- compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py (added)<br>
> +++ compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py Tue Aug 27 10:08:02 2013<br>
> @@ -0,0 +1,76 @@<br>
> +#!/usr/bin/env python<br>
> +#===- lib/sanitizer_common/scripts/gen_dynamic_list.py ---------------------===#<br>
> +#<br>
> +#                     The LLVM Compiler Infrastructure<br>
> +#<br>
> +# This file is distributed under the University of Illinois Open Source<br>
> +# License. See LICENSE.TXT for details.<br>
> +#<br>
> +#===------------------------------------------------------------------------===#<br>
> +#<br>
> +# Generates the list of functions that should be exported from sanitizer<br>
> +# runtimes. The output format is recognized by --dynamic-list linker option.<br>
> +# Usage:<br>
> +#   gen_dynamic_list.py libclang_rt.*san*.a [ files ... ]<br>
> +#<br>
> +#===------------------------------------------------------------------------===#<br>
> +import re<br>
> +import os<br>
> +import subprocess<br>
> +import sys<br>
> +<br>
> +def get_global_functions(library):<br>
> +  functions = []<br>
> +  nm_proc = subprocess.Popen(['nm', library], stdout=subprocess.PIPE)<br>
<br>
</div></div>In the MSVC build, 'nm' is not available. This breaks the build :/<br>
</blockquote></div><br>See my note above - for now I suggest to "fix" this by only running this script on Linux</div><div class="gmail_extra">(make <span style="color:rgb(80,0,80)">add_sanitizer_rt_</span><span style="color:rgb(80,0,80)">symbols(...) a no-op or don't call it on another systems). I would only be able</span></div>
<div class="gmail_extra"><font color="#500050">to do this tomorrow - I'd be grateful if you fix this now to unblock you... We should also</font></div><div class="gmail_extra"><font color="#500050">move Windows CMake compiler-rt build to our buildbot. Timur?</font></div>
<div class="gmail_extra"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>