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