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
This commit is contained in:
Rafael Espindola 2010-08-09 21:09:46 +00:00
parent 3221834f8a
commit cbb170d057
6 changed files with 28 additions and 0 deletions

View File

@ -135,6 +135,12 @@ lto_module_dispose(lto_module_t mod);
extern const char* extern const char*
lto_module_get_target_triple(lto_module_t mod); lto_module_get_target_triple(lto_module_t mod);
/**
* Sets triple string with which the object will be codegened.
*/
extern void
lto_module_set_target_triple(lto_module_t mod, const char *triple);
/** /**
* Returns the number of symbols in the object module. * Returns the number of symbols in the object module.

View File

@ -68,6 +68,7 @@ namespace options {
static std::string as_path; static std::string as_path;
static std::vector<std::string> pass_through; static std::vector<std::string> pass_through;
static std::string extra_library_path; static std::string extra_library_path;
static std::string triple;
// Additional options to pass into the code generator. // Additional options to pass into the code generator.
// Note: This array will contain all plugin options which are not claimed // Note: This array will contain all plugin options which are not claimed
// as plugin exclusive to pass to the code generator. // as plugin exclusive to pass to the code generator.
@ -95,6 +96,8 @@ namespace options {
} else if (opt.startswith("pass-through=")) { } else if (opt.startswith("pass-through=")) {
llvm::StringRef item = opt.substr(strlen("pass-through=")); llvm::StringRef item = opt.substr(strlen("pass-through="));
pass_through.push_back(item.str()); pass_through.push_back(item.str());
} else if (opt == "mtriple=") {
triple = opt.substr(strlen("mtriple="));
} else if (opt == "emit-llvm") { } else if (opt == "emit-llvm") {
generate_bc_file = BC_ONLY; generate_bc_file = BC_ONLY;
} else if (opt == "also-emit-llvm") { } 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()); lto_get_error_message());
return LDPS_ERR; return LDPS_ERR;
} }
if (!options::triple.empty())
lto_module_set_target_triple(cf.M, options::triple.c_str());
cf.handle = file->handle; cf.handle = file->handle;
unsigned sym_count = lto_module_get_num_symbols(cf.M); unsigned sym_count = lto_module_get_num_symbols(cf.M);
cf.syms.reserve(sym_count); cf.syms.reserve(sym_count);

View File

@ -153,6 +153,11 @@ const char* LTOModule::getTargetTriple()
return _module->getTargetTriple().c_str(); return _module->getTargetTriple().c_str();
} }
void LTOModule::setTargetTriple(const char *triple)
{
_module->setTargetTriple(triple);
}
void LTOModule::addDefinedFunctionSymbol(Function* f, Mangler &mangler) void LTOModule::addDefinedFunctionSymbol(Function* f, Mangler &mangler)
{ {
// add to list of defined symbols // add to list of defined symbols

View File

@ -55,6 +55,7 @@ struct LTOModule {
std::string& errMsg); std::string& errMsg);
const char* getTargetTriple(); const char* getTargetTriple();
void setTargetTriple(const char*);
uint32_t getSymbolCount(); uint32_t getSymbolCount();
lto_symbol_attributes getSymbolAttributes(uint32_t index); lto_symbol_attributes getSymbolAttributes(uint32_t index);
const char* getSymbolName(uint32_t index); const char* getSymbolName(uint32_t index);

View File

@ -120,6 +120,14 @@ const char* lto_module_get_target_triple(lto_module_t mod)
return mod->getTargetTriple(); 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 // returns the number of symbols in the object module

View File

@ -6,6 +6,7 @@ lto_module_get_num_symbols
lto_module_get_symbol_attribute lto_module_get_symbol_attribute
lto_module_get_symbol_name lto_module_get_symbol_name
lto_module_get_target_triple lto_module_get_target_triple
lto_module_set_target_triple
lto_module_is_object_file lto_module_is_object_file
lto_module_is_object_file_for_target lto_module_is_object_file_for_target
lto_module_is_object_file_in_memory lto_module_is_object_file_in_memory