1*46be5faaSChelsea Cassanova //===-- lldb-commandinterpreter-fuzzer.cpp -------------------------------===// 2*46be5faaSChelsea Cassanova // 3*46be5faaSChelsea Cassanova // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*46be5faaSChelsea Cassanova // See https://llvm.org/LICENSE.txt for license information. 5*46be5faaSChelsea Cassanova // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*46be5faaSChelsea Cassanova // 7*46be5faaSChelsea Cassanova //===---------------------------------------------------------------------===// 8*46be5faaSChelsea Cassanova 9*46be5faaSChelsea Cassanova #include <string> 10*46be5faaSChelsea Cassanova 11*46be5faaSChelsea Cassanova #include "lldb/API/SBCommandInterpreter.h" 12*46be5faaSChelsea Cassanova #include "lldb/API/SBCommandInterpreterRunOptions.h" 13*46be5faaSChelsea Cassanova #include "lldb/API/SBCommandReturnObject.h" 14*46be5faaSChelsea Cassanova #include "lldb/API/SBDebugger.h" 15*46be5faaSChelsea Cassanova #include "lldb/API/SBTarget.h" 16*46be5faaSChelsea Cassanova 17*46be5faaSChelsea Cassanova using namespace lldb; 18*46be5faaSChelsea Cassanova LLVMFuzzerInitialize(int * argc,char *** argv)19*46be5faaSChelsea Cassanovaextern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { 20*46be5faaSChelsea Cassanova SBDebugger::Initialize(); 21*46be5faaSChelsea Cassanova return 0; 22*46be5faaSChelsea Cassanova } 23*46be5faaSChelsea Cassanova LLVMFuzzerTestOneInput(uint8_t * data,size_t size)24*46be5faaSChelsea Cassanovaextern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) { 25*46be5faaSChelsea Cassanova // Convert the data into a null-terminated string 26*46be5faaSChelsea Cassanova std::string str((char *)data, size); 27*46be5faaSChelsea Cassanova 28*46be5faaSChelsea Cassanova // Create a debugger and a dummy target 29*46be5faaSChelsea Cassanova SBDebugger debugger = SBDebugger::Create(false); 30*46be5faaSChelsea Cassanova SBTarget target = debugger.GetDummyTarget(); 31*46be5faaSChelsea Cassanova 32*46be5faaSChelsea Cassanova // Create a command interpreter for the current debugger 33*46be5faaSChelsea Cassanova // A return object is needed to run the command interpreter 34*46be5faaSChelsea Cassanova SBCommandReturnObject ro = SBCommandReturnObject(); 35*46be5faaSChelsea Cassanova SBCommandInterpreter ci = debugger.GetCommandInterpreter(); 36*46be5faaSChelsea Cassanova 37*46be5faaSChelsea Cassanova // Use the fuzzer generated input as input for the command interpreter 38*46be5faaSChelsea Cassanova if (ci.IsValid()) { 39*46be5faaSChelsea Cassanova ci.HandleCommand(str.c_str(), ro, false); 40*46be5faaSChelsea Cassanova } 41*46be5faaSChelsea Cassanova 42*46be5faaSChelsea Cassanova debugger.DeleteTarget(target); 43*46be5faaSChelsea Cassanova SBDebugger::Destroy(debugger); 44*46be5faaSChelsea Cassanova SBModule::GarbageCollectAllocatedModules(); 45*46be5faaSChelsea Cassanova 46*46be5faaSChelsea Cassanova return 0; 47*46be5faaSChelsea Cassanova } 48