[Lldb-commits] [lldb] 4fdda4f - [lldb][fuzz] Allow expression fuzzer to be passed as a flag.

Jordan Rupprecht via lldb-commits lldb-commits at lists.llvm.org
Tue Sep 13 15:39:24 PDT 2022


Author: Jordan Rupprecht
Date: 2022-09-13T15:39:15-07:00
New Revision: 4fdda4f82d787c988d5bbdf365df95fd0c8ca14b

URL: https://github.com/llvm/llvm-project/commit/4fdda4f82d787c988d5bbdf365df95fd0c8ca14b
DIFF: https://github.com/llvm/llvm-project/commit/4fdda4f82d787c988d5bbdf365df95fd0c8ca14b.diff

LOG: [lldb][fuzz] Allow expression fuzzer to be passed as a flag.

The expression fuzzer checks an environment variable, `LLDB_FUZZER_TARGET`, to get the fuzzer target binary. This is fine, but internally our tooling for running fuzz tests only has proper handling for flag values. It's surprisingly complicated to add support for that, and allowing it to be passed via flag seems reasonable anyway.

Reviewed By: cassanova

Differential Revision: https://reviews.llvm.org/D133546

Added: 
    

Modified: 
    lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/lldb-expression-fuzzer.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/lldb-expression-fuzzer.cpp b/lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/lldb-expression-fuzzer.cpp
index d8b8ff3326903..2832651eb9d9d 100644
--- a/lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/lldb-expression-fuzzer.cpp
+++ b/lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/lldb-expression-fuzzer.cpp
@@ -35,7 +35,7 @@ using namespace lldb;
 using namespace llvm;
 using namespace clang_fuzzer;
 
-char *target_path;
+const char *target_path = nullptr;
 
 void ReportError(llvm::StringRef message) {
   WithColor::error() << message << '\n';
@@ -47,10 +47,24 @@ extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
   signal(SIGPIPE, SIG_IGN);
 #endif
 
-  target_path = ::getenv("LLDB_FUZZER_TARGET");
+  // `target_path` can be set by either the "--lldb_fuzzer_target" commandline
+  // flag or the "LLDB_FUZZER_TARGET" environment variable. Arbitrarily, we
+  // always do flag parsing and only check the environment variable if the
+  // commandline flag is not set.
+  for (int i = 1; i < *argc; ++i) {
+    auto this_arg = llvm::StringRef((*argv)[i]);
+    WithColor::note() << "argv[" << i << "] = " << this_arg << "\n";
+    if (this_arg.consume_front("--lldb_fuzzer_target="))
+      target_path = this_arg.data();
+  }
+
+  if (!target_path)
+    target_path = ::getenv("LLDB_FUZZER_TARGET");
+
   if (!target_path)
-    ReportError(
-        "no target path specified in with the LLDB_FUZZER_TARGET variable");
+    ReportError("No target path specified. Set one either as an environment "
+                "variable (i.e. LLDB_FUZZER_TARGET=target_path) or pass as a "
+                "command line flag (i.e. --lldb_fuzzer_target=target_path).");
 
   if (!sys::fs::exists(target_path))
     ReportError(formatv("target path '{0}' does not exist", target_path).str());


        


More information about the lldb-commits mailing list