[llvm] r178988 - Construct MachOObject in MachOObjectFile's constructor.

Rafael Espindola rafael.espindola at gmail.com
Sun Apr 7 09:58:48 PDT 2013


Author: rafael
Date: Sun Apr  7 11:58:48 2013
New Revision: 178988

URL: http://llvm.org/viewvc/llvm-project?rev=178988&view=rev
Log:
Construct MachOObject in MachOObjectFile's constructor.

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=178988&r1=178987&r2=178988&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/MachO.h (original)
+++ llvm/trunk/include/llvm/Object/MachO.h Sun Apr  7 11:58:48 2013
@@ -126,7 +126,7 @@ typedef MachOObject::LoadCommandInfo Loa
 
 class MachOObjectFile : public ObjectFile {
 public:
-  MachOObjectFile(MemoryBuffer *Object, MachOObject *MOO, error_code &ec);
+  MachOObjectFile(MemoryBuffer *Object, error_code &ec);
 
   virtual symbol_iterator begin_symbols() const;
   virtual symbol_iterator end_symbols() const;

Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=178988&r1=178987&r2=178988&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Sun Apr  7 11:58:48 2013
@@ -27,10 +27,23 @@ using namespace object;
 namespace llvm {
 namespace object {
 
-MachOObjectFile::MachOObjectFile(MemoryBuffer *Object, MachOObject *MOO,
-                                 error_code &ec)
-    : ObjectFile(Binary::ID_MachO, Object),
-      MachOObj(MOO) {
+MachOObjectFile::MachOObjectFile(MemoryBuffer *Object, error_code &ec)
+    : ObjectFile(Binary::ID_MachO, Object) {
+  // MachOObject takes ownership of the Buffer we passed to it, and
+  // MachOObjectFile does, too, so we need to make sure they don't get the
+  // same object. A MemoryBuffer is cheap (it's just a reference to memory,
+  // not a copy of the memory itself), so just make a new copy here for
+  // the MachOObjectFile.
+  MemoryBuffer *NewBuffer =
+    MemoryBuffer::getMemBuffer(Object->getBuffer(),
+                               Object->getBufferIdentifier(), false);
+  std::string ErrorStr;
+  MachOObj.reset(MachOObject::LoadFromBuffer(NewBuffer, &ErrorStr));
+  if (!MachOObj) {
+    ec = object_error::parse_failed;
+    return;
+  }
+
   DataRefImpl DRI;
   moveToNextSection(DRI);
   uint32_t LoadCommandCount = MachOObj->getHeader().NumLoadCommands;
@@ -61,19 +74,10 @@ const macho::Header &MachOObjectFile::ge
 
 ObjectFile *ObjectFile::createMachOObjectFile(MemoryBuffer *Buffer) {
   error_code ec;
-  std::string Err;
-  MachOObject *MachOObj = MachOObject::LoadFromBuffer(Buffer, &Err);
-  if (!MachOObj)
+  ObjectFile *Ret = new MachOObjectFile(Buffer, ec);
+  if (ec)
     return NULL;
-  // MachOObject takes ownership of the Buffer we passed to it, and
-  // MachOObjectFile does, too, so we need to make sure they don't get the
-  // same object. A MemoryBuffer is cheap (it's just a reference to memory,
-  // not a copy of the memory itself), so just make a new copy here for
-  // the MachOObjectFile.
-  MemoryBuffer *NewBuffer =
-    MemoryBuffer::getMemBuffer(Buffer->getBuffer(),
-                               Buffer->getBufferIdentifier(), false);
-  return new MachOObjectFile(NewBuffer, MachOObj, ec);
+  return Ret;
 }
 
 /*===-- Symbols -----------------------------------------------------------===*/





More information about the llvm-commits mailing list