<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>