[lld] r193585 - [PassManager] add ReaderWriter{Native, YAML} to the Driver.

Shankar Easwaran shankare at codeaurora.org
Tue Oct 29 10:57:09 PDT 2013


Hi Rui,

I thought the procedure was wait for LGTM before you close the review.

Thanks for letting me know about the finer details.

Is this only for reviews that go through phabricator ?

I was referring to this chain where we had agreed for the code to be 
submitted.

http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20131021/192579.html

Thanks

Shankar Easwaran

On 10/29/2013 12:43 PM, Rui Ueyama wrote:
> Once you start code review, you'll have to wait LGTM from a reviewer.
> Getting no response does not mean it's accepted. In this case it's even
> worse because you submitted the change only 4 minutes after you posted a
> comment on Phab while we are talking about the patch. It's not cool and not
> acceptable in LLVM.
>
> If you have already got LGTM in the last code review, you could re-submit,
> but it's not applicable to this case because you didn't get LGTM in the
> previous review too.
>
>
> On Tue, Oct 29, 2013 at 8:38 AM, Shankar Easwaran
> <shankare at codeaurora.org>wrote:
>
>> Hi Rui,
>>
>> Can you let me know if what were the comments that have not been
>> addressed. I will address it now.
>>
>> I am trying to figure out if any of your critical review comments are not
>> addressed.
>>
>> This part of the patch was already reviewed earlier, this was only a
>> change that was rebased to trunk in addition to review comments that was
>> sent earlier on this.
>>
>> Thanks
>>
>> Shankar Easwaran
>>
>>
>> On 10/29/2013 12:51 AM, Rui Ueyama wrote:
>>
>>> I hate to say, but I was still actively reviewing your patch when you
>>> submitted. I realized that after sending the last comments on Phab and
>>> came
>>> back to my inbox. My comments were not really addressed, and no one hadn't
>>> sent LGTM. You shouldn't have submitted it in the middle of code review...
>>>
>>>
>>> On Mon, Oct 28, 2013 at 10:12 PM, Shankar Easwaran
>>> <shankare at codeaurora.org>**wrote:
>>>
>>>   Author: shankare
>>>> Date: Tue Oct 29 00:12:14 2013
>>>> New Revision: 193585
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-**project?rev=193585&view=rev<http://llvm.org/viewvc/llvm-project?rev=193585&view=rev>
>>>> Log:
>>>> [PassManager] add ReaderWriter{Native,YAML} to the Driver.
>>>>
>>>> Enable this for the following flavors
>>>>
>>>> a) core
>>>> b) gnu
>>>> c) darwin
>>>>
>>>> Its disabled for the flavor PECOFF. Convenient markers are added with
>>>> FIXME
>>>> comments in the Driver that would be removed and code removed from each
>>>> flavor.
>>>>
>>>> Added:
>>>>       lld/trunk/include/lld/Passes/**RoundTripNativePass.h
>>>>       lld/trunk/include/lld/Passes/**RoundTripYAMLPass.h
>>>>       lld/trunk/lib/Passes/**RoundTripNativePass.cpp
>>>>       lld/trunk/lib/Passes/**RoundTripYAMLPass.cpp
>>>>       lld/trunk/test/elf/roundtrip.**test
>>>> Modified:
>>>>       lld/trunk/include/lld/Core/**LinkingContext.h
>>>>       lld/trunk/include/lld/Core/**Pass.h
>>>>       lld/trunk/include/lld/Core/**PassManager.h
>>>>       lld/trunk/include/lld/Core/**Resolver.h
>>>>       lld/trunk/include/lld/Passes/**LayoutPass.h
>>>>       lld/trunk/include/lld/**ReaderWriter/**CoreLinkingContext.h
>>>>       lld/trunk/include/lld/**ReaderWriter/**ELFLinkingContext.h
>>>>       lld/trunk/include/lld/**ReaderWriter/**MachOLinkingContext.h
>>>>       lld/trunk/include/lld/**ReaderWriter/**PECOFFLinkingContext.h
>>>>       lld/trunk/include/lld/**ReaderWriter/Simple.h
>>>>       lld/trunk/lib/Core/**LinkingContext.cpp
>>>>       lld/trunk/lib/Core/**PassManager.cpp
>>>>       lld/trunk/lib/Core/Resolver.**cpp
>>>>       lld/trunk/lib/Driver/Driver.**cpp
>>>>       lld/trunk/lib/Passes/**CMakeLists.txt
>>>>       lld/trunk/lib/Passes/GOTPass.**cpp
>>>>       lld/trunk/lib/Passes/**LayoutPass.cpp
>>>>       lld/trunk/lib/Passes/**StubsPass.cpp
>>>>       lld/trunk/lib/ReaderWriter/**CoreLinkingContext.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.h
>>>>       lld/trunk/lib/ReaderWriter/**ELF/ELFLinkingContext.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonLinkingContext.h
>>>>       lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonTargetHandler.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/PPC/PPCLinkingContext.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.cpp
>>>>       lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.h
>>>>       lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64RelocationPass.cpp
>>>>       lld/trunk/lib/ReaderWriter/**MachO/MachOLinkingContext.cpp
>>>>       lld/trunk/lib/ReaderWriter/**PECOFF/GroupedSectionsPass.h
>>>>       lld/trunk/lib/ReaderWriter/**PECOFF/IdataPass.h
>>>>       lld/trunk/lib/ReaderWriter/**PECOFF/PECOFFLinkingContext.**cpp
>>>>
>>>> Modified: lld/trunk/include/lld/Core/**LinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Core/LinkingContext.h?rev=**193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Core/**LinkingContext.h (original)
>>>> +++ lld/trunk/include/lld/Core/**LinkingContext.h Tue Oct 29 00:12:14
>>>> 2013
>>>> @@ -293,7 +293,7 @@ public:
>>>>
>>>>      /// This method is called by core linking to build the list of Passes
>>>> to be
>>>>      /// run on the merged/linked graph of all input files.
>>>> -  virtual void addPasses(PassManager &pm) const;
>>>> +  virtual void addPasses(PassManager &pm);
>>>>
>>>>      /// Calls through to the writeFile() method on the specified Writer.
>>>>      ///
>>>>
>>>> Modified: lld/trunk/include/lld/Core/**Pass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Core/Pass.h?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Pass.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Core/**Pass.h (original)
>>>> +++ lld/trunk/include/lld/Core/**Pass.h Tue Oct 29 00:12:14 2013
>>>> @@ -36,7 +36,7 @@ public:
>>>>      virtual ~Pass() { }
>>>>
>>>>      /// Do the actual work of the Pass.
>>>> -  virtual void perform(MutableFile &mergedFile) = 0;
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile) = 0;
>>>>
>>>>    protected:
>>>>      // Only subclassess can be instantiated.
>>>> @@ -53,7 +53,7 @@ public:
>>>>      /// Scans all Atoms looking for call-site uses of SharedLibraryAtoms
>>>>      /// and transfroms the call-site to call a stub instead using the
>>>>      /// helper methods below.
>>>> -  virtual void perform(MutableFile &mergedFile);
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile);
>>>>
>>>>      /// If true, the pass should use stubs for references
>>>>      /// to shared library symbols. If false, the pass
>>>> @@ -87,7 +87,7 @@ public:
>>>>      /// Scans all Atoms looking for pointer to SharedLibraryAtoms
>>>>      /// and transfroms them to a pointer to a GOT entry using the
>>>>      /// helper methods below.
>>>> -  virtual void perform(MutableFile &mergedFile);
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile);
>>>>
>>>>      /// If true, the pass will use GOT entries for references
>>>>      /// to shared library symbols. If false, the pass
>>>>
>>>> Modified: lld/trunk/include/lld/Core/**PassManager.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Core/PassManager.h?rev=193585&**r1=193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/PassManager.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Core/**PassManager.h (original)
>>>> +++ lld/trunk/include/lld/Core/**PassManager.h Tue Oct 29 00:12:14 2013
>>>> @@ -32,7 +32,7 @@ public:
>>>>        _passes.push_back(std::move(**pass));
>>>>      }
>>>>
>>>> -  ErrorOr<void> runOnFile(MutableFile &);
>>>> +  ErrorOr<void> runOnFile(std::unique_ptr<**MutableFile> &);
>>>>
>>>>    private:
>>>>      /// \brief Passes in the order they should run.
>>>>
>>>> Modified: lld/trunk/include/lld/Core/**Resolver.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Core/Resolver.h?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Core/**Resolver.h (original)
>>>> +++ lld/trunk/include/lld/Core/**Resolver.h Tue Oct 29 00:12:14 2013
>>>> @@ -37,8 +37,9 @@ public:
>>>>      };
>>>>
>>>>      Resolver(LinkingContext &context)
>>>> -      : _context(context), _symbolTable(context), _result(context),
>>>> -        _haveLLVMObjs(false), _addToFinalSection(false) {}
>>>> +      : _context(context), _symbolTable(context),
>>>> +        _result(new MergedFile(context)), _haveLLVMObjs(false),
>>>> +        _addToFinalSection(false) {}
>>>>
>>>>      virtual ~Resolver() {}
>>>>
>>>> @@ -62,9 +63,7 @@ public:
>>>>      /// @brief do work of merging and resolving and return list
>>>>      bool resolve();
>>>>
>>>> -  MutableFile& resultFile() {
>>>> -    return _result;
>>>> -  }
>>>> +  std::unique_ptr<MutableFile> resultFile() { return
>>>> std::move(_result); }
>>>>
>>>>    private:
>>>>
>>>> @@ -117,7 +116,7 @@ private:
>>>>      std::set<const Atom *>        _deadStripRoots;
>>>>      std::vector<const Atom *>     _**atomsWithUnresolvedReferences;
>>>>      llvm::DenseSet<const Atom *>  _liveAtoms;
>>>> -  MergedFile                    _result;
>>>> +  std::unique_ptr<MergedFile> _result;
>>>>      bool                          _haveLLVMObjs;
>>>>      bool _addToFinalSection;
>>>>    };
>>>>
>>>> Modified: lld/trunk/include/lld/Passes/**LayoutPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Passes/LayoutPass.h?rev=**193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Passes/LayoutPass.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Passes/**LayoutPass.h (original)
>>>> +++ lld/trunk/include/lld/Passes/**LayoutPass.h Tue Oct 29 00:12:14 2013
>>>> @@ -48,7 +48,7 @@ public:
>>>>      LayoutPass() : Pass(), _compareAtoms(*this) {}
>>>>
>>>>      /// Sorts atoms in mergedFile by content type then by command line
>>>> order.
>>>> -  virtual void perform(MutableFile &mergedFile);
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile);
>>>>
>>>>      virtual ~LayoutPass() {}
>>>>
>>>>
>>>> Added: lld/trunk/include/lld/Passes/**RoundTripNativePass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Passes/RoundTripNativePass.h?**rev=193585&view=auto<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Passes/RoundTripNativePass.h?rev=193585&view=auto>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Passes/**RoundTripNativePass.h (added)
>>>> +++ lld/trunk/include/lld/Passes/**RoundTripNativePass.h Tue Oct 29
>>>> 00:12:14
>>>> 2013
>>>> @@ -0,0 +1,41 @@
>>>> +//===--Passes/**RoundTripNativePass.h - Write Native file/Read it
>>>> back------===//
>>>> +//
>>>> +//                             The LLVM Linker
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open Source
>>>> +// License. See LICENSE.TXT for details.
>>>> +//
>>>>
>>>> +//===------------------------**------------------------------**
>>>> ----------------===//
>>>> +
>>>> +#ifndef LLD_PASSES_ROUND_TRIP_NATIVE_**PASS_H
>>>> +#define LLD_PASSES_ROUND_TRIP_NATIVE_**PASS_H
>>>> +
>>>> +#include "lld/Core/File.h"
>>>> +#include "lld/Core/LinkingContext.h"
>>>> +#include "lld/Core/Pass.h"
>>>> +
>>>> +#include <map>
>>>> +#include <vector>
>>>> +
>>>> +namespace lld {
>>>> +class RoundTripNativePass : public Pass {
>>>> +public:
>>>> +  RoundTripNativePass(**LinkingContext &context) : Pass(),
>>>> _context(context) {}
>>>> +
>>>> +  /// Writes to a native file and reads the atoms from the native file
>>>> back.
>>>> +  /// Replaces mergedFile with the contents of the native File.
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile);
>>>> +
>>>> +  virtual ~RoundTripNativePass() {}
>>>> +
>>>> +private:
>>>> +  LinkingContext &_context;
>>>> +  // Keep the parsed file alive for the rest of the link. All atoms
>>>> +  // that are created by the RoundTripNativePass are owned by the
>>>> +  // nativeFile.
>>>> +  std::vector<std::unique_ptr<**File> > _nativeFile;
>>>> +};
>>>> +
>>>> +} // namespace lld
>>>> +
>>>> +#endif // LLD_PASSES_ROUND_TRIP_NATIVE_**PASS_H
>>>>
>>>> Added: lld/trunk/include/lld/Passes/**RoundTripYAMLPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> Passes/RoundTripYAMLPass.h?**rev=193585&view=auto<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Passes/RoundTripYAMLPass.h?rev=193585&view=auto>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/Passes/**RoundTripYAMLPass.h (added)
>>>> +++ lld/trunk/include/lld/Passes/**RoundTripYAMLPass.h Tue Oct 29
>>>> 00:12:14
>>>> 2013
>>>> @@ -0,0 +1,41 @@
>>>> +//===--Passes/**RoundTripYAMLPass.h- Write YAML file/Read it
>>>> back-----------===//
>>>> +//
>>>> +//                             The LLVM Linker
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open Source
>>>> +// License. See LICENSE.TXT for details.
>>>> +//
>>>>
>>>> +//===------------------------**------------------------------**
>>>> ----------------===//
>>>> +
>>>> +#ifndef LLD_PASSES_ROUND_TRIP_YAML_**PASS_H
>>>> +#define LLD_PASSES_ROUND_TRIP_YAML_**PASS_H
>>>> +
>>>> +#include "lld/Core/File.h"
>>>> +#include "lld/Core/LinkingContext.h"
>>>> +#include "lld/Core/Pass.h"
>>>> +
>>>> +#include <map>
>>>> +#include <vector>
>>>> +
>>>> +namespace lld {
>>>> +class RoundTripYAMLPass : public Pass {
>>>> +public:
>>>> +  RoundTripYAMLPass(**LinkingContext &context) : Pass(),
>>>> _context(context)
>>>> {}
>>>> +
>>>> +  /// Writes to a YAML file and reads the atoms from the YAML file back.
>>>> +  /// Replaces the mergedFile with new contents.
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile);
>>>> +
>>>> +  virtual ~RoundTripYAMLPass() {}
>>>> +
>>>> +private:
>>>> +  LinkingContext &_context;
>>>> +  // Keep the parsed file alive for the rest of the link. All atoms
>>>> +  // that are created by the RoundTripYAMLPass are owned by the
>>>> +  // yamlFile.
>>>> +  std::vector<std::unique_ptr<**File> > _yamlFile;
>>>> +};
>>>> +
>>>> +} // namespace lld
>>>> +
>>>> +#endif // LLD_PASSES_ROUND_TRIP_YAML_**PASS_H
>>>>
>>>> Modified: lld/trunk/include/lld/**ReaderWriter/**CoreLinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> ReaderWriter/**CoreLinkingContext.h?rev=**193585&r1=193584&r2=193585&**
>>>> view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/CoreLinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/**ReaderWriter/**CoreLinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/include/lld/**ReaderWriter/**CoreLinkingContext.h Tue Oct
>>>> 29
>>>> 00:12:14 2013
>>>> @@ -23,7 +23,7 @@ public:
>>>>      CoreLinkingContext();
>>>>
>>>>      virtual bool validateImpl(raw_ostream &diagnostics);
>>>> -  virtual void addPasses(PassManager &pm) const;
>>>> +  virtual void addPasses(PassManager &pm);
>>>>      virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str)
>>>> const;
>>>>      virtual ErrorOr<std::string> stringFromRelocKind(Reference:**:Kind
>>>> kind)
>>>> const;
>>>>
>>>>
>>>> Modified: lld/trunk/include/lld/**ReaderWriter/**ELFLinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> ReaderWriter/**ELFLinkingContext.h?rev=**193585&r1=193584&r2=193585&**
>>>> view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/**ReaderWriter/**ELFLinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/include/lld/**ReaderWriter/**ELFLinkingContext.h Tue Oct
>>>> 29
>>>> 00:12:14 2013
>>>> @@ -130,7 +130,7 @@ public:
>>>>        return static_cast<lld::elf::**TargetHandler<ELFT>
>>>> &>(*_targetHandler.get());
>>>>      }
>>>>
>>>> -  virtual void addPasses(PassManager &pm) const;
>>>> +  virtual void addPasses(PassManager &pm);
>>>>
>>>>      void setTriple(llvm::Triple trip) { _triple = trip; }
>>>>      void setNoInhibitExec(bool v) { _noInhibitExec = v; }
>>>>
>>>> Modified: lld/trunk/include/lld/**ReaderWriter/**MachOLinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> ReaderWriter/**MachOLinkingContext.h?rev=**193585&r1=193584&r2=193585&**
>>>> view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/**ReaderWriter/**MachOLinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/include/lld/**ReaderWriter/**MachOLinkingContext.h Tue
>>>> Oct 29
>>>> 00:12:14 2013
>>>> @@ -27,7 +27,7 @@ public:
>>>>      MachOLinkingContext();
>>>>      ~MachOLinkingContext();
>>>>
>>>> -  virtual void addPasses(PassManager &pm) const;
>>>> +  virtual void addPasses(PassManager &pm);
>>>>      virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str)
>>>> const;
>>>>      virtual ErrorOr<std::string> stringFromRelocKind(Reference:**:Kind
>>>> kind)
>>>> const;
>>>>      virtual bool validateImpl(raw_ostream &diagnostics);
>>>>
>>>> Modified: lld/trunk/include/lld/**ReaderWriter/**PECOFFLinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> ReaderWriter/**PECOFFLinkingContext.h?rev=**193585&r1=193584&r2=193585&*
>>>> *view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/**ReaderWriter/**PECOFFLinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/include/lld/**ReaderWriter/**PECOFFLinkingContext.h Tue
>>>> Oct 29
>>>> 00:12:14 2013
>>>> @@ -65,7 +65,7 @@ public:
>>>>      virtual Writer &writer() const;
>>>>      virtual bool validateImpl(raw_ostream &diagnostics);
>>>>
>>>> -  virtual void addPasses(PassManager &pm) const;
>>>> +  virtual void addPasses(PassManager &pm);
>>>>
>>>>      virtual bool
>>>>      createImplicitFiles(std::**vector<std::unique_ptr<File> > &result)
>>>> const;
>>>>
>>>> Modified: lld/trunk/include/lld/**ReaderWriter/Simple.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/include/lld/**
>>>> ReaderWriter/Simple.h?rev=**193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/Simple.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/include/lld/**ReaderWriter/Simple.h (original)
>>>> +++ lld/trunk/include/lld/**ReaderWriter/Simple.h Tue Oct 29 00:12:14
>>>> 2013
>>>> @@ -62,13 +62,31 @@ public:
>>>>        return make_range(_definedAtoms._**atoms);
>>>>      }
>>>>
>>>> -private:
>>>> +protected:
>>>>      atom_collection_vector<**DefinedAtom> _definedAtoms;
>>>>      atom_collection_vector<**UndefinedAtom> _undefinedAtoms;
>>>>      atom_collection_vector<**SharedLibraryAtom> _sharedLibraryAtoms;
>>>>      atom_collection_vector<**AbsoluteAtom> _absoluteAtoms;
>>>>    };
>>>>
>>>> +class FileToMutable : public SimpleFile {
>>>> +public:
>>>> +  explicit FileToMutable(const LinkingContext &context, File &file)
>>>> +      : SimpleFile(context, file.path()), _file(file) {
>>>> +    for (auto definedAtom : _file.defined())
>>>> +      _definedAtoms._atoms.push_**back(std::move(definedAtom));
>>>> +    for (auto undefAtom : _file.undefined())
>>>> +      _undefinedAtoms._atoms.push_**back(std::move(undefAtom));
>>>> +    for (auto shlibAtom : _file.sharedLibrary())
>>>> +      _sharedLibraryAtoms._atoms.**push_back(std::move(shlibAtom)**);
>>>> +    for (auto absAtom : _file.absolute())
>>>> +      _absoluteAtoms._atoms.push_**back(std::move(absAtom));
>>>> +  }
>>>> +
>>>> +private:
>>>> +  const File &_file;
>>>> +};
>>>> +
>>>>    class SimpleReference : public Reference {
>>>>    public:
>>>>      SimpleReference(Reference::**Kind k, uint64_t off, const Atom *t,
>>>>
>>>> Modified: lld/trunk/lib/Core/**LinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Core/**
>>>> LinkingContext.cpp?rev=193585&**r1=193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/LinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Core/**LinkingContext.cpp (original)
>>>> +++ lld/trunk/lib/Core/**LinkingContext.cpp Tue Oct 29 00:12:14 2013
>>>> @@ -108,6 +108,6 @@ ErrorOr<File &> LinkingContext::nextFile
>>>>      }
>>>>    }
>>>>
>>>> -void LinkingContext::addPasses(**PassManager &pm) const {}
>>>> +void LinkingContext::addPasses(**PassManager &pm) {}
>>>>
>>>>    } // end namespace lld
>>>>
>>>> Modified: lld/trunk/lib/Core/**PassManager.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Core/**
>>>> PassManager.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/PassManager.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Core/**PassManager.cpp (original)
>>>> +++ lld/trunk/lib/Core/**PassManager.cpp Tue Oct 29 00:12:14 2013
>>>> @@ -15,7 +15,7 @@
>>>>    #include "llvm/Support/ErrorOr.h"
>>>>
>>>>    namespace lld {
>>>> -ErrorOr<void> PassManager::runOnFile(**MutableFile &mf) {
>>>> +ErrorOr<void> PassManager::runOnFile(std::**unique_ptr<MutableFile>
>>>> &mf) {
>>>>      for (auto &pass : _passes) {
>>>>        pass->perform(mf);
>>>>      }
>>>>
>>>> Modified: lld/trunk/lib/Core/Resolver.**cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Core/**
>>>> Resolver.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Core/Resolver.**cpp (original)
>>>> +++ lld/trunk/lib/Core/Resolver.**cpp Tue Oct 29 00:12:14 2013
>>>> @@ -480,7 +480,7 @@ bool Resolver::resolve() {
>>>>      }
>>>>      this->**removeCoalescedAwayAtoms();
>>>>      this->linkTimeOptimize();
>>>> -  this->_result.addAtoms(_atoms)**;
>>>> +  this->_result->addAtoms(_**atoms);
>>>>      return true;
>>>>    }
>>>>
>>>>
>>>> Modified: lld/trunk/lib/Driver/Driver.**cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Driver/**
>>>> Driver.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Driver.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Driver/Driver.**cpp (original)
>>>> +++ lld/trunk/lib/Driver/Driver.**cpp Tue Oct 29 00:12:14 2013
>>>> @@ -16,6 +16,8 @@
>>>>    #include "lld/Core/Resolver.h"
>>>>    #include "lld/ReaderWriter/Reader.h"
>>>>    #include "lld/ReaderWriter/Writer.h"
>>>> +#include "lld/Passes/**RoundTripNativePass.h"
>>>> +#include "lld/Passes/RoundTripYAMLPass.**h"
>>>>
>>>>    #include "llvm/ADT/StringExtras.h"
>>>>    #include "llvm/ADT/StringSwitch.h"
>>>> @@ -105,19 +107,27 @@ bool Driver::link(LinkingContext &contex
>>>>      Resolver resolver(context);
>>>>      if (!resolver.resolve())
>>>>        return false;
>>>> -  MutableFile &merged = resolver.resultFile();
>>>> +  std::unique_ptr<MutableFile> merged = resolver.resultFile();
>>>>      resolveTask.end();
>>>>
>>>>      // Run passes on linked atoms.
>>>>      ScopedTask passTask(getDefaultDomain(), "Passes");
>>>>      PassManager pm;
>>>>      context.addPasses(pm);
>>>> +
>>>> +// TODO: Replace the code with #ifndef NDEBUG after fixing the
>>>> +// failures with pecoff
>>>> +#ifdef FIXME
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripNativePass(context)))**;
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripYAMLPass(context)));
>>>> +#endif
>>>> +
>>>>      pm.runOnFile(merged);
>>>>      passTask.end();
>>>>
>>>>      // Give linked atoms to Writer to generate output file.
>>>>      ScopedTask writeTask(getDefaultDomain(), "Write");
>>>> -  if (error_code ec = context.writeFile(merged)) {
>>>> +  if (error_code ec = context.writeFile(*merged)) {
>>>>        diagnostics << "Failed to write file '" << context.outputPath()
>>>>                    << "': " << ec.message() << "\n";
>>>>        return false;
>>>>
>>>> Modified: lld/trunk/lib/Passes/**CMakeLists.txt
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> CMakeLists.txt?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/CMakeLists.txt?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/**CMakeLists.txt (original)
>>>> +++ lld/trunk/lib/Passes/**CMakeLists.txt Tue Oct 29 00:12:14 2013
>>>> @@ -2,4 +2,8 @@ add_lld_library(lldPasses
>>>>      GOTPass.cpp
>>>>      StubsPass.cpp
>>>>      LayoutPass.cpp
>>>> +  RoundTripNativePass.cpp
>>>> +  RoundTripYAMLPass.cpp
>>>>      )
>>>> +
>>>> +target_link_libraries(**lldPasses lldReaderWriter)
>>>>
>>>> Modified: lld/trunk/lib/Passes/GOTPass.**cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> GOTPass.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/GOTPass.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/GOTPass.**cpp (original)
>>>> +++ lld/trunk/lib/Passes/GOTPass.**cpp Tue Oct 29 00:12:14 2013
>>>> @@ -67,12 +67,12 @@ findGOTAtom(const Atom *target,
>>>>    }
>>>>    } // end anonymous namespace
>>>>
>>>> -void GOTPass::perform(MutableFile &mergedFile) {
>>>> +void GOTPass::perform(std::unique_**ptr<MutableFile> &mergedFile) {
>>>>      // Use map so all pointers to same symbol use same GOT entry.
>>>>      llvm::DenseMap<const Atom*, const DefinedAtom*> targetToGOT;
>>>>
>>>>      // Scan all references in all atoms.
>>>> -  for(const DefinedAtom *atom : mergedFile.defined()) {
>>>> +  for (const DefinedAtom *atom : mergedFile->defined()) {
>>>>        for (const Reference *ref : *atom) {
>>>>          // Look at instructions accessing the GOT.
>>>>          bool canBypassGOT;
>>>> @@ -102,7 +102,7 @@ void GOTPass::perform(MutableFile &merge
>>>>
>>>>      // add all created GOT Atoms to master file
>>>>      for (auto &it : targetToGOT) {
>>>> -    mergedFile.addAtom(*it.second)**;
>>>> +    mergedFile->addAtom(*it.**second);
>>>>      }
>>>>    }
>>>>    }
>>>>
>>>> Modified: lld/trunk/lib/Passes/**LayoutPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> LayoutPass.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/LayoutPass.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/**LayoutPass.cpp (original)
>>>> +++ lld/trunk/lib/Passes/**LayoutPass.cpp Tue Oct 29 00:12:14 2013
>>>> @@ -1,4 +1,4 @@
>>>> -//===- Passes/LayoutPass.cpp - Layout atoms
>>>> ------------------------------**-===//
>>>> +//===--Passes/LayoutPass.cpp - Layout atoms
>>>> ------------------------------**-===//
>>>>    //
>>>>    //                             The LLVM Linker
>>>>    //
>>>> @@ -6,7 +6,6 @@
>>>>    // License. See LICENSE.TXT for details.
>>>>    //
>>>>
>>>>    //===-------------------------**------------------------------**
>>>> ---------------===//
>>>>
>>>> -//===------------------------**------------------------------**
>>>> ----------------===//
>>>>
>>>>    #define DEBUG_TYPE "LayoutPass"
>>>>
>>>> @@ -534,9 +533,9 @@ void LayoutPass::**checkFollowonChain(Muta
>>>>    #endif  // #ifndef NDEBUG
>>>>
>>>>    /// Perform the actual pass
>>>> -void LayoutPass::perform(**MutableFile &mergedFile) {
>>>> +void LayoutPass::perform(std::**unique_ptr<MutableFile> &mergedFile) {
>>>>      ScopedTask task(getDefaultDomain(), "LayoutPass");
>>>> -  MutableFile::DefinedAtomRange atomRange = mergedFile.definedAtoms();
>>>> +  MutableFile::DefinedAtomRange atomRange = mergedFile->definedAtoms();
>>>>
>>>>      // Build follow on tables
>>>>      buildFollowOnTable(atomRange);
>>>>
>>>> Added: lld/trunk/lib/Passes/**RoundTripNativePass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> RoundTripNativePass.cpp?rev=**193585&view=auto<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/RoundTripNativePass.cpp?rev=193585&view=auto>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/**RoundTripNativePass.cpp (added)
>>>> +++ lld/trunk/lib/Passes/**RoundTripNativePass.cpp Tue Oct 29 00:12:14
>>>> 2013
>>>> @@ -0,0 +1,44 @@
>>>> +//===--Passes/**RoundTripNativePass.cpp - Write Native file/Read it
>>>> back-----===//
>>>> +//
>>>> +//                             The LLVM Linker
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open Source
>>>> +// License. See LICENSE.TXT for details.
>>>> +//
>>>>
>>>> +//===------------------------**------------------------------**
>>>> ----------------===//
>>>> +
>>>> +#define DEBUG_TYPE "RoundTripNativePass"
>>>> +
>>>> +#include "lld/Core/Instrumentation.h"
>>>> +#include "lld/Passes/**RoundTripNativePass.h"
>>>> +#include "lld/ReaderWriter/Simple.h"
>>>> +#include "lld/ReaderWriter/Writer.h"
>>>> +
>>>> +#include "llvm/Support/Path.h"
>>>> +
>>>> +using namespace lld;
>>>> +
>>>> +/// Perform the actual pass
>>>> +void RoundTripNativePass::perform(**std::unique_ptr<MutableFile>
>>>> &mergedFile) {
>>>> +  ScopedTask task(getDefaultDomain(), "RoundTripNativePass");
>>>> +  std::unique_ptr<Writer> nativeWriter = createWriterNative(_context);
>>>> +  SmallString<128> tmpNativeFile;
>>>> +  // Separate the directory from the filename
>>>> +  StringRef outFile = llvm::sys::path::filename(_**
>>>> context.outputPath());
>>>> +  if (llvm::sys::fs::**createTemporaryFile(outFile, "native",
>>>> tmpNativeFile))
>>>> +    return;
>>>> +
>>>> +  // The file that is written would be kept around if there is a problem
>>>> +  // writing to the file or when reading atoms back from the file.
>>>> +  nativeWriter->writeFile(***mergedFile, tmpNativeFile.str());
>>>> +  llvm::OwningPtr<llvm::**MemoryBuffer> buff;
>>>> +  if (llvm::MemoryBuffer::**getFileOrSTDIN(tmpNativeFile.**str(),
>>>> buff))
>>>> +    return;
>>>> +
>>>> +  std::unique_ptr<MemoryBuffer> mb(buff.take());
>>>> +  _context.getNativeReader().**parseFile(mb, _nativeFile);
>>>> +
>>>> +  mergedFile.reset(new FileToMutable(_context, *_nativeFile[0].get()));
>>>> +
>>>> +  llvm::sys::fs::remove(**tmpNativeFile.str());
>>>> +}
>>>>
>>>> Added: lld/trunk/lib/Passes/**RoundTripYAMLPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> RoundTripYAMLPass.cpp?rev=**193585&view=auto<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/RoundTripYAMLPass.cpp?rev=193585&view=auto>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/**RoundTripYAMLPass.cpp (added)
>>>> +++ lld/trunk/lib/Passes/**RoundTripYAMLPass.cpp Tue Oct 29 00:12:14
>>>> 2013
>>>> @@ -0,0 +1,43 @@
>>>> +//===--Passes/**RoundTripYAMLPass.cpp - Write YAML file/Read it
>>>> back---------===//
>>>> +//
>>>> +//                             The LLVM Linker
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open Source
>>>> +// License. See LICENSE.TXT for details.
>>>> +//
>>>>
>>>> +//===------------------------**------------------------------**
>>>> ----------------===//
>>>> +#define DEBUG_TYPE "RoundTripYAMLPass"
>>>> +
>>>> +#include "lld/Core/Instrumentation.h"
>>>> +#include "lld/Passes/RoundTripYAMLPass.**h"
>>>> +#include "lld/ReaderWriter/Simple.h"
>>>> +#include "lld/ReaderWriter/Writer.h"
>>>> +
>>>> +#include "llvm/Support/Path.h"
>>>> +
>>>> +using namespace lld;
>>>> +
>>>> +/// Perform the actual pass
>>>> +void RoundTripYAMLPass::perform(**std::unique_ptr<MutableFile>
>>>> &mergedFile)
>>>> {
>>>> +  ScopedTask task(getDefaultDomain(), "RoundTripYAMLPass");
>>>> +  std::unique_ptr<Writer> yamlWriter = createWriterYAML(_context);
>>>> +  SmallString<128> tmpYAMLFile;
>>>> +  // Separate the directory from the filename
>>>> +  StringRef outFile = llvm::sys::path::filename(_**
>>>> context.outputPath());
>>>> +  if (llvm::sys::fs::**createTemporaryFile(outFile, "yaml",
>>>> tmpYAMLFile))
>>>> +    return;
>>>> +
>>>> +  // The file that is written would be kept around if there is a problem
>>>> +  // writing to the file or when reading atoms back from the file.
>>>> +  yamlWriter->writeFile(***mergedFile, tmpYAMLFile.str());
>>>> +  llvm::OwningPtr<llvm::**MemoryBuffer> buff;
>>>> +  if (llvm::MemoryBuffer::**getFileOrSTDIN(tmpYAMLFile.**str(), buff))
>>>> +    return;
>>>> +
>>>> +  std::unique_ptr<MemoryBuffer> mb(buff.take());
>>>> +  _context.getYAMLReader().**parseFile(mb, _yamlFile);
>>>> +
>>>> +  mergedFile.reset(new FileToMutable(_context, *_yamlFile[0].get()));
>>>> +
>>>> +  llvm::sys::fs::remove(**tmpYAMLFile.str());
>>>> +}
>>>>
>>>> Modified: lld/trunk/lib/Passes/**StubsPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/Passes/**
>>>> StubsPass.cpp?rev=193585&r1=**193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/StubsPass.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/Passes/**StubsPass.cpp (original)
>>>> +++ lld/trunk/lib/Passes/**StubsPass.cpp Tue Oct 29 00:12:14 2013
>>>> @@ -23,13 +23,13 @@
>>>>
>>>>    namespace lld {
>>>>
>>>> -void StubsPass::perform(MutableFile &mergedFile) {
>>>> +void StubsPass::perform(std::**unique_ptr<MutableFile> &mergedFile) {
>>>>      // Skip this pass if output format uses text relocations instead of
>>>> stubs.
>>>>      if ( ! this->noTextRelocs() )
>>>>        return;
>>>>
>>>>      // Scan all references in all atoms.
>>>> -  for(const DefinedAtom *atom : mergedFile.defined()) {
>>>> +  for (const DefinedAtom *atom : mergedFile->defined()) {
>>>>        for (const Reference *ref : *atom) {
>>>>          // Look at call-sites.
>>>>          if (this->isCallSite(ref->kind()) ) {
>>>> @@ -61,6 +61,6 @@ void StubsPass::perform(MutableFile &mer
>>>>      }
>>>>
>>>>      // Add all created stubs and support Atoms.
>>>> - this->addStubAtoms(mergedFile)**;
>>>> +  this->addStubAtoms(***mergedFile);
>>>>    }
>>>>    }
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**CoreLinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**ReaderWriter/**
>>>> CoreLinkingContext.cpp?rev=**193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/CoreLinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**CoreLinkingContext.cpp (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**CoreLinkingContext.cpp Tue Oct 29
>>>> 00:12:14
>>>> 2013
>>>> @@ -12,6 +12,9 @@
>>>>    #include "lld/Core/Pass.h"
>>>>    #include "lld/Core/PassManager.h"
>>>>    #include "lld/Passes/LayoutPass.h"
>>>> +#include "lld/Passes/**RoundTripNativePass.h"
>>>> +#include "lld/Passes/RoundTripYAMLPass.**h"
>>>> +#include "lld/ReaderWriter/Simple.h"
>>>>
>>>>    #include "llvm/ADT/ArrayRef.h"
>>>>
>>>> @@ -149,10 +152,10 @@ private:
>>>>      uint32_t _ordinal;
>>>>    };
>>>>
>>>> -class TestingPassFile : public MutableFile {
>>>> +class TestingPassFile : public SimpleFile {
>>>>    public:
>>>>      TestingPassFile(const LinkingContext &ctx)
>>>> -      : MutableFile(ctx, "Testing pass") {}
>>>> +      : SimpleFile(ctx, "Testing pass") {}
>>>>
>>>>      virtual void addAtom(const Atom &atom) {
>>>>        if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(&atom))
>>>> @@ -277,7 +280,7 @@ bool CoreLinkingContext::**validateImpl(ra
>>>>      return true;
>>>>    }
>>>>
>>>> -void CoreLinkingContext::addPasses(**PassManager &pm) const {
>>>> +void CoreLinkingContext::addPasses(**PassManager &pm) {
>>>>      for (StringRef name : _passNames) {
>>>>        if (name.equals("layout"))
>>>>          pm.add(std::unique_ptr<Pass>((**new LayoutPass())));
>>>> @@ -288,6 +291,10 @@ void CoreLinkingContext::addPasses(**PassM
>>>>        else
>>>>          llvm_unreachable("bad pass name");
>>>>      }
>>>> +#ifndef NDEBUG
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripYAMLPass(*this)));
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripNativePass(*this)));
>>>> +#endif
>>>>    }
>>>>
>>>>    Writer &CoreLinkingContext::writer() const { return *_writer; }
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**ReaderWriter/ELF/*
>>>> *ArrayOrderPass.cpp?rev=193585&**r1=193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.cpp (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.cpp Tue Oct 29
>>>> 00:12:14
>>>> 2013
>>>> @@ -13,8 +13,8 @@
>>>>
>>>>    namespace lld {
>>>>    namespace elf {
>>>> -void ArrayOrderPass::perform(**MutableFile &f) {
>>>> -  auto definedAtoms = f.definedAtoms();
>>>> +void ArrayOrderPass::perform(std::**unique_ptr<MutableFile> &f) {
>>>> +  auto definedAtoms = f->definedAtoms();
>>>>      std::stable_sort(definedAtoms.**begin(), definedAtoms.end(),
>>>>                       [](const DefinedAtom *left, const DefinedAtom
>>>> *right) {
>>>>        if (left->sectionChoice() != DefinedAtom::**sectionCustomRequired
>>>> ||
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**ReaderWriter/ELF/*
>>>> *ArrayOrderPass.h?rev=193585&**r1=193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.h (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/ArrayOrderPass.h Tue Oct 29
>>>> 00:12:14
>>>> 2013
>>>> @@ -18,7 +18,7 @@ namespace elf {
>>>>    class ArrayOrderPass : public Pass {
>>>>    public:
>>>>      ArrayOrderPass() : Pass() {}
>>>> -  virtual void perform(MutableFile &mergedFile) LLVM_OVERRIDE;
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile)
>>>> LLVM_OVERRIDE;
>>>>    };
>>>>    }
>>>>    }
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/ELFLinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**ReaderWriter/ELF/*
>>>> *ELFLinkingContext.cpp?rev=**193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/ELFLinkingContext.cpp (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/ELFLinkingContext.cpp Tue Oct 29
>>>> 00:12:14 2013
>>>> @@ -16,6 +16,8 @@
>>>>
>>>>    #include "lld/Core/Instrumentation.h"
>>>>    #include "lld/Passes/LayoutPass.h"
>>>> +#include "lld/Passes/**RoundTripNativePass.h"
>>>> +#include "lld/Passes/RoundTripYAMLPass.**h"
>>>>    #include "lld/ReaderWriter/**ReaderLinkerScript.h"
>>>>
>>>>    #include "llvm/ADT/Triple.h"
>>>> @@ -52,10 +54,14 @@ bool ELFLinkingContext::**isLittleEndian()
>>>>      return true;
>>>>    }
>>>>
>>>> -void ELFLinkingContext::addPasses(**PassManager &pm) const {
>>>> +void ELFLinkingContext::addPasses(**PassManager &pm) {
>>>>      if (_runLayoutPass)
>>>>        pm.add(std::unique_ptr<Pass>(**new LayoutPass()));
>>>>      pm.add(std::unique_ptr<Pass>(**new elf::ArrayOrderPass()));
>>>> +#ifndef NDEBUG
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripYAMLPass(*this)));
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripNativePass(*this)));
>>>> +#endif
>>>>    }
>>>>
>>>>    uint16_t ELFLinkingContext::**getOutputMachine() const {
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**
>>>> HexagonLinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/Hexagon/**HexagonLinkingContext.h?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonLinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonLinkingContext.h
>>>> Tue Oct
>>>> 29 00:12:14 2013
>>>> @@ -29,7 +29,7 @@ public:
>>>>      virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str)
>>>> const;
>>>>      virtual ErrorOr<std::string> stringFromRelocKind(Reference:**:Kind
>>>> kind)
>>>> const;
>>>>
>>>> -  virtual void addPasses(PassManager &) const;
>>>> +  virtual void addPasses(PassManager &);
>>>>
>>>>      virtual bool isDynamicRelocation(const DefinedAtom &,
>>>>                                       const Reference &r) const {
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**
>>>> HexagonTargetHandler.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/Hexagon/**HexagonTargetHandler.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonTargetHandler.cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/Hexagon/**HexagonTargetHandler.cpp
>>>> Tue
>>>> Oct 29 00:12:14 2013
>>>> @@ -157,9 +157,9 @@ public:
>>>>      ///
>>>>      /// After all references are handled, the atoms created during that
>>>> are
>>>> all
>>>>      /// added to mf.
>>>> -  virtual void perform(MutableFile &mf) {
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mf) {
>>>>        // Process all references.
>>>> -    for (const auto &atom : mf.defined())
>>>> +    for (const auto &atom : mf->defined())
>>>>          for (const auto &ref : *atom)
>>>>            handleReference(*atom, *ref);
>>>>
>>>> @@ -167,23 +167,23 @@ public:
>>>>        uint64_t ordinal = 0;
>>>>        if (_PLT0) {
>>>>          _PLT0->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_PLT0);
>>>> +      mf->addAtom(*_PLT0);
>>>>        }
>>>>        for (auto &plt : _pltVector) {
>>>>          plt->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*plt);
>>>> +      mf->addAtom(*plt);
>>>>        }
>>>>        if (_null) {
>>>>          _null->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_null);
>>>> +      mf->addAtom(*_null);
>>>>        }
>>>>        if (_got0) {
>>>>          _got0->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_got0);
>>>> +      mf->addAtom(*_got0);
>>>>        }
>>>>        for (auto &got : _gotVector) {
>>>>          got->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*got);
>>>> +      mf->addAtom(*got);
>>>>        }
>>>>      }
>>>>
>>>> @@ -293,7 +293,7 @@ public:
>>>>    };
>>>>    } // end anonymous namespace
>>>>
>>>> -void elf::HexagonLinkingContext::**addPasses(PassManager &pm) const {
>>>> +void elf::HexagonLinkingContext::**addPasses(PassManager &pm) {
>>>>      if (isDynamic())
>>>>        pm.add(std::unique_ptr<Pass>(**new DynamicGOTPLTPass(*this)));
>>>>      ELFLinkingContext::addPasses(**pm);
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/PPC/PPCLinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/PPC/**PPCLinkingContext.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/PPC/PPCLinkingContext.cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/PPC/PPCLinkingContext.cpp Tue Oct
>>>> 29
>>>> 00:12:14 2013
>>>> @@ -21,7 +21,7 @@ using namespace lld;
>>>>    ErrorOr<Reference::Kind>
>>>>    elf::PPCLinkingContext::**relocKindFromString(StringRef str) const {
>>>>      int32_t ret = llvm::StringSwitch<int32_t>(**str)
>>>> LLD_CASE(R_PPC_NONE)
>>>> -      LLD_CASE(R_PPC_ADDR32).**Default(-1);
>>>> +                LLD_CASE(R_PPC_ADDR32) LLD_CASE(R_PPC_REL24).Default(**
>>>> -1);
>>>>
>>>>      if (ret == -1)
>>>>        return make_error_code(**YamlReaderError::illegal_**value);
>>>> @@ -39,6 +39,7 @@ elf::PPCLinkingContext::**stringFromRelocK
>>>>      switch (kind) {
>>>>        LLD_CASE(R_PPC_NONE)
>>>>        LLD_CASE(R_PPC_ADDR32)
>>>> +    LLD_CASE(R_PPC_REL24)
>>>>      }
>>>>
>>>>      return make_error_code(**YamlReaderError::illegal_**value);
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**
>>>> 64LinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/X86_64/X86_**64LinkingContext.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.cpp
>>>> Tue Oct
>>>> 29 00:12:14 2013
>>>> @@ -90,8 +90,7 @@ private:
>>>>
>>>>    } // end anon namespace
>>>>
>>>> -
>>>> -void elf::X86_64LinkingContext::**addPasses(PassManager &pm) const {
>>>> +void elf::X86_64LinkingContext::**addPasses(PassManager &pm) {
>>>>      auto pass = createX86_64RelocationPass(***this);
>>>>      if (pass)
>>>>        pm.add(std::move(pass));
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**
>>>> 64LinkingContext.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/X86_64/X86_**64LinkingContext.h?rev=193585&**
>>>> r1=193584&r2=193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.h
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64LinkingContext.h
>>>> Tue Oct
>>>> 29 00:12:14 2013
>>>> @@ -33,7 +33,7 @@ public:
>>>>          : ELFLinkingContext(triple, std::unique_ptr<**
>>>> TargetHandlerBase>(
>>>>                                          new X86_64TargetHandler(*this)))
>>>> {}
>>>>
>>>> -  virtual void addPasses(PassManager &) const;
>>>> +  virtual void addPasses(PassManager &);
>>>>
>>>>      virtual uint64_t getBaseAddress() const {
>>>>        if (_baseAddress == 0)
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**
>>>> 64RelocationPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/ELF/X86_64/X86_**64RelocationPass.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64RelocationPass.cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**ELF/X86_64/X86_**64RelocationPass.cpp
>>>> Tue Oct
>>>> 29 00:12:14 2013
>>>> @@ -217,10 +217,10 @@ public:
>>>>      ///
>>>>      /// After all references are handled, the atoms created during that
>>>> are
>>>> all
>>>>      /// added to mf.
>>>> -  virtual void perform(MutableFile &mf) {
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mf) {
>>>>        ScopedTask task(getDefaultDomain(), "X86-64 GOT/PLT Pass");
>>>>        // Process all references.
>>>> -    for (const auto &atom : mf.defined())
>>>> +    for (const auto &atom : mf->defined())
>>>>          for (const auto &ref : *atom)
>>>>            handleReference(*atom, *ref);
>>>>
>>>> @@ -228,29 +228,29 @@ public:
>>>>        uint64_t ordinal = 0;
>>>>        if (_PLT0) {
>>>>          _PLT0->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_PLT0);
>>>> +      mf->addAtom(*_PLT0);
>>>>        }
>>>>        for (auto &plt : _pltVector) {
>>>>          plt->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*plt);
>>>> +      mf->addAtom(*plt);
>>>>        }
>>>>        if (_null) {
>>>>          _null->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_null);
>>>> +      mf->addAtom(*_null);
>>>>        }
>>>>        if (_PLT0) {
>>>>          _got0->setOrdinal(ordinal++);
>>>>          _got1->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*_got0);
>>>> -      mf.addAtom(*_got1);
>>>> +      mf->addAtom(*_got0);
>>>> +      mf->addAtom(*_got1);
>>>>        }
>>>>        for (auto &got : _gotVector) {
>>>>          got->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*got);
>>>> +      mf->addAtom(*got);
>>>>        }
>>>>        for (auto obj : _objectVector) {
>>>>          obj->setOrdinal(ordinal++);
>>>> -      mf.addAtom(*obj);
>>>> +      mf->addAtom(*obj);
>>>>        }
>>>>      }
>>>>
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**MachO/MachOLinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/MachO/**MachOLinkingContext.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**MachO/MachOLinkingContext.cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**MachO/MachOLinkingContext.cpp Tue Oct
>>>> 29
>>>> 00:12:14 2013
>>>> @@ -16,6 +16,8 @@
>>>>    #include "lld/ReaderWriter/Reader.h"
>>>>    #include "lld/ReaderWriter/Writer.h"
>>>>    #include "lld/Passes/LayoutPass.h"
>>>> +#include "lld/Passes/**RoundTripNativePass.h"
>>>> +#include "lld/Passes/RoundTripYAMLPass.**h"
>>>>
>>>>    #include "llvm/ADT/StringExtras.h"
>>>>    #include "llvm/ADT/Triple.h"
>>>> @@ -235,10 +237,14 @@ bool MachOLinkingContext::setOS(OS os, S
>>>>      return parsePackedVersion(**minOSVersion, _osMinVersion);
>>>>    }
>>>>
>>>> -void MachOLinkingContext::**addPasses(PassManager &pm) const {
>>>> +void MachOLinkingContext::**addPasses(PassManager &pm) {
>>>>      pm.add(std::unique_ptr<Pass>(**new mach_o::GOTPass));
>>>>      pm.add(std::unique_ptr<Pass>(**new mach_o::StubsPass(*this)));
>>>>      pm.add(std::unique_ptr<Pass>(**new LayoutPass()));
>>>> +#ifndef NDEBUG
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripYAMLPass(*this)));
>>>> +  pm.add(std::unique_ptr<Pass>(**new RoundTripNativePass(*this)));
>>>> +#endif
>>>>    }
>>>>
>>>>    Writer &MachOLinkingContext::writer() const {
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**PECOFF/GroupedSectionsPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/PECOFF/**GroupedSectionsPass.h?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**PECOFF/GroupedSectionsPass.h (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**PECOFF/GroupedSectionsPass.h Tue Oct 29
>>>> 00:12:14 2013
>>>> @@ -60,9 +60,9 @@ class GroupedSectionsPass : public lld::
>>>>    public:
>>>>      GroupedSectionsPass() {}
>>>>
>>>> -  virtual void perform(MutableFile &mergedFile) {
>>>> -    std::map<StringRef, std::vector<COFFDefinedAtom *>>
>>>> sectionToHeadAtoms(
>>>> -        filterHeadAtoms(mergedFile));
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &mergedFile) {
>>>> +    std::map<StringRef, std::vector<COFFDefinedAtom *> >
>>>> sectionToHeadAtoms(
>>>> +        filterHeadAtoms(*mergedFile));
>>>>        std::vector<std::vector<**COFFDefinedAtom *>> groupedAtomsList(
>>>>            groupBySectionName(**sectionToHeadAtoms));
>>>>        for (auto &groupedAtoms : groupedAtomsList)
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**PECOFF/IdataPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/PECOFF/IdataPass.**h?rev=193585&r1=193584&r2=**
>>>> 193585&view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**PECOFF/IdataPass.h (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**PECOFF/IdataPass.h Tue Oct 29 00:12:14
>>>> 2013
>>>> @@ -252,13 +252,13 @@ class IdataPass : public lld::Pass {
>>>>    public:
>>>>      IdataPass(const LinkingContext &ctx) : _dummyFile(ctx) {}
>>>>
>>>> -  virtual void perform(MutableFile &file) {
>>>> -    if (file.sharedLibrary().size() == 0)
>>>> +  virtual void perform(std::unique_ptr<**MutableFile> &file) {
>>>> +    if (file->sharedLibrary().size() == 0)
>>>>          return;
>>>>
>>>> -    Context context(file, _dummyFile);
>>>> +    Context context(*file, _dummyFile);
>>>>        map<StringRef, vector<COFFSharedLibraryAtom *> > sharedAtoms =
>>>> -        groupByLoadName(file);
>>>> +        groupByLoadName(*file);
>>>>        for (auto i : sharedAtoms) {
>>>>          StringRef loadName = i.first;
>>>>          vector<COFFSharedLibraryAtom *> &atoms = i.second;
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/**PECOFF/PECOFFLinkingContext.**cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**
>>>> ReaderWriter/PECOFF/**PECOFFLinkingContext.cpp?rev=**
>>>> 193585&r1=193584&r2=193585&**view=diff<http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp?rev=193585&r1=193584&r2=193585&view=diff>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/lib/ReaderWriter/**PECOFF/PECOFFLinkingContext.**cpp
>>>> (original)
>>>> +++ lld/trunk/lib/ReaderWriter/**PECOFF/PECOFFLinkingContext.**cpp Tue
>>>> Oct 29
>>>> 00:12:14 2013
>>>> @@ -204,7 +204,7 @@ PECOFFLinkingContext::**stringFromRelocKin
>>>>      return make_error_code(**YamlReaderError::illegal_**value);
>>>>    }
>>>>
>>>> -void PECOFFLinkingContext::**addPasses(PassManager &pm) const {
>>>> +void PECOFFLinkingContext::**addPasses(PassManager &pm) {
>>>>      pm.add(std::unique_ptr<Pass>(**new pecoff::GroupedSectionsPass())**
>>>> );
>>>>      pm.add(std::unique_ptr<Pass>(**new pecoff::IdataPass(*this)));
>>>>      pm.add(std::unique_ptr<Pass>(**new LayoutPass()));
>>>>
>>>> Added: lld/trunk/test/elf/roundtrip.**test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-**project/lld/trunk/test/elf/**
>>>> roundtrip.test?rev=193585&**view=auto<http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/roundtrip.test?rev=193585&view=auto>
>>>>
>>>> ==============================**==============================**
>>>> ==================
>>>> --- lld/trunk/test/elf/roundtrip.**test (added)
>>>> +++ lld/trunk/test/elf/roundtrip.**test Tue Oct 29 00:12:14 2013
>>>> @@ -0,0 +1,9 @@
>>>> +# This tests the functionality of the RoundTrip Passes and verifies
>>>> +# that the atoms belong to the native file after the passes finish
>>>> +
>>>> +RUN: lld -flavor gnu -target x86_64 %p/Inputs/foo.o.x86-64
>>>> --noinhibit-exec  \
>>>> +RUN: --output-filetype=yaml -o %t1
>>>> +RUN: FileCheck %s < %t1
>>>> +
>>>> +CHECK:path:{{.*}}.native
>>>> +
>>>>
>>>>
>>>> ______________________________**_________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>>>>
>>>>
>> --
>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
>> by the Linux Foundation
>>
>>


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation




More information about the llvm-commits mailing list