diff options
| author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-04-24 09:56:15 +0000 |
|---|---|---|
| committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-04-24 09:56:15 +0000 |
| commit | b6c47a5bd23c848b5f4105f6a15418fc530f4d8d (patch) | |
| tree | d2927b94819493c8acbabf554395530bb0a93654 /llvm/lib | |
| parent | 493e0a6ad0a5b69eb7f6231399a16f4211285619 (diff) | |
| download | bcm5719-llvm-b6c47a5bd23c848b5f4105f6a15418fc530f4d8d.tar.gz bcm5719-llvm-b6c47a5bd23c848b5f4105f6a15418fc530f4d8d.zip | |
[asan] Fix instrumentation of x86 intel syntax inline assembly.
Patch by Yuri Gorshenin.
llvm-svn: 207092
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp index 51c378976c8..4829165892e 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp @@ -82,60 +82,60 @@ void X86AddressSanitizer::InstrumentMOV( MCContext &Ctx, MCStreamer &Out) { // Access size in bytes. unsigned AccessSize = 0; - unsigned long OpIx = Operands.size(); + + // FIXME: use MCInstrDesc to get proper value of IsWrite. + bool IsWrite = false; switch (Inst.getOpcode()) { case X86::MOV8mi: case X86::MOV8mr: AccessSize = 1; - OpIx = 2; + IsWrite = true; break; case X86::MOV8rm: AccessSize = 1; - OpIx = 1; break; case X86::MOV16mi: case X86::MOV16mr: AccessSize = 2; - OpIx = 2; + IsWrite = true; break; case X86::MOV16rm: AccessSize = 2; - OpIx = 1; break; case X86::MOV32mi: case X86::MOV32mr: AccessSize = 4; - OpIx = 2; + IsWrite = true; break; case X86::MOV32rm: AccessSize = 4; - OpIx = 1; break; case X86::MOV64mi32: case X86::MOV64mr: AccessSize = 8; - OpIx = 2; + IsWrite = true; break; case X86::MOV64rm: AccessSize = 8; - OpIx = 1; break; case X86::MOVAPDmr: case X86::MOVAPSmr: AccessSize = 16; - OpIx = 2; + IsWrite = true; break; case X86::MOVAPDrm: case X86::MOVAPSrm: AccessSize = 16; - OpIx = 1; break; - } - if (OpIx >= Operands.size()) + default: return; + } - const bool IsWrite = (OpIx != 1); - InstrumentMemOperand(Operands[OpIx], AccessSize, IsWrite, Ctx, Out); + for (unsigned Ix = 0; Ix < Operands.size(); ++Ix) { + MCParsedAsmOperand *Op = Operands[Ix]; + if (Op && Op->isMem()) + InstrumentMemOperand(Op, AccessSize, IsWrite, Ctx, Out); + } } class X86AddressSanitizer32 : public X86AddressSanitizer { |

