summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Object/MachO.h10
-rw-r--r--lib/Object/MachOObjectFile.cpp8
-rw-r--r--tools/llvm-objdump/MachODump.cpp4
3 files changed, 20 insertions, 2 deletions
diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h
index 8543ecc829..f026e6c69d 100644
--- a/include/llvm/Object/MachO.h
+++ b/include/llvm/Object/MachO.h
@@ -113,6 +113,13 @@ namespace MachOFormat {
support::ulittle32_t NumSections;
support::ulittle32_t Flags;
};
+
+ struct LinkeditDataLoadCommand {
+ support::ulittle32_t Type;
+ support::ulittle32_t Size;
+ support::ulittle32_t DataOffset;
+ support::ulittle32_t DataSize;
+ };
}
typedef MachOObject::LoadCommandInfo LoadCommandInfo;
@@ -145,6 +152,9 @@ public:
ArrayRef<char> getSectionRawName(DataRefImpl Sec) const;
ArrayRef<char>getSectionRawFinalSegmentName(DataRefImpl Sec) const;
+ const MachOFormat::LinkeditDataLoadCommand *
+ getLinkeditDataLoadCommand(LoadCommandInfo LCI) const;
+
MachOObject *getObject() { return MachOObj.get(); }
static inline bool classof(const Binary *v) {
diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp
index 1eb14f31ff..94827693e9 100644
--- a/lib/Object/MachOObjectFile.cpp
+++ b/lib/Object/MachOObjectFile.cpp
@@ -75,6 +75,14 @@ MachOObjectFile::getSegmentLoadCommand(LoadCommandInfo LCI) const {
return reinterpret_cast<const MachOFormat::SegmentLoadCommand*>(Data.data());
}
+const MachOFormat::LinkeditDataLoadCommand *
+MachOObjectFile::getLinkeditDataLoadCommand(LoadCommandInfo LCI) const {
+ StringRef Data = MachOObj->getData(LCI.Offset,
+ sizeof(MachOFormat::LinkeditDataLoadCommand));
+ return
+ reinterpret_cast<const MachOFormat::LinkeditDataLoadCommand*>(Data.data());
+}
+
const MachOFormat::Segment64LoadCommand *
MachOObjectFile::getSegment64LoadCommand(LoadCommandInfo LCI) const {
StringRef Data = MachOObj->getData(LCI.Offset,
diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp
index b122cd3b7a..894e769115 100644
--- a/tools/llvm-objdump/MachODump.cpp
+++ b/tools/llvm-objdump/MachODump.cpp
@@ -223,8 +223,8 @@ static void getSectionsAndSymbols(const macho::Header &Header,
if (LCI.Command.Type == macho::LCT_FunctionStarts) {
// We found a function starts segment, parse the addresses for later
// consumption.
- InMemoryStruct<macho::LinkeditDataLoadCommand> LLC;
- MachOObj->getObject()->ReadLinkeditDataLoadCommand(LCI, LLC);
+ const MachOFormat::LinkeditDataLoadCommand *LLC =
+ MachOObj->getLinkeditDataLoadCommand(LCI);
MachOObj->getObject()->ReadULEB128s(LLC->DataOffset, FoundFns);
}