[llvm-dev] Building GC on statepoint-example

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[llvm-dev] Building GC on statepoint-example

David Jones via llvm-dev
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 using a format documented here. 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

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Building GC on statepoint-example

David Jones via llvm-dev
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 <[hidden email]> on behalf of Jordan Rudd via llvm-dev <[hidden email]>
Sent: Thursday, November 1, 2018 2:06 PM
To: [hidden email]
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 using a format documented here. 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

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Building GC on statepoint-example

David Jones via llvm-dev

Jordon,


I just submitted a change to the docs to hopefully address your confusion.  Can you take a look and let me know if you have further questions?  Start with the revised Stack Map Format section.


Philip


p.s. I just submitted this and it'll take a few minutes to refresh.  In the meantime, you could look at the diff for 346405.


On 11/2/18 2:52 PM, Jordan Rudd via llvm-dev wrote:
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 [hidden email] on behalf of Jordan Rudd via llvm-dev [hidden email]
Sent: Thursday, November 1, 2018 2:06 PM
To: [hidden email]
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 using a format documented here. 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

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Building GC on statepoint-example

David Jones via llvm-dev
Yes, that's more clear (you duplicated the word specified, minor typo).

The other part that threw me off was that the section name was only identified "for Darwin." I was able to find the section via assembly inspection, but that threw me off a bit.

From: Philip Reames <[hidden email]>
Sent: Thursday, November 8, 2018 7:21 AM
To: Jordan Rudd; [hidden email]
Subject: Re: [llvm-dev] Building GC on statepoint-example
 

Jordon,


I just submitted a change to the docs to hopefully address your confusion.  Can you take a look and let me know if you have further questions?  Start with the revised Stack Map Format section.


Philip


p.s. I just submitted this and it'll take a few minutes to refresh.  In the meantime, you could look at the diff for 346405.


On 11/2/18 2:52 PM, Jordan Rudd via llvm-dev wrote:
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 [hidden email] on behalf of Jordan Rudd via llvm-dev [hidden email]
Sent: Thursday, November 1, 2018 2:06 PM
To: [hidden email]
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 using a format documented here. 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

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reply | Threaded
Open this post in threaded view
|

Re: [llvm-dev] Building GC on statepoint-example

David Jones via llvm-dev

Both should be fixed in 346416.


Philip


On 11/8/18 9:06 AM, Jordan Rudd wrote:
Yes, that's more clear (you duplicated the word specified, minor typo).

The other part that threw me off was that the section name was only identified "for Darwin." I was able to find the section via assembly inspection, but that threw me off a bit.

From: Philip Reames [hidden email]
Sent: Thursday, November 8, 2018 7:21 AM
To: Jordan Rudd; [hidden email]
Subject: Re: [llvm-dev] Building GC on statepoint-example
 

Jordon,


I just submitted a change to the docs to hopefully address your confusion.  Can you take a look and let me know if you have further questions?  Start with the revised Stack Map Format section.


Philip


p.s. I just submitted this and it'll take a few minutes to refresh.  In the meantime, you could look at the diff for 346405.


On 11/2/18 2:52 PM, Jordan Rudd via llvm-dev wrote:
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 [hidden email] on behalf of Jordan Rudd via llvm-dev [hidden email]
Sent: Thursday, November 1, 2018 2:06 PM
To: [hidden email]
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 using a format documented here. 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

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev