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