diff options
author | Aiden Grossman <agrossman154@yahoo.com> | 2024-03-27 12:39:07 -0700 |
---|---|---|
committer | Aiden Grossman <agrossman154@yahoo.com> | 2024-03-27 12:47:52 -0700 |
commit | abc270ae00cd991bf1b2125e880b9eb73d8d6727 (patch) | |
tree | ba9cd5fd91e5cc713478e7e350823c6e37abdfc6 | |
parent | 685d7855acb28f89aa948e0056d2807bf30d3971 (diff) | |
download | llvm-abc270ae00cd991bf1b2125e880b9eb73d8d6727.zip llvm-abc270ae00cd991bf1b2125e880b9eb73d8d6727.tar.gz llvm-abc270ae00cd991bf1b2125e880b9eb73d8d6727.tar.bz2 |
Finish revert "[SystemZ][z/OS] TXT records in the GOFF reader (#74526)"
This finishes the revert started in
aeb8628c218f8224e08dddcdd3199a445d8607a8 which didn't completely back
out the original patch.
-rw-r--r-- | llvm/lib/Object/GOFFObjectFile.cpp | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/llvm/lib/Object/GOFFObjectFile.cpp b/llvm/lib/Object/GOFFObjectFile.cpp index d8e1ddf..76a1355 100644 --- a/llvm/lib/Object/GOFFObjectFile.cpp +++ b/llvm/lib/Object/GOFFObjectFile.cpp @@ -394,154 +394,6 @@ GOFFObjectFile::getSectionPrEsdRecord(uint32_t SectionIndex) const { return EsdRecord; } -uint32_t GOFFObjectFile::getSectionDefEsdId(DataRefImpl &Sec) const { - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - uint32_t Length; - ESDRecord::getLength(EsdRecord, Length); - if (Length == 0) { - const uint8_t *PrEsdRecord = getSectionPrEsdRecord(Sec); - if (PrEsdRecord) - EsdRecord = PrEsdRecord; - } - - uint32_t DefEsdId; - ESDRecord::getEsdId(EsdRecord, DefEsdId); - LLVM_DEBUG(dbgs() << "Got def EsdId: " << DefEsdId << '\n'); - return DefEsdId; -} - -void GOFFObjectFile::moveSectionNext(DataRefImpl &Sec) const { - Sec.d.a++; - if ((Sec.d.a) >= SectionList.size()) - Sec.d.a = 0; -} - -Expected<StringRef> GOFFObjectFile::getSectionName(DataRefImpl Sec) const { - DataRefImpl EdSym; - SectionEntryImpl EsdIds = SectionList[Sec.d.a]; - EdSym.d.a = EsdIds.d.a; - Expected<StringRef> Name = getSymbolName(EdSym); - if (Name) { - StringRef Res = *Name; - LLVM_DEBUG(dbgs() << "Got section: " << Res << '\n'); - LLVM_DEBUG(dbgs() << "Final section name: " << Res << '\n'); - Name = Res; - } - return Name; -} - -uint64_t GOFFObjectFile::getSectionAddress(DataRefImpl Sec) const { - uint32_t Offset; - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - ESDRecord::getOffset(EsdRecord, Offset); - return Offset; -} - -uint64_t GOFFObjectFile::getSectionSize(DataRefImpl Sec) const { - uint32_t Length; - uint32_t DefEsdId = getSectionDefEsdId(Sec); - const uint8_t *EsdRecord = EsdPtrs[DefEsdId]; - ESDRecord::getLength(EsdRecord, Length); - LLVM_DEBUG(dbgs() << "Got section size: " << Length << '\n'); - return static_cast<uint64_t>(Length); -} - -// Unravel TXT records and expand fill characters to produce -// a contiguous sequence of bytes. -Expected<ArrayRef<uint8_t>> -GOFFObjectFile::getSectionContents(DataRefImpl Sec) const { - if (SectionDataCache.count(Sec.d.a)) { - auto &Buf = SectionDataCache[Sec.d.a]; - return ArrayRef<uint8_t>(Buf); - } - uint64_t SectionSize = getSectionSize(Sec); - uint32_t DefEsdId = getSectionDefEsdId(Sec); - - const uint8_t *EdEsdRecord = getSectionEdEsdRecord(Sec); - bool FillBytePresent; - ESDRecord::getFillBytePresent(EdEsdRecord, FillBytePresent); - uint8_t FillByte = '\0'; - if (FillBytePresent) - ESDRecord::getFillByteValue(EdEsdRecord, FillByte); - - // Initialize section with fill byte. - SmallVector<uint8_t> Data(SectionSize, FillByte); - - // Replace section with content from text records. - for (const uint8_t *TxtRecordInt : TextPtrs) { - const uint8_t *TxtRecordPtr = TxtRecordInt; - uint32_t TxtEsdId; - TXTRecord::getElementEsdId(TxtRecordPtr, TxtEsdId); - LLVM_DEBUG(dbgs() << "Got txt EsdId: " << TxtEsdId << '\n'); - - if (TxtEsdId != DefEsdId) - continue; - - uint32_t TxtDataOffset; - TXTRecord::getOffset(TxtRecordPtr, TxtDataOffset); - - uint16_t TxtDataSize; - TXTRecord::getDataLength(TxtRecordPtr, TxtDataSize); - - LLVM_DEBUG(dbgs() << "Record offset " << TxtDataOffset << ", data size " - << TxtDataSize << "\n"); - - SmallString<256> CompleteData; - CompleteData.reserve(TxtDataSize); - if (Error Err = TXTRecord::getData(TxtRecordPtr, CompleteData)) - return std::move(Err); - assert(CompleteData.size() == TxtDataSize && "Wrong length of data"); - std::copy(CompleteData.data(), CompleteData.data() + TxtDataSize, - Data.begin() + TxtDataOffset); - } - SectionDataCache[Sec.d.a] = Data; - return ArrayRef<uint8_t>(Data); -} - -uint64_t GOFFObjectFile::getSectionAlignment(DataRefImpl Sec) const { - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - GOFF::ESDAlignment Pow2Alignment; - ESDRecord::getAlignment(EsdRecord, Pow2Alignment); - return 1ULL << static_cast<uint64_t>(Pow2Alignment); -} - -bool GOFFObjectFile::isSectionText(DataRefImpl Sec) const { - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - GOFF::ESDExecutable Executable; - ESDRecord::getExecutable(EsdRecord, Executable); - return Executable == GOFF::ESD_EXE_CODE; -} - -bool GOFFObjectFile::isSectionData(DataRefImpl Sec) const { - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - GOFF::ESDExecutable Executable; - ESDRecord::getExecutable(EsdRecord, Executable); - return Executable == GOFF::ESD_EXE_DATA; -} - -bool GOFFObjectFile::isSectionNoLoad(DataRefImpl Sec) const { - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - GOFF::ESDLoadingBehavior LoadingBehavior; - ESDRecord::getLoadingBehavior(EsdRecord, LoadingBehavior); - return LoadingBehavior == GOFF::ESD_LB_NoLoad; -} - -bool GOFFObjectFile::isSectionReadOnlyData(DataRefImpl Sec) const { - if (!isSectionData(Sec)) - return false; - - const uint8_t *EsdRecord = getSectionEdEsdRecord(Sec); - GOFF::ESDLoadingBehavior LoadingBehavior; - ESDRecord::getLoadingBehavior(EsdRecord, LoadingBehavior); - return LoadingBehavior == GOFF::ESD_LB_Initial; -} - -bool GOFFObjectFile::isSectionZeroInit(DataRefImpl Sec) const { - // GOFF uses fill characters and fill characters are applied - // on getSectionContents() - so we say false to zero init. - return false; -} - section_iterator GOFFObjectFile::section_begin() const { DataRefImpl Sec; moveSectionNext(Sec); |