| //===- 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; |
| } |
| |