1533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===- SymbolOptions.cpp --------------------------------------------------===// 2533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 3533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// The MCLinker Project 4533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 5533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// This file is distributed under the University of Illinois Open Source 6533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// License. See LICENSE.TXT for details. 7533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 8533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 9533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines#include <mcld/SymbolOptions.h> 10533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines#include <mcld/LinkerConfig.h> 11533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 12533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesnamespace { 13533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 14533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// Not supprted yet { 15a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hinesllvm::cl::list<std::string> ArgForceUndefined("u", 16a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines llvm::cl::ZeroOrMore, 17533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Force symbol to be undefined in the output file"), 18533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::value_desc("symbol")); 19533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 20533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::alias ArgForceUndefinedAlias("undefined", 21a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines llvm::cl::ZeroOrMore, 22533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("alias for -u"), 23533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::aliasopt(ArgForceUndefined)); 24533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 25533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<std::string> ArgVersionScript("version-script", 26533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Version script."), 27533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::value_desc("Version script")); 28533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 29533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgWarnCommon("warn-common", 30533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("warn common symbol"), 31533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 32533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 33533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgDefineCommon("d", 34533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::ZeroOrMore, 35533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Define common symbol"), 36533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 37533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 38533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::alias ArgDefineCommonAlias1("dc", 39533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::ZeroOrMore, 40533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("alias for -d"), 41533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::aliasopt(ArgDefineCommon)); 42533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 43533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::alias ArgDefineCommonAlias2("dp", 44533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::ZeroOrMore, 45533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("alias for -d"), 46533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::aliasopt(ArgDefineCommon)); 47533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 48533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// } Not supported yet 49533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 50533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} // anonymous namespace 51533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 52533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesusing namespace mcld; 53533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 54533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 55533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// SymbolOptions 56533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 57533eae20118036f425f27bf0536ef0ccbb090b65Stephen HinesSymbolOptions::SymbolOptions() 58533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines : m_ForceUndefined(ArgForceUndefined), 59533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_VersionScript(ArgVersionScript), 60533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_WarnCommon(ArgWarnCommon), 61533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_DefineCommon(ArgDefineCommon) { 62533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} 63533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 64533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesbool SymbolOptions::parse(LinkerConfig& pConfig) 65533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines{ 66533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines // set -d 67533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines pConfig.options().setDefineCommon(m_DefineCommon); 68533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 69a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines // set -u/--undefined symbols 70a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines llvm::cl::list<std::string>::iterator usym, usymEnd = m_ForceUndefined.end(); 71a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines for (usym = m_ForceUndefined.begin(); usym != usymEnd; ++usym) 72a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines pConfig.options().getUndefSymList().push_back(*usym); 73a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 74533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines return true; 75533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} 76533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 77