aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAiden Grossman <agrossman154@yahoo.com>2024-03-27 12:39:07 -0700
committerAiden Grossman <agrossman154@yahoo.com>2024-03-27 12:47:52 -0700
commitabc270ae00cd991bf1b2125e880b9eb73d8d6727 (patch)
treeba9cd5fd91e5cc713478e7e350823c6e37abdfc6
parent685d7855acb28f89aa948e0056d2807bf30d3971 (diff)
downloadllvm-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.cpp148
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);