summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/MachOObjectFile.cpp
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2014-10-15 23:35:45 +0000
committerAlexander Potapenko <glider@google.com>2014-10-15 23:35:45 +0000
commit6909b5b567a4fa68c5be1ee6af2609b929eb8512 (patch)
treefd03e08b530107e0bab5c8280f5634da8946c3c2 /llvm/lib/Object/MachOObjectFile.cpp
parent900dbdc4d9d88d617d7925c2a45b067b87d48f18 (diff)
downloadbcm5719-llvm-6909b5b567a4fa68c5be1ee6af2609b929eb8512.tar.gz
bcm5719-llvm-6909b5b567a4fa68c5be1ee6af2609b929eb8512.zip
Add MachOObjectFile::getUuid()
This CL introduces MachOObjectFile::getUuid(). This function returns an ArrayRef to the object file's UUID, or an empty ArrayRef if the object file doesn't contain an LC_UUID load command. The new function is gonna be used by llvm-symbolizer. llvm-svn: 219866
Diffstat (limited to 'llvm/lib/Object/MachOObjectFile.cpp')
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 260e7557f43..4435815b899 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -239,7 +239,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
: ObjectFile(getMachOType(IsLittleEndian, Is64bits), Object),
SymtabLoadCmd(nullptr), DysymtabLoadCmd(nullptr),
DataInCodeLoadCmd(nullptr), DyldInfoLoadCmd(nullptr),
- HasPageZeroSegment(false) {
+ UuidLoadCmd(nullptr), HasPageZeroSegment(false) {
uint32_t LoadCommandCount = this->getHeader().ncmds;
MachO::LoadCommandType SegmentLoadType = is64Bit() ?
MachO::LC_SEGMENT_64 : MachO::LC_SEGMENT;
@@ -259,6 +259,9 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
Load.C.cmd == MachO::LC_DYLD_INFO_ONLY) {
assert(!DyldInfoLoadCmd && "Multiple dyldinfo load commands");
DyldInfoLoadCmd = Load.Ptr;
+ } else if (Load.C.cmd == MachO::LC_UUID) {
+ assert(!UuidLoadCmd && "Multiple UUID load commands");
+ UuidLoadCmd = Load.Ptr;
} else if (Load.C.cmd == SegmentLoadType) {
uint32_t NumSections = getSegmentLoadCommandNumSections(this, Load);
for (unsigned J = 0; J < NumSections; ++J) {
@@ -2418,6 +2421,12 @@ ArrayRef<uint8_t> MachOObjectFile::getDyldInfoExportsTrie() const {
return ArrayRef<uint8_t>(Ptr, DyldInfo.export_size);
}
+ArrayRef<uint8_t> MachOObjectFile::getUuid() const {
+ if (!UuidLoadCmd)
+ return ArrayRef<uint8_t>();
+ MachO::uuid_command Uuid = getStruct<MachO::uuid_command>(this, UuidLoadCmd);
+ return ArrayRef<uint8_t>(Uuid.uuid, 16);
+}
StringRef MachOObjectFile::getStringTableData() const {
MachO::symtab_command S = getSymtabLoadCommand();
OpenPOWER on IntegriCloud