mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Make it possible to set the flags passed to the assembler.
Nick, please review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110705 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9db3ea46cb
commit
98197e55c1
@ -220,6 +220,12 @@ lto_codegen_set_gcc_path(lto_code_gen_t cg, const char* path);
|
|||||||
extern void
|
extern void
|
||||||
lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
|
lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets extra arguments that libLTO should pass to the assembler.
|
||||||
|
*/
|
||||||
|
extern void
|
||||||
|
lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
|
||||||
|
int nargs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds to a list of all global symbols that must exist in the final
|
* Adds to a list of all global symbols that must exist in the final
|
||||||
|
@ -66,6 +66,7 @@ namespace options {
|
|||||||
static generate_bc generate_bc_file = BC_NO;
|
static generate_bc generate_bc_file = BC_NO;
|
||||||
static std::string bc_path;
|
static std::string bc_path;
|
||||||
static std::string as_path;
|
static std::string as_path;
|
||||||
|
static std::vector<std::string> as_args;
|
||||||
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;
|
static std::string triple;
|
||||||
@ -91,6 +92,9 @@ namespace options {
|
|||||||
} else {
|
} else {
|
||||||
as_path = opt.substr(strlen("as="));
|
as_path = opt.substr(strlen("as="));
|
||||||
}
|
}
|
||||||
|
} else if (opt.startswith("as-arg=")) {
|
||||||
|
llvm::StringRef item = opt.substr(strlen("as-arg="));
|
||||||
|
as_args.push_back(item.str());
|
||||||
} else if (opt.startswith("extra-library-path=")) {
|
} else if (opt.startswith("extra-library-path=")) {
|
||||||
extra_library_path = opt.substr(strlen("extra_library_path="));
|
extra_library_path = opt.substr(strlen("extra_library_path="));
|
||||||
} else if (opt.startswith("pass-through=")) {
|
} else if (opt.startswith("pass-through=")) {
|
||||||
@ -401,6 +405,14 @@ static ld_plugin_status all_symbols_read_hook(void) {
|
|||||||
sys::Path p = sys::Program::FindProgramByName(options::as_path);
|
sys::Path p = sys::Program::FindProgramByName(options::as_path);
|
||||||
lto_codegen_set_assembler_path(cg, p.c_str());
|
lto_codegen_set_assembler_path(cg, p.c_str());
|
||||||
}
|
}
|
||||||
|
if (!options::as_args.empty()) {
|
||||||
|
std::vector<const char *> as_args_p;
|
||||||
|
for (std::vector<std::string>::iterator I = options::as_args.begin(),
|
||||||
|
E = options::as_args.end(); I != E; ++I) {
|
||||||
|
as_args_p.push_back(I->c_str());
|
||||||
|
}
|
||||||
|
lto_codegen_set_assembler_args(cg, &as_args_p[0], as_args_p.size());
|
||||||
|
}
|
||||||
// Pass through extra options to the code generator.
|
// Pass through extra options to the code generator.
|
||||||
if (!options::extra.empty()) {
|
if (!options::extra.empty()) {
|
||||||
for (std::vector<std::string>::iterator it = options::extra.begin();
|
for (std::vector<std::string>::iterator it = options::extra.begin();
|
||||||
|
@ -126,6 +126,14 @@ void LTOCodeGenerator::setAssemblerPath(const char* path)
|
|||||||
_assemblerPath = new sys::Path(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)
|
void LTOCodeGenerator::addMustPreserveSymbol(const char* sym)
|
||||||
{
|
{
|
||||||
_mustPreserveSymbols[sym] = 1;
|
_mustPreserveSymbols[sym] = 1;
|
||||||
@ -257,6 +265,11 @@ bool LTOCodeGenerator::assemble(const std::string& asmPath,
|
|||||||
args.push_back("-c");
|
args.push_back("-c");
|
||||||
args.push_back("-x");
|
args.push_back("-x");
|
||||||
args.push_back("assembler");
|
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("-o");
|
||||||
args.push_back(objPath.c_str());
|
args.push_back(objPath.c_str());
|
||||||
|
@ -37,6 +37,7 @@ struct LTOCodeGenerator {
|
|||||||
bool setDebugInfo(lto_debug_model, std::string& errMsg);
|
bool setDebugInfo(lto_debug_model, std::string& errMsg);
|
||||||
bool setCodePICModel(lto_codegen_model, std::string& errMsg);
|
bool setCodePICModel(lto_codegen_model, std::string& errMsg);
|
||||||
void setAssemblerPath(const char* path);
|
void setAssemblerPath(const char* path);
|
||||||
|
void setAssemblerArgs(const char** args, int nargs);
|
||||||
void addMustPreserveSymbol(const char* sym);
|
void addMustPreserveSymbol(const char* sym);
|
||||||
bool writeMergedModules(const char* path,
|
bool writeMergedModules(const char* path,
|
||||||
std::string& errMsg);
|
std::string& errMsg);
|
||||||
@ -62,6 +63,7 @@ private:
|
|||||||
llvm::MemoryBuffer* _nativeObjectFile;
|
llvm::MemoryBuffer* _nativeObjectFile;
|
||||||
std::vector<const char*> _codegenOptions;
|
std::vector<const char*> _codegenOptions;
|
||||||
llvm::sys::Path* _assemblerPath;
|
llvm::sys::Path* _assemblerPath;
|
||||||
|
std::vector<std::string> _assemblerArgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LTO_CODE_GENERATOR_H
|
#endif // LTO_CODE_GENERATOR_H
|
||||||
|
@ -218,6 +218,16 @@ void lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path)
|
|||||||
cg->setAssemblerPath(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
|
// 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
|
// generated code. If a function is not listed there, it might be
|
||||||
|
Loading…
Reference in New Issue
Block a user