blob: 3c34d59a418192b2c88efbd85933ba1c9ab4cc70 [file] [log] [blame]
commit 69dc7d5ef1c74a60b9391441924f7a25078457a6
Author: Chinyen Chou <petechou@gmail.com>
Date: Mon Oct 21 14:29:15 2013 +0800
[Linker Option] Add --no-warn-mismatch option support.
diff --git a/include/mcld/GeneralOptions.h b/include/mcld/GeneralOptions.h
index 46a1e57..60487c0 100644
--- a/include/mcld/GeneralOptions.h
+++ b/include/mcld/GeneralOptions.h
@@ -274,6 +274,12 @@ public:
bool printMap() const
{ return m_bPrintMap; }
+ void setWarnMismatch(bool pEnable = true)
+ { m_bWarnMismatch = pEnable; }
+
+ bool warnMismatch() const
+ { return m_bWarnMismatch; }
+
// -G, max GP size option
void setGPSize(int gpsize)
{ m_GPSize = gpsize; }
@@ -371,6 +377,7 @@ private:
bool m_bNewDTags: 1; // --enable-new-dtags
bool m_bNoStdlib: 1; // -nostdlib
bool m_bPrintMap: 1; // --print-map
+ bool m_bWarnMismatch: 1; // --no-warn-mismatch
uint32_t m_GPSize; // -G, --gpsize
StripSymbolMode m_StripSymbols;
RpathList m_RpathList;
diff --git a/lib/Core/GeneralOptions.cpp b/lib/Core/GeneralOptions.cpp
index c0196e5..b4c1f22 100644
--- a/lib/Core/GeneralOptions.cpp
+++ b/lib/Core/GeneralOptions.cpp
@@ -53,6 +53,7 @@ GeneralOptions::GeneralOptions()
m_bFatalWarnings(false),
m_bNewDTags(false),
m_bNoStdlib(false),
+ m_bWarnMismatch(true),
m_GPSize(8),
m_StripSymbols(KeepAllSymbols),
m_HashStyle(SystemV) {
diff --git a/lib/Object/ObjectLinker.cpp b/lib/Object/ObjectLinker.cpp
index 67fd1d5..1becc30 100644
--- a/lib/Object/ObjectLinker.cpp
+++ b/lib/Object/ObjectLinker.cpp
@@ -185,8 +185,9 @@ void ObjectLinker::normalize()
}
}
else {
- warning(diag::warn_unrecognized_input_file) << (*input)->path()
- << m_Config.targets().triple().str();
+ if (m_Config.options().warnMismatch())
+ warning(diag::warn_unrecognized_input_file) << (*input)->path()
+ << m_Config.targets().triple().str();
}
} // end of for
}
diff --git a/tools/lite/include/lite/OutputFormatOptions.h b/tools/lite/include/lite/OutputFormatOptions.h
index 99ce54e..c9982d5 100644
--- a/tools/lite/include/lite/OutputFormatOptions.h
+++ b/tools/lite/include/lite/OutputFormatOptions.h
@@ -51,6 +51,8 @@ private:
llvm::cl::opt<bool>& m_ExportDynamic;
llvm::cl::opt<std::string>& m_BuildID;
llvm::cl::list<std::string>& m_ExcludeLIBS;
+
+ llvm::cl::opt<bool>& m_NoWarnMismatch;
};
} // namespace of mcld
diff --git a/tools/lite/lib/OutputFormatOptions.cpp b/tools/lite/lib/OutputFormatOptions.cpp
index 7ee8248..cfc6c04 100644
--- a/tools/lite/lib/OutputFormatOptions.cpp
+++ b/tools/lite/lib/OutputFormatOptions.cpp
@@ -147,6 +147,10 @@ llvm::cl::opt<mcld::GeneralOptions::HashStyle> ArgHashStyle("hash-style",
"both the classic ELF and new style GNU hash tables"),
clEnumValEnd));
+llvm::cl::opt<bool> ArgNoWarnMismatch("no-warn-mismatch",
+ llvm::cl::desc("Allow linking together mismatched input files."),
+ llvm::cl::init(false));
+
// Not supported yet {
llvm::cl::opt<bool> ArgExportDynamic("export-dynamic",
llvm::cl::desc("Export all dynamic symbols"),
@@ -193,7 +197,8 @@ OutputFormatOptions::OutputFormatOptions()
m_HashStyle(ArgHashStyle),
m_ExportDynamic(ArgExportDynamic),
m_BuildID(ArgBuildID),
- m_ExcludeLIBS(ArgExcludeLIBS) {
+ m_ExcludeLIBS(ArgExcludeLIBS),
+ m_NoWarnMismatch(ArgNoWarnMismatch) {
}
bool OutputFormatOptions::parse(mcld::Module& pModule, LinkerConfig& pConfig)
@@ -222,6 +227,10 @@ bool OutputFormatOptions::parse(mcld::Module& pModule, LinkerConfig& pConfig)
pConfig.options().setOMagic(m_OMagic);
pConfig.options().setHashStyle(m_HashStyle);
pConfig.options().setExportDynamic(m_ExportDynamic);
+ if (m_NoWarnMismatch)
+ pConfig.options().setWarnMismatch(false);
+ else
+ pConfig.options().setWarnMismatch(true);
// build-id
// exclude-libs
diff --git a/tools/mcld/main.cpp b/tools/mcld/main.cpp
index aceb0f4..3fc1a7b 100644
--- a/tools/mcld/main.cpp
+++ b/tools/mcld/main.cpp
@@ -707,13 +707,14 @@ ArgARMCompatibility("p",
cl::desc("Ignore for ARM backward compatibility"),
cl::init(false));
+/// @{
+/// @name FIXME: end of unsupported options
+/// @}
+
static cl::opt<bool>
ArgNoWarnMismatch("no-warn-mismatch",
cl::desc("Allow linking together mismatched input files."),
cl::init(false));
-/// @{
-/// @name FIXME: end of unsupported options
-/// @}
static cl::opt<bool>
ArgNoStdlib("nostdlib",
@@ -1144,6 +1145,10 @@ static bool ProcessLinkerOptionsFromCommand(mcld::LinkerScript& pScript,
pConfig.options().setNoStdlib(ArgNoStdlib);
pConfig.options().setPrintMap(ArgPrintMap);
pConfig.options().setGPSize(ArgGPSize);
+ if (ArgNoWarnMismatch)
+ pConfig.options().setWarnMismatch(false);
+ else
+ pConfig.options().setWarnMismatch(true);
if (ArgStripAll)
pConfig.options().setStripSymbols(mcld::GeneralOptions::StripAllSymbols);