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