Skip to content

Commit d67f159

Browse files
rmacnak-googleCommit Queue
authored and
Commit Queue
committed
[vm] Fix using GCC with the sanitizers.
TEST=local Change-Id: Icb47e2c68e55ae14f806cb421b8d860cda4d1f1c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/350647 Reviewed-by: Alexander Aprelev <[email protected]> Commit-Queue: Ryan Macnak <[email protected]>
1 parent 233de26 commit d67f159

14 files changed

+32
-48
lines changed

build/config/BUILDCONFIG.gn

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,7 @@ if (current_os == "win") {
216216
# BUILD OPTIONS
217217
# =============================================================================
218218

219-
# These Sanitizers all imply using the Clang compiler. On Windows they either
220-
# don't work or work differently.
221-
if (!is_clang && (is_asan || is_lsan || is_msan || is_tsan || is_ubsan)) {
222-
is_clang = true
223-
}
224-
225-
use_flutter_cxx = is_msan || is_tsan
219+
use_flutter_cxx = is_clang && (is_msan || is_tsan)
226220

227221
# =============================================================================
228222
# TARGET DEFAULTS

build/config/compiler/BUILD.gn

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,6 @@ config("compiler") {
113113

114114
# Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer and
115115
# MemorySanitizer
116-
if (using_sanitizer) {
117-
cflags += [ "-gline-tables-only" ]
118-
}
119116
if (is_asan) {
120117
cflags += [ "-fsanitize=address" ]
121118
ldflags += [ "-fsanitize=address" ]

runtime/bin/dart_embedder_api_impl.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ namespace embedder {
1919
static char* MallocFormatedString(const char* format, ...) {
2020
va_list measure_args;
2121
va_start(measure_args, format);
22-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
22+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
2323
va_end(measure_args);
2424

2525
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
2626
MSAN_UNPOISON(buffer, (len + 1));
2727
va_list print_args;
2828
va_start(print_args, format);
29-
vsnprintf(buffer, (len + 1), format, print_args);
29+
Utils::VSNPrint(buffer, (len + 1), format, print_args);
3030
va_end(print_args);
3131
return buffer;
3232
}

runtime/bin/dartutils.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -774,14 +774,14 @@ Dart_Handle DartUtils::NewDartIOException(const char* exception_name,
774774
Dart_Handle DartUtils::NewError(const char* format, ...) {
775775
va_list measure_args;
776776
va_start(measure_args, format);
777-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
777+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
778778
va_end(measure_args);
779779

780780
char* buffer = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
781781
MSAN_UNPOISON(buffer, (len + 1));
782782
va_list print_args;
783783
va_start(print_args, format);
784-
vsnprintf(buffer, (len + 1), format, print_args);
784+
Utils::VSNPrint(buffer, (len + 1), format, print_args);
785785
va_end(print_args);
786786

787787
return Dart_NewApiError(buffer);
@@ -802,7 +802,7 @@ Dart_Handle DartUtils::NewStringFormatted(const char* format, ...) {
802802
char* DartUtils::ScopedCStringVFormatted(const char* format, va_list args) {
803803
va_list measure_args;
804804
va_copy(measure_args, args);
805-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
805+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
806806
if (len < 0) {
807807
return nullptr;
808808
}
@@ -812,7 +812,7 @@ char* DartUtils::ScopedCStringVFormatted(const char* format, va_list args) {
812812
MSAN_UNPOISON(buffer, (len + 1));
813813
va_list print_args;
814814
va_copy(print_args, args);
815-
len = vsnprintf(buffer, (len + 1), format, print_args);
815+
len = Utils::VSNPrint(buffer, (len + 1), format, print_args);
816816
if (len < 0) {
817817
return nullptr;
818818
}

runtime/bin/file_fuchsia.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,15 @@ bool File::VPrint(const char* format, va_list args) {
132132
// Measure.
133133
va_list measure_args;
134134
va_copy(measure_args, args);
135-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
135+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
136136
va_end(measure_args);
137137

138138
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
139139

140140
// Print.
141141
va_list print_args;
142142
va_copy(print_args, args);
143-
vsnprintf(buffer, len + 1, format, print_args);
143+
Utils::VSNPrint(buffer, len + 1, format, print_args);
144144
va_end(print_args);
145145

146146
bool result = WriteFully(buffer, len);

runtime/bin/file_linux.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,15 @@ bool File::VPrint(const char* format, va_list args) {
143143
// Measure.
144144
va_list measure_args;
145145
va_copy(measure_args, args);
146-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
146+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
147147
va_end(measure_args);
148148

149149
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
150150

151151
// Print.
152152
va_list print_args;
153153
va_copy(print_args, args);
154-
vsnprintf(buffer, len + 1, format, print_args);
154+
Utils::VSNPrint(buffer, len + 1, format, print_args);
155155
va_end(print_args);
156156

157157
bool result = WriteFully(buffer, len);

runtime/bin/file_macos.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,15 @@ bool File::VPrint(const char* format, va_list args) {
175175
// Measure.
176176
va_list measure_args;
177177
va_copy(measure_args, args);
178-
intptr_t len = vsnprintf(nullptr, 0, format, measure_args);
178+
intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
179179
va_end(measure_args);
180180

181181
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
182182

183183
// Print.
184184
va_list print_args;
185185
va_copy(print_args, args);
186-
vsnprintf(buffer, len + 1, format, print_args);
186+
Utils::VSNPrint(buffer, len + 1, format, print_args);
187187
va_end(print_args);
188188

189189
bool result = WriteFully(buffer, len);

runtime/platform/address_sanitizer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99

1010
// Allow the use of ASan (AddressSanitizer). This is needed as ASan needs to be
1111
// told about areas where the VM does the equivalent of a long-jump.
12-
#if defined(__has_feature)
12+
#if __SANITIZE_ADDRESS__
13+
#define USING_ADDRESS_SANITIZER
14+
#elif defined(__has_feature)
1315
#if __has_feature(address_sanitizer)
1416
#define USING_ADDRESS_SANITIZER
1517
#endif

runtime/platform/atomic.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ class AcqRelAtomic {
122122
T& expected, // NOLINT
123123
T desired,
124124
std::memory_order success_order = std::memory_order_acq_rel,
125-
std::memory_order failure_order = std::memory_order_seq_cst) {
125+
std::memory_order failure_order = std::memory_order_acquire) {
126126
return value_.compare_exchange_weak(expected, desired, success_order,
127127
failure_order);
128128
}
129129
bool compare_exchange_strong(
130130
T& expected, // NOLINT
131131
T desired,
132132
std::memory_order success_order = std::memory_order_acq_rel,
133-
std::memory_order failure_order = std::memory_order_seq_cst) {
133+
std::memory_order failure_order = std::memory_order_acquire) {
134134
return value_.compare_exchange_strong(expected, desired, success_order,
135135
failure_order);
136136
}

runtime/platform/leak_sanitizer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
#include "platform/globals.h"
99

10-
#if defined(__has_feature)
10+
#if __SANITIZE_ADDRESS__
11+
#define USING_LEAK_SANITIZER
12+
#elif defined(__has_feature)
1113
#if __has_feature(leak_sanitizer) || __has_feature(address_sanitizer)
1214
#define USING_LEAK_SANITIZER
1315
#endif

runtime/platform/thread_sanitizer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
#include "platform/globals.h"
99

10-
#if defined(__has_feature)
10+
#if __SANITIZE_THREAD__
11+
#define USING_THREAD_SANITIZER
12+
#elif defined(__has_feature)
1113
#if __has_feature(thread_sanitizer)
1214
#define USING_THREAD_SANITIZER
1315
#endif

runtime/platform/unaligned.h

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,19 @@
1010

1111
namespace dart {
1212

13-
#if defined(HOST_ARCH_ARM) || defined(HOST_ARCH_ARM64)
1413
template <typename T>
1514
static inline T LoadUnaligned(const T* ptr) {
1615
T value;
17-
memcpy(reinterpret_cast<void*>(&value), reinterpret_cast<const void*>(ptr),
18-
sizeof(value));
16+
memcpy(reinterpret_cast<void*>(&value), // NOLINT
17+
reinterpret_cast<const void*>(ptr), sizeof(value));
1918
return value;
2019
}
2120

2221
template <typename T>
2322
static inline void StoreUnaligned(T* ptr, T value) {
24-
memcpy(reinterpret_cast<void*>(ptr), reinterpret_cast<const void*>(&value),
25-
sizeof(value));
23+
memcpy(reinterpret_cast<void*>(ptr), // NOLINT
24+
reinterpret_cast<const void*>(&value), sizeof(value));
2625
}
27-
#else // !(HOST_ARCH_ARM || HOST_ARCH_ARM64)
28-
template <typename T>
29-
NO_SANITIZE_UNDEFINED("alignment")
30-
static inline T LoadUnaligned(const T* ptr) {
31-
return *ptr;
32-
}
33-
34-
template <typename T>
35-
NO_SANITIZE_UNDEFINED("alignment")
36-
static inline void StoreUnaligned(T* ptr, T value) {
37-
*ptr = value;
38-
}
39-
#endif // !(HOST_ARCH_ARM || HOST_ARCH_ARM64)
4026

4127
} // namespace dart
4228

runtime/platform/undefined_behavior_sanitizer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
#ifndef RUNTIME_PLATFORM_UNDEFINED_BEHAVIOR_SANITIZER_H_
66
#define RUNTIME_PLATFORM_UNDEFINED_BEHAVIOR_SANITIZER_H_
77

8-
#if defined(__has_feature)
8+
#if __SANITIZE_UNDEFINED__
9+
#define USING_UNDEFINED_BEHAVIOR_SANITIZER
10+
#elif defined(__has_feature)
911
#if __has_feature(undefined_behavior_sanitizer)
1012
#define USING_UNDEFINED_BEHAVIOR_SANITIZER
1113
#endif

runtime/vm/native_api_impl.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id) {
113113
return was_closed;
114114
}
115115

116-
static Monitor* vm_service_calls_monitor = new Monitor();
117-
118116
DART_EXPORT bool Dart_InvokeVMServiceMethod(uint8_t* request_json,
119117
intptr_t request_json_length,
120118
uint8_t** response_json,
@@ -133,6 +131,7 @@ DART_EXPORT bool Dart_InvokeVMServiceMethod(uint8_t* request_json,
133131
// We only allow one isolate reload at a time. If this turns out to be on the
134132
// critical path, we can change it to have a global datastructure which is
135133
// mapping the reply ports to receive buffers.
134+
static Monitor* vm_service_calls_monitor = new Monitor();
136135
MonitorLocker _(vm_service_calls_monitor);
137136

138137
static Monitor* vm_service_call_monitor = new Monitor();

0 commit comments

Comments
 (0)