1// Copyright 2020 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_SANDBOX_EXTERNAL_POINTER_H_ 6#define V8_SANDBOX_EXTERNAL_POINTER_H_ 7 8#include "src/common/globals.h" 9 10namespace v8 { 11namespace internal { 12 13// Convert external pointer from on-V8-heap representation to an actual external 14// pointer value. 15V8_INLINE Address DecodeExternalPointer(const Isolate* isolate, 16 ExternalPointer_t encoded_pointer, 17 ExternalPointerTag tag); 18 19constexpr ExternalPointer_t kNullExternalPointer = 0; 20 21// Creates zero-initialized entry in external pointer table and writes the entry 22// id to the field. When sandbox is not enabled, it's a no-op. 23V8_INLINE void InitExternalPointerField(Address field_address, Isolate* isolate, 24 ExternalPointerTag tag); 25 26// Creates and initializes entry in external pointer table and writes the entry 27// id to the field. 28// Basically, it's InitExternalPointerField() followed by 29// WriteExternalPointerField(). 30V8_INLINE void InitExternalPointerField(Address field_address, Isolate* isolate, 31 Address value, ExternalPointerTag tag); 32 33// Reads and returns a raw external pointer value. 34V8_INLINE ExternalPointer_t ReadRawExternalPointerField(Address field_address); 35 36// Reads external pointer for the field, and decodes it if the sandbox is 37// enabled. 38V8_INLINE Address ReadExternalPointerField(Address field_address, 39 const Isolate* isolate, 40 ExternalPointerTag tag); 41 42// Encodes value if the sandbox is enabled and writes it into the field. 43V8_INLINE void WriteExternalPointerField(Address field_address, 44 Isolate* isolate, Address value, 45 ExternalPointerTag tag); 46 47} // namespace internal 48} // namespace v8 49 50#endif // V8_SANDBOX_EXTERNAL_POINTER_H_ 51