| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2010, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008, 2010, 2012 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com) | 3 * Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 28 */ | 28 */ |
| 29 | 29 |
| 30 #ifndef Atomics_h | 30 #ifndef Atomics_h |
| 31 #define Atomics_h | 31 #define Atomics_h |
| 32 | 32 |
| 33 #include "wtf/AddressSanitizer.h" |
| 33 #include "wtf/Assertions.h" | 34 #include "wtf/Assertions.h" |
| 34 #include "wtf/CPU.h" | 35 #include "wtf/CPU.h" |
| 35 | 36 |
| 36 #include <stdint.h> | 37 #include <stdint.h> |
| 37 | 38 |
| 38 #if COMPILER(MSVC) | 39 #if COMPILER(MSVC) |
| 39 #include <windows.h> | 40 #include <windows.h> |
| 40 #endif | 41 #endif |
| 41 | 42 |
| 42 #if defined(THREAD_SANITIZER) | 43 #if defined(THREAD_SANITIZER) |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 } | 257 } |
| 257 ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr) | 258 ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr) |
| 258 { | 259 { |
| 259 void* value = *ptr; | 260 void* value = *ptr; |
| 260 MEMORY_BARRIER(); | 261 MEMORY_BARRIER(); |
| 261 return value; | 262 return value; |
| 262 } | 263 } |
| 263 | 264 |
| 264 #if defined(ADDRESS_SANITIZER) | 265 #if defined(ADDRESS_SANITIZER) |
| 265 | 266 |
| 266 // FIXME: See comment on NO_SANITIZE_ADDRESS in platform/heap/AddressSanitizer.h | 267 NO_SANITIZE_ADDRESS ALWAYS_INLINE void asanUnsafeReleaseStore(volatile unsigned*
ptr, unsigned value) |
| 267 #if !OS(WIN) || COMPILER(CLANG) | |
| 268 #define NO_SANITIZE_ADDRESS_ATOMICS __attribute__((no_sanitize_address)) | |
| 269 #else | |
| 270 #define NO_SANITIZE_ADDRESS_ATOMICS | |
| 271 #endif | |
| 272 | |
| 273 NO_SANITIZE_ADDRESS_ATOMICS ALWAYS_INLINE void asanUnsafeReleaseStore(volatile u
nsigned* ptr, unsigned value) | |
| 274 { | 268 { |
| 275 MEMORY_BARRIER(); | 269 MEMORY_BARRIER(); |
| 276 *ptr = value; | 270 *ptr = value; |
| 277 } | 271 } |
| 278 | 272 |
| 279 NO_SANITIZE_ADDRESS_ATOMICS ALWAYS_INLINE unsigned asanUnsafeAcquireLoad(volatil
e const unsigned* ptr) | 273 NO_SANITIZE_ADDRESS ALWAYS_INLINE unsigned asanUnsafeAcquireLoad(volatile const
unsigned* ptr) |
| 280 { | 274 { |
| 281 unsigned value = *ptr; | 275 unsigned value = *ptr; |
| 282 MEMORY_BARRIER(); | 276 MEMORY_BARRIER(); |
| 283 return value; | 277 return value; |
| 284 } | 278 } |
| 285 | 279 |
| 286 #undef NO_SANITIZE_ADDRESS_ATOMICS | |
| 287 | |
| 288 #endif // defined(ADDRESS_SANITIZER) | 280 #endif // defined(ADDRESS_SANITIZER) |
| 289 | 281 |
| 290 #undef MEMORY_BARRIER | 282 #undef MEMORY_BARRIER |
| 291 | 283 |
| 292 #endif | 284 #endif |
| 293 | 285 |
| 294 #if !defined(ADDRESS_SANITIZER) | 286 #if !defined(ADDRESS_SANITIZER) |
| 295 | 287 |
| 296 ALWAYS_INLINE void asanUnsafeReleaseStore(volatile unsigned* ptr, unsigned value
) | 288 ALWAYS_INLINE void asanUnsafeReleaseStore(volatile unsigned* ptr, unsigned value
) |
| 297 { | 289 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 316 using WTF::acquireLoad; | 308 using WTF::acquireLoad; |
| 317 using WTF::releaseStore; | 309 using WTF::releaseStore; |
| 318 | 310 |
| 319 // These methods allow loading from and storing to poisoned memory. Only | 311 // These methods allow loading from and storing to poisoned memory. Only |
| 320 // use these methods if you know what you are doing since they will | 312 // use these methods if you know what you are doing since they will |
| 321 // silence use-after-poison errors from ASan. | 313 // silence use-after-poison errors from ASan. |
| 322 using WTF::asanUnsafeAcquireLoad; | 314 using WTF::asanUnsafeAcquireLoad; |
| 323 using WTF::asanUnsafeReleaseStore; | 315 using WTF::asanUnsafeReleaseStore; |
| 324 | 316 |
| 325 #endif // Atomics_h | 317 #endif // Atomics_h |
| OLD | NEW |