[compiler-rt] 0061612 - [ASan] Added __cplusplus guard around the C++ code so it is safe to include asan_mapping.h in assembly files.
Kirill Stoimenov via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 8 13:02:57 PST 2021
Author: Kirill Stoimenov
Date: 2021-12-08T21:02:40Z
New Revision: 00616123f8bb494a8113933c6a0ab505d023dbef
URL: https://github.com/llvm/llvm-project/commit/00616123f8bb494a8113933c6a0ab505d023dbef
DIFF: https://github.com/llvm/llvm-project/commit/00616123f8bb494a8113933c6a0ab505d023dbef.diff
LOG: [ASan] Added __cplusplus guard around the C++ code so it is safe to include asan_mapping.h in assembly files.
This will avoid addind asan_shadow_defines.h in D114558.
Reviewed By: vitalybuka
Differential Revision: https://reviews.llvm.org/D115348
Added:
Modified:
compiler-rt/lib/asan/asan_mapping.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/asan/asan_mapping.h b/compiler-rt/lib/asan/asan_mapping.h
index 0e2dbdc9ad5b..6ca6ee00e5c9 100644
--- a/compiler-rt/lib/asan/asan_mapping.h
+++ b/compiler-rt/lib/asan/asan_mapping.h
@@ -13,8 +13,6 @@
#ifndef ASAN_MAPPING_H
#define ASAN_MAPPING_H
-#include "asan_internal.h"
-
// The full explanation of the memory mapping could be found here:
// https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm
//
@@ -153,8 +151,6 @@
#define ASAN_SHADOW_SCALE 3
-static const u64 kDefaultShadowSentinel = ~(uptr)0;
-
#if SANITIZER_FUCHSIA
# define ASAN_SHADOW_OFFSET_CONST (0)
#elif SANITIZER_WORDSIZE == 32
@@ -199,91 +195,99 @@ static const u64 kDefaultShadowSentinel = ~(uptr)0;
# elif SANITIZER_WINDOWS64
# define ASAN_SHADOW_OFFSET_DYNAMIC
# else
-# define ASAN_SHADOW_OFFSET_CONST \
- 0x000000007FFFFFFF & (~0xFFFULL << ASAN_SHADOW_SCALE)
+# if ASAN_SHADOW_SCALE != 3
+# error "Value below is based on shadow scale = 3."
+# error "Original formula was: 0x7FFFFFFF & (~0xFFFULL << SHADOW_SCALE)."
+# endif
+# define ASAN_SHADOW_OFFSET_CONST 0x000000007fff8000
# endif
#endif
-#if defined(ASAN_SHADOW_OFFSET_CONST)
+#if defined(__cplusplus)
+# include "asan_internal.h"
+
+static const u64 kDefaultShadowSentinel = ~(uptr)0;
+
+# if defined(ASAN_SHADOW_OFFSET_CONST)
static const u64 kConstShadowOffset = ASAN_SHADOW_OFFSET_CONST;
-# define ASAN_SHADOW_OFFSET kConstShadowOffset
-#elif defined(ASAN_SHADOW_OFFSET_DYNAMIC)
-# define ASAN_SHADOW_OFFSET __asan_shadow_memory_dynamic_address
-#else
-# error "ASAN_SHADOW_OFFSET can't be determined."
-#endif
+# define ASAN_SHADOW_OFFSET kConstShadowOffset
+# elif defined(ASAN_SHADOW_OFFSET_DYNAMIC)
+# define ASAN_SHADOW_OFFSET __asan_shadow_memory_dynamic_address
+# else
+# error "ASAN_SHADOW_OFFSET can't be determined."
+# endif
-#if SANITIZER_ANDROID && defined(__arm__)
-# define ASAN_PREMAP_SHADOW 1
-#else
-# define ASAN_PREMAP_SHADOW 0
-#endif
+# if SANITIZER_ANDROID && defined(__arm__)
+# define ASAN_PREMAP_SHADOW 1
+# else
+# define ASAN_PREMAP_SHADOW 0
+# endif
-#define ASAN_SHADOW_GRANULARITY (1ULL << ASAN_SHADOW_SCALE)
+# define ASAN_SHADOW_GRANULARITY (1ULL << ASAN_SHADOW_SCALE)
-#define DO_ASAN_MAPPING_PROFILE 0 // Set to 1 to profile the functions below.
+# define DO_ASAN_MAPPING_PROFILE 0 // Set to 1 to profile the functions below.
-#if DO_ASAN_MAPPING_PROFILE
-# define PROFILE_ASAN_MAPPING() AsanMappingProfile[__LINE__]++;
-#else
-# define PROFILE_ASAN_MAPPING()
-#endif
+# if DO_ASAN_MAPPING_PROFILE
+# define PROFILE_ASAN_MAPPING() AsanMappingProfile[__LINE__]++;
+# else
+# define PROFILE_ASAN_MAPPING()
+# endif
// If 1, all shadow boundaries are constants.
// Don't set to 1 other than for testing.
-#define ASAN_FIXED_MAPPING 0
+# define ASAN_FIXED_MAPPING 0
namespace __asan {
extern uptr AsanMappingProfile[];
-#if ASAN_FIXED_MAPPING
+# if ASAN_FIXED_MAPPING
// Fixed mapping for 64-bit Linux. Mostly used for performance comparison
// with non-fixed mapping. As of r175253 (Feb 2013) the performance
//
diff erence between fixed and non-fixed mapping is below the noise level.
static uptr kHighMemEnd = 0x7fffffffffffULL;
static uptr kMidMemBeg = 0x3000000000ULL;
static uptr kMidMemEnd = 0x4fffffffffULL;
-#else
+# else
extern uptr kHighMemEnd, kMidMemBeg, kMidMemEnd; // Initialized in __asan_init.
-#endif
+# endif
} // namespace __asan
-#if defined(__sparc__) && SANITIZER_WORDSIZE == 64
-# include "asan_mapping_sparc64.h"
-#else
-# define MEM_TO_SHADOW(mem) \
- (((mem) >> ASAN_SHADOW_SCALE) + (ASAN_SHADOW_OFFSET))
+# if defined(__sparc__) && SANITIZER_WORDSIZE == 64
+# include "asan_mapping_sparc64.h"
+# else
+# define MEM_TO_SHADOW(mem) \
+ (((mem) >> ASAN_SHADOW_SCALE) + (ASAN_SHADOW_OFFSET))
-# define kLowMemBeg 0
-# define kLowMemEnd (ASAN_SHADOW_OFFSET ? ASAN_SHADOW_OFFSET - 1 : 0)
+# define kLowMemBeg 0
+# define kLowMemEnd (ASAN_SHADOW_OFFSET ? ASAN_SHADOW_OFFSET - 1 : 0)
-# define kLowShadowBeg ASAN_SHADOW_OFFSET
-# define kLowShadowEnd MEM_TO_SHADOW(kLowMemEnd)
+# define kLowShadowBeg ASAN_SHADOW_OFFSET
+# define kLowShadowEnd MEM_TO_SHADOW(kLowMemEnd)
-# define kHighMemBeg (MEM_TO_SHADOW(kHighMemEnd) + 1)
+# define kHighMemBeg (MEM_TO_SHADOW(kHighMemEnd) + 1)
-# define kHighShadowBeg MEM_TO_SHADOW(kHighMemBeg)
-# define kHighShadowEnd MEM_TO_SHADOW(kHighMemEnd)
+# define kHighShadowBeg MEM_TO_SHADOW(kHighMemBeg)
+# define kHighShadowEnd MEM_TO_SHADOW(kHighMemEnd)
-# define kMidShadowBeg MEM_TO_SHADOW(kMidMemBeg)
-# define kMidShadowEnd MEM_TO_SHADOW(kMidMemEnd)
+# define kMidShadowBeg MEM_TO_SHADOW(kMidMemBeg)
+# define kMidShadowEnd MEM_TO_SHADOW(kMidMemEnd)
// With the zero shadow base we can not actually map pages starting from 0.
// This constant is somewhat arbitrary.
-# define kZeroBaseShadowStart 0
-# define kZeroBaseMaxShadowStart (1 << 18)
+# define kZeroBaseShadowStart 0
+# define kZeroBaseMaxShadowStart (1 << 18)
-# define kShadowGapBeg \
- (kLowShadowEnd ? kLowShadowEnd + 1 : kZeroBaseShadowStart)
-# define kShadowGapEnd ((kMidMemBeg ? kMidShadowBeg : kHighShadowBeg) - 1)
+# define kShadowGapBeg \
+ (kLowShadowEnd ? kLowShadowEnd + 1 : kZeroBaseShadowStart)
+# define kShadowGapEnd ((kMidMemBeg ? kMidShadowBeg : kHighShadowBeg) - 1)
-# define kShadowGap2Beg (kMidMemBeg ? kMidShadowEnd + 1 : 0)
-# define kShadowGap2End (kMidMemBeg ? kMidMemBeg - 1 : 0)
+# define kShadowGap2Beg (kMidMemBeg ? kMidShadowEnd + 1 : 0)
+# define kShadowGap2End (kMidMemBeg ? kMidMemBeg - 1 : 0)
-# define kShadowGap3Beg (kMidMemBeg ? kMidMemEnd + 1 : 0)
-# define kShadowGap3End (kMidMemBeg ? kHighShadowBeg - 1 : 0)
+# define kShadowGap3Beg (kMidMemBeg ? kMidMemEnd + 1 : 0)
+# define kShadowGap3End (kMidMemBeg ? kHighShadowBeg - 1 : 0)
namespace __asan {
@@ -334,7 +338,7 @@ static inline bool AddrIsInShadowGap(uptr a) {
} // namespace __asan
-#endif
+# endif
namespace __asan {
@@ -382,4 +386,6 @@ static const uptr kAsanMappingProfileSize = __LINE__;
} // namespace __asan
+#endif // __cplusplus
+
#endif // ASAN_MAPPING_H
More information about the llvm-commits
mailing list