[Sanitizer Common] Show command used to launch symbolizer process at high verbosity...
authorDan Liew <dan@su-root.co.uk>
Tue, 7 Apr 2020 00:25:47 +0000 (17:25 -0700)
committerDan Liew <dan@su-root.co.uk>
Mon, 13 Apr 2020 20:36:29 +0000 (13:36 -0700)
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

compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
compiler-rt/test/sanitizer_common/TestCases/symbolize_debug_argv.cpp [new file with mode: 0644]

index 4c3cd96..f1dff24 100644 (file)
@@ -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<const char **>(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 (file)
index 0000000..262e50b
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: %clangxx %s -g -o %t
+// RUN: %env_tool_opts=verbosity=3 %run %t 2>&1 | FileCheck %s
+#include <sanitizer/common_interface_defs.h>
+
+int main(int argc, char **argv) {
+  // CHECK: Launching Symbolizer process: {{.+}}
+  __sanitizer_print_stack_trace();
+  return 0;
+}