From 10ef6941648aad04d54527d4a7a6070bf7065e88 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Thu, 22 Oct 2015 15:25:54 +0100 Subject: Delay emitting CFI PC adjustments until after Thumb2/Mips fixup. On Mips also take into account out-of-order CFI data emitted from EmitBranches(). Change-Id: I03b0b0b4c2b1ea31a02699ef5fa1c55aa42c23c3 --- compiler/utils/assembler.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'compiler/utils/assembler.cc') diff --git a/compiler/utils/assembler.cc b/compiler/utils/assembler.cc index b01b0fe4e0..f784d2c3f8 100644 --- a/compiler/utils/assembler.cc +++ b/compiler/utils/assembler.cc @@ -38,6 +38,7 @@ #ifdef ART_ENABLE_CODEGEN_x86_64 #include "x86_64/assembler_x86_64.h" #endif +#include "base/casts.h" #include "globals.h" #include "memory_region.h" @@ -119,7 +120,13 @@ void AssemblerBuffer::ExtendCapacity(size_t min_capacity) { } void DebugFrameOpCodeWriterForAssembler::ImplicitlyAdvancePC() { - this->AdvancePC(assembler_->CodeSize()); + uint32_t pc = dchecked_integral_cast(assembler_->CodeSize()); + if (delay_emitting_advance_pc_) { + uint32_t stream_pos = dchecked_integral_cast(opcodes_.size()); + delayed_advance_pcs_.push_back(DelayedAdvancePC {stream_pos, pc}); + } else { + AdvancePC(pc); + } } Assembler* Assembler::Create(InstructionSet instruction_set, -- cgit v1.2.3-59-g8ed1b