After a quick glance at the generated description files looks like ARM has correct size information, but X86 always returns 0. ARM is easy because its fixed length.<br><br><div class="gmail_quote">On Tue, Oct 23, 2012 at 5:23 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    <div>On 10/23/12 7:19 PM, Craig Topper
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      What function provides the encoding length? X86 in particular is
      so difficult to encode that only the old style JIT and the MC Code
      Emitter could possibly know how many bytes something takes.<br>
    </blockquote>
    <br></div>
    The getSize() method of MCInstrDesc which can be fetched from a
    MachineInstr using the getDesc() method:<br>
    <br>
<a href="http://llvm.org/doxygen/classllvm_1_1MCInstrDesc.html#ae8a17b854d9787d11797d9334a22647d" target="_blank">http://llvm.org/doxygen/classllvm_1_1MCInstrDesc.html#ae8a17b854d9787d11797d9334a22647d</a><br>
    <br>
    Does this method not work as advertised in Doxygen?<br>
    <br>
    -- John T.<div class="im"><br>
    <br>
    <blockquote type="cite"><br>
      <div class="gmail_quote">
        On Tue, Oct 23, 2012 at 11:58 AM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span> wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
          Dear All,<br>
          <br>
          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.<br>
          <br>
          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?<br>
          <br>
          Thanks in advance for any help provided.<br>
          <br>
          -- John T.<br>
          <br>
          _______________________________________________<br>
          LLVM Developers mailing list<br>
          <a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
          <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
        </blockquote>
      </div>
      <br>
      <br clear="all">
      <br>
      -- <br>
      ~Craig<br>
    </blockquote>
    <br>
  </div></div>

</blockquote></div><br><br clear="all"><br>-- <br>~Craig<br>