[llvm-dev] Building GC on statepoint-example

Jordan Rudd via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 2 14:52:15 PDT 2018


Note: These instructions seem to be targeted towards people creating a JIT. My compiler compiles to native. I suppose I just need a reference to the stack location of the stack map, wherever that is.
________________________________
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Jordan Rudd via llvm-dev <llvm-dev at lists.llvm.org>
Sent: Thursday, November 1, 2018 2:06 PM
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] Building GC on statepoint-example

Hi,

I'm trying to build a gc using the statepoint-example strategy. However, after hours of searching, reading documentation and trying to find code examples online, I cannot figure out how to access the Stack Map.

The documentation for statepoint-example says:

The stack map format generated by this GC strategy can be found in the Stack Map Section<https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fllvm.org%2Fdocs%2FStackMaps.html%23stackmap-section&data=02%7C01%7C%7Ce9642625652f4a29fc1f08d6403dfa73%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636767032264647521&sdata=2cqSbyrmgxWfRh95yvOnwU6v42J1HRxI7dPwkSLARTY%3D&reserved=0> using a format documented here<https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fllvm.org%2Fdocs%2FStatepoints.html%23statepoint-stackmap-format&data=02%7C01%7C%7Ce9642625652f4a29fc1f08d6403dfa73%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636767032264647521&sdata=FhoqamuJExS4ZPyk4i2xnHkGS6A13f0v4wIszJ5oBRE%3D&reserved=0>. This format is intended to be the standard format supported by LLVM going forward.

Ok, great, I see the format. But... how do I access the Stack Map from my runtime? Where is it?

The link seems to send me to this instruction:

A JIT compiler can easily access this section by providing its own memory manager via the LLVM C APILLVMCreateSimpleMCJITMemoryManager(). When creating the memory manager, the JIT provides a callback:LLVMMemoryManagerAllocateDataSectionCallback(). When LLVM creates this section, it invokes the callback and passes the section name.

None of these API's are well-documented, so I'm kind of trying to guess what to do here. As a proof of concept, I tried building a do-nothing memory manager that calls APILLVMCreateSimpleMCJITMemoryManager on static initialization and passes the callbacks to it. I link the necessary llvm libs into my runtime and fire it up.

I can confirm that my safepoint poll code is getting hit. I can confirm that creating the "memory manager" is called on runtime boot and that it's succeeding. But the callbacks never get hit. Even if they were, it's unclear how I would use the parameters of those callbacks to locate the stack map.

What am I missing?

Thanks!
Jordan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181102/28bb9f1a/attachment.html>


More information about the llvm-dev mailing list