| Index: src/assembler.h
|
| diff --git a/src/assembler.h b/src/assembler.h
|
| index c240cc183307cbd7e3db663c1b415a0fc4a68d8d..2afc6830681a17abb6015ec66a309b67d6179095 100644
|
| --- a/src/assembler.h
|
| +++ b/src/assembler.h
|
| @@ -64,18 +64,30 @@ enum class CodeObjectRequired { kNo, kYes };
|
|
|
| class AssemblerBase: public Malloced {
|
| public:
|
| - AssemblerBase(Isolate* isolate, void* buffer, int buffer_size);
|
| + struct IsolateData {
|
| + explicit IsolateData(Isolate* isolate);
|
| + IsolateData(const IsolateData&) = default;
|
| +
|
| + bool serializer_enabled_;
|
| +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64
|
| + size_t max_old_generation_size_;
|
| +#endif
|
| +#if V8_TARGET_ARCH_X64
|
| + Address code_range_start_;
|
| +#endif
|
| + };
|
| +
|
| + AssemblerBase(IsolateData isolate_data, void* buffer, int buffer_size);
|
| virtual ~AssemblerBase();
|
|
|
| - Isolate* isolate() const { return isolate_; }
|
| - int jit_cookie() const { return jit_cookie_; }
|
| + IsolateData isolate_data() const { return isolate_data_; }
|
| +
|
| + bool serializer_enabled() const { return isolate_data_.serializer_enabled_; }
|
| + void enable_serializer() { isolate_data_.serializer_enabled_ = true; }
|
|
|
| bool emit_debug_code() const { return emit_debug_code_; }
|
| void set_emit_debug_code(bool value) { emit_debug_code_ = value; }
|
|
|
| - bool serializer_enabled() const { return serializer_enabled_; }
|
| - void enable_serializer() { serializer_enabled_ = true; }
|
| -
|
| bool predictable_code_size() const { return predictable_code_size_; }
|
| void set_predictable_code_size(bool value) { predictable_code_size_ = value; }
|
|
|
| @@ -113,7 +125,7 @@ class AssemblerBase: public Malloced {
|
| virtual void AbortedCodeGeneration() { }
|
|
|
| // Debugging
|
| - void Print();
|
| + void Print(Isolate* isolate);
|
|
|
| static const int kMinimalBufferSize = 4*KB;
|
|
|
| @@ -139,12 +151,10 @@ class AssemblerBase: public Malloced {
|
| byte* pc_;
|
|
|
| private:
|
| - Isolate* isolate_;
|
| - int jit_cookie_;
|
| + IsolateData isolate_data_;
|
| uint64_t enabled_cpu_features_;
|
| bool emit_debug_code_;
|
| bool predictable_code_size_;
|
| - bool serializer_enabled_;
|
|
|
| // Indicates whether the constant pool can be accessed, which is only possible
|
| // if the pp register points to the current code object's constant pool.
|
| @@ -372,14 +382,10 @@ class RelocInfo {
|
|
|
| STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt);
|
|
|
| - explicit RelocInfo(Isolate* isolate) : isolate_(isolate) {
|
| - DCHECK_NOT_NULL(isolate);
|
| - }
|
| + RelocInfo() = default;
|
|
|
| - RelocInfo(Isolate* isolate, byte* pc, Mode rmode, intptr_t data, Code* host)
|
| - : isolate_(isolate), pc_(pc), rmode_(rmode), data_(data), host_(host) {
|
| - DCHECK_NOT_NULL(isolate);
|
| - }
|
| + RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host)
|
| + : pc_(pc), rmode_(rmode), data_(data), host_(host) {}
|
|
|
| static inline bool IsRealRelocMode(Mode mode) {
|
| return mode >= FIRST_REAL_RELOC_MODE && mode <= LAST_REAL_RELOC_MODE;
|
| @@ -478,7 +484,6 @@ class RelocInfo {
|
| static inline int ModeMask(Mode mode) { return 1 << mode; }
|
|
|
| // Accessors
|
| - Isolate* isolate() const { return isolate_; }
|
| byte* pc() const { return pc_; }
|
| void set_pc(byte* pc) { pc_ = pc; }
|
| Mode rmode() const { return rmode_; }
|
| @@ -506,19 +511,19 @@ class RelocInfo {
|
| uint32_t wasm_function_table_size_reference();
|
| uint32_t wasm_memory_size_reference();
|
| void update_wasm_memory_reference(
|
| - Address old_base, Address new_base,
|
| + Isolate* isolate, Address old_base, Address new_base,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
|
| void update_wasm_memory_size(
|
| - uint32_t old_size, uint32_t new_size,
|
| + Isolate* isolate, uint32_t old_size, uint32_t new_size,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
|
| void update_wasm_global_reference(
|
| - Address old_base, Address new_base,
|
| + Isolate* isolate, Address old_base, Address new_base,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
|
| void update_wasm_function_table_size_reference(
|
| - uint32_t old_base, uint32_t new_base,
|
| + Isolate* isolate, uint32_t old_base, uint32_t new_base,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
|
| void set_target_address(
|
| - Address target,
|
| + Isolate* isolate, Address target,
|
| WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED);
|
|
|
| @@ -533,7 +538,7 @@ class RelocInfo {
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Address target_runtime_entry(Assembler* origin));
|
| INLINE(void set_target_runtime_entry(
|
| - Address target,
|
| + Isolate* isolate, Address target,
|
| WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
|
| ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
|
| INLINE(Cell* target_cell());
|
| @@ -585,11 +590,11 @@ class RelocInfo {
|
| // the break points where straight-line code is patched with a call
|
| // instruction.
|
| INLINE(Address debug_call_address());
|
| - INLINE(void set_debug_call_address(Address target));
|
| + INLINE(void set_debug_call_address(Isolate*, Address target));
|
|
|
| // Wipe out a relocation to a fixed value, used for making snapshots
|
| // reproducible.
|
| - INLINE(void WipeOut());
|
| + INLINE(void WipeOut(Isolate* isolate));
|
|
|
| template<typename StaticVisitor> inline void Visit(Heap* heap);
|
|
|
| @@ -603,7 +608,7 @@ class RelocInfo {
|
| #ifdef DEBUG
|
| // Check whether the given code contains relocation information that
|
| // either is position-relative or movable by the garbage collector.
|
| - static bool RequiresRelocation(const CodeDesc& desc);
|
| + static bool RequiresRelocation(Isolate* isolate, const CodeDesc& desc);
|
| #endif
|
|
|
| #ifdef ENABLE_DISASSEMBLER
|
| @@ -623,11 +628,11 @@ class RelocInfo {
|
| static const int kApplyMask; // Modes affected by apply. Depends on arch.
|
|
|
| private:
|
| - void unchecked_update_wasm_memory_reference(Address address,
|
| + void unchecked_update_wasm_memory_reference(Isolate* isolate, Address address,
|
| ICacheFlushMode flush_mode);
|
| - void unchecked_update_wasm_size(uint32_t size, ICacheFlushMode flush_mode);
|
| + void unchecked_update_wasm_size(Isolate* isolate, uint32_t size,
|
| + ICacheFlushMode flush_mode);
|
|
|
| - Isolate* isolate_;
|
| // On ARM, note that pc_ is the address of the constant pool entry
|
| // to be relocated and not the address of the instruction
|
| // referencing the constant pool entry (except when rmode_ ==
|
|
|