aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lto
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lto')
-rw-r--r--tools/lto/LTOCodeGenerator.cpp13
-rw-r--r--tools/lto/LTOCodeGenerator.h2
-rw-r--r--tools/lto/lto.cpp10
3 files changed, 25 insertions, 0 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index 911fddf..7850b5d 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -126,6 +126,14 @@ void LTOCodeGenerator::setAssemblerPath(const char* path)
_assemblerPath = new sys::Path(path);
}
+void LTOCodeGenerator::setAssemblerArgs(const char** args, int nargs)
+{
+ for (int i = 0; i < nargs; ++i) {
+ const char *arg = args[i];
+ _assemblerArgs.push_back(arg);
+ }
+}
+
void LTOCodeGenerator::addMustPreserveSymbol(const char* sym)
{
_mustPreserveSymbols[sym] = 1;
@@ -257,6 +265,11 @@ bool LTOCodeGenerator::assemble(const std::string& asmPath,
args.push_back("-c");
args.push_back("-x");
args.push_back("assembler");
+ } else {
+ for (std::vector<std::string>::iterator I = _assemblerArgs.begin(),
+ E = _assemblerArgs.end(); I != E; ++I) {
+ args.push_back(I->c_str());
+ }
}
args.push_back("-o");
args.push_back(objPath.c_str());
diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h
index cac3b8c..9086bef 100644
--- a/tools/lto/LTOCodeGenerator.h
+++ b/tools/lto/LTOCodeGenerator.h
@@ -37,6 +37,7 @@ struct LTOCodeGenerator {
bool setDebugInfo(lto_debug_model, std::string& errMsg);
bool setCodePICModel(lto_codegen_model, std::string& errMsg);
void setAssemblerPath(const char* path);
+ void setAssemblerArgs(const char** args, int nargs);
void addMustPreserveSymbol(const char* sym);
bool writeMergedModules(const char* path,
std::string& errMsg);
@@ -62,6 +63,7 @@ private:
llvm::MemoryBuffer* _nativeObjectFile;
std::vector<const char*> _codegenOptions;
llvm::sys::Path* _assemblerPath;
+ std::vector<std::string> _assemblerArgs;
};
#endif // LTO_CODE_GENERATOR_H
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index a299dd1..703447b 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -218,6 +218,16 @@ void lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path)
cg->setAssemblerPath(path);
}
+
+//
+// sets extra arguments that libLTO should pass to the assembler
+//
+void lto_codegen_set_assembler_args(lto_code_gen_t cg, const char** args,
+ int nargs)
+{
+ cg->setAssemblerArgs(args, nargs);
+}
+
//
// adds to a list of all global symbols that must exist in the final
// generated code. If a function is not listed there, it might be