15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDOptions.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//===----------------------------------------------------------------------===//
9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDOptions.h>
10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDInput.h>
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// ScriptOptions
16affc150dc44fab1911775a49636d0ce85333b634Zonr ChangScriptOptions::ScriptOptions()
17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
20affc150dc44fab1911775a49636d0ce85333b634Zonr ChangScriptOptions::~ScriptOptions()
21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// GeneralOptions
26affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::GeneralOptions()
27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  : m_pDefaultBitcode(NULL),
28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Verbose(-1),
29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxErrorNum(-1),
30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxWarnNum(-1),
31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_ExecStack(Unknown),
32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_CommPageSize(0x0),
33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_MaxPageSize(0x0),
34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bCombReloc(true),
35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoUndefined(false),
36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bInitFirst(false),
37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bInterPose(false),
38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bLoadFltr(false),
39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bMulDefs(false),
40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoCopyReloc(false),
41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDefaultLib(false),
42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDelete(false),
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDLOpen(false),
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNoDump(false),
45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bRelro(false),
46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bNow(false),
47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bOrigin(false),
48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bTrace(false),
49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Bsymbolic(false),
50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Bgroup(false),
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bPIE(false),
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bColor(true),
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bAllowShlibUndefined(true),
54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_bCreateEhFrameHdr(false)
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
58affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::~GeneralOptions()
59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool GeneralOptions::hasDefaultLDScript() const
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return true;
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst char* GeneralOptions::defaultLDScript() const
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return NULL;
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GeneralOptions::setDefaultLDScript(const std::string& pFilename)
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GeneralOptions::setSysroot(const mcld::sys::fs::Path &pSysroot)
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_Sysroot.assign(pSysroot);
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
81affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid GeneralOptions::addZOption(const ZOption& pOption)
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  switch (pOption.kind()) {
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::CombReloc:
85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bCombReloc = true;
86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoCombReloc:
88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bCombReloc = false;
89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Defs:
91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoUndefined = true;
92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::ExecStack:
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_ExecStack = YES;
95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoExecStack:
97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_ExecStack = NO;
98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::InitFirst:
100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bInitFirst = true;
101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::InterPose:
103affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bInterPose = true;
104affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
105affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::LoadFltr:
106affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bLoadFltr = true;
107affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
108affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::MulDefs:
109affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bMulDefs = true;
110affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
111affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoCopyReloc:
112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoCopyReloc = true;
113affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
114affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDefaultLib:
115affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDefaultLib = true;
116affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
117affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDelete:
118affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDelete = true;
119affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
120affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDLOpen:
121affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDLOpen = true;
122affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
123affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoDump:
124affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNoDump = true;
125affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
126affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::NoRelro:
127affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bRelro = false;
128affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
129affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Relro:
130affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bRelro = true;
131affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
132affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Lazy:
133affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNow = false;
134affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
135affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Now:
136affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bNow = true;
137affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
138affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Origin:
139affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_bOrigin = true;
140affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
141affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::CommPageSize:
142affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_CommPageSize = pOption.pageSize();
143affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
144affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::MaxPageSize:
145affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      m_MaxPageSize = pOption.pageSize();
146affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
147affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    case ZOption::Unknown:
148affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    default:
149affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      assert(false && "Not a recognized -z option.");
150affc150dc44fab1911775a49636d0ce85333b634Zonr Chang      break;
151affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
152affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}
153