xref: /openbsd-src/gnu/llvm/lldb/tools/lldb-fuzzer/lldb-target-fuzzer/lldb-target-fuzzer.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1*f6aab3d8Srobert //===-- lldb-target-fuzzer.cpp - Fuzz target creation ---------------------===//
2*f6aab3d8Srobert //
3*f6aab3d8Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f6aab3d8Srobert // See https://llvm.org/LICENSE.txt for license information.
5*f6aab3d8Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f6aab3d8Srobert //
7*f6aab3d8Srobert //===----------------------------------------------------------------------===//
8*f6aab3d8Srobert 
9*f6aab3d8Srobert #include "utils/TempFile.h"
10*f6aab3d8Srobert 
11*f6aab3d8Srobert #include "lldb/API/SBDebugger.h"
12*f6aab3d8Srobert #include "lldb/API/SBTarget.h"
13*f6aab3d8Srobert 
14*f6aab3d8Srobert using namespace lldb;
15*f6aab3d8Srobert using namespace lldb_fuzzer;
16*f6aab3d8Srobert using namespace llvm;
17*f6aab3d8Srobert 
LLVMFuzzerInitialize(int * argc,char *** argv)18*f6aab3d8Srobert extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
19*f6aab3d8Srobert   SBDebugger::Initialize();
20*f6aab3d8Srobert   return 0;
21*f6aab3d8Srobert }
22*f6aab3d8Srobert 
LLVMFuzzerTestOneInput(uint8_t * data,size_t size)23*f6aab3d8Srobert extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
24*f6aab3d8Srobert   std::unique_ptr<TempFile> file = TempFile::Create(data, size);
25*f6aab3d8Srobert   if (!file)
26*f6aab3d8Srobert     return 1;
27*f6aab3d8Srobert 
28*f6aab3d8Srobert   SBDebugger debugger = SBDebugger::Create(false);
29*f6aab3d8Srobert   SBTarget target = debugger.CreateTarget(file->GetPath().data());
30*f6aab3d8Srobert   debugger.DeleteTarget(target);
31*f6aab3d8Srobert   SBDebugger::Destroy(debugger);
32*f6aab3d8Srobert   SBModule::GarbageCollectAllocatedModules();
33*f6aab3d8Srobert 
34*f6aab3d8Srobert   return 0;
35*f6aab3d8Srobert }
36