diff options
Diffstat (limited to 'deps/v8/src/arm/assembler-arm.cc')
-rw-r--r-- | deps/v8/src/arm/assembler-arm.cc | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/deps/v8/src/arm/assembler-arm.cc b/deps/v8/src/arm/assembler-arm.cc index a994b6907d..ce6209c592 100644 --- a/deps/v8/src/arm/assembler-arm.cc +++ b/deps/v8/src/arm/assembler-arm.cc @@ -559,7 +559,9 @@ Assembler::~Assembler() { DCHECK_EQ(const_pool_blocked_nesting_, 0); } -void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { +void Assembler::GetCode(Isolate* isolate, CodeDesc* desc, + SafepointTableBuilder* safepoint_table_builder, + int handler_table_offset) { // Emit constant pool if necessary. CheckConstPool(true, false); DCHECK(pending_32_bit_constants_.empty()); @@ -569,19 +571,27 @@ void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { AllocateAndInstallRequestedHeapObjects(isolate); // Set up code descriptor. - desc->buffer = buffer_start_; - desc->buffer_size = buffer_->size(); - desc->instr_size = pc_offset(); - desc->reloc_size = - (buffer_start_ + desc->buffer_size) - reloc_info_writer.pos(); - desc->constant_pool_size = 0; - desc->origin = this; - desc->unwinding_info_size = 0; - desc->unwinding_info = nullptr; - desc->code_comments_size = code_comments_size; + // TODO(jgruber): Reconsider how these offsets and sizes are maintained up to + // this point to make CodeDesc initialization less fiddly. + + static constexpr int kConstantPoolSize = 0; + const int instruction_size = pc_offset(); + const int code_comments_offset = instruction_size - code_comments_size; + const int constant_pool_offset = code_comments_offset - kConstantPoolSize; + const int handler_table_offset2 = (handler_table_offset == kNoHandlerTable) + ? constant_pool_offset + : handler_table_offset; + const int safepoint_table_offset = + (safepoint_table_builder == kNoSafepointTable) + ? handler_table_offset2 + : safepoint_table_builder->GetCodeOffset(); + const int reloc_info_offset = + static_cast<int>(reloc_info_writer.pos() - buffer_->start()); + CodeDesc::Initialize(desc, this, safepoint_table_offset, + handler_table_offset2, constant_pool_offset, + code_comments_offset, reloc_info_offset); } - void Assembler::Align(int m) { DCHECK(m >= 4 && base::bits::IsPowerOfTwo(m)); DCHECK_EQ(pc_offset() & (kInstrSize - 1), 0); |