forked from OSchip/llvm-project
parent
c01783a892
commit
a050a8da03
|
|
@ -124,19 +124,8 @@ static uptr GetHighMemEnd() {
|
|||
}
|
||||
|
||||
static void InitializeShadowBaseAddress(uptr shadow_size_bytes) {
|
||||
// Set the shadow memory address to uninitialized.
|
||||
__hwasan_shadow_memory_dynamic_address = kDefaultShadowSentinel;
|
||||
uptr shadow_start = __hwasan_shadow_memory_dynamic_address;
|
||||
// Detect if a dynamic shadow address must be used and find the available
|
||||
// location when necessary. When dynamic address is used, the macro
|
||||
// kLowShadowBeg expands to __hwasan_shadow_memory_dynamic_address which
|
||||
// was just set to kDefaultShadowSentinel.
|
||||
if (shadow_start == kDefaultShadowSentinel) {
|
||||
__hwasan_shadow_memory_dynamic_address = 0;
|
||||
shadow_start = FindDynamicShadowStart(shadow_size_bytes);
|
||||
}
|
||||
// Update the shadow memory address (potentially) used by instrumentation.
|
||||
__hwasan_shadow_memory_dynamic_address = shadow_start;
|
||||
__hwasan_shadow_memory_dynamic_address =
|
||||
FindDynamicShadowStart(shadow_size_bytes);
|
||||
}
|
||||
|
||||
bool InitShadow() {
|
||||
|
|
|
|||
|
|
@ -18,38 +18,22 @@
|
|||
#include "sanitizer_common/sanitizer_internal_defs.h"
|
||||
#include "hwasan_interface_internal.h"
|
||||
|
||||
// Typical mapping on Linux/x86_64 with fixed shadow mapping:
|
||||
// || [0x080000000000, 0x7fffffffffff] || HighMem ||
|
||||
// || [0x008000000000, 0x07ffffffffff] || HighShadow ||
|
||||
// || [0x000100000000, 0x007fffffffff] || ShadowGap ||
|
||||
// || [0x000010000000, 0x0000ffffffff] || LowMem ||
|
||||
// || [0x000001000000, 0x00000fffffff] || LowShadow ||
|
||||
// || [0x000000000000, 0x000000ffffff] || ShadowGap ||
|
||||
//
|
||||
// and with dynamic shadow mapped at [0x770d59f40000, 0x7f0d59f40000]:
|
||||
// Typical mapping on Linux/x86_64:
|
||||
// with dynamic shadow mapped at [0x770d59f40000, 0x7f0d59f40000]:
|
||||
// || [0x7f0d59f40000, 0x7fffffffffff] || HighMem ||
|
||||
// || [0x7efe2f934000, 0x7f0d59f3ffff] || HighShadow ||
|
||||
// || [0x7e7e2f934000, 0x7efe2f933fff] || ShadowGap ||
|
||||
// || [0x770d59f40000, 0x7e7e2f933fff] || LowShadow ||
|
||||
// || [0x000000000000, 0x770d59f3ffff] || LowMem ||
|
||||
|
||||
// Typical mapping on Android/AArch64 (39-bit VMA):
|
||||
// || [0x001000000000, 0x007fffffffff] || HighMem ||
|
||||
// || [0x000800000000, 0x000fffffffff] || ShadowGap ||
|
||||
// || [0x000100000000, 0x0007ffffffff] || HighShadow ||
|
||||
// || [0x000010000000, 0x0000ffffffff] || LowMem ||
|
||||
// || [0x000001000000, 0x00000fffffff] || LowShadow ||
|
||||
// || [0x000000000000, 0x000000ffffff] || ShadowGap ||
|
||||
//
|
||||
// and with dynamic shadow mapped: [0x007477480000, 0x007c77480000]:
|
||||
// Typical mapping on Android/AArch64
|
||||
// with dynamic shadow mapped: [0x007477480000, 0x007c77480000]:
|
||||
// || [0x007c77480000, 0x007fffffffff] || HighMem ||
|
||||
// || [0x007c3ebc8000, 0x007c7747ffff] || HighShadow ||
|
||||
// || [0x007bbebc8000, 0x007c3ebc7fff] || ShadowGap ||
|
||||
// || [0x007477480000, 0x007bbebc7fff] || LowShadow ||
|
||||
// || [0x000000000000, 0x00747747ffff] || LowMem ||
|
||||
|
||||
static constexpr u64 kDefaultShadowSentinel = ~(u64)0;
|
||||
|
||||
// Reasonable values are 4 (for 1/16th shadow) and 6 (for 1/64th).
|
||||
constexpr uptr kShadowScale = 4;
|
||||
constexpr uptr kShadowAlignment = 1ULL << kShadowScale;
|
||||
|
|
|
|||
Loading…
Reference in New Issue