[LLVMdev] How to Find Instruction Encoding for a MachineInstr

John Criswell criswell at illinois.edu
Tue Oct 23 11:58:48 PDT 2012


Dear All,

I'm enhancing a MachineFunctionPass that enforces control-flow 
integrity.  One of the things I want to do is to set the alignment of an 
instruction (by adding NOPs before it in the MachineBasicBlock or by 
emitting an alignment directive to the assembler) if it causes a 
specific sequence of bytes to be generated at a specific alignment.  The 
goal is to ensure that sequences of bytes used to label valid targets of 
an indirect branch (e.g., a return instruction) do not appear at a given 
alignment anywhere in a program other than for where I inserted them 
explicitly.

It looks like MachineInstr has a method for finding the length of the 
instruction's binary encoding, but I didn't see a method for finding the 
exact bytes that would be emitted from the MachineInstr.  Is there a way 
to do this in the MachineFunctionPass/MachineInstr infrastructure, or do 
I need to use something like the MC classes?

Thanks in advance for any help provided.

-- John T.




More information about the llvm-dev mailing list