<div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Alexander, it looks like this is still failing on Darwin: </div><div dir="ltr"><br></div><div dir="ltr"><a href="http://lab.llvm.org:8080/green/job/clang-stage1-RA/1447/consoleFull#15588960978254eaf0-7326-4999-85b0-388101f2d404">http://lab.llvm.org:8080/green/job/clang-stage1-RA/1447/consoleFull#15588960978254eaf0-7326-4999-85b0-388101f2d404</a></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 27, 2019 at 1:55 PM Alexander Richardson <<a href="mailto:arichardson.kde@gmail.com">arichardson.kde@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Erik,<br>
<br>
Looks like DarwinSymbolizer always prints the path even for invalid<br>
files and I accidentally made the existing test stricter. I will push<br>
a fix now.<br>
<br>
Sorry about the breakage,<br>
Alex<br>
<br>
<br>
On Tue, 27 Aug 2019 at 20:45, Erik Pilkington <<a href="mailto:erik.pilkington@gmail.com" target="_blank">erik.pilkington@gmail.com</a>> wrote:<br>
><br>
> Hi Alexander,<br>
><br>
> It looks like this commit is causing failures on Darwin: <a href="http://lab.llvm.org:8080/green/job/clang-stage1-RA/1421/consoleFull#15588960978254eaf0-7326-4999-85b0-388101f2d404" rel="noreferrer" target="_blank">http://lab.llvm.org:8080/green/job/clang-stage1-RA/1421/consoleFull#15588960978254eaf0-7326-4999-85b0-388101f2d404</a><br>
><br>
> Can you please fix this?<br>
><br>
> Thanks,<br>
> Erik<br>
><br>
> On Aug 26, 2019, at 9:22 AM, Alexander Richardson via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Author: arichardson<br>
> Date: Mon Aug 26 09:22:04 2019<br>
> New Revision: 369924<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=369924&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=369924&view=rev</a><br>
> Log:<br>
> [asan_symbolize] Avoid blocking when llvm-symbolizer is installed as addr2line<br>
><br>
> Summary:<br>
> Currently, llvm-symbolizer will print -1 when presented with -1 and not<br>
> print a second line. In that case we will block for ever trying to read<br>
> the file name. This also happens for non-existent files, in which case GNU<br>
> addr2line exits immediate, but llvm-symbolizer does not (see<br>
> <a href="https://llvm.org/PR42754" rel="noreferrer" target="_blank">https://llvm.org/PR42754</a>). While touching these lines, I also added some<br>
> more debug logging to help diagnose this and potential future issues.<br>
><br>
> Reviewers: kcc, eugenis, glider, samsonov<br>
><br>
> Reviewed By: eugenis<br>
><br>
> Subscribers: kubamracek, #sanitizers, llvm-commits<br>
><br>
> Tags: #sanitizers, #llvm<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D65322" rel="noreferrer" target="_blank">https://reviews.llvm.org/D65322</a><br>
><br>
> Modified:<br>
>    compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py<br>
>    compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp<br>
><br>
> Modified: compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?rev=369924&r1=369923&r2=369924&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?rev=369924&r1=369923&r2=369924&view=diff</a><br>
> ==============================================================================<br>
> --- compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py (original)<br>
> +++ compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py Mon Aug 26 09:22:04 2019<br>
> @@ -27,6 +27,7 @@ import os<br>
> import re<br>
> import subprocess<br>
> import sys<br>
> +from distutils.spawn import find_executable<br>
><br>
> symbolizers = {}<br>
> demangle = False<br>
> @@ -153,6 +154,7 @@ class Addr2LineSymbolizer(Symbolizer):<br>
>     addr2line_tool = 'addr2line'<br>
>     if binutils_prefix:<br>
>       addr2line_tool = binutils_prefix + addr2line_tool<br>
> +    logging.debug('addr2line binary is %s' % find_executable(addr2line_tool))<br>
>     cmd = [addr2line_tool, '-fi']<br>
>     if demangle:<br>
>       cmd += ['--demangle']<br>
> @@ -174,14 +176,34 @@ class Addr2LineSymbolizer(Symbolizer):<br>
>       is_first_frame = True<br>
>       while True:<br>
>         function_name = self.pipe.stdout.readline().rstrip()<br>
> +        logging.debug("read function_name='%s' from addr2line" % function_name)<br>
> +        # If llvm-symbolizer is installed as addr2line, older versions of<br>
> +        # llvm-symbolizer will print -1 when presented with -1 and not print<br>
> +        # a second line. In that case we will block for ever trying to read the<br>
> +        # file name. This also happens for non-existent files, in which case GNU<br>
> +        # addr2line exits immediate, but llvm-symbolizer does not (see<br>
> +        # <a href="https://llvm.org/PR42754" rel="noreferrer" target="_blank">https://llvm.org/PR42754</a>).<br>
> +        if function_name == '-1':<br>
> +          logging.debug("got function '-1' -> no more input")<br>
> +          break<br>
>         file_name = self.pipe.stdout.readline().rstrip()<br>
> +        logging.debug("read file_name='%s' from addr2line" % file_name)<br>
>         if is_first_frame:<br>
>           is_first_frame = False<br>
> -        elif function_name in ['', '??']:<br>
> -          assert file_name == function_name<br>
> +        elif function_name == '??':<br>
> +          assert file_name == '??:0', file_name<br>
> +          logging.debug("got function '??' -> no more input")<br>
> +          break<br>
> +        elif not function_name:<br>
> +          assert not file_name, file_name<br>
> +          logging.debug("got empty function name -> no more input")<br>
>           break<br>
>         lines.append((function_name, file_name));<br>
> -    except Exception:<br>
> +    except BrokenPipeError:<br>
> +      logging.debug("got broken pipe, addr2line returncode=%d" % self.pipe.poll())<br>
> +      lines.append(('??', '??:0'))<br>
> +    except Exception as e:<br>
> +      logging.debug("got unknown exception communicating with addr2line", exc_info=e)<br>
>       lines.append(('??', '??:0'))<br>
>     return ['%s in %s %s' % (addr, function, fix_filename(file)) for (function, file) in lines]<br>
><br>
><br>
> Modified: compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp?rev=369924&r1=369923&r2=369924&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp?rev=369924&r1=369923&r2=369924&view=diff</a><br>
> ==============================================================================<br>
> --- compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp (original)<br>
> +++ compiler-rt/trunk/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp Mon Aug 26 09:22:04 2019<br>
> @@ -1,4 +1,15 @@<br>
> // Test that asan_symbolize does not hang when provided with an non-existing<br>
> // path.<br>
> -// RUN: echo '#0 0xabcdabcd (%t/bad/path+0x1234)' | %asan_symbolize | FileCheck %s<br>
> -// CHECK: #0 0xabcdabcd<br>
> +// RUN: echo '#0 0xabcdabcd (%t/bad/path+0x1234)' | %asan_symbolize | FileCheck %s -check-prefix CHECK-BAD-FILE<br>
> +// CHECK-BAD-FILE: #0 0xabcdabcd in ?? ??:0<br>
> +// CHECK-BAD-FILE-EMPTY:<br>
> +<br>
> +// Also test that asan_symbolize doesn't assert on an invalid address with a valid file:<br>
> +// RUN: %clangxx_asan -O0 %s -o %t<br>
> +// RUN: echo '#0 0xabcdabcd (%t+0x0)' | %asan_symbolize | FileCheck %s -check-prefix CHECK-BAD-ADDR<br>
> +// CHECK-BAD-ADDR: #0 0xabcdabcd in ??<br>
> +// CHECK-BAD-ADDR-EMPTY:<br>
> +<br>
> +int main() {<br>
> +  return 0;<br>
> +}<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
><br>
><br>
</blockquote></div>