Xiaoguang Wang
2014-Oct-30 21:01 UTC
[LLVMdev] Emit a jump instruction to a place inside basicblock
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. Sincerely, Xiaoguang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141030/15105541/attachment.html>
Eric Christopher
2014-Oct-30 22:28 UTC
[LLVMdev] Emit a jump instruction to a place inside basicblock
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141030/2e0e5257/attachment.html>
Xiaoguang Wang
2014-Oct-31 13:20 UTC
[LLVMdev] Emit a jump instruction to a place inside basicblock
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>