//===- SymbolOptions.cpp --------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/SymbolOptions.h> #include <mcld/LinkerConfig.h> namespace { // Not supprted yet { llvm::cl::list<std::string> ArgForceUndefined("u", llvm::cl::ZeroOrMore, llvm::cl::desc("Force symbol to be undefined in the output file"), llvm::cl::value_desc("symbol")); llvm::cl::alias ArgForceUndefinedAlias("undefined", llvm::cl::ZeroOrMore, llvm::cl::desc("alias for -u"), llvm::cl::aliasopt(ArgForceUndefined)); llvm::cl::opt<std::string> ArgVersionScript("version-script", llvm::cl::desc("Version script."), llvm::cl::value_desc("Version script")); llvm::cl::opt<bool> ArgWarnCommon("warn-common", llvm::cl::desc("warn common symbol"), llvm::cl::init(false)); llvm::cl::opt<bool> ArgDefineCommon("d", llvm::cl::ZeroOrMore, llvm::cl::desc("Define common symbol"), llvm::cl::init(false)); llvm::cl::alias ArgDefineCommonAlias1("dc", llvm::cl::ZeroOrMore, llvm::cl::desc("alias for -d"), llvm::cl::aliasopt(ArgDefineCommon)); llvm::cl::alias ArgDefineCommonAlias2("dp", llvm::cl::ZeroOrMore, llvm::cl::desc("alias for -d"), llvm::cl::aliasopt(ArgDefineCommon)); // } Not supported yet } // anonymous namespace using namespace mcld; //===----------------------------------------------------------------------===// // SymbolOptions //===----------------------------------------------------------------------===// SymbolOptions::SymbolOptions() : m_ForceUndefined(ArgForceUndefined), m_VersionScript(ArgVersionScript), m_WarnCommon(ArgWarnCommon), m_DefineCommon(ArgDefineCommon) { } bool SymbolOptions::parse(LinkerConfig& pConfig) { // set -d pConfig.options().setDefineCommon(m_DefineCommon); // set -u/--undefined symbols llvm::cl::list<std::string>::iterator usym, usymEnd = m_ForceUndefined.end(); for (usym = m_ForceUndefined.begin(); usym != usymEnd; ++usym) pConfig.options().getUndefSymList().push_back(*usym); return true; }