From 05a8c0b5f8c425ada7e0fdc5210be4d456ce7bc0 Mon Sep 17 00:00:00 2001 From: Kirill Stoimenov Date: Thu, 19 Aug 2021 18:11:10 +0000 Subject: [PATCH] [asan] Implemented getAddressSanitizerParams used by the ASan callback optimization code. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D108397 --- .../Transforms/Instrumentation/AddressSanitizerCommon.h | 5 +++++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizerCommon.h b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizerCommon.h index 5de80e6..86c6ce4 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizerCommon.h +++ b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizerCommon.h @@ -87,6 +87,11 @@ bool forAllReachableExits(const DominatorTree &DT, const PostDominatorTree &PDT, return true; } +// Get AddressSanitizer parameters. +void getAddressSanitizerParams(const Triple &TargetTriple, int LongSize, + bool IsKasan, uint64_t *ShadowBase, + int *MappingScale, bool *OrShadowOffset); + } // namespace llvm #endif diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index 2b8f5b7..d03538a 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -442,7 +442,7 @@ struct ShadowMapping { } // end anonymous namespace -static ShadowMapping getShadowMapping(Triple &TargetTriple, int LongSize, +static ShadowMapping getShadowMapping(const Triple &TargetTriple, int LongSize, bool IsKasan) { bool IsAndroid = TargetTriple.isAndroid(); bool IsIOS = TargetTriple.isiOS() || TargetTriple.isWatchOS(); @@ -559,6 +559,17 @@ static ShadowMapping getShadowMapping(Triple &TargetTriple, int LongSize, return Mapping; } +namespace llvm { +void getAddressSanitizerParams(const Triple &TargetTriple, int LongSize, + bool IsKasan, uint64_t *ShadowBase, + int *MappingScale, bool *OrShadowOffset) { + auto Mapping = getShadowMapping(TargetTriple, LongSize, IsKasan); + *ShadowBase = Mapping.Offset; + *MappingScale = Mapping.Scale; + *OrShadowOffset = Mapping.OrShadowOffset; +} +} // namespace llvm + static uint64_t getRedzoneSizeForScale(int MappingScale) { // Redzone used for stack and globals is at least 32 bytes. // For scales 6 and 7, the redzone has to be 64 and 128 bytes respectively. -- 2.7.4