xref: /aosp_15_r20/external/llvm/tools/llvm-dwarfdump/fuzzer/llvm-dwarfdump-fuzzer.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- llvm-dwarfdump-fuzzer.cpp - Fuzz the llvm-dwarfdump tool ----------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker ///
10*9880d681SAndroid Build Coastguard Worker /// \file
11*9880d681SAndroid Build Coastguard Worker /// \brief This file implements a function that runs llvm-dwarfdump
12*9880d681SAndroid Build Coastguard Worker ///  on a single input. This function is then linked into the Fuzzer library.
13*9880d681SAndroid Build Coastguard Worker ///
14*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
15*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/DIContext.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/DWARF/DWARFContext.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm/Object/ObjectFile.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/MemoryBuffer.h"
19*9880d681SAndroid Build Coastguard Worker 
20*9880d681SAndroid Build Coastguard Worker using namespace llvm;
21*9880d681SAndroid Build Coastguard Worker using namespace object;
22*9880d681SAndroid Build Coastguard Worker 
LLVMFuzzerTestOneInput(uint8_t * data,size_t size)23*9880d681SAndroid Build Coastguard Worker extern "C" void LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
24*9880d681SAndroid Build Coastguard Worker   std::unique_ptr<MemoryBuffer> Buff = MemoryBuffer::getMemBuffer(
25*9880d681SAndroid Build Coastguard Worker       StringRef((const char *)data, size), "", false);
26*9880d681SAndroid Build Coastguard Worker 
27*9880d681SAndroid Build Coastguard Worker   Expected<std::unique_ptr<ObjectFile>> ObjOrErr =
28*9880d681SAndroid Build Coastguard Worker       ObjectFile::createObjectFile(Buff->getMemBufferRef());
29*9880d681SAndroid Build Coastguard Worker   if (auto E = ObjOrErr.takeError()) {
30*9880d681SAndroid Build Coastguard Worker     consumeError(std::move(E));
31*9880d681SAndroid Build Coastguard Worker     return;
32*9880d681SAndroid Build Coastguard Worker   }
33*9880d681SAndroid Build Coastguard Worker   ObjectFile &Obj = *ObjOrErr.get();
34*9880d681SAndroid Build Coastguard Worker   std::unique_ptr<DIContext> DICtx(new DWARFContextInMemory(Obj));
35*9880d681SAndroid Build Coastguard Worker   DICtx->dump(nulls(), DIDT_All);
36*9880d681SAndroid Build Coastguard Worker }
37