mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Fix option parsing in the gold plugin.
This was broken when options were moved up in r191680. No test because this is specific LLVMgold.so/libLTO.so. Patch by Tom Roeder! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191829 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -79,6 +79,11 @@ struct LTOCodeGenerator {
|
|||||||
// and LTOCodeGenerator::writeMergedModules().
|
// and LTOCodeGenerator::writeMergedModules().
|
||||||
//
|
//
|
||||||
void setCodeGenDebugOptions(const char *opts);
|
void setCodeGenDebugOptions(const char *opts);
|
||||||
|
|
||||||
|
// Parse the options set in setCodeGenDebugOptions. Like
|
||||||
|
// setCodeGenDebugOptions, this must be called before
|
||||||
|
// LTOCodeGenerator::compilexxx() and LTOCodeGenerator::writeMergedModules()
|
||||||
|
void parseCodeGenDebugOptions();
|
||||||
|
|
||||||
// Write the merged module to the file specified by the given path.
|
// Write the merged module to the file specified by the given path.
|
||||||
// Return true on success.
|
// Return true on success.
|
||||||
|
@ -264,11 +264,6 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) {
|
|||||||
if (TargetMach != NULL)
|
if (TargetMach != NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// if options were requested, set them
|
|
||||||
if (!CodegenOptions.empty())
|
|
||||||
cl::ParseCommandLineOptions(CodegenOptions.size(),
|
|
||||||
const_cast<char **>(&CodegenOptions[0]));
|
|
||||||
|
|
||||||
std::string TripleStr = Linker.getModule()->getTargetTriple();
|
std::string TripleStr = Linker.getModule()->getTargetTriple();
|
||||||
if (TripleStr.empty())
|
if (TripleStr.empty())
|
||||||
TripleStr = sys::getDefaultTargetTriple();
|
TripleStr = sys::getDefaultTargetTriple();
|
||||||
@ -473,3 +468,10 @@ void LTOCodeGenerator::setCodeGenDebugOptions(const char *options) {
|
|||||||
CodegenOptions.push_back(strdup(o.first.str().c_str()));
|
CodegenOptions.push_back(strdup(o.first.str().c_str()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LTOCodeGenerator::parseCodeGenDebugOptions() {
|
||||||
|
// if options were requested, set them
|
||||||
|
if (!CodegenOptions.empty())
|
||||||
|
cl::ParseCommandLineOptions(CodegenOptions.size(),
|
||||||
|
const_cast<char **>(&CodegenOptions[0]));
|
||||||
|
}
|
||||||
|
@ -40,6 +40,9 @@ static std::string sLastErrorString;
|
|||||||
// *** Not thread safe ***
|
// *** Not thread safe ***
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
|
|
||||||
|
// Holds the command-line option parsing state of the LTO module.
|
||||||
|
static bool parsedOptions = false;
|
||||||
|
|
||||||
// Initialize the configured targets if they have not been initialized.
|
// Initialize the configured targets if they have not been initialized.
|
||||||
static void lto_initialize() {
|
static void lto_initialize() {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
@ -261,6 +264,10 @@ void lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg,
|
|||||||
/// that contains the merged contents of all modules added so far. Returns true
|
/// that contains the merged contents of all modules added so far. Returns true
|
||||||
/// on error (check lto_get_error_message() for details).
|
/// on error (check lto_get_error_message() for details).
|
||||||
bool lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path) {
|
bool lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path) {
|
||||||
|
if (!parsedOptions) {
|
||||||
|
cg->parseCodeGenDebugOptions();
|
||||||
|
parsedOptions = true;
|
||||||
|
}
|
||||||
return !cg->writeMergedModules(path, sLastErrorString);
|
return !cg->writeMergedModules(path, sLastErrorString);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,6 +278,10 @@ bool lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path) {
|
|||||||
/// lto_codegen_compile() is called again. On failure, returns NULL (check
|
/// lto_codegen_compile() is called again. On failure, returns NULL (check
|
||||||
/// lto_get_error_message() for details).
|
/// lto_get_error_message() for details).
|
||||||
const void *lto_codegen_compile(lto_code_gen_t cg, size_t *length) {
|
const void *lto_codegen_compile(lto_code_gen_t cg, size_t *length) {
|
||||||
|
if (!parsedOptions) {
|
||||||
|
cg->parseCodeGenDebugOptions();
|
||||||
|
parsedOptions = true;
|
||||||
|
}
|
||||||
return cg->compile(length, DisableOpt, DisableInline, DisableGVNLoadPRE,
|
return cg->compile(length, DisableOpt, DisableInline, DisableGVNLoadPRE,
|
||||||
sLastErrorString);
|
sLastErrorString);
|
||||||
}
|
}
|
||||||
@ -279,6 +290,10 @@ const void *lto_codegen_compile(lto_code_gen_t cg, size_t *length) {
|
|||||||
/// native object file. The name of the file is written to name. Returns true on
|
/// native object file. The name of the file is written to name. Returns true on
|
||||||
/// error.
|
/// error.
|
||||||
bool lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) {
|
bool lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) {
|
||||||
|
if (!parsedOptions) {
|
||||||
|
cg->parseCodeGenDebugOptions();
|
||||||
|
parsedOptions = true;
|
||||||
|
}
|
||||||
return !cg->compile_to_file(name, DisableOpt, DisableInline, DisableGVNLoadPRE,
|
return !cg->compile_to_file(name, DisableOpt, DisableInline, DisableGVNLoadPRE,
|
||||||
sLastErrorString);
|
sLastErrorString);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user