Currently, llvm-symbolizer will print -1 when presented with -1 and not
print a second line. In that case we will block for ever trying to read
the file name. This also happens for non-existent files, in which case GNU
addr2line exits immediate, but llvm-symbolizer does not (see
https://llvm.org/PR42754). While touching these lines, I also added some
more debug logging to help diagnose this and potential future issues.
Details
Details
- Reviewers
kcc eugenis glider samsonov - Commits
- rGe320db434ed1: [asan_symbolize] Avoid blocking when llvm-symbolizer is installed as addr2line
rCRT369924: [asan_symbolize] Avoid blocking when llvm-symbolizer is installed as addr2line
rL369924: [asan_symbolize] Avoid blocking when llvm-symbolizer is installed as addr2line
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
- Build Status
Buildable 35665 Build 35664: arc lint + arc unit
Event Timeline
Comment Actions
Now it breaks http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/23108/steps/check-asan%20in%20gcc%20build/logs/stdio
FAIL: AddressSanitizer-i386-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp (530 of 1412) ******************** TEST 'AddressSanitizer-i386-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp' FAILED ******************** Script: -- : 'RUN: at line 3'; echo '#0 0xabcdabcd (/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/I386LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp/bad/path+0x1234)' | /usr/bin/python /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py | FileCheck /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -check-prefix CHECK-BAD-FILE : 'RUN: at line 8'; /b/sanitizer-x86_64-linux/build/clang_build/./bin/clang --driver-mode=g++ -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m32 -O0 /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -o /b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/I386LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp : 'RUN: at line 9'; echo '#0 0xabcdabcd (/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/I386LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp+0x0)' | /usr/bin/python /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py | FileCheck /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -check-prefix CHECK-BAD-ADDR -- Exit Code: 2 Command Output (stderr): -- LLVMSymbolizer: error reading file: No such file or directory addr2line: '/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/I386LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp/bad/path': No such file Traceback (most recent call last): File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 1053, in <module> loop.process_logfile() File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 472, in process_logfile processed = self.process_line(line) File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 522, in process_line_posix symbolized_line = self.symbolize_address(addr, binary, offset, arch) File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 451, in symbolize_address result = symbolizers[binary].symbolize(addr, binary, offset) File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 290, in symbolize result = symbolizer.symbolize(addr, binary, offset) File "/b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py", line 202, in symbolize except BrokenPipeError: NameError: global name 'BrokenPipeError' is not defined FileCheck error: '-' is empty. FileCheck command line: FileCheck /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -check-prefix CHECK-BAD-FILE -- ******************** Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. FAIL: AddressSanitizer-x86_64-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp (1003 of 1412) ******************** TEST 'AddressSanitizer-x86_64-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp' FAILED ******************** Script: -- : 'RUN: at line 3'; echo '#0 0xabcdabcd (/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp/bad/path+0x1234)' | /usr/bin/python /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py | FileCheck /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -check-prefix CHECK-BAD-FILE : 'RUN: at line 8'; /b/sanitizer-x86_64-linux/build/clang_build/./bin/clang --driver-mode=g++ -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -O0 /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -o /b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp : 'RUN: at line 9'; echo '#0 0xabcdabcd (/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp+0x0)' | /usr/bin/python /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py | FileCheck /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp -check-prefix CHECK-BAD-ADDR -- Exit Code: 1 Command Output (stderr): -- LLVMSymbolizer: error reading file: No such file or directory addr2line: '/b/sanitizer-x86_64-linux/build/clang_build/projects/compiler-rt/test/asan/X86_64LinuxConfig/TestCases/Posix/Output/asan-symbolize-bad-path.cpp.tmp/bad/path': No such file /b/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/asan-symbolize-bad-path.cpp:4:20: error: CHECK-BAD-FILE: expected string not found in input // CHECK-BAD-FILE: #0 0xabcdabcd in ?? ??:0 ^ <stdin>:1:2: note: scanning from here #0 0xabcdabcd in ^ -- ******************** Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. Testing Time: 27.72s ******************** Failing Tests (2): AddressSanitizer-i386-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp AddressSanitizer-x86_64-linux :: TestCases/Posix/asan-symbolize-bad-path.cpp Expected Passes : 1055 Expected Failures : 2 Unsupported Tests : 353 Unexpected Failures: 2
compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py | ||
---|---|---|
202 ↗ | (On Diff #217178) | Probably except socket.error as e: if e.errno == errno.EPIPE: |
Comment Actions
I believe I fixed this problem in https://reviews.llvm.org/rL369929
It seems like address %t+0x0 is valid on that builder. Maybe it defaults to -pie. Should be fixable by using an address that is more likely to be invalid.
Comment Actions
But it's still a problem in python code which is not going to work on on python 2.7
https://llvm.org/docs/GettingStarted.html promise 2.7 support
Comment Actions
I ran all tests with python 2.7 so I have no idea why it worked. Seems like I never triggered the bad path. Will fix to be python2.7 compatible asap.