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