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

Eric Christopher echristo at gmail.com
Fri Oct 31 17:29:40 PDT 2014


On Fri Oct 31 2014 at 6:20:02 AM Xiaoguang Wang <xgwang09 at gmail.com> wrote:

>
> 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.
>
>
I might make an MI pass and make sure it happens last in the pipeline for
this, but I haven't given it a lot of thought.

-eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141101/b0eeff87/attachment.html>


More information about the llvm-dev mailing list