<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
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.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The documentation for statepoint-example says:</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<i><span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important">The stack map format generated by this GC strategy can be
 found in the<span> </span></span><a href="https://llvm.org/docs/StackMaps.html#stackmap-section" style="color: rgb(202, 121, 0); text-decoration: underline; font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255)"><span>Stack
 Map Section</span></a><span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><span> </span>using a format documented<span> </span></span><a href="https://llvm.org/docs/Statepoints.html#statepoint-stackmap-format" style="color: rgb(202, 121, 0); text-decoration: underline; font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255)"><span>here</span></a><span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important">.
 This format is intended to be the standard format supported by LLVM going forward.</span></i><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important">Ok, great, I see the format. But... how do I access the Stack
 Map from my runtime? Where is it? </span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important">The link seems to send me to this instruction:</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><i><span style=" font-size: 14px; background-color: rgb(255, 255, 255); display: inline !important">A
 JIT compiler can easily access this section by providing its own memory manager via the LLVM C API</span><code style="font-family: Consolas, "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-size: 0.95em; background-color: rgb(255, 255, 255)"><span style="hyphens: none;">LLVMCreateSimpleMCJITMemoryManager()</span></code><span style=" font-size: 14px; background-color: rgb(255, 255, 255); display: inline !important">.
 When creating the memory manager, the JIT provides a callback:</span><code style="font-family: Consolas, "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-size: 0.95em; background-color: rgb(255, 255, 255)"><span style="hyphens: none;">LLVMMemoryManagerAllocateDataSectionCallback()</span></code><span style=" font-size: 14px; background-color: rgb(255, 255, 255); display: inline !important">.
 When LLVM creates this section, it invokes the callback and passes the section name.</span></i><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style=" font-family: "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255); display: inline !important"><span style=" font-size: 14px; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></span></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;">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.<br>
<br>
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.</span></font></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;"><br>
</span></font></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;">What am I missing? </span></font></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;"><br>
</span></font></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;">Thanks!</span></font></div>
<div style="color: rgb(0, 0, 0);"><font face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="font-size: 14px;">Jordan</span></font></div>
</body>
</html>