[llvm] [llvm] Implement address sanitizer on AIX (2/6) (PR #129926)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 30 22:29:49 PDT 2025
================
@@ -1326,7 +1340,11 @@ static bool isUnsupportedAMDGPUAddrspace(Value *Addr) {
Value *AddressSanitizer::memToShadow(Value *Shadow, IRBuilder<> &IRB) {
// Shadow >> scale
- Shadow = IRB.CreateLShr(Shadow, Mapping.Scale);
+ if (TargetTriple.isOSAIX() && TargetTriple.getArch() == Triple::ppc64)
+ Shadow = IRB.CreateLShr(IRB.CreateShl(Shadow, Mapping.HighBits),
----------------
vitalybuka wrote:
Still confused with HIGH_BITS purpose.
If we do just:
```
#define MEM_TO_SHADOW(mem) \
((((mem)) >> ((ASAN_SHADOW_SCALE))) + \
ASAN_SHADOW_OFFSET)
```
Mapping should be
```
// Default AIX64 mapping:
// || `[0x0fffff8000000000, 0x0fffffffffffffff]` || HighMem ||
// || `[0x0c00fff000000000, 0x0c00ffffffffffff]` || HighShadow ||
// || `[0x0b41000000000000, 0x0b41003fffffffff]` || MidShadow ||
// || `[0x0b21020000000000, 0x0b21020fffffffff]` || Mid2Shadow ||
// || `[0x0b01020000000000, 0x0b01020fffffffff]` || Mid3Shadow ||
// || `[0x0a01000000000000, 0x0a01000fffffffff]` || LowShadow ||
// || `[0x0a00000000000000, 0x0a0001ffffffffff]` || MidMem ||
// || `[0x0900100000000000, 0x0900107fffffffff]` || Mid2Mem ||
// || `[0x0800100000000000, 0x0800107fffffffff]` || Mid3Mem ||
// || `[0x0000000000000000, 0x0000007fffffffff]` || LowMem ||
```
Same amount of shadow. Why this does not work?
https://github.com/llvm/llvm-project/pull/129926
More information about the llvm-commits
mailing list