[llvm-commits] [llvm] r72823 - in /llvm/trunk: include/llvm-c/lto.h tools/lto/LTOCodeGenerator.cpp tools/lto/LTOCodeGenerator.h tools/lto/lto.cpp tools/lto/lto.exports
Nick Kledzik
kledzik at apple.com
Wed Jun 3 17:28:45 PDT 2009
Author: kledzik
Date: Wed Jun 3 19:28:45 2009
New Revision: 72823
URL: http://llvm.org/viewvc/llvm-project?rev=72823&view=rev
Log:
<rdar://problem/6940611> libLTO.dylib needs to let linker specify path to assembler
Add lto_codegen_set_assembler_path() API which allows the linker to specify the
path to the assembler tool to run. When assembler is used (instead of compiler)
different command line options are used.
Add LTO_API_VERSION #define so clients (linkers) can conditionalize use of new APIs.
Modified:
llvm/trunk/include/llvm-c/lto.h
llvm/trunk/tools/lto/LTOCodeGenerator.cpp
llvm/trunk/tools/lto/LTOCodeGenerator.h
llvm/trunk/tools/lto/lto.cpp
llvm/trunk/tools/lto/lto.exports
Modified: llvm/trunk/include/llvm-c/lto.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=72823&r1=72822&r2=72823&view=diff
==============================================================================
--- llvm/trunk/include/llvm-c/lto.h (original)
+++ llvm/trunk/include/llvm-c/lto.h Wed Jun 3 19:28:45 2009
@@ -19,6 +19,8 @@
#include <stdbool.h>
#include <stddef.h>
+#define LTO_API_VERSION 3
+
typedef enum {
LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */
LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
@@ -208,6 +210,14 @@
/**
+ * Sets the location of the assembler tool to run. If not set, libLTO
+ * will use gcc to invoke the assembler.
+ */
+extern void
+lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
+
+
+/**
* Adds to a list of all global symbols that must exist in the final
* generated code. If a function is not listed, it might be
* inlined into every usage and optimized away.
Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=72823&r1=72822&r2=72823&view=diff
==============================================================================
--- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
+++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Wed Jun 3 19:28:45 2009
@@ -72,7 +72,7 @@
: _linker("LinkTimeOptimizer", "ld-temp.o"), _target(NULL),
_emitDwarfDebugInfo(false), _scopeRestrictionsDone(false),
_codeModel(LTO_CODEGEN_PIC_MODEL_DYNAMIC),
- _nativeObjectFile(NULL), _gccPath(NULL)
+ _nativeObjectFile(NULL), _gccPath(NULL), _assemblerPath(NULL)
{
}
@@ -128,6 +128,13 @@
_gccPath = new sys::Path(path);
}
+void LTOCodeGenerator::setAssemblerPath(const char* path)
+{
+ if ( _assemblerPath )
+ delete _assemblerPath;
+ _assemblerPath = new sys::Path(path);
+}
+
void LTOCodeGenerator::addMustPreserveSymbol(const char* sym)
{
_mustPreserveSymbols[sym] = 1;
@@ -220,13 +227,18 @@
bool LTOCodeGenerator::assemble(const std::string& asmPath,
const std::string& objPath, std::string& errMsg)
{
- sys::Path gcc;
- if ( _gccPath ) {
- gcc = *_gccPath;
+ sys::Path tool;
+ bool needsCompilerOptions = true;
+ if ( _assemblerPath ) {
+ tool = *_assemblerPath;
+ needsCompilerOptions = false;
+ }
+ else if ( _gccPath ) {
+ tool = *_gccPath;
} else {
// find compiler driver
- gcc = sys::Program::FindProgramByName("gcc");
- if ( gcc.isEmpty() ) {
+ tool = sys::Program::FindProgramByName("gcc");
+ if ( tool.isEmpty() ) {
errMsg = "can't locate gcc";
return true;
}
@@ -235,7 +247,7 @@
// build argument list
std::vector<const char*> args;
std::string targetTriple = _linker.getModule()->getTargetTriple();
- args.push_back(gcc.c_str());
+ args.push_back(tool.c_str());
if ( targetTriple.find("darwin") != targetTriple.size() ) {
if (strncmp(targetTriple.c_str(), "i386-apple-", 11) == 0) {
args.push_back("-arch");
@@ -275,16 +287,18 @@
args.push_back("armv6");
}
}
- args.push_back("-c");
- args.push_back("-x");
- args.push_back("assembler");
+ if ( needsCompilerOptions ) {
+ args.push_back("-c");
+ args.push_back("-x");
+ args.push_back("assembler");
+ }
args.push_back("-o");
args.push_back(objPath.c_str());
args.push_back(asmPath.c_str());
args.push_back(0);
// invoke assembler
- if ( sys::Program::ExecuteAndWait(gcc, &args[0], 0, 0, 0, 0, &errMsg) ) {
+ if ( sys::Program::ExecuteAndWait(tool, &args[0], 0, 0, 0, 0, &errMsg) ) {
errMsg = "error in assembly";
return true;
}
Modified: llvm/trunk/tools/lto/LTOCodeGenerator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.h?rev=72823&r1=72822&r2=72823&view=diff
==============================================================================
--- llvm/trunk/tools/lto/LTOCodeGenerator.h (original)
+++ llvm/trunk/tools/lto/LTOCodeGenerator.h Wed Jun 3 19:28:45 2009
@@ -37,6 +37,7 @@
bool setDebugInfo(lto_debug_model, std::string& errMsg);
bool setCodePICModel(lto_codegen_model, std::string& errMsg);
void setGccPath(const char* path);
+ void setAssemblerPath(const char* path);
void addMustPreserveSymbol(const char* sym);
bool writeMergedModules(const char* path,
std::string& errMsg);
@@ -61,6 +62,7 @@
llvm::MemoryBuffer* _nativeObjectFile;
std::vector<const char*> _codegenOptions;
llvm::sys::Path* _gccPath;
+ llvm::sys::Path* _assemblerPath;
};
#endif // LTO_CODE_GENERATOR_H
Modified: llvm/trunk/tools/lto/lto.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=72823&r1=72822&r2=72823&view=diff
==============================================================================
--- llvm/trunk/tools/lto/lto.cpp (original)
+++ llvm/trunk/tools/lto/lto.cpp Wed Jun 3 19:28:45 2009
@@ -210,6 +210,14 @@
}
//
+// sets the path to the assembler tool
+//
+void lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path)
+{
+ cg->setAssemblerPath(path);
+}
+
+//
// 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
// inlined into every usage and optimized away.
Modified: llvm/trunk/tools/lto/lto.exports
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.exports?rev=72823&r1=72822&r2=72823&view=diff
==============================================================================
--- llvm/trunk/tools/lto/lto.exports (original)
+++ llvm/trunk/tools/lto/lto.exports Wed Jun 3 19:28:45 2009
@@ -20,4 +20,5 @@
_lto_codegen_set_pic_model
_lto_codegen_write_merged_modules
_lto_codegen_debug_options
+_lto_codegen_set_assembler_path
More information about the llvm-commits
mailing list