GeneralOptions.cpp revision 6f75755c9204b1d8817ae5a65a2f7e5af0ec3f70
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> 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDInput.h> 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// GeneralOptions 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 17affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::GeneralOptions() 18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang : m_pDefaultBitcode(NULL), 19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Verbose(-1), 20affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxErrorNum(-1), 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxWarnNum(-1), 22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack(Unknown), 23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_CommPageSize(0x0), 24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxPageSize(0x0), 25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc(true), 26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoUndefined(false), 27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInitFirst(false), 28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInterPose(false), 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bLoadFltr(false), 30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bMulDefs(false), 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoCopyReloc(false), 32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDefaultLib(false), 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDelete(false), 34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDLOpen(false), 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDump(false), 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro(false), 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow(false), 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bOrigin(false), 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bTrace(false), 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Bsymbolic(false), 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Bgroup(false), 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bPIE(false), 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bColor(true), 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_bCreateEhFrameHdr(false), 45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bNMagic(false), 46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bOMagic(false), 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bStripDebug(false), 48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bExportDynamic(false), 49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bWarnSharedTextrel(false), 50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bBinaryInput(false), 51d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bDefineCommon(false), 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bFatalWarnings(false), 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bNewDTags(false), 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bNoStdlib(false), 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_StripSymbols(KeepAllSymbols), 566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_HashStyle(SystemV) { 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 59affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::~GeneralOptions() 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool GeneralOptions::hasDefaultLDScript() const 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return true; 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst char* GeneralOptions::defaultLDScript() const 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return NULL; 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GeneralOptions::setDefaultLDScript(const std::string& pFilename) 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoconst mcld::sys::fs::Path& GeneralOptions::sysroot() const 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return m_SearchDirs.sysroot(); 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GeneralOptions::setSysroot(const mcld::sys::fs::Path &pSysroot) 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SearchDirs.setSysRoot(pSysroot); 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 876f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesbool GeneralOptions::hasSysroot() const 886f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return !sysroot().empty(); 906f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid GeneralOptions::setSOName(const std::string& pName) 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao size_t pos = pName.find_last_of(sys::fs::separator); 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao if (std::string::npos == pos) 9622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SOName = pName; 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao else 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SOName = pName.substr(pos + 1); 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 101affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid GeneralOptions::addZOption(const ZOption& pOption) 102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 103affc150dc44fab1911775a49636d0ce85333b634Zonr Chang switch (pOption.kind()) { 104affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::CombReloc: 105affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc = true; 106affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 107affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoCombReloc: 108affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc = false; 109affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 110affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Defs: 111affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoUndefined = true; 112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 113affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::ExecStack: 114affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack = YES; 115affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 116affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoExecStack: 117affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack = NO; 118affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 119affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::InitFirst: 120affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInitFirst = true; 121affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 122affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::InterPose: 123affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInterPose = true; 124affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 125affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::LoadFltr: 126affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bLoadFltr = true; 127affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 128affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::MulDefs: 129affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bMulDefs = true; 130affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 131affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoCopyReloc: 132affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoCopyReloc = true; 133affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 134affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDefaultLib: 135affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDefaultLib = true; 136affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 137affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDelete: 138affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDelete = true; 139affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 140affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDLOpen: 141affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDLOpen = true; 142affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 143affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDump: 144affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDump = true; 145affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 146affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoRelro: 147affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro = false; 148affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 149affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Relro: 150affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro = true; 151affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 152affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Lazy: 153affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow = false; 154affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 155affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Now: 156affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow = true; 157affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 158affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Origin: 159affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bOrigin = true; 160affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 161affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::CommPageSize: 162affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_CommPageSize = pOption.pageSize(); 163affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 164affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::MaxPageSize: 165affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxPageSize = pOption.pageSize(); 166affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 167affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Unknown: 168affc150dc44fab1911775a49636d0ce85333b634Zonr Chang default: 169affc150dc44fab1911775a49636d0ce85333b634Zonr Chang assert(false && "Not a recognized -z option."); 170affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 171affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 172affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 173