<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Ping ?<br>
<br>
On 10/17/2013 11:01 PM, Shankar Kalpathi Easwaran wrote:<br>
</div>
<blockquote
cite="mid:differential-rev-PHID-DREV-bsm4k7qxx734mywwjhri-req@llvm-reviews.chandlerc.com"
type="cite">
<pre wrap="">Hi kledzik, Bigcheese, rui314,
This changes interface to the PassManager to take File instead of MutableFile.
This is needed to make the ReaderWriterPasses merged into the current design.
<a class="moz-txt-link-freetext" href="http://llvm-reviews.chandlerc.com/D1967">http://llvm-reviews.chandlerc.com/D1967</a>
Files:
include/lld/Core/File.h
include/lld/Core/Pass.h
include/lld/Core/PassManager.h
include/lld/Passes/LayoutPass.h
lib/Core/PassManager.cpp
lib/Passes/GOTPass.cpp
lib/Passes/LayoutPass.cpp
lib/Passes/StubsPass.cpp
lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
lib/ReaderWriter/PECOFF/GroupedSectionsPass.h
lib/ReaderWriter/PECOFF/IdataPass.h
Index: include/lld/Core/File.h
===================================================================
--- include/lld/Core/File.h
+++ include/lld/Core/File.h
@@ -238,6 +238,8 @@
virtual const LinkingContext &getLinkingContext() const { return _context; }
+ static bool classof(const File *) { return true; }
+
protected:
/// \brief only subclasses of MutableFile can be instantiated
MutableFile(const LinkingContext &ctx, StringRef p)
Index: include/lld/Core/Pass.h
===================================================================
--- include/lld/Core/Pass.h
+++ include/lld/Core/Pass.h
@@ -36,7 +36,7 @@
virtual ~Pass() { }
/// Do the actual work of the Pass.
- virtual void perform(MutableFile &mergedFile) = 0;
+ virtual void perform(File &mergedFile) = 0;
protected:
// Only subclassess can be instantiated.
@@ -53,7 +53,7 @@
/// 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(File &mergedFile);
/// If true, the pass should use stubs for references
/// to shared library symbols. If false, the pass
@@ -87,7 +87,7 @@
/// 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(File &mergedFile);
/// If true, the pass will use GOT entries for references
/// to shared library symbols. If false, the pass
Index: include/lld/Core/PassManager.h
===================================================================
--- include/lld/Core/PassManager.h
+++ include/lld/Core/PassManager.h
@@ -32,7 +32,7 @@
_passes.push_back(std::move(pass));
}
- ErrorOr<void> runOnFile(MutableFile &);
+ ErrorOr<void> runOnFile(File &);
private:
/// \brief Passes in the order they should run.
Index: include/lld/Passes/LayoutPass.h
===================================================================
--- include/lld/Passes/LayoutPass.h
+++ include/lld/Passes/LayoutPass.h
@@ -48,7 +48,7 @@
LayoutPass() : Pass(), _compareAtoms(*this) {}
/// Sorts atoms in mergedFile by content type then by command line order.
- virtual void perform(MutableFile &mergedFile);
+ virtual void perform(File &mergedFile);
virtual ~LayoutPass() {}
Index: lib/Core/PassManager.cpp
===================================================================
--- lib/Core/PassManager.cpp
+++ lib/Core/PassManager.cpp
@@ -15,7 +15,7 @@
#include "llvm/Support/ErrorOr.h"
namespace lld {
-ErrorOr<void> PassManager::runOnFile(MutableFile &mf) {
+ErrorOr<void> PassManager::runOnFile(File &mf) {
for (auto &pass : _passes) {
pass->perform(mf);
}
Index: lib/Passes/GOTPass.cpp
===================================================================
--- lib/Passes/GOTPass.cpp
+++ lib/Passes/GOTPass.cpp
@@ -67,7 +67,7 @@
}
} // end anonymous namespace
-void GOTPass::perform(MutableFile &mergedFile) {
+void GOTPass::perform(File &mergedFile) {
// Use map so all pointers to same symbol use same GOT entry.
llvm::DenseMap<const Atom*, const DefinedAtom*> targetToGOT;
@@ -100,9 +100,10 @@
}
}
+ MutableFile &mf = *dyn_cast<MutableFile>(&mergedFile);
// add all created GOT Atoms to master file
for (auto &it : targetToGOT) {
- mergedFile.addAtom(*it.second);
+ mf.addAtom(*it.second);
}
}
}
Index: lib/Passes/LayoutPass.cpp
===================================================================
--- lib/Passes/LayoutPass.cpp
+++ lib/Passes/LayoutPass.cpp
@@ -521,8 +521,11 @@
#endif // #ifndef NDEBUG
/// Perform the actual pass
-void LayoutPass::perform(MutableFile &mergedFile) {
+void LayoutPass::perform(File &mf) {
ScopedTask task(getDefaultDomain(), "LayoutPass");
+
+ MutableFile &mergedFile = *dyn_cast<MutableFile>(&mf);
+
MutableFile::DefinedAtomRange atomRange = mergedFile.definedAtoms();
// Build follow on tables
Index: lib/Passes/StubsPass.cpp
===================================================================
--- lib/Passes/StubsPass.cpp
+++ lib/Passes/StubsPass.cpp
@@ -23,7 +23,9 @@
namespace lld {
-void StubsPass::perform(MutableFile &mergedFile) {
+void StubsPass::perform(File &mf) {
+
+ MutableFile &mergedFile = *dyn_cast<MutableFile>(&mf);
// Skip this pass if output format uses text relocations instead of stubs.
if ( ! this->noTextRelocs() )
return;
Index: lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
===================================================================
--- lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
+++ lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
@@ -157,7 +157,8 @@
///
/// After all references are handled, the atoms created during that are all
/// added to mf.
- virtual void perform(MutableFile &mf) {
+ virtual void perform(File &mergedFile) {
+ MutableFile &mf = *dyn_cast<MutableFile>(&mergedFile);
// Process all references.
for (const auto &atom : mf.defined())
for (const auto &ref : *atom)
Index: lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
===================================================================
--- lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
+++ lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
@@ -219,8 +219,9 @@
///
/// After all references are handled, the atoms created during that are all
/// added to mf.
- virtual void perform(MutableFile &mf) {
+ virtual void perform(File &mergedFile) {
ScopedTask task(getDefaultDomain(), "X86-64 GOT/PLT Pass");
+ MutableFile &mf = *dyn_cast<MutableFile>(&mergedFile);
// Process all references.
for (const auto &atom : mf.defined())
for (const auto &ref : *atom)
Index: lib/ReaderWriter/PECOFF/GroupedSectionsPass.h
===================================================================
--- lib/ReaderWriter/PECOFF/GroupedSectionsPass.h
+++ lib/ReaderWriter/PECOFF/GroupedSectionsPass.h
@@ -60,7 +60,8 @@
public:
GroupedSectionsPass() {}
- virtual void perform(MutableFile &mergedFile) {
+ virtual void perform(File &mf) {
+ MutableFile &mergedFile = *dyn_cast<MutableFile>(&mf);
std::map<StringRef, std::vector<COFFDefinedAtom *>> sectionToHeadAtoms(
filterHeadAtoms(mergedFile));
std::vector<std::vector<COFFDefinedAtom *>> groupedAtomsList(
Index: lib/ReaderWriter/PECOFF/IdataPass.h
===================================================================
--- lib/ReaderWriter/PECOFF/IdataPass.h
+++ lib/ReaderWriter/PECOFF/IdataPass.h
@@ -252,7 +252,8 @@
public:
IdataPass(const LinkingContext &ctx) : _dummyFile(ctx) {}
- virtual void perform(MutableFile &file) {
+ virtual void perform(File &mf) {
+ MutableFile &file = *dyn_cast<MutableFile>(&mf);
if (file.sharedLibrary().size() == 0)
return;
</pre>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
llvm-commits mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation</pre>
</body>
</html>