[llvm] r219866 - Add MachOObjectFile::getUuid()

Alexander Potapenko glider at google.com
Wed Oct 15 16:35:45 PDT 2014


Author: glider
Date: Wed Oct 15 18:35:45 2014
New Revision: 219866

URL: http://llvm.org/viewvc/llvm-project?rev=219866&view=rev
Log:
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.

Modified:
    llvm/trunk/include/llvm/Object/MachO.h
    llvm/trunk/lib/Object/MachOObjectFile.cpp

Modified: llvm/trunk/include/llvm/Object/MachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=219866&r1=219865&r2=219866&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/MachO.h (original)
+++ llvm/trunk/include/llvm/Object/MachO.h Wed Oct 15 18:35:45 2014
@@ -380,6 +380,7 @@ public:
   ArrayRef<uint8_t> getDyldInfoWeakBindOpcodes() const;
   ArrayRef<uint8_t> getDyldInfoLazyBindOpcodes() const;
   ArrayRef<uint8_t> getDyldInfoExportsTrie() const;
+  ArrayRef<uint8_t> getUuid() const;
 
   StringRef getStringTableData() const;
   bool is64Bit() const;
@@ -417,6 +418,7 @@ private:
   const char *DysymtabLoadCmd;
   const char *DataInCodeLoadCmd;
   const char *DyldInfoLoadCmd;
+  const char *UuidLoadCmd;
   bool HasPageZeroSegment;
 };
 

Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=219866&r1=219865&r2=219866&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Wed Oct 15 18:35:45 2014
@@ -239,7 +239,7 @@ MachOObjectFile::MachOObjectFile(MemoryB
     : 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(MemoryB
                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::getDy
   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();





More information about the llvm-commits mailing list