GeneralOptions.cpp revision a790f0a8f3175183bea088389b3e4ae41813e192
122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- GeneralOptions.cpp -------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/GeneralOptions.h> 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/MC/Input.h> 1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/MC/ZOption.h> 12a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines#include <cassert> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 16affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// GeneralOptions 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 19affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::GeneralOptions() 20533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines : m_Verbose(-1), 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxErrorNum(-1), 22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxWarnNum(-1), 23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack(Unknown), 2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_NoUndefined(Unknown), 2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_MulDefs(Unknown), 26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_CommPageSize(0x0), 27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxPageSize(0x0), 28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc(true), 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInitFirst(false), 30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInterPose(false), 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bLoadFltr(false), 32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoCopyReloc(false), 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDefaultLib(false), 34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDelete(false), 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDLOpen(false), 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDump(false), 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro(false), 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow(false), 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bOrigin(false), 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bTrace(false), 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Bsymbolic(false), 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Bgroup(false), 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bPIE(false), 44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bColor(true), 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_bCreateEhFrameHdr(false), 46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bNMagic(false), 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bOMagic(false), 48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bStripDebug(false), 49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bExportDynamic(false), 50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bWarnSharedTextrel(false), 51d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bBinaryInput(false), 52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_bDefineCommon(false), 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bFatalWarnings(false), 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bNewDTags(false), 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_bNoStdlib(false), 5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_bWarnMismatch(true), 5787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_bGCSections(false), 58a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines m_bPrintGCSections(false), 5987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_bGenUnwindInfo(true), 60a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines m_bPrintICFSections(false), 61a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines m_ICF(ICF_None), 62a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines m_ICFIterations(0) , 63f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines m_GPSize(8), 646f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_StripSymbols(KeepAllSymbols), 656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_HashStyle(SystemV) { 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 68affc150dc44fab1911775a49636d0ce85333b634Zonr ChangGeneralOptions::~GeneralOptions() 69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid GeneralOptions::setSOName(const std::string& pName) 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao size_t pos = pName.find_last_of(sys::fs::separator); 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao if (std::string::npos == pos) 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SOName = pName; 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao else 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_SOName = pName.substr(pos + 1); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 81affc150dc44fab1911775a49636d0ce85333b634Zonr Changvoid GeneralOptions::addZOption(const ZOption& pOption) 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang switch (pOption.kind()) { 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::CombReloc: 85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc = true; 86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoCombReloc: 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bCombReloc = false; 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Defs: 9187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_NoUndefined = YES; 92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::ExecStack: 94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack = YES; 95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoExecStack: 97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_ExecStack = NO; 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::InitFirst: 100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInitFirst = true; 101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::InterPose: 103affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bInterPose = true; 104affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 105affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::LoadFltr: 106affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bLoadFltr = true; 107affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 108affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::MulDefs: 10987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_MulDefs = YES; 110affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 111affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoCopyReloc: 112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoCopyReloc = true; 113affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 114affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDefaultLib: 115affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDefaultLib = true; 116affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 117affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDelete: 118affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDelete = true; 119affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 120affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDLOpen: 121affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDLOpen = true; 122affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 123affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoDump: 124affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNoDump = true; 125affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 126affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::NoRelro: 127affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro = false; 128affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 129affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Relro: 130affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bRelro = true; 131affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 132affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Lazy: 133affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow = false; 134affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 135affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Now: 136affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bNow = true; 137affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 138affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Origin: 139affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_bOrigin = true; 140affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 141affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::CommPageSize: 142affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_CommPageSize = pOption.pageSize(); 143affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 144affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::MaxPageSize: 145affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_MaxPageSize = pOption.pageSize(); 146affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 147affc150dc44fab1911775a49636d0ce85333b634Zonr Chang case ZOption::Unknown: 148affc150dc44fab1911775a49636d0ce85333b634Zonr Chang default: 149affc150dc44fab1911775a49636d0ce85333b634Zonr Chang assert(false && "Not a recognized -z option."); 150affc150dc44fab1911775a49636d0ce85333b634Zonr Chang break; 151affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 152affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 153a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 154a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hinesbool GeneralOptions::isInExcludeLIBS(const Input& pInput) const 155a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines{ 156a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines assert(pInput.type() == Input::Archive); 157a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 158a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines if (m_ExcludeLIBS.empty()) { 159a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines return false; 160a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines } 161a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 162a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines // Specifying "--exclude-libs ALL" excludes symbols in all archive libraries 163a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines // from automatic export. 164a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines if (m_ExcludeLIBS.count("ALL") != 0) { 165a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines return true; 166a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines } 167a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 168a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines std::string name(pInput.name()); 169a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines name.append(".a"); 170a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines if (m_ExcludeLIBS.count(name) != 0) { 171a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines return true; 172a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines } 173a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 174a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines return false; 175a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines} 176