How to read stack map

Hi all,

I was able to generate the Stack Map which is shown here https://llvm.org/docs/StackMaps.html#stack-map-format. Now I want to read those entries. What I did was, I manually change the .s file as shown below (Added the .globl __LLVM_StackMaps manually). Then I can read the entries using C code.

.globl __LLVM_StackMaps
__LLVM_StackMaps:
.byte 3
.byte 0
.short 0

I want to know, whether this is the correct approach. If not could you please suggest me the correct approach?

Really appreciate your input on this.

Thank you,
Kavindu

This is what I followed. https://stackoverflow.com/questions/8045108/use-label-in-assembly-from-c

LLVM puts stack map into special section, see https://llvm.org/docs/StackMaps.html#stackmap-section
You can use any ELF-reading library to extract/read it

What should I do, if I want to read the stack map within the same program where the stack map is generated? I think an ELF-reading library should be used externally.

Can’t I use this C API LLVMCreateSimpleMCJITMemoryManager()?

Kavindu,

I can’t parse your question. Can you rephrase?

Philip

This is almost certainly unrelated to your question if I’m even vaguely understanding you.

This is generally the right approach, yes.

You may also find include/llvm/Object/StackMapParser.h helpful.

Philip

Hi Philip,

Let’s say my code structure is as follows.

func foo() {}
func bar() {
call foo(); // this is a statepoint
}
func readLLVMStackMap() {}
func main() {
call bar(); // this is a statepoint
call readLLVMStackMap();
}

Actually, my question is that how do I read the LLVM Stack map. Simply I want to implement readLLVMStackMap method, in order to read the LLVM Stack Map. What is the best approach should I follow?

Philip, that was my question. So according to your previous answers, What I need to do is following this document https://llvm.org/docs/StackMaps.html#stack-map-section. Am I right?

Hi All,

I was able to read the stack map. This is my code https://github.com/KavinduZoysa/test-GCs/tree/master/statepoints