mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-27 06:54:30 +00:00
[llvm-c] Expose LLVM{Get,Set}ModuleIdentifier
Patch by Nicole Mazzuca <npmazzuca@gmail.com>. Differential Revision: http://reviews.llvm.org/D18736 llvm-svn: 265394
This commit is contained in:
parent
edd0920371
commit
160b188fc9
@ -480,6 +480,26 @@ LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
|
||||
*/
|
||||
void LLVMDisposeModule(LLVMModuleRef M);
|
||||
|
||||
/**
|
||||
* Obtain the identifier of a module.
|
||||
*
|
||||
* @param M Module to obtain identifier of
|
||||
* @param Len Out parameter which holds the length of the returned string.
|
||||
* @return The identifier of M.
|
||||
* @see Module::getModuleIdentifier()
|
||||
*/
|
||||
const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
|
||||
|
||||
/**
|
||||
* Set the identifier of a module to a string Ident with length Len.
|
||||
*
|
||||
* @param M The module to set identifier
|
||||
* @param Ident The string to set M's identifier to
|
||||
* @param Len Length of Ident
|
||||
* @see Module::setModuleIdentifier()
|
||||
*/
|
||||
void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len);
|
||||
|
||||
/**
|
||||
* Obtain the data layout for a module.
|
||||
*
|
||||
|
@ -157,6 +157,17 @@ void LLVMDisposeModule(LLVMModuleRef M) {
|
||||
delete unwrap(M);
|
||||
}
|
||||
|
||||
const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len) {
|
||||
auto &Str = unwrap(M)->getModuleIdentifier();
|
||||
*Len = Str.length();
|
||||
return Str.c_str();
|
||||
}
|
||||
|
||||
void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len) {
|
||||
unwrap(M)->setModuleIdentifier(StringRef(Ident, Len));
|
||||
}
|
||||
|
||||
|
||||
/*--.. Data layout .........................................................--*/
|
||||
const char *LLVMGetDataLayoutStr(LLVMModuleRef M) {
|
||||
return unwrap(M)->getDataLayoutStr().c_str();
|
||||
|
@ -865,9 +865,18 @@ int llvm_echo(void) {
|
||||
LLVMEnablePrettyStackTrace();
|
||||
|
||||
LLVMModuleRef Src = llvm_load_module(false, true);
|
||||
|
||||
size_t Len;
|
||||
const char *ModuleName = LLVMGetModuleIdentifier(Src, &Len);
|
||||
LLVMContextRef Ctx = LLVMContextCreate();
|
||||
LLVMModuleRef M = LLVMModuleCreateWithNameInContext("<stdin>", Ctx);
|
||||
LLVMModuleRef M = LLVMModuleCreateWithNameInContext(ModuleName, Ctx);
|
||||
|
||||
// This whole switcharound is done because the C API has no way to
|
||||
// set the source_filename
|
||||
LLVMSetModuleIdentifier(M, "", 0);
|
||||
LLVMGetModuleIdentifier(M, &Len);
|
||||
if (Len != 0)
|
||||
report_fatal_error("LLVM{Set,Get}ModuleIdentifier failed");
|
||||
LLVMSetModuleIdentifier(M, ModuleName, strlen(ModuleName));
|
||||
|
||||
LLVMSetTarget(M, LLVMGetTarget(Src));
|
||||
LLVMSetModuleDataLayout(M, LLVMGetModuleDataLayout(Src));
|
||||
|
Loading…
x
Reference in New Issue
Block a user