dump_syms: Add -v verbose flag

dump_syms generates a lot of warnings.
This CL puts logging behind a command line flag

BUG=25460551

Change-Id: Iab2ea1a255b64c07b2bf9c748947e328e9688f7c
diff --git a/src/tools/linux/dump_syms/dump_syms.cc b/src/tools/linux/dump_syms/dump_syms.cc
index c8ade33..1161788 100644
--- a/src/tools/linux/dump_syms/dump_syms.cc
+++ b/src/tools/linux/dump_syms/dump_syms.cc
@@ -28,6 +28,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <stdio.h>
+#include <unistd.h>
 
 #include <cstring>
 #include <iostream>
@@ -44,6 +45,7 @@
   fprintf(stderr, "Options:\n");
   fprintf(stderr, "  -c    Do not generate CFI section\n");
   fprintf(stderr, "  -r    Do not handle inter-compilation unit references\n");
+  fprintf(stderr, "  -v    Verbose logging. Print all warnings to stderr\n");
   return 1;
 }
 
@@ -53,6 +55,7 @@
 
   bool cfi = true;
   bool handle_inter_cu_refs = true;
+  bool log_to_stderr = false;
   int arg_index = 1;
   while (arg_index < argc && strlen(argv[arg_index]) > 0 &&
          argv[arg_index][0] == '-') {
@@ -60,6 +63,8 @@
       cfi = false;
     } else if (strcmp("-r", argv[arg_index]) == 0) {
       handle_inter_cu_refs = false;
+    } else if (strcmp("-v", argv[arg_index]) == 0) {
+      log_to_stderr = true;
     } else {
       return usage(argv[0]);
     }
@@ -68,6 +73,12 @@
   if (arg_index == argc)
     return usage(argv[0]);
 
+  // Save stderr so it can be used below.
+  FILE* saved_stderr = fdopen(dup(STDERR_FILENO), "w");
+  if (!log_to_stderr) {
+    freopen("/dev/null", "w", stderr);
+  }
+
   const char* binary;
   std::vector<string> debug_dirs;
   binary = argv[arg_index];
@@ -80,7 +91,7 @@
   SymbolData symbol_data = cfi ? ALL_SYMBOL_DATA : NO_CFI;
   google_breakpad::DumpOptions options(symbol_data, handle_inter_cu_refs);
   if (!WriteSymbolFile(binary, debug_dirs, options, std::cout)) {
-    fprintf(stderr, "Failed to write symbol file.\n");
+    fprintf(saved_stderr, "Failed to write symbol file.\n");
     return 1;
   }