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 Workerextern "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