From 2169568d9f535a5ffa921d7ec0869c0f8b18f6ac Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Mon, 6 Apr 2020 17:25:47 -0700 Subject: [PATCH] [Sanitizer Common] Show command used to launch symbolizer process at high verbosity level. Summary: In preparation for writing a test for a bug fix we need to be able to see the command used to launch the symbolizer process. This feature will likely be useful for debugging how the Sanitizers use the symbolizer in general. This patch causes the command line used to launch the process to be shown at verbosity level 3 and higher. A small test case is included. Reviewers: kubamracek, yln, vitalybuka, eugenis, kcc Subscribers: #sanitizers, llvm-commits Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D77622 --- .../sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp | 10 ++++++++++ .../test/sanitizer_common/TestCases/symbolize_debug_argv.cpp | 9 +++++++++ 2 files changed, 19 insertions(+) create mode 100644 compiler-rt/test/sanitizer_common/TestCases/symbolize_debug_argv.cpp diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp index 4c3cd96..f1dff24 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp @@ -151,6 +151,16 @@ bool SymbolizerProcess::StartSymbolizerSubprocess() { GetArgV(path_, argv); pid_t pid; + // Report how symbolizer is being launched for debugging purposes. + if (Verbosity() >= 3) { + // Only use `Report` for first line so subsequent prints don't get prefixed + // with current PID. + Report("Launching Symbolizer process: "); + for (unsigned index = 0; index < kArgVMax && argv[index]; ++index) + Printf("%s ", argv[index]); + Printf("\n"); + } + if (use_posix_spawn_) { #if SANITIZER_MAC fd_t fd = internal_spawn(argv, const_cast(GetEnvP()), &pid); diff --git a/compiler-rt/test/sanitizer_common/TestCases/symbolize_debug_argv.cpp b/compiler-rt/test/sanitizer_common/TestCases/symbolize_debug_argv.cpp new file mode 100644 index 0000000..262e50b --- /dev/null +++ b/compiler-rt/test/sanitizer_common/TestCases/symbolize_debug_argv.cpp @@ -0,0 +1,9 @@ +// RUN: %clangxx %s -g -o %t +// RUN: %env_tool_opts=verbosity=3 %run %t 2>&1 | FileCheck %s +#include + +int main(int argc, char **argv) { + // CHECK: Launching Symbolizer process: {{.+}} + __sanitizer_print_stack_trace(); + return 0; +} -- 2.7.4