[PATCH] [asan-asm-instrumentation] Prologue and epilogue are moved out from InstrumentMemOperand().
eugenis at google.com
Thu Aug 28 05:17:50 PDT 2014
Comment at: lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp:70
@@ +69,3 @@
+ unsigned ShadowReg;
+ unsigned ExpectedShadowValueReg;
+ unsigned AccessSize;
ExpectedShadowValueReg - if I understand this correctly, this is simply an available scratch register. Please find a better name.
Comment at: lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp:73
@@ +72,3 @@
+ bool IsWrite;
AsanContext seems unnecessary and it mixes information about a memory access (which actually changes between prologue and epilogue in case of MOVS) and the instrumentation state (i.e. the spilled scratch register). Also, there can be no more than 1 outstanding AsanContext at any time, and it can be merged with X86AddressSanitizer class.
- pass accesssize and iswrite to InstrumentMemOperand as before.
- pass the scratch register to InstrumentMemOperandPrologue and save it right in X86AddressSanitizer (smth like a set of extra spilled registers that must be restored in the epilogue).
Comment at: lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp:165
@@ +164,3 @@
+ InstrumentMemOperandPrologue(AsanCtx, Ctx, Out);
+ InstrumentMemOperandAny(Op, AsanCtx, Ctx, Out);
+ InstrumentMemOperandEpilogue(AsanCtx, Ctx, Out);
Too many InstrumentMemOperand* methods. Better repeat this prologue/epilogue calls in InstrumentMOV.
More information about the llvm-commits