diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-05 18:45:28 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-05 18:45:28 +0000 |
commit | 0e5dc8aacb548d51b0ca9035a7d449a8e5862dd2 (patch) | |
tree | e3cdf4643735dbac87ba2dfc9b04f83560a33822 /lib/Object/MachOObjectFile.cpp | |
parent | 5c762e0c2511b72867559bca567cdb4c85c9ed01 (diff) |
Define versions of Section that are explicitly marked as little endian.
These should really be templated like ELF, but this is a start.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178896 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Object/MachOObjectFile.cpp')
-rw-r--r-- | lib/Object/MachOObjectFile.cpp | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index 684a43b48b..7de5462dd3 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -138,7 +138,7 @@ error_code MachOObjectFile::getSymbolFileOffset(DataRefImpl DRI, getSymbol64TableEntry(DRI, Entry); Result = Entry->Value; if (Entry->SectionIndex) { - const macho::Section64 *Section = + const MachOFormat::Section64 *Section = getSection64(Sections[Entry->SectionIndex-1]); Result += Section->Offset - Section->Address; } @@ -147,7 +147,7 @@ error_code MachOObjectFile::getSymbolFileOffset(DataRefImpl DRI, getSymbolTableEntry(DRI, Entry); Result = Entry->Value; if (Entry->SectionIndex) { - const macho::Section *Section = + const MachOFormat::Section *Section = getSection(Sections[Entry->SectionIndex-1]); Result += Section->Offset - Section->Address; } @@ -452,13 +452,13 @@ static bool is64BitLoadCommand(const MachOObject *MachOObj, DataRefImpl DRI) { return false; } -const macho::Section *MachOObjectFile::getSection(DataRefImpl DRI) const { +const MachOFormat::Section *MachOObjectFile::getSection(DataRefImpl DRI) const { assert(!is64BitLoadCommand(MachOObj.get(), DRI)); LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a); unsigned SectionOffset = LCI.Offset + sizeof(macho::SegmentLoadCommand) + - DRI.d.b * sizeof(macho::Section); - StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section)); - return reinterpret_cast<const macho::Section*>(Data.data()); + DRI.d.b * sizeof(MachOFormat::Section); + StringRef Data = MachOObj->getData(SectionOffset, sizeof(MachOFormat::Section)); + return reinterpret_cast<const MachOFormat::Section*>(Data.data()); } std::size_t MachOObjectFile::getSectionIndex(DataRefImpl Sec) const { @@ -468,14 +468,14 @@ std::size_t MachOObjectFile::getSectionIndex(DataRefImpl Sec) const { return std::distance(Sections.begin(), loc); } -const macho::Section64 * +const MachOFormat::Section64 * MachOObjectFile::getSection64(DataRefImpl DRI) const { assert(is64BitLoadCommand(MachOObj.get(), DRI)); LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a); unsigned SectionOffset = LCI.Offset + sizeof(macho::Segment64LoadCommand) + - DRI.d.b * sizeof(macho::Section64); - StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section64)); - return reinterpret_cast<const macho::Section64*>(Data.data()); + DRI.d.b * sizeof(MachOFormat::Section64); + StringRef Data = MachOObj->getData(SectionOffset, sizeof(MachOFormat::Section64)); + return reinterpret_cast<const MachOFormat::Section64*>(Data.data()); } static StringRef parseSegmentOrSectionName(const char *P) { @@ -488,10 +488,10 @@ static StringRef parseSegmentOrSectionName(const char *P) { ArrayRef<char> MachOObjectFile::getSectionRawName(DataRefImpl DRI) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *sec = getSection64(DRI); + const MachOFormat::Section64 *sec = getSection64(DRI); return ArrayRef<char>(sec->Name); } else { - const macho::Section *sec = getSection(DRI); + const MachOFormat::Section *sec = getSection(DRI); return ArrayRef<char>(sec->Name); } } @@ -506,10 +506,10 @@ error_code MachOObjectFile::getSectionName(DataRefImpl DRI, ArrayRef<char> MachOObjectFile::getSectionRawFinalSegmentName(DataRefImpl Sec) const { if (is64BitLoadCommand(MachOObj.get(), Sec)) { - const macho::Section64 *sec = getSection64(Sec); + const MachOFormat::Section64 *sec = getSection64(Sec); return ArrayRef<char>(sec->SegmentName, 16); } else { - const macho::Section *sec = getSection(Sec); + const MachOFormat::Section *sec = getSection(Sec); return ArrayRef<char>(sec->SegmentName); } } @@ -522,10 +522,10 @@ StringRef MachOObjectFile::getSectionFinalSegmentName(DataRefImpl DRI) const { error_code MachOObjectFile::getSectionAddress(DataRefImpl DRI, uint64_t &Result) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); Result = Sect->Address; } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); Result = Sect->Address; } return object_error::success; @@ -534,10 +534,10 @@ error_code MachOObjectFile::getSectionAddress(DataRefImpl DRI, error_code MachOObjectFile::getSectionSize(DataRefImpl DRI, uint64_t &Result) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); Result = Sect->Size; } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); Result = Sect->Size; } return object_error::success; @@ -546,10 +546,10 @@ error_code MachOObjectFile::getSectionSize(DataRefImpl DRI, error_code MachOObjectFile::getSectionContents(DataRefImpl DRI, StringRef &Result) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); Result = MachOObj->getData(Sect->Offset, Sect->Size); } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); Result = MachOObj->getData(Sect->Offset, Sect->Size); } return object_error::success; @@ -558,10 +558,10 @@ error_code MachOObjectFile::getSectionContents(DataRefImpl DRI, error_code MachOObjectFile::getSectionAlignment(DataRefImpl DRI, uint64_t &Result) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); Result = uint64_t(1) << Sect->Align; } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); Result = uint64_t(1) << Sect->Align; } return object_error::success; @@ -570,10 +570,10 @@ error_code MachOObjectFile::getSectionAlignment(DataRefImpl DRI, error_code MachOObjectFile::isSectionText(DataRefImpl DRI, bool &Result) const { if (is64BitLoadCommand(MachOObj.get(), DRI)) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); Result = Sect->Flags & macho::SF_PureInstructions; } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); Result = Sect->Flags & macho::SF_PureInstructions; } return object_error::success; @@ -610,12 +610,12 @@ error_code MachOObjectFile::isSectionVirtual(DataRefImpl Sec, error_code MachOObjectFile::isSectionZeroInit(DataRefImpl DRI, bool &Result) const { if (MachOObj->is64Bit()) { - const macho::Section64 *Sect = getSection64(DRI); + const MachOFormat::Section64 *Sect = getSection64(DRI); unsigned SectionType = Sect->Flags & MachO::SectionFlagMaskSectionType; Result = (SectionType == MachO::SectionTypeZeroFill || SectionType == MachO::SectionTypeZeroFillLarge); } else { - const macho::Section *Sect = getSection(DRI); + const MachOFormat::Section *Sect = getSection(DRI); unsigned SectionType = Sect->Flags & MachO::SectionFlagMaskSectionType; Result = (SectionType == MachO::SectionTypeZeroFill || SectionType == MachO::SectionTypeZeroFillLarge); @@ -673,10 +673,10 @@ relocation_iterator MachOObjectFile::getSectionRelBegin(DataRefImpl Sec) const { relocation_iterator MachOObjectFile::getSectionRelEnd(DataRefImpl Sec) const { uint32_t last_reloc; if (is64BitLoadCommand(MachOObj.get(), Sec)) { - const macho::Section64 *Sect = getSection64(Sec); + const MachOFormat::Section64 *Sect = getSection64(Sec); last_reloc = Sect->NumRelocationTableEntries; } else { - const macho::Section *Sect = getSection(Sec); + const MachOFormat::Section *Sect = getSection(Sec); last_reloc = Sect->NumRelocationTableEntries; } DataRefImpl ret; @@ -704,10 +704,10 @@ getRelocation(DataRefImpl Rel, InMemoryStruct<macho::RelocationEntry> &Res) const { uint32_t relOffset; if (MachOObj->is64Bit()) { - const macho::Section64 *Sect = getSection64(Sections[Rel.d.b]); + const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]); relOffset = Sect->RelocationTableOffset; } else { - const macho::Section *Sect = getSection(Sections[Rel.d.b]); + const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]); relOffset = Sect->RelocationTableOffset; } MachOObj->ReadRelocationEntry(relOffset, Rel.d.a, Res); @@ -722,10 +722,10 @@ error_code MachOObjectFile::getRelocationAddress(DataRefImpl Rel, uint64_t &Res) const { const uint8_t* sectAddress = 0; if (MachOObj->is64Bit()) { - const macho::Section64 *Sect = getSection64(Sections[Rel.d.b]); + const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]); sectAddress += Sect->Address; } else { - const macho::Section *Sect = getSection(Sections[Rel.d.b]); + const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]); sectAddress += Sect->Address; } InMemoryStruct<macho::RelocationEntry> RE; @@ -895,10 +895,10 @@ error_code MachOObjectFile::getRelocationAdditionalInfo(DataRefImpl Rel, if (!isExtern) { const uint8_t* sectAddress = base(); if (MachOObj->is64Bit()) { - const macho::Section64 *Sect = getSection64(Sections[Rel.d.b]); + const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]); sectAddress += Sect->Offset; } else { - const macho::Section *Sect = getSection(Sections[Rel.d.b]); + const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]); sectAddress += Sect->Offset; } Res = reinterpret_cast<uintptr_t>(sectAddress); |