GeneralOptions.cpp revision 6f75755c9204b1d8817ae5a65a2f7e5af0ec3f70
1//===- GeneralOptions.cpp -------------------------------------------------===//
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#include <mcld/GeneralOptions.h>
10#include <mcld/MC/MCLDInput.h>
11
12using namespace mcld;
13
14//===----------------------------------------------------------------------===//
15// GeneralOptions
16//===----------------------------------------------------------------------===//
17GeneralOptions::GeneralOptions()
18  : m_pDefaultBitcode(NULL),
19    m_Verbose(-1),
20    m_MaxErrorNum(-1),
21    m_MaxWarnNum(-1),
22    m_ExecStack(Unknown),
23    m_CommPageSize(0x0),
24    m_MaxPageSize(0x0),
25    m_bCombReloc(true),
26    m_bNoUndefined(false),
27    m_bInitFirst(false),
28    m_bInterPose(false),
29    m_bLoadFltr(false),
30    m_bMulDefs(false),
31    m_bNoCopyReloc(false),
32    m_bNoDefaultLib(false),
33    m_bNoDelete(false),
34    m_bNoDLOpen(false),
35    m_bNoDump(false),
36    m_bRelro(false),
37    m_bNow(false),
38    m_bOrigin(false),
39    m_bTrace(false),
40    m_Bsymbolic(false),
41    m_Bgroup(false),
42    m_bPIE(false),
43    m_bColor(true),
44    m_bCreateEhFrameHdr(false),
45    m_bNMagic(false),
46    m_bOMagic(false),
47    m_bStripDebug(false),
48    m_bExportDynamic(false),
49    m_bWarnSharedTextrel(false),
50    m_bBinaryInput(false),
51    m_bDefineCommon(false),
52    m_bFatalWarnings(false),
53    m_bNewDTags(false),
54    m_bNoStdlib(false),
55    m_StripSymbols(KeepAllSymbols),
56    m_HashStyle(SystemV) {
57}
58
59GeneralOptions::~GeneralOptions()
60{
61}
62
63bool GeneralOptions::hasDefaultLDScript() const
64{
65  return true;
66}
67
68const char* GeneralOptions::defaultLDScript() const
69{
70  return NULL;
71}
72
73void GeneralOptions::setDefaultLDScript(const std::string& pFilename)
74{
75}
76
77const mcld::sys::fs::Path& GeneralOptions::sysroot() const
78{
79  return m_SearchDirs.sysroot();
80}
81
82void GeneralOptions::setSysroot(const mcld::sys::fs::Path &pSysroot)
83{
84  m_SearchDirs.setSysRoot(pSysroot);
85}
86
87bool GeneralOptions::hasSysroot() const
88{
89  return !sysroot().empty();
90}
91
92void GeneralOptions::setSOName(const std::string& pName)
93{
94  size_t pos = pName.find_last_of(sys::fs::separator);
95  if (std::string::npos == pos)
96    m_SOName = pName;
97  else
98    m_SOName = pName.substr(pos + 1);
99}
100
101void GeneralOptions::addZOption(const ZOption& pOption)
102{
103  switch (pOption.kind()) {
104    case ZOption::CombReloc:
105      m_bCombReloc = true;
106      break;
107    case ZOption::NoCombReloc:
108      m_bCombReloc = false;
109      break;
110    case ZOption::Defs:
111      m_bNoUndefined = true;
112      break;
113    case ZOption::ExecStack:
114      m_ExecStack = YES;
115      break;
116    case ZOption::NoExecStack:
117      m_ExecStack = NO;
118      break;
119    case ZOption::InitFirst:
120      m_bInitFirst = true;
121      break;
122    case ZOption::InterPose:
123      m_bInterPose = true;
124      break;
125    case ZOption::LoadFltr:
126      m_bLoadFltr = true;
127      break;
128    case ZOption::MulDefs:
129      m_bMulDefs = true;
130      break;
131    case ZOption::NoCopyReloc:
132      m_bNoCopyReloc = true;
133      break;
134    case ZOption::NoDefaultLib:
135      m_bNoDefaultLib = true;
136      break;
137    case ZOption::NoDelete:
138      m_bNoDelete = true;
139      break;
140    case ZOption::NoDLOpen:
141      m_bNoDLOpen = true;
142      break;
143    case ZOption::NoDump:
144      m_bNoDump = true;
145      break;
146    case ZOption::NoRelro:
147      m_bRelro = false;
148      break;
149    case ZOption::Relro:
150      m_bRelro = true;
151      break;
152    case ZOption::Lazy:
153      m_bNow = false;
154      break;
155    case ZOption::Now:
156      m_bNow = true;
157      break;
158    case ZOption::Origin:
159      m_bOrigin = true;
160      break;
161    case ZOption::CommPageSize:
162      m_CommPageSize = pOption.pageSize();
163      break;
164    case ZOption::MaxPageSize:
165      m_MaxPageSize = pOption.pageSize();
166      break;
167    case ZOption::Unknown:
168    default:
169      assert(false && "Not a recognized -z option.");
170      break;
171  }
172}
173