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