[LLVMdev] How to prevent an instruction to be executed more than once?

Dale Johannesen dalej at apple.com
Thu Jun 24 11:00:12 PDT 2010


On Jun 24, 2010, at 7:00 AMPDT, Xinfinity wrote:

>
> I need to mark the beginning of some regions of code, that I want to  
> patch at
> runtime.
> In this case, I want to mark the beginning of BB4 and then to patch  
> the
> jumps, because I want to temporarily change the flow at runtime and  
> then to
> restore the previous version.
>
> In order to patch, I need to know the exact structure of the  
> generated code.
> So, I might have a BasicBlock like:
>
> BB4:
> call void asm "label_BB4:\0A", ""()
> call void asm "jmp label_BB5\0A", ""()
> br label %BB5

You can't prevent various optimizations from making multiple copies of  
asm's.  Also, branches from one asm to another, or into or out of an  
asm, do not work, in general.   All of this is the same as gcc.

I'm not sure if a branch within the same asm is powerful enough to do  
what you want, but the way to avoid the duplicate-label problem in  
that case is to use local labels, "jmp 0f" etc.  See gcc description  
of asm for examples.

> and in the generated code the br label %BB5 will actually never be  
> reached.
> But I introduce the jmp in inline asm in hexa code with .byte in  
> order to
> control if it is a long or a short jump and to know how many bytes  
> to patch.
>
> I tried to keep it short, please let me know if it is not clear  
> enough.
> Mainly, what I need to know statically is the beginning of the code
> contained in the BasicBlock BB4 and the size of jump, in the  
> generated code.
>
> Alexandra
> -- 
> View this message in context: http://old.nabble.com/How-to-prevent-an-instruction-to-be-executed-more-than-once--tp28981639p28982790.html
> Sent from the LLVM - Dev mailing list archive at Nabble.com.
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list