[LLVMdev] Emit a jump instruction to a place inside basicblock

Xiaoguang Wang xgwang09 at gmail.com
Fri Oct 31 06:20:02 PDT 2014


On Thu, Oct 30, 2014 at 6:28 PM, Eric Christopher <echristo at gmail.com>
wrote:

>
>
> On Thu Oct 30 2014 at 2:01:24 PM Xiaoguang Wang <xgwang09 at gmail.com>
> wrote:
>
>>
>> On Thu, Oct 30, 2014 at 4:48 PM, Eric Christopher <echristo at gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Thu Oct 30 2014 at 1:16:38 PM Xiaoguang Wang <xgwang09 at gmail.com>
>>> wrote:
>>>
>>>> On Thu, Oct 30, 2014 at 2:33 PM, Robin Morisset <morisset at google.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> From my understanding of the LLVM IR, it is impossible to jump to the
>>>>> middle of a Basic Block, only to its beginning. But there is a
>>>>> splitBasicBlock function that seems like it might be useful to you, to make
>>>>> sure a basic block is starting at the exact place you want to jump.
>>>>>
>>>>> Best regards,
>>>>> Robin
>>>>>
>>>>
>>>> Thanks you all! I'm looking at splitBasicBlock and trying to use that.
>>>> BTW, is there a way at lower level of LLVM that can implement this
>>>> functionality? E.g. MCBasicBlock or MCInst?
>>>>
>>>>
>>> You are unlikely to want to do this at the MC level, maybe the MI level.
>>> What are you trying to accomplish?
>>>
>>> -eric
>>>
>> Thanks for the answer. I want to construct a table which can jump to the
>> address after a call instruction. And replace the call/ret instructions
>> with that indirection table. So to protect return address on stack.
>>
>>
> An MI level pass will likely work, but you might end up having issues
> replacing instructions. It'll be some effort though.
>
> -eric
>
Thanks Eric for your help. I'm reading the function
*Emitter<CodeEmitter>::runOnMachineFunction(MachineFunction
&MF)* in lib/Target/X86/X86CodeEmitter.cpp. And I hope this is the place I
have to modify for my purpose.

Sincerely,
Xiaoguang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141031/86326f4d/attachment.html>


More information about the llvm-dev mailing list