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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_LINKERSCRIPT_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_LINKERSCRIPT_H_ 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/HashTable.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/StringEntry.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/ADT/StringHash.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/SearchDirs.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Object/SectionMap.h" 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/AssertCmd.h" 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Assignment.h" 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <llvm/ADT/StringRef.h> 212bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar#include <llvm/ADT/SmallVector.h> 2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string> 2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <vector> 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass LDSymbol; 2987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 30f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines/** \class LinkerScript 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */ 3337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass LinkerScript { 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao typedef HashTable<StringEntry<llvm::StringRef>, 3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines hash::StringHash<hash::DJB>, 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao StringEntryFactory<llvm::StringRef> > SymbolRenameMap; 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao typedef HashTable<StringEntry<uint64_t>, 4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines hash::StringHash<hash::DJB>, 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao StringEntryFactory<uint64_t> > AddressMap; 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef std::vector<std::pair<LDSymbol*, Assignment> > Assignments; 4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef std::vector<AssertCmd> Assertions; 46f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 472bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar typedef llvm::SmallVector<std::string, 8> DefSyms; 482bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 50f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines LinkerScript(); 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 52f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines ~LinkerScript(); 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const SymbolRenameMap& renameMap() const { return m_SymbolRenames; } 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines SymbolRenameMap& renameMap() { return m_SymbolRenames; } 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const AddressMap& addressMap() const { return m_AddressMap; } 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines AddressMap& addressMap() { return m_AddressMap; } 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const SectionMap& sectionMap() const { return m_SectionMap; } 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines SectionMap& sectionMap() { return m_SectionMap; } 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const Assignments& assignments() const { return m_Assignments; } 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Assignments& assignments() { return m_Assignments; } 6587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 6687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const Assertions& assertions() const { return m_Assertions; } 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Assertions& assertions() { return m_Assertions; } 68f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 692bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar const DefSyms& defsyms() const { return m_DefSyms; } 702bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar DefSyms& defsyms() { return m_DefSyms; } 712bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar 72f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines /// search directory 73f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const SearchDirs& directories() const { return m_SearchDirs; } 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines SearchDirs& directories() { return m_SearchDirs; } 75f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 76f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines /// sysroot 77f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const sys::fs::Path& sysroot() const; 78f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 7937b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setSysroot(const sys::fs::Path& pPath); 80f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 81f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines bool hasSysroot() const; 82f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 8387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// entry point 8487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string& entry() const; 8587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines void setEntry(const std::string& pEntry); 8787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool hasEntry() const; 8987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 9087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// output filename 9187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string& outputFile() const; 9287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 9387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines void setOutputFile(const std::string& pOutputFile); 9487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 9587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool hasOutputFile() const; 9687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao SymbolRenameMap m_SymbolRenames; 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao AddressMap m_AddressMap; 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao SectionMap m_SectionMap; 10187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Assignments m_Assignments; 10287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Assertions m_Assertions; 1032bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar DefSyms m_DefSyms; 104f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines SearchDirs m_SearchDirs; 10587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string m_Entry; 10687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string m_OutputFile; 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // MCLD_LINKERSCRIPT_H_ 112