diff --git a/llvm/include/llvm/Object/GOFF.h b/llvm/include/llvm/Object/GOFF.h index 9fb8876e893d..91762457ae05 100644 --- a/llvm/include/llvm/Object/GOFF.h +++ b/llvm/include/llvm/Object/GOFF.h @@ -73,26 +73,6 @@ protected: } }; -class TXTRecord : public Record { -public: - /// \brief Maximum length of data; any more must go in continuation. - static const uint8_t TXTMaxDataLength = 56; - - static Error getData(const uint8_t *Record, SmallString<256> &CompleteData); - - static void getElementEsdId(const uint8_t *Record, uint32_t &EsdId) { - get(Record, 4, EsdId); - } - - static void getOffset(const uint8_t *Record, uint32_t &Offset) { - get(Record, 12, Offset); - } - - static void getDataLength(const uint8_t *Record, uint16_t &Length) { - get(Record, 22, Length); - } -}; - class HDRRecord : public Record { public: static Error getData(const uint8_t *Record, SmallString<256> &CompleteData); diff --git a/llvm/include/llvm/Object/GOFFObjectFile.h b/llvm/include/llvm/Object/GOFFObjectFile.h index 6871641e97ec..7e1ceb95f667 100644 --- a/llvm/include/llvm/Object/GOFFObjectFile.h +++ b/llvm/include/llvm/Object/GOFFObjectFile.h @@ -29,10 +29,7 @@ namespace llvm { namespace object { class GOFFObjectFile : public ObjectFile { - friend class GOFFSymbolRef; - IndexedMap EsdPtrs; // Indexed by EsdId. - SmallVector TextPtrs; mutable DenseMap>> EsdNamesCache; @@ -41,7 +38,7 @@ class GOFFObjectFile : public ObjectFile { // (EDID, 0) code, r/o data section // (EDID,PRID) r/w data section SmallVector SectionList; - mutable DenseMap> SectionDataCache; + mutable DenseMap SectionDataCache; public: Expected getSymbolName(SymbolRef Symbol) const; @@ -69,10 +66,6 @@ public: return true; } - bool isSectionNoLoad(DataRefImpl Sec) const; - bool isSectionReadOnlyData(DataRefImpl Sec) const; - bool isSectionZeroInit(DataRefImpl Sec) const; - private: // SymbolRef. Expected getSymbolName(DataRefImpl Symb) const override; @@ -82,24 +75,27 @@ private: Expected getSymbolFlags(DataRefImpl Symb) const override; Expected getSymbolType(DataRefImpl Symb) const override; Expected getSymbolSection(DataRefImpl Symb) const override; - uint64_t getSymbolSize(DataRefImpl Symb) const; const uint8_t *getSymbolEsdRecord(DataRefImpl Symb) const; bool isSymbolUnresolved(DataRefImpl Symb) const; bool isSymbolIndirect(DataRefImpl Symb) const; // SectionRef. - void moveSectionNext(DataRefImpl &Sec) const override; - virtual Expected getSectionName(DataRefImpl Sec) const override; - uint64_t getSectionAddress(DataRefImpl Sec) const override; - uint64_t getSectionSize(DataRefImpl Sec) const override; + void moveSectionNext(DataRefImpl &Sec) const override {} + virtual Expected getSectionName(DataRefImpl Sec) const override { + return StringRef(); + } + uint64_t getSectionAddress(DataRefImpl Sec) const override { return 0; } + uint64_t getSectionSize(DataRefImpl Sec) const override { return 0; } virtual Expected> - getSectionContents(DataRefImpl Sec) const override; - uint64_t getSectionIndex(DataRefImpl Sec) const override { return Sec.d.a; } - uint64_t getSectionAlignment(DataRefImpl Sec) const override; + getSectionContents(DataRefImpl Sec) const override { + return ArrayRef(); + } + uint64_t getSectionIndex(DataRefImpl Sec) const override { return 0; } + uint64_t getSectionAlignment(DataRefImpl Sec) const override { return 0; } bool isSectionCompressed(DataRefImpl Sec) const override { return false; } - bool isSectionText(DataRefImpl Sec) const override; - bool isSectionData(DataRefImpl Sec) const override; + bool isSectionText(DataRefImpl Sec) const override { return false; } + bool isSectionData(DataRefImpl Sec) const override { return false; } bool isSectionBSS(DataRefImpl Sec) const override { return false; } bool isSectionVirtual(DataRefImpl Sec) const override { return false; } relocation_iterator section_rel_begin(DataRefImpl Sec) const override { @@ -113,7 +109,6 @@ private: const uint8_t *getSectionPrEsdRecord(DataRefImpl &Sec) const; const uint8_t *getSectionEdEsdRecord(uint32_t SectionIndex) const; const uint8_t *getSectionPrEsdRecord(uint32_t SectionIndex) const; - uint32_t getSectionDefEsdId(DataRefImpl &Sec) const; // RelocationRef. void moveRelocationNext(DataRefImpl &Rel) const override {} @@ -127,29 +122,6 @@ private: SmallVectorImpl &Result) const override {} }; -class GOFFSymbolRef : public SymbolRef { -public: - GOFFSymbolRef(const SymbolRef &B) : SymbolRef(B) { - assert(isa(SymbolRef::getObject())); - } - - const GOFFObjectFile *getObject() const { - return cast(BasicSymbolRef::getObject()); - } - - Expected getSymbolGOFFFlags() const { - return getObject()->getSymbolFlags(getRawDataRefImpl()); - } - - Expected getSymbolGOFFType() const { - return getObject()->getSymbolType(getRawDataRefImpl()); - } - - uint64_t getSize() const { - return getObject()->getSymbolSize(getRawDataRefImpl()); - } -}; - } // namespace object } // namespace llvm diff --git a/llvm/lib/Object/GOFFObjectFile.cpp b/llvm/lib/Object/GOFFObjectFile.cpp index 2845d9362544..d8e1ddf2aef8 100644 --- a/llvm/lib/Object/GOFFObjectFile.cpp +++ b/llvm/lib/Object/GOFFObjectFile.cpp @@ -168,11 +168,6 @@ GOFFObjectFile::GOFFObjectFile(MemoryBufferRef Object, Error &Err) LLVM_DEBUG(dbgs() << " -- ESD " << EsdId << "\n"); break; } - case GOFF::RT_TXT: - // Save TXT records. - TextPtrs.emplace_back(I); - LLVM_DEBUG(dbgs() << " -- TXT\n"); - break; case GOFF::RT_END: LLVM_DEBUG(dbgs() << " -- END (GOFF record type) unhandled\n"); break; @@ -369,13 +364,6 @@ GOFFObjectFile::getSymbolSection(DataRefImpl Symb) const { std::to_string(SymEdId)); } -uint64_t GOFFObjectFile::getSymbolSize(DataRefImpl Symb) const { - const uint8_t *Record = getSymbolEsdRecord(Symb); - uint32_t Length; - ESDRecord::getLength(Record, Length); - return Length; -} - const uint8_t *GOFFObjectFile::getSectionEdEsdRecord(DataRefImpl &Sec) const { SectionEntryImpl EsdIds = SectionList[Sec.d.a]; const uint8_t *EsdRecord = EsdPtrs[EsdIds.d.a]; @@ -636,13 +624,6 @@ Error ESDRecord::getData(const uint8_t *Record, return getContinuousData(Record, DataSize, 72, CompleteData); } -Error TXTRecord::getData(const uint8_t *Record, - SmallString<256> &CompleteData) { - uint16_t Length; - getDataLength(Record, Length); - return getContinuousData(Record, Length, 24, CompleteData); -} - Error ENDRecord::getData(const uint8_t *Record, SmallString<256> &CompleteData) { uint16_t Length = getNameLength(Record); diff --git a/llvm/unittests/Object/GOFFObjectFileTest.cpp b/llvm/unittests/Object/GOFFObjectFileTest.cpp index 69f60d016a80..734dac6b8507 100644 --- a/llvm/unittests/Object/GOFFObjectFileTest.cpp +++ b/llvm/unittests/Object/GOFFObjectFileTest.cpp @@ -502,100 +502,3 @@ TEST(GOFFObjectFileTest, InvalidERSymbolType) { FailedWithMessage("ESD record 1 has unknown Executable type 0x03")); } } - -TEST(GOFFObjectFileTest, TXTConstruct) { - char GOFFData[GOFF::RecordLength * 6] = {}; - - // HDR record. - GOFFData[0] = 0x03; - GOFFData[1] = 0xF0; - GOFFData[50] = 0x01; - - // ESD record. - GOFFData[GOFF::RecordLength] = 0x03; - GOFFData[GOFF::RecordLength + 7] = 0x01; // ESDID. - GOFFData[GOFF::RecordLength + 71] = 0x05; // Size of symbol name. - GOFFData[GOFF::RecordLength + 72] = 0xa5; // Symbol name is v. - GOFFData[GOFF::RecordLength + 73] = 0x81; // Symbol name is a. - GOFFData[GOFF::RecordLength + 74] = 0x99; // Symbol name is r. - GOFFData[GOFF::RecordLength + 75] = 0x7b; // Symbol name is #. - GOFFData[GOFF::RecordLength + 76] = 0x83; // Symbol name is c. - - // ESD record. - GOFFData[GOFF::RecordLength * 2] = 0x03; - GOFFData[GOFF::RecordLength * 2 + 3] = 0x01; - GOFFData[GOFF::RecordLength * 2 + 7] = 0x02; // ESDID. - GOFFData[GOFF::RecordLength * 2 + 11] = 0x01; // Parent ESDID. - GOFFData[GOFF::RecordLength * 2 + 27] = 0x08; // Length. - GOFFData[GOFF::RecordLength * 2 + 40] = 0x01; // Name Space ID. - GOFFData[GOFF::RecordLength * 2 + 41] = 0x80; - GOFFData[GOFF::RecordLength * 2 + 60] = 0x04; // Size of symbol name. - GOFFData[GOFF::RecordLength * 2 + 61] = 0x04; // Size of symbol name. - GOFFData[GOFF::RecordLength * 2 + 63] = 0x0a; // Size of symbol name. - GOFFData[GOFF::RecordLength * 2 + 66] = 0x03; // Size of symbol name. - GOFFData[GOFF::RecordLength * 2 + 71] = 0x08; // Size of symbol name. - GOFFData[GOFF::RecordLength * 2 + 72] = 0xc3; // Symbol name is c. - GOFFData[GOFF::RecordLength * 2 + 73] = 0x6d; // Symbol name is _. - GOFFData[GOFF::RecordLength * 2 + 74] = 0xc3; // Symbol name is c. - GOFFData[GOFF::RecordLength * 2 + 75] = 0xd6; // Symbol name is o. - GOFFData[GOFF::RecordLength * 2 + 76] = 0xc4; // Symbol name is D. - GOFFData[GOFF::RecordLength * 2 + 77] = 0xc5; // Symbol name is E. - GOFFData[GOFF::RecordLength * 2 + 78] = 0xf6; // Symbol name is 6. - GOFFData[GOFF::RecordLength * 2 + 79] = 0xf4; // Symbol name is 4. - - // ESD record. - GOFFData[GOFF::RecordLength * 3] = 0x03; - GOFFData[GOFF::RecordLength * 3 + 3] = 0x02; - GOFFData[GOFF::RecordLength * 3 + 7] = 0x03; // ESDID. - GOFFData[GOFF::RecordLength * 3 + 11] = 0x02; // Parent ESDID. - GOFFData[GOFF::RecordLength * 3 + 71] = 0x05; // Size of symbol name. - GOFFData[GOFF::RecordLength * 3 + 72] = 0xa5; // Symbol name is v. - GOFFData[GOFF::RecordLength * 3 + 73] = 0x81; // Symbol name is a. - GOFFData[GOFF::RecordLength * 3 + 74] = 0x99; // Symbol name is r. - GOFFData[GOFF::RecordLength * 3 + 75] = 0x7b; // Symbol name is #. - GOFFData[GOFF::RecordLength * 3 + 76] = 0x83; // Symbol name is c. - - // TXT record. - GOFFData[GOFF::RecordLength * 4] = 0x03; - GOFFData[GOFF::RecordLength * 4 + 1] = 0x10; - GOFFData[GOFF::RecordLength * 4 + 7] = 0x02; - GOFFData[GOFF::RecordLength * 4 + 23] = 0x08; // Data Length. - GOFFData[GOFF::RecordLength * 4 + 24] = 0x12; - GOFFData[GOFF::RecordLength * 4 + 25] = 0x34; - GOFFData[GOFF::RecordLength * 4 + 26] = 0x56; - GOFFData[GOFF::RecordLength * 4 + 27] = 0x78; - GOFFData[GOFF::RecordLength * 4 + 28] = 0x9a; - GOFFData[GOFF::RecordLength * 4 + 29] = 0xbc; - GOFFData[GOFF::RecordLength * 4 + 30] = 0xde; - GOFFData[GOFF::RecordLength * 4 + 31] = 0xf0; - - // END record. - GOFFData[GOFF::RecordLength * 5] = 0x03; - GOFFData[GOFF::RecordLength * 5 + 1] = 0x40; - GOFFData[GOFF::RecordLength * 5 + 11] = 0x06; - - StringRef Data(GOFFData, GOFF::RecordLength * 6); - - Expected> GOFFObjOrErr = - object::ObjectFile::createGOFFObjectFile( - MemoryBufferRef(Data, "dummyGOFF")); - - ASSERT_THAT_EXPECTED(GOFFObjOrErr, Succeeded()); - - GOFFObjectFile *GOFFObj = dyn_cast((*GOFFObjOrErr).get()); - auto Symbols = GOFFObj->symbols(); - ASSERT_EQ(std::distance(Symbols.begin(), Symbols.end()), 1); - SymbolRef Symbol = *Symbols.begin(); - Expected SymbolNameOrErr = GOFFObj->getSymbolName(Symbol); - ASSERT_THAT_EXPECTED(SymbolNameOrErr, Succeeded()); - StringRef SymbolName = SymbolNameOrErr.get(); - EXPECT_EQ(SymbolName, "var#c"); - - auto Sections = GOFFObj->sections(); - ASSERT_EQ(std::distance(Sections.begin(), Sections.end()), 1); - SectionRef Section = *Sections.begin(); - Expected SectionContent = Section.getContents(); - ASSERT_THAT_EXPECTED(SectionContent, Succeeded()); - StringRef Contents = SectionContent.get(); - EXPECT_EQ(Contents, "\x12\x34\x56\x78\x9a\xbc\xde\xf0"); -}