// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_INSTRUCTION_STREAM_H_ #define V8_INSTRUCTION_STREAM_H_ #include "src/base/macros.h" #include "src/globals.h" namespace v8 { namespace internal { class Code; class Isolate; // Wraps an off-heap instruction stream. // TODO(jgruber,v8:6666): Remove this class. class InstructionStream final : public AllStatic { public: // Returns true, iff the given pc points into an off-heap instruction stream. static bool PcIsOffHeap(Isolate* isolate, Address pc); // Returns the corresponding Code object if it exists, and nullptr otherwise. static Code* TryLookupCode(Isolate* isolate, Address address); // During snapshot creation, we first create an executable off-heap area // containing all off-heap code. The area is guaranteed to be contiguous. // Note that this only applies when building the snapshot, e.g. for // mksnapshot. Otherwise, off-heap code is embedded directly into the binary. static void CreateOffHeapInstructionStream(Isolate* isolate, uint8_t** data, uint32_t* size); static void FreeOffHeapInstructionStream(uint8_t* data, uint32_t size); }; } // namespace internal } // namespace v8 #endif // V8_INSTRUCTION_STREAM_H_