blob: 91e4bdbd12cab469c04ec16386bac78f70fa1de4 [file] [log] [blame]
Stephen Hinesf7ac0f12013-05-03 19:09:24 -07001//===- 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_LINKER_SCRIPT_H
10#define MCLD_LINKER_SCRIPT_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14#include <string>
15#include <llvm/ADT/StringRef.h>
16#include <mcld/ADT/StringEntry.h>
17#include <mcld/ADT/StringHash.h>
18#include <mcld/ADT/HashTable.h>
19#include <mcld/Object/SectionMap.h>
20#include <mcld/MC/SearchDirs.h>
21
22namespace mcld {
23
24/** \class LinkerScript
25 *
26 */
27class LinkerScript
28{
29public:
30 typedef HashTable<StringEntry<llvm::StringRef>,
31 hash::StringHash<hash::ELF>,
32 StringEntryFactory<llvm::StringRef> > SymbolRenameMap;
33
34 typedef HashTable<StringEntry<uint64_t>,
35 hash::StringHash<hash::ELF>,
36 StringEntryFactory<uint64_t> > AddressMap;
37
38 typedef HashTable<StringEntry<llvm::StringRef>,
39 hash::StringHash<hash::ELF>,
40 StringEntryFactory<llvm::StringRef> > DefSymMap;
41
42public:
43 LinkerScript();
44
45 ~LinkerScript();
46
47 const SymbolRenameMap& renameMap() const { return m_SymbolRenames; }
48 SymbolRenameMap& renameMap() { return m_SymbolRenames; }
49
50 const AddressMap& addressMap() const { return m_AddressMap; }
51 AddressMap& addressMap() { return m_AddressMap; }
52
53 const SectionMap& sectionMap() const { return m_SectionMap; }
54 SectionMap& sectionMap() { return m_SectionMap; }
55
56 const DefSymMap& defSymMap() const { return m_DefSymMap; }
57 DefSymMap& defSymMap() { return m_DefSymMap; }
58
59 /// search directory
60 const SearchDirs& directories() const { return m_SearchDirs; }
61 SearchDirs& directories() { return m_SearchDirs; }
62
63 /// sysroot
64 const sys::fs::Path& sysroot() const;
65
66 void setSysroot(const sys::fs::Path &pPath);
67
68 bool hasSysroot() const;
69
70private:
71 SymbolRenameMap m_SymbolRenames;
72 AddressMap m_AddressMap;
73 SectionMap m_SectionMap;
74 DefSymMap m_DefSymMap;
75 SearchDirs m_SearchDirs;
76};
77
78} // namespace of mcld
79
80#endif
81