//===- GeneralOptions.cpp -------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/GeneralOptions.h> #include <mcld/MC/MCLDInput.h> using namespace mcld; //===----------------------------------------------------------------------===// // GeneralOptions //===----------------------------------------------------------------------===// GeneralOptions::GeneralOptions() : m_pDefaultBitcode(NULL), m_Verbose(-1), m_MaxErrorNum(-1), m_MaxWarnNum(-1), m_ExecStack(Unknown), m_CommPageSize(0x0), m_MaxPageSize(0x0), m_bCombReloc(true), m_bNoUndefined(false), m_bInitFirst(false), m_bInterPose(false), m_bLoadFltr(false), m_bMulDefs(false), m_bNoCopyReloc(false), m_bNoDefaultLib(false), m_bNoDelete(false), m_bNoDLOpen(false), m_bNoDump(false), m_bRelro(false), m_bNow(false), m_bOrigin(false), m_bTrace(false), m_Bsymbolic(false), m_Bgroup(false), m_bPIE(false), m_bColor(true), m_bCreateEhFrameHdr(false), m_bNMagic(false), m_bOMagic(false), m_bStripDebug(false), m_bExportDynamic(false), m_bWarnSharedTextrel(false), m_bBinaryInput(false), m_bDefineCommon(false), m_bFatalWarnings(false), m_bNewDTags(false), m_bNoStdlib(false), m_StripSymbols(KeepAllSymbols), m_HashStyle(SystemV) { } GeneralOptions::~GeneralOptions() { } bool GeneralOptions::hasDefaultLDScript() const { return true; } const char* GeneralOptions::defaultLDScript() const { return NULL; } void GeneralOptions::setDefaultLDScript(const std::string& pFilename) { } const mcld::sys::fs::Path& GeneralOptions::sysroot() const { return m_SearchDirs.sysroot(); } void GeneralOptions::setSysroot(const mcld::sys::fs::Path &pSysroot) { m_SearchDirs.setSysRoot(pSysroot); } bool GeneralOptions::hasSysroot() const { return !sysroot().empty(); } void GeneralOptions::setSOName(const std::string& pName) { size_t pos = pName.find_last_of(sys::fs::separator); if (std::string::npos == pos) m_SOName = pName; else m_SOName = pName.substr(pos + 1); } void GeneralOptions::addZOption(const ZOption& pOption) { switch (pOption.kind()) { case ZOption::CombReloc: m_bCombReloc = true; break; case ZOption::NoCombReloc: m_bCombReloc = false; break; case ZOption::Defs: m_bNoUndefined = true; break; case ZOption::ExecStack: m_ExecStack = YES; break; case ZOption::NoExecStack: m_ExecStack = NO; break; case ZOption::InitFirst: m_bInitFirst = true; break; case ZOption::InterPose: m_bInterPose = true; break; case ZOption::LoadFltr: m_bLoadFltr = true; break; case ZOption::MulDefs: m_bMulDefs = true; break; case ZOption::NoCopyReloc: m_bNoCopyReloc = true; break; case ZOption::NoDefaultLib: m_bNoDefaultLib = true; break; case ZOption::NoDelete: m_bNoDelete = true; break; case ZOption::NoDLOpen: m_bNoDLOpen = true; break; case ZOption::NoDump: m_bNoDump = true; break; case ZOption::NoRelro: m_bRelro = false; break; case ZOption::Relro: m_bRelro = true; break; case ZOption::Lazy: m_bNow = false; break; case ZOption::Now: m_bNow = true; break; case ZOption::Origin: m_bOrigin = true; break; case ZOption::CommPageSize: m_CommPageSize = pOption.pageSize(); break; case ZOption::MaxPageSize: m_MaxPageSize = pOption.pageSize(); break; case ZOption::Unknown: default: assert(false && "Not a recognized -z option."); break; } }