Summary: OSS-Fuzz doesn't support '=' in filenames.
Reviewers: bogner, kcc
Reviewed By: kcc
Subscribers: javed.absar, hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D38866
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315647
91177308-0d34-0410-b5e6-
96231b3b80d8
Some flags can also be specified in the binary name itself in order to support
OSS Fuzz, which has trouble with required arguments. To do this, you can copy
-or move ``llvm-isel-fuzzer`` to ``llvm-isel-fuzzer=x-y-z``, where x, y, and z
+or move ``llvm-isel-fuzzer`` to ``llvm-isel-fuzzer--x-y-z``, where x, y, and z
are architecture names (``aarch64``, ``x86_64``), optimization levels (``O0``,
``O2``), or specific keywords like ``gisel`` for enabling global instruction
selection.
/// Handle backend options that are encoded in the executable name.
///
/// Parses some common backend options out of a specially crafted executable
-/// name (argv[0]). For example, a name like llvm-foo-fuzzer:aarch64-gisel might
-/// set up an AArch64 triple and the Global ISel selector. This should be called
-/// *before* parseFuzzerCLOpts if calling both.
+/// name (argv[0]). For example, a name like llvm-foo-fuzzer--aarch64-gisel
+/// might set up an AArch64 triple and the Global ISel selector. This should be
+/// called *before* parseFuzzerCLOpts if calling both.
///
/// This is meant to be used for environments like OSS-Fuzz that aren't capable
/// of passing in command line arguments in the normal way.
void llvm::handleExecNameEncodedBEOpts(StringRef ExecName) {
std::vector<std::string> Args{ExecName};
- auto NameAndArgs = ExecName.split('=');
+ auto NameAndArgs = ExecName.split("--");
if (NameAndArgs.second.empty())
return;
; RUN: echo > %t.input
-; RUN: cp llvm-isel-fuzzer %t.bin=aarch64
-; RUN: %t.bin=aarch64 %t.input 2>&1 | FileCheck -check-prefix=AARCH64 %s
+; RUN: cp llvm-isel-fuzzer %t.bin--aarch64
+; RUN: %t.bin--aarch64 %t.input 2>&1 | FileCheck -check-prefix=AARCH64 %s
; AARCH64: Injected args: -mtriple=aarch64
-; RUN: cp llvm-isel-fuzzer %t.bin=aarch64-O1
-; RUN: %t.bin=aarch64-O1 %t.input 2>&1 | FileCheck -check-prefix=OPT-AFTER %s
+; RUN: cp llvm-isel-fuzzer %t.bin--aarch64-O1
+; RUN: %t.bin--aarch64-O1 %t.input 2>&1 | FileCheck -check-prefix=OPT-AFTER %s
; OPT-AFTER: Injected args: -mtriple=aarch64 -O1
-; RUN: cp llvm-isel-fuzzer %t.bin=O3-aarch64
-; RUN: %t.bin=O3-aarch64 %t.input 2>&1 | FileCheck -check-prefix=OPT-BEFORE %s
+; RUN: cp llvm-isel-fuzzer %t.bin--O3-aarch64
+; RUN: %t.bin--O3-aarch64 %t.input 2>&1 | FileCheck -check-prefix=OPT-BEFORE %s
; OPT-BEFORE: Injected args: -O3 -mtriple=aarch64
; RUN: echo > %t.input
-; RUN: cp llvm-isel-fuzzer %t.bin=gisel
-; RUN: not %t.bin=gisel %t.input 2>&1 | FileCheck -check-prefix=GISEL %s
+; RUN: cp llvm-isel-fuzzer %t.bin--gisel
+; RUN: not %t.bin--gisel %t.input 2>&1 | FileCheck -check-prefix=GISEL %s
; GISEL: Injected args: -global-isel -O0
; GISEL: -mtriple must be specified
-; RUN: cp llvm-isel-fuzzer %t.bin=gisel-O2
-; RUN: not %t.bin=gisel-O2 %t.input 2>&1 | FileCheck -check-prefix=GISEL-O2 %s
+; RUN: cp llvm-isel-fuzzer %t.bin--gisel-O2
+; RUN: not %t.bin--gisel-O2 %t.input 2>&1 | FileCheck -check-prefix=GISEL-O2 %s
; GISEL-O2: Injected args: -global-isel -O0 -O2
; GISEL-O2: -mtriple must be specified
-; RUN: cp llvm-isel-fuzzer %t.bin=unexist
-; RUN: not %t.bin=unexist %t.input 2>&1 | FileCheck -check-prefix=NO-OPT %s
+; RUN: cp llvm-isel-fuzzer %t.bin--unexist
+; RUN: not %t.bin--unexist %t.input 2>&1 | FileCheck -check-prefix=NO-OPT %s
; NO-OPT: Unknown option: