diff options
author | Alexander Potapenko <glider@google.com> | 2014-10-15 23:35:45 +0000 |
---|---|---|
committer | Alexander Potapenko <glider@google.com> | 2014-10-15 23:35:45 +0000 |
commit | 6909b5b567a4fa68c5be1ee6af2609b929eb8512 (patch) | |
tree | fd03e08b530107e0bab5c8280f5634da8946c3c2 /llvm/lib/Object/MachOObjectFile.cpp | |
parent | 900dbdc4d9d88d617d7925c2a45b067b87d48f18 (diff) | |
download | bcm5719-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.cpp | 11 |
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(); |