GeneralOptions.cpp revision 87f34658dec9097d987d254a990ea7f311bfc95f
122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- GeneralOptions.cpp -------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/GeneralOptions.h>
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/MC/Input.h>
1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/MC/ZOption.h>
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
16affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// GeneralOptions
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
18affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::GeneralOptions()
19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  : m_pDefaultBitcode(NULL),
20affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Verbose(-1),
21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxErrorNum(-1),
22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxWarnNum(-1),
23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_ExecStack(Unknown),
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    m_NoUndefined(Unknown),
2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    m_MulDefs(Unknown),
26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_CommPageSize(0x0),
27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxPageSize(0x0),
28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bCombReloc(true),
29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bInitFirst(false),
30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bInterPose(false),
31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bLoadFltr(false),
32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoCopyReloc(false),
33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDefaultLib(false),
34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDelete(false),
35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDLOpen(false),
36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDump(false),
37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bRelro(false),
38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNow(false),
39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bOrigin(false),
40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bTrace(false),
41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Bsymbolic(false),
42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Bgroup(false),
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bPIE(false),
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bColor(true),
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_bCreateEhFrameHdr(false),
46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bNMagic(false),
47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bOMagic(false),
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bStripDebug(false),
49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bExportDynamic(false),
50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bWarnSharedTextrel(false),
51d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bBinaryInput(false),
52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    m_bDefineCommon(false),
536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_bFatalWarnings(false),
546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_bNewDTags(false),
556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_bNoStdlib(false),
5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    m_bWarnMismatch(true),
5787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    m_bGCSections(false),
5887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    m_bGenUnwindInfo(true),
59f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines    m_GPSize(8),
606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_StripSymbols(KeepAllSymbols),
616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_HashStyle(SystemV) {
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
64affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::~GeneralOptions()
65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid GeneralOptions::setSOName(const std::string& pName)
6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  size_t pos = pName.find_last_of(sys::fs::separator);
7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (std::string::npos == pos)
7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_SOName = pName;
7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  else
7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    m_SOName = pName.substr(pos + 1);
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
77affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid GeneralOptions::addZOption(const ZOption& pOption)
78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  switch (pOption.kind()) {
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::CombReloc:
81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bCombReloc = true;
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoCombReloc:
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bCombReloc = false;
85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Defs:
8787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines      m_NoUndefined = YES;
88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::ExecStack:
90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_ExecStack = YES;
91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoExecStack:
93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_ExecStack = NO;
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::InitFirst:
96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bInitFirst = true;
97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::InterPose:
99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bInterPose = true;
100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::LoadFltr:
102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bLoadFltr = true;
103affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
104affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::MulDefs:
10587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines      m_MulDefs = YES;
106affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
107affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoCopyReloc:
108affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoCopyReloc = true;
109affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
110affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDefaultLib:
111affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDefaultLib = true;
112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
113affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDelete:
114affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDelete = true;
115affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
116affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDLOpen:
117affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDLOpen = true;
118affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
119affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDump:
120affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDump = true;
121affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
122affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoRelro:
123affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bRelro = false;
124affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
125affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Relro:
126affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bRelro = true;
127affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
128affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Lazy:
129affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNow = false;
130affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
131affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Now:
132affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNow = true;
133affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
134affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Origin:
135affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bOrigin = true;
136affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
137affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::CommPageSize:
138affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_CommPageSize = pOption.pageSize();
139affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
140affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::MaxPageSize:
141affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_MaxPageSize = pOption.pageSize();
142affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
143affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Unknown:
144affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    default:
145affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      assert(false && "Not a recognized -z option.");
146affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
147affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
148affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
149