[PATCH] D97065: [dfsan] Add origin address calculation

stephan.yichao.zhao via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 19 11:04:05 PST 2021


stephan.yichao.zhao added inline comments.


================
Comment at: llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp:1554
+      OriginLong = IRB.CreateAnd(OriginLong, ConstantInt::get(IntptrTy, ~Mask));
+    }
+    OriginPtr = IRB.CreateIntToPtr(OriginLong, OriginPtrTy);
----------------
morehouse wrote:
> We can avoid this AND operation entirely by including it in the shadow mask.
Yeah. ~0x700...0003 works. It seems that the problem is we wanted to get both shadow and origin addresses. So 

1) with the current approach, 

offset = addr & ~0x700...00
shadow = offset x 2
origin = offset + origin_base
// When align is < 4, we may need one more origin & 4

2) if we use ~0x700...03

offset_s = addr & ~0x700...00
shadow = offset_s x 2
offset_o = addr & ~0x700...03
origin = offset_o + origin_base

So the case 1 actually uses 1 less IR instruction in most cases.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D97065/new/

https://reviews.llvm.org/D97065



More information about the llvm-commits mailing list