[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
//===-- atomic_helpers.h ----------------------------------------*- C++ -*-===//
|
|
|
|
//
|
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef SCUDO_ATOMIC_H_
|
|
|
|
#define SCUDO_ATOMIC_H_
|
|
|
|
|
|
|
|
#include "internal_defs.h"
|
|
|
|
|
|
|
|
namespace scudo {
|
|
|
|
|
|
|
|
enum memory_order {
|
|
|
|
memory_order_relaxed = 0,
|
|
|
|
memory_order_consume = 1,
|
|
|
|
memory_order_acquire = 2,
|
|
|
|
memory_order_release = 3,
|
|
|
|
memory_order_acq_rel = 4,
|
|
|
|
memory_order_seq_cst = 5
|
|
|
|
};
|
2019-11-28 01:35:47 +08:00
|
|
|
static_assert(memory_order_relaxed == __ATOMIC_RELAXED, "");
|
|
|
|
static_assert(memory_order_consume == __ATOMIC_CONSUME, "");
|
|
|
|
static_assert(memory_order_acquire == __ATOMIC_ACQUIRE, "");
|
|
|
|
static_assert(memory_order_release == __ATOMIC_RELEASE, "");
|
|
|
|
static_assert(memory_order_acq_rel == __ATOMIC_ACQ_REL, "");
|
|
|
|
static_assert(memory_order_seq_cst == __ATOMIC_SEQ_CST, "");
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
|
|
|
|
struct atomic_u8 {
|
|
|
|
typedef u8 Type;
|
|
|
|
volatile Type ValDoNotUse;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_u16 {
|
|
|
|
typedef u16 Type;
|
|
|
|
volatile Type ValDoNotUse;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_s32 {
|
|
|
|
typedef s32 Type;
|
|
|
|
volatile Type ValDoNotUse;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_u32 {
|
|
|
|
typedef u32 Type;
|
|
|
|
volatile Type ValDoNotUse;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_u64 {
|
|
|
|
typedef u64 Type;
|
|
|
|
// On 32-bit platforms u64 is not necessarily aligned on 8 bytes.
|
2020-04-10 04:37:27 +08:00
|
|
|
alignas(8) volatile Type ValDoNotUse;
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct atomic_uptr {
|
|
|
|
typedef uptr Type;
|
|
|
|
volatile Type ValDoNotUse;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_load(const volatile T *A, memory_order MO) {
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
typename T::Type V;
|
|
|
|
__atomic_load(&A->ValDoNotUse, &V, MO);
|
|
|
|
return V;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline void atomic_store(volatile T *A, typename T::Type V, memory_order MO) {
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
__atomic_store(&A->ValDoNotUse, &V, MO);
|
|
|
|
}
|
|
|
|
|
2019-11-28 01:35:47 +08:00
|
|
|
inline void atomic_thread_fence(memory_order) { __sync_synchronize(); }
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_fetch_add(volatile T *A, typename T::Type V,
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
memory_order MO) {
|
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
return __atomic_fetch_add(&A->ValDoNotUse, V, MO);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_fetch_sub(volatile T *A, typename T::Type V,
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
memory_order MO) {
|
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
return __atomic_fetch_sub(&A->ValDoNotUse, V, MO);
|
|
|
|
}
|
|
|
|
|
2020-09-25 08:01:24 +08:00
|
|
|
template <typename T>
|
|
|
|
inline typename T::Type atomic_fetch_and(volatile T *A, typename T::Type V,
|
|
|
|
memory_order MO) {
|
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
return __atomic_fetch_and(&A->ValDoNotUse, V, MO);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
inline typename T::Type atomic_fetch_or(volatile T *A, typename T::Type V,
|
|
|
|
memory_order MO) {
|
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
return __atomic_fetch_or(&A->ValDoNotUse, V, MO);
|
|
|
|
}
|
|
|
|
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_exchange(volatile T *A, typename T::Type V,
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
memory_order MO) {
|
|
|
|
DCHECK(!(reinterpret_cast<uptr>(A) % sizeof(*A)));
|
|
|
|
typename T::Type R;
|
|
|
|
__atomic_exchange(&A->ValDoNotUse, &V, &R, MO);
|
|
|
|
return R;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline bool atomic_compare_exchange_strong(volatile T *A, typename T::Type *Cmp,
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
typename T::Type Xchg,
|
|
|
|
memory_order MO) {
|
|
|
|
return __atomic_compare_exchange(&A->ValDoNotUse, Cmp, &Xchg, false, MO,
|
|
|
|
__ATOMIC_RELAXED);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Clutter-reducing helpers.
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_load_relaxed(const volatile T *A) {
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
return atomic_load(A, memory_order_relaxed);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline void atomic_store_relaxed(volatile T *A, typename T::Type V) {
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
atomic_store(A, V, memory_order_relaxed);
|
|
|
|
}
|
|
|
|
|
[scudo][standalone] Merge Spin & Blocking mutex into a Hybrid one
Summary:
We ran into a problem on Fuchsia where yielding threads would never
be deboosted, ultimately resulting in several threads spinning on the
same TSD, and no possibility for another thread to be scheduled,
dead-locking the process.
While this was fixed in Zircon, this lead to discussions about if
spinning without a break condition was a good decision, and settled on
a new hybrid model that would spin for a while then block.
Currently we are using a number of iterations for spinning that is
mostly arbitrary (based on sanitizer_common values), but this can
be tuned in the future.
Since we are touching `common.h`, we also use this change as a vehicle
for an Android optimization (the page size is fixed in Bionic, so use
a fixed value too).
Reviewers: morehouse, hctim, eugenis, dvyukov, vitalybuka
Reviewed By: hctim
Subscribers: srhines, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D64358
llvm-svn: 365790
2019-07-11 23:32:26 +08:00
|
|
|
template <typename T>
|
2019-11-28 01:35:47 +08:00
|
|
|
inline typename T::Type atomic_compare_exchange(volatile T *A,
|
[scudo][standalone] Merge Spin & Blocking mutex into a Hybrid one
Summary:
We ran into a problem on Fuchsia where yielding threads would never
be deboosted, ultimately resulting in several threads spinning on the
same TSD, and no possibility for another thread to be scheduled,
dead-locking the process.
While this was fixed in Zircon, this lead to discussions about if
spinning without a break condition was a good decision, and settled on
a new hybrid model that would spin for a while then block.
Currently we are using a number of iterations for spinning that is
mostly arbitrary (based on sanitizer_common values), but this can
be tuned in the future.
Since we are touching `common.h`, we also use this change as a vehicle
for an Android optimization (the page size is fixed in Bionic, so use
a fixed value too).
Reviewers: morehouse, hctim, eugenis, dvyukov, vitalybuka
Reviewed By: hctim
Subscribers: srhines, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D64358
llvm-svn: 365790
2019-07-11 23:32:26 +08:00
|
|
|
typename T::Type Cmp,
|
|
|
|
typename T::Type Xchg) {
|
|
|
|
atomic_compare_exchange_strong(A, &Cmp, Xchg, memory_order_acquire);
|
|
|
|
return Cmp;
|
|
|
|
}
|
|
|
|
|
[scudo] Initial standalone skeleton check-in
Summary:
This is the initial check-in for the Standalone version of Scudo.
The project is initially going to live in scudo/standalone then will
replace scudo. See http://lists.llvm.org/pipermail/llvm-dev/2019-January/129113.html
for details.
This initial CL is meant to lay out the project structure, of both
code & tests, providing a minimal amount of functionalities, namely
various definitions, some atomic helpers and an intrusive list.
(empty.cc is just here to have a compilation unit, but will go away
in the upcoming CLs).
Initial support is restricted to Linux i386 & x86_64 in make files
and will be extended once things land & work.
We will grow organically from here, adding functionalities in limited
amounts.
Reviewers: morehouse, eugenis, vitalybuka, kcc, mcgrathr, flowerhack
Reviewed By: morehouse, vitalybuka
Subscribers: srhines, mgorny, krytarowski, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D57412
llvm-svn: 353055
2019-02-05 00:25:40 +08:00
|
|
|
} // namespace scudo
|
|
|
|
|
|
|
|
#endif // SCUDO_ATOMIC_H_
|