diff options
author | Kamil Rytarowski <n54@gmx.com> | 2017-12-04 12:30:09 +0000 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2017-12-04 12:30:09 +0000 |
commit | 64fc9cf2e50e8b7b91d50df480d8692364c9705a (patch) | |
tree | 2308fd78cfcdb6cbe3737cc7c8f0b230d0e870ea /compiler-rt/lib/tsan/rtl/tsan_vector.h | |
parent | 7cd4db94f8ca886139d365215ca2cf42739cd8aa (diff) | |
download | bcm5719-llvm-64fc9cf2e50e8b7b91d50df480d8692364c9705a.tar.gz bcm5719-llvm-64fc9cf2e50e8b7b91d50df480d8692364c9705a.zip |
Move __tsan::Vector to __sanitizer
Summary:
The low-fat STL-like vector container will be reused in MSan.
It is needed to implement an atexit(3) interceptor on NetBSD/amd64 in MSan.
Sponsored by <The NetBSD Foundation>
Reviewers: joerg, dvyukov, eugenis, vitalybuka, kcc
Reviewed By: dvyukov
Subscribers: kubamracek, mgorny, llvm-commits, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D40726
llvm-svn: 319650
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_vector.h')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_vector.h | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_vector.h b/compiler-rt/lib/tsan/rtl/tsan_vector.h deleted file mode 100644 index a7fb3fa58d5..00000000000 --- a/compiler-rt/lib/tsan/rtl/tsan_vector.h +++ /dev/null @@ -1,127 +0,0 @@ -//===-- tsan_vector.h -------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file is a part of ThreadSanitizer (TSan), a race detector. -// -//===----------------------------------------------------------------------===// - -// Low-fat STL-like vector container. - -#ifndef TSAN_VECTOR_H -#define TSAN_VECTOR_H - -#include "tsan_defs.h" -#include "tsan_mman.h" - -namespace __tsan { - -template<typename T> -class Vector { - public: - explicit Vector(MBlockType typ) - : typ_(typ) - , begin_() - , end_() - , last_() { - } - - ~Vector() { - if (begin_) - internal_free(begin_); - } - - void Reset() { - if (begin_) - internal_free(begin_); - begin_ = 0; - end_ = 0; - last_ = 0; - } - - uptr Size() const { - return end_ - begin_; - } - - T &operator[](uptr i) { - DCHECK_LT(i, end_ - begin_); - return begin_[i]; - } - - const T &operator[](uptr i) const { - DCHECK_LT(i, end_ - begin_); - return begin_[i]; - } - - T *PushBack() { - EnsureSize(Size() + 1); - T *p = &end_[-1]; - internal_memset(p, 0, sizeof(*p)); - return p; - } - - T *PushBack(const T& v) { - EnsureSize(Size() + 1); - T *p = &end_[-1]; - internal_memcpy(p, &v, sizeof(*p)); - return p; - } - - void PopBack() { - DCHECK_GT(end_, begin_); - end_--; - } - - void Resize(uptr size) { - if (size == 0) { - end_ = begin_; - return; - } - uptr old_size = Size(); - EnsureSize(size); - if (old_size < size) { - for (uptr i = old_size; i < size; i++) - internal_memset(&begin_[i], 0, sizeof(begin_[i])); - } - } - - private: - const MBlockType typ_; - T *begin_; - T *end_; - T *last_; - - void EnsureSize(uptr size) { - if (size <= Size()) - return; - if (size <= (uptr)(last_ - begin_)) { - end_ = begin_ + size; - return; - } - uptr cap0 = last_ - begin_; - uptr cap = cap0 * 5 / 4; // 25% growth - if (cap == 0) - cap = 16; - if (cap < size) - cap = size; - T *p = (T*)internal_alloc(typ_, cap * sizeof(T)); - if (cap0) { - internal_memcpy(p, begin_, cap0 * sizeof(T)); - internal_free(begin_); - } - begin_ = p; - end_ = begin_ + size; - last_ = begin_ + cap; - } - - Vector(const Vector&); - void operator=(const Vector&); -}; -} // namespace __tsan - -#endif // #ifndef TSAN_VECTOR_H |