[llvm-dev] "corrupted size vs. prev_size" when calling ExecutionSession::lookup()
Yafei Liu via llvm-dev
llvm-dev at lists.llvm.org
Thu Sep 19 18:40:49 PDT 2019
HI Stefan, I'm new to llvm JIT, I *think *I used the ORC JIT, because I
use the library orcjit in CmakeList, and the namespace of JIT is llvm::orc,
any change I got MCJIT be mistake?
On Fri, Sep 20, 2019 at 12:51 AM <Yuanfang.Chen at sony.com> wrote:
> Hello Yafei,
>
>
>
> Could you open a bug report with the reproducer? This may expose an issue
> that shares the same root cause with PR35547 which gets a little bit tricky
> to reproduce.
>
>
>
> -Yuanfang
>
>
>
> *From:* llvm-dev <llvm-dev-bounces at lists.llvm.org> *On Behalf Of *Yafei
> Liu via llvm-dev
> *Sent:* Thursday, September 19, 2019 5:03 AM
> *To:* llvm-dev <llvm-dev at lists.llvm.org>
> *Subject:* [llvm-dev] "corrupted size vs. prev_size" when calling
> ExecutionSession::lookup()
>
>
>
> Hi, I wrote a compiler that generate IR code and run it on the JIT, and
> there randomly crashed due to "corrupted size vs. prev_size" depends on the
> IR code generated from the source code.
>
>
>
> Here's how I created the JIT:
>
>
>
>
>
> llvm::InitializeNativeTarget();
>
> llvm::InitializeNativeTargetAsmPrinter();
>
> llvm::InitializeNativeTargetAsmParser();
>
> // create jit
>
> llvm::orc::ExecutionSession ES;
>
> llvm::orc::RTDyldObjectLinkingLayer ObjectLayer(ES,
>
> []() { return
> std::make_unique<llvm::SectionMemoryManager>(); });
>
> auto JTMB = llvm::orc::JITTargetMachineBuilder::detectHost();
>
> auto DL = JTMB->getDefaultDataLayoutForTarget();
>
> llvm::orc::IRCompileLayer CompileLayer(ES, ObjectLayer,
> llvm::orc::ConcurrentIRCompiler(std::move(*JTMB)));
>
> llvm::orc::MangleAndInterner Mangle(ES, *DL);
>
> ES.getMainJITDylib().setGenerator(
>
>
> llvm::cantFail(llvm::orc::DynamicLibrarySearchGenerator::GetForCurrentProcess(*DL)));
>
>
>
> // ... large part to generate IR code
>
> .
>
>
>
> if (llvm::verifyModule(*AST::getModule(), &llvm::errs())) {
>
> return 0;
>
> } else {
>
> std::cout << "Verified success\n";
>
> }
>
>
>
> // run the generated IR code
>
> llvm::cantFail(CompileLayer.add(ES.getMainJITDylib(),
>
>
> llvm::orc::ThreadSafeModule(std::move(AST::takeModule()),
>
>
> AST::takeContext())));
>
>
>
> auto symbol = llvm::cantFail(ES.lookup({&ES.getMainJITDylib()},
> Mangle("main")));
>
>
>
> int (*entry)() = (decltype(entry)) symbol.getAddress();
>
> std::cout << entry() << std::endl;
>
>
>
> and the "corrupted size vs. prev_size" will happen if the IR code is this:
>
> ; ModuleID = 'top'
>
> source_filename = "top"
>
>
>
> @0 = global [3 x i32] [i32 1, i32 2, i32 3]
>
>
>
> define i32 @main() {
>
> %1 = alloca i32
>
> store i32 0, i32* %1
>
> br label %2
>
>
>
> ; <label>:2: ; preds = %0
>
> %3 = load i32, i32* %1
>
> ret i32 %3
>
> }
>
> I put this IR code to lli, and it works fine.
>
>
>
> So any idea why I get "corrupted size vs. prev_size" when calling calling
> ExecutionSession::lookup()?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190920/c692247e/attachment-0001.html>
More information about the llvm-dev
mailing list