diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-07-25 19:30:07 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-07-26 08:31:50 +0200 |
commit | 6a31d05340b22fc413ee83eaacd0a5565bbbe799 (patch) | |
tree | 78f9e1c2f417244842f6422f17e1816e70317100 /deps/v8/src/base | |
parent | 4d94bb2b1f72b6b612983a517a39c5545724a3ad (diff) | |
download | android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.tar.gz android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.tar.bz2 android-node-v8-6a31d05340b22fc413ee83eaacd0a5565bbbe799.zip |
deps: update V8 to 6.8.275.24
PR-URL: https://github.com/nodejs/node/pull/21079
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Yang Guo <yangguo@chromium.org>
Diffstat (limited to 'deps/v8/src/base')
-rw-r--r-- | deps/v8/src/base/adapters.h | 12 | ||||
-rw-r--r-- | deps/v8/src/base/atomic-utils.h | 1 | ||||
-rw-r--r-- | deps/v8/src/base/ieee754.cc | 1 | ||||
-rw-r--r-- | deps/v8/src/base/logging.cc | 3 | ||||
-rw-r--r-- | deps/v8/src/base/macros.h | 28 | ||||
-rw-r--r-- | deps/v8/src/base/platform/mutex.h | 16 | ||||
-rw-r--r-- | deps/v8/src/base/platform/platform-cygwin.cc | 2 | ||||
-rw-r--r-- | deps/v8/src/base/platform/platform-fuchsia.cc | 2 | ||||
-rw-r--r-- | deps/v8/src/base/platform/platform-posix.cc | 14 | ||||
-rw-r--r-- | deps/v8/src/base/platform/platform-win32.cc | 2 | ||||
-rw-r--r-- | deps/v8/src/base/platform/platform.h | 1 | ||||
-rw-r--r-- | deps/v8/src/base/template-utils.h | 7 |
12 files changed, 71 insertions, 18 deletions
diff --git a/deps/v8/src/base/adapters.h b/deps/v8/src/base/adapters.h index f04391e2b2..6eeaed140b 100644 --- a/deps/v8/src/base/adapters.h +++ b/deps/v8/src/base/adapters.h @@ -8,6 +8,8 @@ #ifndef V8_BASE_ADAPTERS_H_ #define V8_BASE_ADAPTERS_H_ +#include <iterator> + #include "src/base/macros.h" namespace v8 { @@ -17,13 +19,15 @@ namespace base { template <typename T> class ReversedAdapter { public: - typedef decltype(static_cast<T*>(nullptr)->rbegin()) Iterator; + using Iterator = + std::reverse_iterator<decltype(std::begin(std::declval<T>()))>; explicit ReversedAdapter(T& t) : t_(t) {} - ReversedAdapter(const ReversedAdapter& ra) : t_(ra.t_) {} + ReversedAdapter(const ReversedAdapter& ra) = default; - Iterator begin() const { return t_.rbegin(); } - Iterator end() const { return t_.rend(); } + // TODO(clemensh): Use std::rbegin/std::rend once we have C++14 support. + Iterator begin() const { return Iterator(std::end(t_)); } + Iterator end() const { return Iterator(std::begin(t_)); } private: T& t_; diff --git a/deps/v8/src/base/atomic-utils.h b/deps/v8/src/base/atomic-utils.h index 5ba1ad4246..7787e4ff52 100644 --- a/deps/v8/src/base/atomic-utils.h +++ b/deps/v8/src/base/atomic-utils.h @@ -14,6 +14,7 @@ namespace v8 { namespace base { +// Deprecated. Use std::atomic<T> for new code. template <class T> class AtomicNumber { public: diff --git a/deps/v8/src/base/ieee754.cc b/deps/v8/src/base/ieee754.cc index 95b84cf328..7a1cc175cb 100644 --- a/deps/v8/src/base/ieee754.cc +++ b/deps/v8/src/base/ieee754.cc @@ -51,6 +51,7 @@ namespace { /* * A union which permits us to convert between a double and two 32 bit * ints. + * TODO(jkummerow): This is undefined behavior. Use bit_cast instead. */ #if V8_TARGET_LITTLE_ENDIAN diff --git a/deps/v8/src/base/logging.cc b/deps/v8/src/base/logging.cc index e58fdba09f..64f7fed413 100644 --- a/deps/v8/src/base/logging.cc +++ b/deps/v8/src/base/logging.cc @@ -135,7 +135,7 @@ class FailureMessage { static const uintptr_t kStartMarker = 0xdecade10; static const uintptr_t kEndMarker = 0xdecade11; - static const int kMessageBufferSize = 1024; + static const int kMessageBufferSize = 512; uintptr_t start_marker_ = kStartMarker; char message_[kMessageBufferSize]; @@ -154,6 +154,7 @@ void V8_Fatal(const char* file, int line, const char* format, ...) { fflush(stdout); fflush(stderr); + // Print the formatted message to stdout without cropping the output. v8::base::OS::PrintError("\n\n#\n# Fatal error in %s, line %d\n# ", file, line); diff --git a/deps/v8/src/base/macros.h b/deps/v8/src/base/macros.h index db2f194591..3437309bc7 100644 --- a/deps/v8/src/base/macros.h +++ b/deps/v8/src/base/macros.h @@ -43,7 +43,6 @@ template <typename T, size_t N> char (&ArraySizeHelper(const T (&array)[N]))[N]; #endif - // bit_cast<Dest,Source> is a template function that implements the // equivalent of "*reinterpret_cast<Dest*>(&source)". We need this in // very low-level functions like the protobuf library and fast math @@ -150,20 +149,27 @@ V8_INLINE Dest bit_cast(Source const& source) { #define INLINE(declarator) V8_INLINE declarator #define NO_INLINE(declarator) V8_NOINLINE declarator -// Define V8_USE_ADDRESS_SANITIZER macros. +// Define V8_USE_ADDRESS_SANITIZER macro. #if defined(__has_feature) #if __has_feature(address_sanitizer) #define V8_USE_ADDRESS_SANITIZER 1 #endif #endif -// Define DISABLE_ASAN macros. +// Define DISABLE_ASAN macro. #ifdef V8_USE_ADDRESS_SANITIZER #define DISABLE_ASAN __attribute__((no_sanitize_address)) #else #define DISABLE_ASAN #endif +// Define V8_USE_MEMORY_SANITIZER macro. +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define V8_USE_MEMORY_SANITIZER 1 +#endif +#endif + // Helper macro to define no_sanitize attributes only with clang. #if defined(__clang__) && defined(__has_attribute) #if __has_attribute(no_sanitize) @@ -271,6 +277,14 @@ struct Use { } // namespace base } // namespace v8 +// implicit_cast<A>(x) triggers an implicit cast from {x} to type {A}. This is +// useful in situations where static_cast<A>(x) would do too much. +// Only use this for cheap-to-copy types, or use move semantics explicitly. +template <class A> +V8_INLINE A implicit_cast(A x) { + return x; +} + // Define our own macros for writing 64-bit constants. This is less fragile // than defining __STDC_CONSTANT_MACROS before including <stdint.h>, and it // works on compilers that don't have it (like MSVC). @@ -296,6 +310,14 @@ struct Use { #define V8PRIdPTR V8_PTR_PREFIX "d" #define V8PRIuPTR V8_PTR_PREFIX "u" +#ifdef V8_TARGET_ARCH_64_BIT +#define V8_PTR_HEX_DIGITS 12 +#define V8PRIxPTR_FMT "0x%012" V8PRIxPTR +#else +#define V8_PTR_HEX_DIGITS 8 +#define V8PRIxPTR_FMT "0x%08" V8PRIxPTR +#endif + // ptrdiff_t is 't' according to the standard, but MSVC uses 'I'. #if V8_CC_MSVC #define V8PRIxPTRDIFF "Ix" diff --git a/deps/v8/src/base/platform/mutex.h b/deps/v8/src/base/platform/mutex.h index 59b653d6cd..6b4158f079 100644 --- a/deps/v8/src/base/platform/mutex.h +++ b/deps/v8/src/base/platform/mutex.h @@ -203,11 +203,21 @@ typedef LazyStaticInstance<RecursiveMutex, // object was created, the LockGuard is destructed and the mutex is released. // The LockGuard class is non-copyable. -template <typename Mutex> +// Controls whether a LockGuard always requires a valid Mutex or will just +// ignore it if it's nullptr. +enum class NullBehavior { kRequireNotNull, kIgnoreIfNull }; + +template <typename Mutex, NullBehavior Behavior = NullBehavior::kRequireNotNull> class LockGuard final { public: - explicit LockGuard(Mutex* mutex) : mutex_(mutex) { mutex_->Lock(); } - ~LockGuard() { mutex_->Unlock(); } + explicit LockGuard(Mutex* mutex) : mutex_(mutex) { + if (Behavior == NullBehavior::kRequireNotNull || mutex_ != nullptr) { + mutex_->Lock(); + } + } + ~LockGuard() { + if (mutex_ != nullptr) mutex_->Unlock(); + } private: Mutex* mutex_; diff --git a/deps/v8/src/base/platform/platform-cygwin.cc b/deps/v8/src/base/platform/platform-cygwin.cc index ddcdc1a2d3..c5d94fc6ba 100644 --- a/deps/v8/src/base/platform/platform-cygwin.cc +++ b/deps/v8/src/base/platform/platform-cygwin.cc @@ -34,6 +34,8 @@ DWORD GetProtectionFromMemoryPermission(OS::MemoryPermission access) { switch (access) { case OS::MemoryPermission::kNoAccess: return PAGE_NOACCESS; + case OS::MemoryPermission::kRead: + return PAGE_READONLY; case OS::MemoryPermission::kReadWrite: return PAGE_READWRITE; case OS::MemoryPermission::kReadWriteExecute: diff --git a/deps/v8/src/base/platform/platform-fuchsia.cc b/deps/v8/src/base/platform/platform-fuchsia.cc index bba3f1baba..3a9d65a12d 100644 --- a/deps/v8/src/base/platform/platform-fuchsia.cc +++ b/deps/v8/src/base/platform/platform-fuchsia.cc @@ -19,6 +19,8 @@ uint32_t GetProtectionFromMemoryPermission(OS::MemoryPermission access) { switch (access) { case OS::MemoryPermission::kNoAccess: return 0; // no permissions + case OS::MemoryPermission::kRead: + return ZX_VM_FLAG_PERM_READ; case OS::MemoryPermission::kReadWrite: return ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE; case OS::MemoryPermission::kReadWriteExecute: diff --git a/deps/v8/src/base/platform/platform-posix.cc b/deps/v8/src/base/platform/platform-posix.cc index fee67589b6..d21107d6f7 100644 --- a/deps/v8/src/base/platform/platform-posix.cc +++ b/deps/v8/src/base/platform/platform-posix.cc @@ -112,6 +112,8 @@ int GetProtectionFromMemoryPermission(OS::MemoryPermission access) { switch (access) { case OS::MemoryPermission::kNoAccess: return PROT_NONE; + case OS::MemoryPermission::kRead: + return PROT_READ; case OS::MemoryPermission::kReadWrite: return PROT_READ | PROT_WRITE; case OS::MemoryPermission::kReadWriteExecute: @@ -352,6 +354,18 @@ bool OS::SetPermissions(void* address, size_t size, MemoryPermission access) { if (ret == 0 && access == OS::MemoryPermission::kNoAccess) { ret = ReclaimInaccessibleMemory(address, size); } + +// For accounting purposes, we want to call MADV_FREE_REUSE on macOS after +// changing permissions away from OS::MemoryPermission::kNoAccess. Since this +// state is not kept at this layer, we always call this if access != kNoAccess. +// The cost is a syscall that effectively no-ops. +// TODO(erikchen): Fix this to only call MADV_FREE_REUSE when necessary. +// https://crbug.com/823915 +#if defined(OS_MACOSX) + if (access != OS::MemoryPermission::kNoAccess) + madvise(address, size, MADV_FREE_REUSE); +#endif + return ret == 0; } diff --git a/deps/v8/src/base/platform/platform-win32.cc b/deps/v8/src/base/platform/platform-win32.cc index d4aa44f8a7..f618c65fb6 100644 --- a/deps/v8/src/base/platform/platform-win32.cc +++ b/deps/v8/src/base/platform/platform-win32.cc @@ -758,6 +758,8 @@ DWORD GetProtectionFromMemoryPermission(OS::MemoryPermission access) { switch (access) { case OS::MemoryPermission::kNoAccess: return PAGE_NOACCESS; + case OS::MemoryPermission::kRead: + return PAGE_READONLY; case OS::MemoryPermission::kReadWrite: return PAGE_READWRITE; case OS::MemoryPermission::kReadWriteExecute: diff --git a/deps/v8/src/base/platform/platform.h b/deps/v8/src/base/platform/platform.h index 4fbc87c4aa..5d015eeeac 100644 --- a/deps/v8/src/base/platform/platform.h +++ b/deps/v8/src/base/platform/platform.h @@ -159,6 +159,7 @@ class V8_BASE_EXPORT OS { // v8::PageAllocator. enum class MemoryPermission { kNoAccess, + kRead, kReadWrite, // TODO(hpayer): Remove this flag. Memory should never be rwx. kReadWriteExecute, diff --git a/deps/v8/src/base/template-utils.h b/deps/v8/src/base/template-utils.h index 07356346ec..cbbe7e3cbf 100644 --- a/deps/v8/src/base/template-utils.h +++ b/deps/v8/src/base/template-utils.h @@ -56,13 +56,6 @@ std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } -// implicit_cast<A>(x) triggers an implicit cast from {x} to type {A}. This is -// useful in situations where static_cast<A>(x) would do too much. -template <class A> -A implicit_cast(A x) { - return x; -} - // Helper to determine how to pass values: Pass scalars and arrays by value, // others by const reference (even if it was a non-const ref before; this is // disallowed by the style guide anyway). |