[compiler-rt] Add -log_file flag (PR #67043)

Yakov Olkhovskiy via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 21 10:25:33 PDT 2023


https://github.com/yakov-olkhovskiy created https://github.com/llvm/llvm-project/pull/67043

It would be nice to have fuzzer's output separated from module's output, so "-log_file" flag is introduced to allow to reroute fuzzer's output to the specified file.

>From 3119a16202297b2e7fbe31407bfd72882df3892a Mon Sep 17 00:00:00 2001
From: Yakov Olkhovskiy <yakov at clickhouse.com>
Date: Thu, 21 Sep 2023 17:19:48 +0000
Subject: [PATCH] add -log_file flag

---
 compiler-rt/lib/fuzzer/FuzzerDriver.cpp | 11 +++++++++++
 compiler-rt/lib/fuzzer/FuzzerFlags.def  |  1 +
 2 files changed, 12 insertions(+)

diff --git a/compiler-rt/lib/fuzzer/FuzzerDriver.cpp b/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
index 8674d788932f847..2c6745bfa0f72f6 100644
--- a/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
+++ b/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
@@ -663,6 +663,17 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
     return 0;
   }
 
+  std::unique_ptr<FILE, int(*)(FILE*)> log_file(0, &fclose);
+  if (Flags.log_file) {
+    FILE * f = fopen(Flags.log_file, "w");
+    if (!f) {
+      Printf("ERROR: unable to open log_file [%s]: %s\n", Flags.log_file, strerror(errno));
+      return 1;
+    }
+    log_file.reset(f);
+    SetOutputFile(f);
+  }
+
   if (Flags.close_fd_mask & 2)
     DupAndCloseStderr();
   if (Flags.close_fd_mask & 1)
diff --git a/compiler-rt/lib/fuzzer/FuzzerFlags.def b/compiler-rt/lib/fuzzer/FuzzerFlags.def
index fc3b3aa8c98ad5e..3c435e3d3109664 100644
--- a/compiler-rt/lib/fuzzer/FuzzerFlags.def
+++ b/compiler-rt/lib/fuzzer/FuzzerFlags.def
@@ -209,3 +209,4 @@ FUZZER_FLAG_STRING(collect_data_flow,
 FUZZER_FLAG_INT(create_missing_dirs, 0, "Automatically attempt to create "
      "directories for arguments that would normally expect them to already "
      "exist (i.e. artifact_prefix, exact_artifact_path, features_dir, corpus)")
+FUZZER_FLAG_STRING(log_file, "Output file for fuzzer, default is stderr")



More information about the llvm-commits mailing list