//===- DWARFDebugLineTest.cpp ---------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "DwarfGenerator.h" #include "DwarfUtils.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" using namespace llvm; using namespace dwarf; using namespace object; using namespace utils; namespace { struct DebugLineGenerator { bool init() { Triple T = getHostTripleForAddrSize(8); if (!isConfigurationSupported(T)) return false; auto ExpectedGenerator = dwarfgen::Generator::create(T, 4); if (ExpectedGenerator) Generator.reset(ExpectedGenerator->release()); return true; } std::unique_ptr createContext() { if (!Generator) return nullptr; StringRef FileBytes = Generator->generate(); MemoryBufferRef FileBuffer(FileBytes, "dwarf"); auto Obj = object::ObjectFile::createObjectFile(FileBuffer); if (Obj) return DWARFContext::create(**Obj); return nullptr; } std::unique_ptr Generator; }; TEST(DWARFDebugLine, GetLineTableAtInvalidOffset) { DebugLineGenerator LineGen; if (!LineGen.init()) return; DWARFDebugLine Line; std::unique_ptr Context = LineGen.createContext(); ASSERT_TRUE(Context != nullptr); const DWARFObject &Obj = Context->getDWARFObj(); DWARFDataExtractor LineData(Obj, Obj.getLineSection(), true, 8); EXPECT_EQ(Line.getOrParseLineTable(LineData, 0, *Context, nullptr), nullptr); } } // end anonymous namespace