summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm-c/lto.h12
-rw-r--r--include/llvm/LTO/LTOModule.h8
-rw-r--r--lib/LTO/LTOModule.cpp11
-rw-r--r--tools/lto/lto.cpp11
-rw-r--r--tools/lto/lto.exports1
5 files changed, 34 insertions, 9 deletions
diff --git a/include/llvm-c/lto.h b/include/llvm-c/lto.h
index fbad2b5686..bff63ad096 100644
--- a/include/llvm-c/lto.h
+++ b/include/llvm-c/lto.h
@@ -40,7 +40,7 @@ typedef bool lto_bool_t;
* @{
*/
-#define LTO_API_VERSION 8
+#define LTO_API_VERSION 9
/**
* \since prior to LTO_API_VERSION=3
@@ -176,6 +176,16 @@ extern lto_module_t
lto_module_create_from_memory(const void* mem, size_t length);
/**
+ * Loads an object file from memory with an extra path argument.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=9
+ */
+extern lto_module_t
+lto_module_create_from_memory_with_path(const void* mem, size_t length,
+ const char *path);
+
+/**
* Loads an object file from disk. The seek point of fd is not preserved.
* Returns NULL on error (check lto_get_error_message() for details).
*
diff --git a/include/llvm/LTO/LTOModule.h b/include/llvm/LTO/LTOModule.h
index c70afa4196..a70b71fa2e 100644
--- a/include/llvm/LTO/LTOModule.h
+++ b/include/llvm/LTO/LTOModule.h
@@ -100,7 +100,8 @@ public:
std::string& errMsg);
static LTOModule *makeLTOModule(const void *mem, size_t length,
llvm::TargetOptions options,
- std::string &errMsg);
+ std::string &errMsg,
+ llvm::StringRef path = "");
/// getTargetTriple - Return the Module's target triple.
const char *getTargetTriple() {
@@ -222,8 +223,9 @@ private:
llvm::TargetOptions options,
std::string &errMsg);
- /// makeBuffer - Create a MemoryBuffer from a memory range.
- static llvm::MemoryBuffer *makeBuffer(const void *mem, size_t length);
+ /// Create a MemoryBuffer from a memory range with an optional name.
+ static llvm::MemoryBuffer *makeBuffer(const void *mem, size_t length,
+ llvm::StringRef name = "");
};
#endif // LTO_MODULE_H
diff --git a/lib/LTO/LTOModule.cpp b/lib/LTO/LTOModule.cpp
index 68b7313be7..909b92e888 100644
--- a/lib/LTO/LTOModule.cpp
+++ b/lib/LTO/LTOModule.cpp
@@ -128,8 +128,8 @@ LTOModule *LTOModule::makeLTOModule(int fd, const char *path,
LTOModule *LTOModule::makeLTOModule(const void *mem, size_t length,
TargetOptions options,
- std::string &errMsg) {
- OwningPtr<MemoryBuffer> buffer(makeBuffer(mem, length));
+ std::string &errMsg, StringRef path) {
+ OwningPtr<MemoryBuffer> buffer(makeBuffer(mem, length, path));
if (!buffer)
return NULL;
return makeLTOModule(buffer.take(), options, errMsg);
@@ -186,10 +186,11 @@ LTOModule *LTOModule::makeLTOModule(MemoryBuffer *buffer,
return Ret;
}
-/// makeBuffer - Create a MemoryBuffer from a memory range.
-MemoryBuffer *LTOModule::makeBuffer(const void *mem, size_t length) {
+/// Create a MemoryBuffer from a memory range with an optional name.
+MemoryBuffer *LTOModule::makeBuffer(const void *mem, size_t length,
+ StringRef name) {
const char *startPtr = (const char*)mem;
- return MemoryBuffer::getMemBuffer(StringRef(startPtr, length), "", false);
+ return MemoryBuffer::getMemBuffer(StringRef(startPtr, length), name, false);
}
/// objcClassNameFromExpression - Get string that the data pointer points to.
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index 967250acd7..d2f1ffdfa2 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -156,6 +156,17 @@ lto_module_t lto_module_create_from_memory(const void* mem, size_t length) {
return LTOModule::makeLTOModule(mem, length, Options, sLastErrorString);
}
+/// Loads an object file from memory with an extra path argument.
+/// Returns NULL on error (check lto_get_error_message() for details).
+lto_module_t lto_module_create_from_memory_with_path(const void* mem,
+ size_t length,
+ const char *path) {
+ lto_initialize();
+ llvm::TargetOptions Options;
+ lto_set_target_options(Options);
+ return LTOModule::makeLTOModule(mem, length, Options, sLastErrorString, path);
+}
+
/// lto_module_dispose - Frees all memory for a module. Upon return the
/// lto_module_t is no longer valid.
void lto_module_dispose(lto_module_t mod) {
diff --git a/tools/lto/lto.exports b/tools/lto/lto.exports
index 9b8dcb5f09..b10ab1a3e6 100644
--- a/tools/lto/lto.exports
+++ b/tools/lto/lto.exports
@@ -5,6 +5,7 @@ lto_module_create
lto_module_create_from_fd
lto_module_create_from_fd_at_offset
lto_module_create_from_memory
+lto_module_create_from_memory_with_path
lto_module_get_deplib
lto_module_get_linkeropt
lto_module_get_num_deplibs