[llvm-dev] LLVMGetBitcodeModuleInContext2 problem

Toshiyasu Morita via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 8 17:14:10 PST 2017


Made it a bit further. Here's the current code:

void llvm_load_IR_library(char *path)
{
        char *error;
        LLVMExecutionEngineRef engine;
        object0_t* (*func)(void), *output;
        LLVMContextRef global_context;
        LLVMMemoryBufferRef module;
        LLVMModuleRef ir_lib_module;
        bool flag;

        printf("loading IR library from path: %s\n", path);

        LLVMCreateMemoryBufferWithContentsOfFile(path, &module, &error);

        global_context = LLVMGetGlobalContext();

        flag = LLVMGetBitcodeModuleInContext2(global_context, module,
&ir_lib_module);

        printf("LLVMGetBitcodeModuleInContext2() returned %d\n", flag);

        LLVMVerifyModule(ir_lib_module, LLVMAbortProcessAction, &error);
        LLVMDumpModule(ir_lib_module);

        if (LLVMCreateExecutionEngineForModule(&engine, ir_lib_module,
&error) != 0) {
                fprintf(stderr, "failed to create execution engine\n");
                abort();
        }

        // Call the function
        func = (object0_t * (*)(void))LLVMGetFunctionAddress(engine,
"test");
        output = (*func)();
}

when this code is executed, i see:

...
LLVMGetBitcodeModuleInContext2() returned 0
; ModuleID = '/home/toshi/tensyr/debug_build/test.bc'
source_filename = "test.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@str = private unnamed_addr constant [16 x i8] c"test successful\00"

; Materializable
; Function Attrs: nounwind uwtable
define void @test() local_unnamed_addr #0 {}

; Function Attrs: nounwind
declare i32 @puts(i8* nocapture readonly) #1

attributes #0 = { nounwind uwtable "disable-tail-calls"="false"
"less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
"no-infs-fp-math"="false" "no-jump-tables"="false"
"no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false"
"use-soft-float"="false" }
attributes #1 = { nounwind }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.9.1 (tags/RELEASE_391/final)"}
failed to create execution engine
Aborted (core dumped)

Not sure why LLVMCreateExecutionEngineForModule is failing.
Any help appreciated.

Toshi


On Wed, Mar 8, 2017 at 3:56 PM, Toshiyasu Morita <toshi at tensyr.com> wrote:

> Or do you mean I need to load the module into memory before calling
> LLVMGetBitcodeModuleInContext2?
>
>
> > Yes, you need to load the module into memory first.
> > LLVMCreateMemoryBufferWithContentsOfFile will do that for you.
>
> Thanks!
>
>
> On Wed, Mar 8, 2017 at 3:48 PM, Friedman, Eli <efriedma at codeaurora.org>
> wrote:
>
>> On 3/8/2017 3:44 PM, Toshiyasu Morita wrote:
>>
>>
>>>         module_path = LLVMCreateMemoryBufferWithMemoryRange(path,
>>> strlen(path), "path", 1);
>>>
>>
>> LLVMCreateMemoryBufferWithContentsOfFile takes a path.
>>
>> Erm...no...the code is calling LLVMCreateMemoryBufferWithMemoryRange,
>> not LLVMCreateMemoryBufferWithContentsOfFile...
>>
>> Or do you mean I need to load the module into memory before calling
>> LLVMGetBitcodeModuleInContext2?
>>
>>
>> Yes, you need to load the module into memory first.
>> LLVMCreateMemoryBufferWithContentsOfFile will do that for you.
>>
>> -Eli
>>
>> --
>> Employee of Qualcomm Innovation Center, Inc.
>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170308/b4277117/attachment.html>


More information about the llvm-dev mailing list