Home | History | Annotate | Download | only in mcld
      1 //===- LinkerScript.h -----------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_LINKERSCRIPT_H
     10 #define MCLD_LINKERSCRIPT_H
     11 #include <string>
     12 #include <vector>
     13 #include <llvm/ADT/StringRef.h>
     14 #include <mcld/ADT/StringEntry.h>
     15 #include <mcld/ADT/StringHash.h>
     16 #include <mcld/ADT/HashTable.h>
     17 #include <mcld/Object/SectionMap.h>
     18 #include <mcld/MC/SearchDirs.h>
     19 #include <mcld/Script/Assignment.h>
     20 #include <mcld/Script/AssertCmd.h>
     21 
     22 namespace mcld {
     23 
     24 class LDSymbol;
     25 
     26 /** \class LinkerScript
     27  *
     28  */
     29 class LinkerScript
     30 {
     31 public:
     32   typedef HashTable<StringEntry<llvm::StringRef>,
     33                     hash::StringHash<hash::DJB>,
     34                     StringEntryFactory<llvm::StringRef> > SymbolRenameMap;
     35 
     36   typedef HashTable<StringEntry<uint64_t>,
     37                     hash::StringHash<hash::DJB>,
     38                     StringEntryFactory<uint64_t> > AddressMap;
     39 
     40   typedef std::vector<std::pair<LDSymbol*, Assignment> > Assignments;
     41 
     42   typedef std::vector<AssertCmd> Assertions;
     43 
     44 public:
     45   LinkerScript();
     46 
     47   ~LinkerScript();
     48 
     49   const SymbolRenameMap& renameMap() const { return m_SymbolRenames; }
     50   SymbolRenameMap&       renameMap()       { return m_SymbolRenames; }
     51 
     52   const AddressMap& addressMap() const { return m_AddressMap; }
     53   AddressMap&       addressMap()       { return m_AddressMap; }
     54 
     55   const SectionMap& sectionMap() const { return m_SectionMap; }
     56   SectionMap&       sectionMap()       { return m_SectionMap; }
     57 
     58   const Assignments& assignments() const { return m_Assignments; }
     59   Assignments&       assignments()       { return m_Assignments; }
     60 
     61   const Assertions& assertions() const { return m_Assertions; }
     62   Assertions&       assertions()       { return m_Assertions; }
     63 
     64   /// search directory
     65   const SearchDirs& directories() const { return m_SearchDirs; }
     66   SearchDirs&       directories()       { return m_SearchDirs; }
     67 
     68   /// sysroot
     69   const sys::fs::Path& sysroot() const;
     70 
     71   void setSysroot(const sys::fs::Path &pPath);
     72 
     73   bool hasSysroot() const;
     74 
     75   /// entry point
     76   const std::string& entry() const;
     77 
     78   void setEntry(const std::string& pEntry);
     79 
     80   bool hasEntry() const;
     81 
     82   /// output filename
     83   const std::string& outputFile() const;
     84 
     85   void setOutputFile(const std::string& pOutputFile);
     86 
     87   bool hasOutputFile() const;
     88 
     89 private:
     90   SymbolRenameMap m_SymbolRenames;
     91   AddressMap m_AddressMap;
     92   SectionMap m_SectionMap;
     93   Assignments m_Assignments;
     94   Assertions m_Assertions;
     95   SearchDirs m_SearchDirs;
     96   std::string m_Entry;
     97   std::string m_OutputFile;
     98 };
     99 
    100 } // namespace of mcld
    101 
    102 #endif
    103 
    104