Skip to content

Commit

Permalink
LTO API: add lto_module_create_from_memory_with_path.
Browse files Browse the repository at this point in the history
This function adds an extra path argument to lto_module_create_from_memory.
The path argument will be passed to makeBuffer to make sure the MemoryBuffer
has a name and the created module has a module identifier.

This is mainly for emitting warning messages from the linker. When we emit
warning message on a module, we can use the module identifier.

rdar://15985737


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201114 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
manman-ren committed Feb 10, 2014
1 parent 4822c5f commit f3fc8c9
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 9 deletions.
12 changes: 11 additions & 1 deletion include/llvm-c/lto.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -175,6 +175,16 @@ lto_module_create(const char* path);
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).
Expand Down
8 changes: 5 additions & 3 deletions include/llvm/LTO/LTOModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ struct LTOModule {
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() {
Expand Down Expand Up @@ -222,8 +223,9 @@ struct LTOModule {
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
11 changes: 6 additions & 5 deletions lib/LTO/LTOModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down
11 changes: 11 additions & 0 deletions tools/lto/lto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tools/lto/lto.exports
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f3fc8c9

Please sign in to comment.