From cbb170d057aa6692b19f577b1e09a6c1c7a26969 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 9 Aug 2010 21:09:46 +0000 Subject: Make it possible to set the target triple and expose that with an option in the gold plugin. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110604 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/gold/gold-plugin.cpp | 7 +++++++ tools/lto/LTOModule.cpp | 5 +++++ tools/lto/LTOModule.h | 1 + tools/lto/lto.cpp | 8 ++++++++ tools/lto/lto.exports | 1 + 5 files changed, 22 insertions(+) (limited to 'tools') diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 2d0f5bd3af..e7161a64a8 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -68,6 +68,7 @@ namespace options { static std::string as_path; static std::vector pass_through; static std::string extra_library_path; + static std::string triple; // Additional options to pass into the code generator. // Note: This array will contain all plugin options which are not claimed // as plugin exclusive to pass to the code generator. @@ -95,6 +96,8 @@ namespace options { } else if (opt.startswith("pass-through=")) { llvm::StringRef item = opt.substr(strlen("pass-through=")); pass_through.push_back(item.str()); + } else if (opt == "mtriple=") { + triple = opt.substr(strlen("mtriple=")); } else if (opt == "emit-llvm") { generate_bc_file = BC_ONLY; } else if (opt == "also-emit-llvm") { @@ -270,6 +273,10 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file, lto_get_error_message()); return LDPS_ERR; } + + if (!options::triple.empty()) + lto_module_set_target_triple(cf.M, options::triple.c_str()); + cf.handle = file->handle; unsigned sym_count = lto_module_get_num_symbols(cf.M); cf.syms.reserve(sym_count); diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp index 0870205a77..d386bacdfc 100644 --- a/tools/lto/LTOModule.cpp +++ b/tools/lto/LTOModule.cpp @@ -153,6 +153,11 @@ const char* LTOModule::getTargetTriple() return _module->getTargetTriple().c_str(); } +void LTOModule::setTargetTriple(const char *triple) +{ + _module->setTargetTriple(triple); +} + void LTOModule::addDefinedFunctionSymbol(Function* f, Mangler &mangler) { // add to list of defined symbols diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h index 7f475d40aa..a19acc0d73 100644 --- a/tools/lto/LTOModule.h +++ b/tools/lto/LTOModule.h @@ -55,6 +55,7 @@ struct LTOModule { std::string& errMsg); const char* getTargetTriple(); + void setTargetTriple(const char*); uint32_t getSymbolCount(); lto_symbol_attributes getSymbolAttributes(uint32_t index); const char* getSymbolName(uint32_t index); diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index cc841bdf03..a299dd187d 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -120,6 +120,14 @@ const char* lto_module_get_target_triple(lto_module_t mod) return mod->getTargetTriple(); } +// +// sets triple string with which the object will be codegened. +// +void lto_module_set_target_triple(lto_module_t mod, const char *triple) +{ + return mod->setTargetTriple(triple); +} + // // returns the number of symbols in the object module diff --git a/tools/lto/lto.exports b/tools/lto/lto.exports index 9011cf602b..a686b78845 100644 --- a/tools/lto/lto.exports +++ b/tools/lto/lto.exports @@ -6,6 +6,7 @@ lto_module_get_num_symbols lto_module_get_symbol_attribute lto_module_get_symbol_name lto_module_get_target_triple +lto_module_set_target_triple lto_module_is_object_file lto_module_is_object_file_for_target lto_module_is_object_file_in_memory -- cgit v1.2.3