[llvm-dev] Is BlockAddress always correct ?
PenYiWang via llvm-dev
llvm-dev at lists.llvm.org
Fri Feb 28 05:56:46 PST 2020
Hi
I use BlockAddress to get the address of BasicBlock ,
and I use GlobalVariable 's getInitializer()
to pass the address of BasicBlock to the global variable of my own program
and then I print it out.
But , I found that BlockAddress is not always correct.
For example, some function's rsp (stack pointer) or other register is
maintained by caller,
so it would be like:
https://i.imgur.com/Rwuy5ju.png
0x42c37a: e8 c1 7a 00 00 call 433e40 <retrieve_url>
0x42c37f: 48 83 c4 20 add rsp,0x20
0x42c383: eb 00 jmp 42c385 <main+0x16b5>
What I want is the basic block which is "excatly" after the function call ,
0x42c37f
I want BlockAddress give me 0x42c37f.
But actually, the output my program print out is 0x42c383.
I guess "add rsp,0x20" is seen as within the basic block of the
function call.
Maybe reset the rsp (stack pointer) is part of the function call.
Can I say there is bug in BlockAddress ?
Or there is some bug in LLVM's backend?
How to solve this problem?
Force clang/llvm not to use caller-saved convention or something like that ?
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200228/7bd0fe76/attachment.html>
More information about the llvm-dev
mailing list