[LLVMdev] incorrect x86 instruction size calculation

Butterworth, John W. jbutterworth at mitre.org
Wed Dec 16 11:21:33 PST 2009



I'm trying to write some backends for LLVM that generate code that complies
with SFI validation rules by re-implementing SFI for the LLVM x86 backend
based on the Google NaCl project.


However, in trying to implement 32-byte code alignment,
X86InstrInfo::GetInstSizeInBytes() is returning incorrect instruction sizes
for certain instructions (that I have seen so far):  MOV32mi, LEA32r,
MOV32mr, and MOV32rm.  


MOV32mi is always calculated incorrectly while the remaining 3 are sometimes
calculated incorrectly.  Just to illustrate:  


8d 9c 24 30 0a 00 00                         LEA32r
calculated length: 7         ok

8d 6c 24 28                                          LEA32r
calculated length: 7         incorrect

8b 86 24 0a 39 00                               MOV32rm           calculated
length: 6         ok

8b 44 24 10                                          MOV32rm
calculated length: 7         incorrect

89 84 24 34 14 00 00                         MOV32mr           calculated
length: 7         ok

89 2c 24                                                MOV32mr
calculated length: 7         incorrect

c7 44 24 08 08 0a 00 00                    MOV32mi            calculated
length: 11       incorrect

c7 04 24 20 00 38 00                          MOV32mi            calculated
length: 11       incorrect  


Has anyone else encountered this?  If this turns out to be a bug, rather
than some misuse/misinterpretation of the function on my part then I can
resubmit it via that channel.  Also if I need to submit more information let
me know and I will do so.  







-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091216/ce54273e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3522 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091216/ce54273e/attachment.bin>

More information about the llvm-dev mailing list