summaryrefslogtreecommitdiff
path: root/tools/lto
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-03-17 00:36:11 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-03-17 00:36:11 +0000
commitf21b1058a194f411000bdd8000a8b675a7874056 (patch)
tree1d9ae970a490bdd64c51e774a31db3487dd211ff /tools/lto
parentd02c8b6cc1d07bfe37fc055eefdac21b1c9303cb (diff)
downloadllvm-f21b1058a194f411000bdd8000a8b675a7874056.tar.gz
llvm-f21b1058a194f411000bdd8000a8b675a7874056.tar.bz2
llvm-f21b1058a194f411000bdd8000a8b675a7874056.tar.xz
Add support in the LTO library for loading an object from the middle
of an file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127781 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto')
-rw-r--r--tools/lto/LTOModule.cpp13
-rw-r--r--tools/lto/LTOModule.h7
-rw-r--r--tools/lto/lto.cpp15
-rw-r--r--tools/lto/lto.exports1
4 files changed, 32 insertions, 4 deletions
diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp
index bdea0c31a6..9de3d5ffce 100644
--- a/tools/lto/LTOModule.cpp
+++ b/tools/lto/LTOModule.cpp
@@ -95,10 +95,19 @@ LTOModule *LTOModule::makeLTOModule(const char *path,
}
LTOModule *LTOModule::makeLTOModule(int fd, const char *path,
- off_t size,
+ size_t size,
+ std::string &errMsg) {
+ return makeLTOModule(fd, path, size, size, 0, errMsg);
+}
+
+LTOModule *LTOModule::makeLTOModule(int fd, const char *path,
+ size_t file_size,
+ size_t map_size,
+ off_t offset,
std::string &errMsg) {
OwningPtr<MemoryBuffer> buffer;
- if (error_code ec = MemoryBuffer::getOpenFile(fd, path, buffer, size)) {
+ if (error_code ec = MemoryBuffer::getOpenFile(fd, path, buffer, file_size,
+ map_size, offset, false)) {
errMsg = ec.message();
return NULL;
}
diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h
index 21e8475177..303151293b 100644
--- a/tools/lto/LTOModule.h
+++ b/tools/lto/LTOModule.h
@@ -52,7 +52,12 @@ struct LTOModule {
static LTOModule* makeLTOModule(const char* path,
std::string& errMsg);
static LTOModule* makeLTOModule(int fd, const char *path,
- off_t size,
+ size_t size,
+ std::string& errMsg);
+ static LTOModule* makeLTOModule(int fd, const char *path,
+ size_t file_size,
+ size_t map_size,
+ off_t offset,
std::string& errMsg);
static LTOModule* makeLTOModule(const void* mem, size_t length,
std::string& errMsg);
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index f48570c149..cbac047c75 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -95,12 +95,25 @@ lto_module_t lto_module_create(const char* path)
// loads an object file from disk
// returns NULL on error (check lto_get_error_message() for details)
//
-lto_module_t lto_module_create_from_fd(int fd, const char *path, off_t size)
+lto_module_t lto_module_create_from_fd(int fd, const char *path, size_t size)
{
return LTOModule::makeLTOModule(fd, path, size, sLastErrorString);
}
//
+// loads an object file from disk
+// returns NULL on error (check lto_get_error_message() for details)
+//
+lto_module_t lto_module_create_from_fd_at_offset(int fd, const char *path,
+ size_t file_size,
+ size_t map_size,
+ off_t offset)
+{
+ return LTOModule::makeLTOModule(fd, path, file_size, map_size,
+ offset, sLastErrorString);
+}
+
+//
// loads an object file from memory
// returns NULL on error (check lto_get_error_message() for details)
//
diff --git a/tools/lto/lto.exports b/tools/lto/lto.exports
index a3740911ed..04b37e1f45 100644
--- a/tools/lto/lto.exports
+++ b/tools/lto/lto.exports
@@ -2,6 +2,7 @@ lto_get_error_message
lto_get_version
lto_module_create
lto_module_create_from_fd
+lto_module_create_from_fd_at_offset
lto_module_create_from_memory
lto_module_get_num_symbols
lto_module_get_symbol_attribute