1f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===- LinkerScript.h -----------------------------------------------------===//
222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//                     The MCLinker Project
422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source
622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details.
722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_LINKERSCRIPT_H
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_LINKERSCRIPT_H
1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string>
1287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <vector>
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/ADT/StringRef.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/ADT/StringEntry.h>
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/ADT/StringHash.h>
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/ADT/HashTable.h>
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Object/SectionMap.h>
18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <mcld/MC/SearchDirs.h>
1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/Script/Assignment.h>
2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/Script/AssertCmd.h>
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass LDSymbol;
2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
26f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines/** \class LinkerScript
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */
29f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass LinkerScript
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef HashTable<StringEntry<llvm::StringRef>,
3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                    hash::StringHash<hash::DJB>,
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                    StringEntryFactory<llvm::StringRef> > SymbolRenameMap;
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef HashTable<StringEntry<uint64_t>,
3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                    hash::StringHash<hash::DJB>,
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                    StringEntryFactory<uint64_t> > AddressMap;
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  typedef std::vector<std::pair<LDSymbol*, Assignment> > Assignments;
4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  typedef std::vector<AssertCmd> Assertions;
43f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
45f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  LinkerScript();
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  ~LinkerScript();
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const SymbolRenameMap& renameMap() const { return m_SymbolRenames; }
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymbolRenameMap&       renameMap()       { return m_SymbolRenames; }
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const AddressMap& addressMap() const { return m_AddressMap; }
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  AddressMap&       addressMap()       { return m_AddressMap; }
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const SectionMap& sectionMap() const { return m_SectionMap; }
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionMap&       sectionMap()       { return m_SectionMap; }
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const Assignments& assignments() const { return m_Assignments; }
5987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Assignments&       assignments()       { return m_Assignments; }
6087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
6187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const Assertions& assertions() const { return m_Assertions; }
6287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Assertions&       assertions()       { return m_Assertions; }
63f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
64f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  /// search directory
65f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  const SearchDirs& directories() const { return m_SearchDirs; }
66f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  SearchDirs&       directories()       { return m_SearchDirs; }
67f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
68f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  /// sysroot
69f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  const sys::fs::Path& sysroot() const;
70f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
71f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  void setSysroot(const sys::fs::Path &pPath);
72f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
73f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  bool hasSysroot() const;
74f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
7587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  /// entry point
7687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const std::string& entry() const;
7787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
7887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void setEntry(const std::string& pEntry);
7987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
8087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  bool hasEntry() const;
8187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
8287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  /// output filename
8387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const std::string& outputFile() const;
8487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
8587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void setOutputFile(const std::string& pOutputFile);
8687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
8787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  bool hasOutputFile() const;
8887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate:
9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymbolRenameMap m_SymbolRenames;
9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  AddressMap m_AddressMap;
9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionMap m_SectionMap;
9387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Assignments m_Assignments;
9487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Assertions m_Assertions;
95f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  SearchDirs m_SearchDirs;
9687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  std::string m_Entry;
9787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  std::string m_OutputFile;
9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao};
9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of mcld
10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
10222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
104