================
@@ -443,8 +443,8 @@ static const MemoryMapParams Linux_I386_MemoryMapParams = {
 static const MemoryMapParams Linux_X86_64_MemoryMapParams = {
     0,              // AndMask (not used)
     0x500000000000, // XorMask
-    0,              // ShadowBase (not used)
-    0x100000000000, // OriginBase
+    0x200000,       // ShadowBase (== kShadowOffset)
----------------
thurstond wrote:

Is it possible to encode the change using only XorMask, without modifying 
ShadowBase?

When `ShadowBase == 0`, the compiler is able to optimize it out. A non-zero 
shadow base requires an extra instruction for every shadow calculation e.g, 
https://github.com/llvm/llvm-project/pull/171993/files#diff-91f63a475808bb3cc923763edeb8a60749a879ea775ce1ebcc31af6c867f91e7:
 

```
  ; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080

- ; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
+ ; CHECK-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 2097152
+ ; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP5]] to ptr
```

I suspect if the end addresses in kMemoryLayout were closed (e.g., 
0x010000000000ULL - 1) instead of open, then it would be easy to do it entirely 
with XOR (though there might be other cleanup needed in MSan to handle closed 
end addresses).

https://github.com/llvm/llvm-project/pull/171993
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to