1 //===- GeneralOptions.cpp -------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #include <mcld/GeneralOptions.h> 10 #include <mcld/MC/MCLDInput.h> 11 12 using namespace mcld; 13 14 //===----------------------------------------------------------------------===// 15 // GeneralOptions 16 //===----------------------------------------------------------------------===// 17 GeneralOptions::GeneralOptions() 18 : m_pDefaultBitcode(NULL), 19 m_Verbose(-1), 20 m_MaxErrorNum(-1), 21 m_MaxWarnNum(-1), 22 m_ExecStack(Unknown), 23 m_CommPageSize(0x0), 24 m_MaxPageSize(0x0), 25 m_bCombReloc(true), 26 m_bNoUndefined(false), 27 m_bInitFirst(false), 28 m_bInterPose(false), 29 m_bLoadFltr(false), 30 m_bMulDefs(false), 31 m_bNoCopyReloc(false), 32 m_bNoDefaultLib(false), 33 m_bNoDelete(false), 34 m_bNoDLOpen(false), 35 m_bNoDump(false), 36 m_bRelro(false), 37 m_bNow(false), 38 m_bOrigin(false), 39 m_bTrace(false), 40 m_Bsymbolic(false), 41 m_Bgroup(false), 42 m_bPIE(false), 43 m_bColor(true), 44 m_bCreateEhFrameHdr(false), 45 m_bNMagic(false), 46 m_bOMagic(false), 47 m_bStripDebug(false), 48 m_bExportDynamic(false), 49 m_bWarnSharedTextrel(false), 50 m_bBinaryInput(false), 51 m_bDefineCommon(false), 52 m_bFatalWarnings(false), 53 m_bNewDTags(false), 54 m_bNoStdlib(false), 55 m_StripSymbols(KeepAllSymbols), 56 m_HashStyle(SystemV) { 57 } 58 59 GeneralOptions::~GeneralOptions() 60 { 61 } 62 63 bool GeneralOptions::hasDefaultLDScript() const 64 { 65 return true; 66 } 67 68 const char* GeneralOptions::defaultLDScript() const 69 { 70 return NULL; 71 } 72 73 void GeneralOptions::setDefaultLDScript(const std::string& pFilename) 74 { 75 } 76 77 const mcld::sys::fs::Path& GeneralOptions::sysroot() const 78 { 79 return m_SearchDirs.sysroot(); 80 } 81 82 void GeneralOptions::setSysroot(const mcld::sys::fs::Path &pSysroot) 83 { 84 m_SearchDirs.setSysRoot(pSysroot); 85 } 86 87 bool GeneralOptions::hasSysroot() const 88 { 89 return !sysroot().empty(); 90 } 91 92 void GeneralOptions::setSOName(const std::string& pName) 93 { 94 size_t pos = pName.find_last_of(sys::fs::separator); 95 if (std::string::npos == pos) 96 m_SOName = pName; 97 else 98 m_SOName = pName.substr(pos + 1); 99 } 100 101 void GeneralOptions::addZOption(const ZOption& pOption) 102 { 103 switch (pOption.kind()) { 104 case ZOption::CombReloc: 105 m_bCombReloc = true; 106 break; 107 case ZOption::NoCombReloc: 108 m_bCombReloc = false; 109 break; 110 case ZOption::Defs: 111 m_bNoUndefined = true; 112 break; 113 case ZOption::ExecStack: 114 m_ExecStack = YES; 115 break; 116 case ZOption::NoExecStack: 117 m_ExecStack = NO; 118 break; 119 case ZOption::InitFirst: 120 m_bInitFirst = true; 121 break; 122 case ZOption::InterPose: 123 m_bInterPose = true; 124 break; 125 case ZOption::LoadFltr: 126 m_bLoadFltr = true; 127 break; 128 case ZOption::MulDefs: 129 m_bMulDefs = true; 130 break; 131 case ZOption::NoCopyReloc: 132 m_bNoCopyReloc = true; 133 break; 134 case ZOption::NoDefaultLib: 135 m_bNoDefaultLib = true; 136 break; 137 case ZOption::NoDelete: 138 m_bNoDelete = true; 139 break; 140 case ZOption::NoDLOpen: 141 m_bNoDLOpen = true; 142 break; 143 case ZOption::NoDump: 144 m_bNoDump = true; 145 break; 146 case ZOption::NoRelro: 147 m_bRelro = false; 148 break; 149 case ZOption::Relro: 150 m_bRelro = true; 151 break; 152 case ZOption::Lazy: 153 m_bNow = false; 154 break; 155 case ZOption::Now: 156 m_bNow = true; 157 break; 158 case ZOption::Origin: 159 m_bOrigin = true; 160 break; 161 case ZOption::CommPageSize: 162 m_CommPageSize = pOption.pageSize(); 163 break; 164 case ZOption::MaxPageSize: 165 m_MaxPageSize = pOption.pageSize(); 166 break; 167 case ZOption::Unknown: 168 default: 169 assert(false && "Not a recognized -z option."); 170 break; 171 } 172 } 173