Skip to content

Commit 657a2b3

Browse files
committed
[ASan][Fuchsia] Have Fuchsia use a dynamic shadow start
The dynamic shadow global is still set to zero, but this will change in the future.
1 parent 61c2432 commit 657a2b3

File tree

4 files changed

+11
-14
lines changed

4 files changed

+11
-14
lines changed

compiler-rt/lib/asan/CMakeLists.txt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,11 @@ set(ASAN_CXX_SOURCES
5959

6060
set(ASAN_STATIC_SOURCES
6161
asan_rtl_static.cpp
62+
# Note that only x86_64 targets using a constant shadow offset use functions
63+
# in this, but that's gated via macro checks in the file itself.
64+
asan_rtl_x86_64.S
6265
)
6366

64-
if ("x86_64" IN_LIST ASAN_SUPPORTED_ARCH AND NOT WIN32 AND NOT APPLE)
65-
list(APPEND ASAN_STATIC_SOURCES
66-
asan_rtl_x86_64.S
67-
)
68-
endif()
69-
7067
set(ASAN_PREINIT_SOURCES
7168
asan_preinit.cpp
7269
)

compiler-rt/lib/asan/asan_fuchsia.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,18 @@ void InitializeShadowMemory() {
4040
if (Verbosity())
4141
PrintAddressSpaceLayout();
4242

43-
// Make sure SHADOW_OFFSET doesn't use __asan_shadow_memory_dynamic_address.
44-
__asan_shadow_memory_dynamic_address = kDefaultShadowSentinel;
45-
DCHECK(kLowShadowBeg != kDefaultShadowSentinel);
46-
__asan_shadow_memory_dynamic_address = kLowShadowBeg;
43+
// TODO(https://fxbug.dev/42085278): Shadow on Fuchsia starts as zero for now.
44+
// __asan_shadow_memory_dynamic_address is an uninitialized global that's
45+
// zero. This is temporary and will be changed to a non-zero value in the
46+
// future.
4747

4848
CHECK_EQ(kShadowGapEnd, kHighShadowBeg - 1);
4949
CHECK_EQ(kHighMemEnd, __sanitizer::ShadowBounds.memory_limit - 1);
5050
CHECK_EQ(kHighMemBeg, __sanitizer::ShadowBounds.shadow_limit);
5151
CHECK_EQ(kHighShadowBeg, __sanitizer::ShadowBounds.shadow_base);
5252
CHECK_EQ(kShadowGapEnd, __sanitizer::ShadowBounds.shadow_base - 1);
53-
CHECK_EQ(kLowShadowEnd, 0);
54-
CHECK_EQ(kLowShadowBeg, 0);
53+
CHECK_EQ(kLowShadowEnd, MEM_TO_SHADOW(kLowMemEnd));
54+
CHECK_EQ(kLowShadowBeg, __asan_shadow_memory_dynamic_address);
5555
}
5656

5757
void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {

compiler-rt/lib/asan/asan_mapping.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@
175175
#define ASAN_SHADOW_SCALE 3
176176

177177
#if SANITIZER_FUCHSIA
178-
# define ASAN_SHADOW_OFFSET_CONST (0)
178+
# define ASAN_SHADOW_OFFSET_DYNAMIC
179179
#elif SANITIZER_WORDSIZE == 32
180180
# if SANITIZER_ANDROID
181181
# define ASAN_SHADOW_OFFSET_DYNAMIC

compiler-rt/lib/asan/asan_rtl_x86_64.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "asan_mapping.h"
22
#include "sanitizer_common/sanitizer_asm.h"
33

4-
#if defined(__x86_64__)
4+
#if defined(__x86_64__) && defined(ASAN_SHADOW_OFFSET_CONST)
55
#include "sanitizer_common/sanitizer_platform.h"
66

77
.file "asan_rtl_x86_64.S"

0 commit comments

Comments
 (0)