From dc97aa7fb937e244c36a7d9b8ac739e45c008f62 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Mon, 4 Aug 2025 15:29:04 -0700 Subject: [PATCH] [vm, compiler] Update TSAN instrumentation. TEST=tsan Cq-Include-Trybots: luci.dart.try:vm-tsan-linux-release-x64-try,vm-tsan-linux-release-arm64-try,iso-stress-linux-arm64-try,iso-stress-linux-x64-try Change-Id: I0c49b501c53f9a5117bb14800e342e6fe9b4eba6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442730 Reviewed-by: Alexander Aprelev Commit-Queue: Ryan Macnak --- runtime/platform/thread_sanitizer.h | 10 +- .../vm/compiler/assembler/assembler_arm64.cc | 70 ++- .../vm/compiler/assembler/assembler_arm64.h | 14 +- .../vm/compiler/assembler/assembler_riscv.cc | 125 ++++- .../vm/compiler/assembler/assembler_riscv.h | 4 +- .../vm/compiler/assembler/assembler_x64.cc | 86 ++- runtime/vm/compiler/assembler/assembler_x64.h | 30 +- .../compiler/assembler/assembler_x64_test.cc | 72 +-- runtime/vm/compiler/backend/il_riscv.cc | 5 +- runtime/vm/compiler/backend/locations.h | 4 + .../vm/compiler/runtime_offsets_extracted.h | 510 +++++++++--------- runtime/vm/runtime_entry.cc | 20 +- runtime/vm/runtime_entry_list.h | 6 +- 13 files changed, 551 insertions(+), 405 deletions(-) diff --git a/runtime/platform/thread_sanitizer.h b/runtime/platform/thread_sanitizer.h index 465f9a3a134..27710b34f30 100644 --- a/runtime/platform/thread_sanitizer.h +++ b/runtime/platform/thread_sanitizer.h @@ -17,8 +17,14 @@ #if defined(USING_THREAD_SANITIZER) #define NO_SANITIZE_THREAD __attribute__((no_sanitize("thread"))) -extern "C" void __tsan_acquire(void* addr); -extern "C" void __tsan_release(void* addr); +extern "C" void __tsan_atomic32_load(uint32_t* addr, int order); +extern "C" void __tsan_atomic32_store(uint32_t* addr, + uint32_t value, + int order); +extern "C" void __tsan_atomic64_load(uint64_t* addr, int order); +extern "C" void __tsan_atomic64_store(uint64_t* addr, + uint64_t value, + int order); #else #define NO_SANITIZE_THREAD #endif diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc index b15d28b5020..6e81d63a0d3 100644 --- a/runtime/vm/compiler/assembler/assembler_arm64.cc +++ b/runtime/vm/compiler/assembler/assembler_arm64.cc @@ -286,16 +286,69 @@ void Assembler::Align(intptr_t alignment, intptr_t offset) { ASSERT(((offset + buffer_.GetPosition()) & (alignment - 1)) == 0); } -void Assembler::TsanLoadAcquire(Register addr) { - LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); +void Assembler::TsanLoadAcquire(Register dst, Register addr, OperandSize size) { + RegisterSet registers(kDartVolatileCpuRegs & ~(1 << dst), + kAllFpuRegistersList); + + EnterFrame(0); + PushRegisters(registers); + ReserveAlignedFrameSpace(0); + MoveRegister(R0, addr); - rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1); + LoadImmediate(R1, __ATOMIC_ACQUIRE); + + mov(CSP, SP); + switch (size) { + case kEightBytes: + ldr(TMP, compiler::Address( + THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread())); + break; + case kUnsignedFourBytes: + ldr(TMP, compiler::Address( + THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread())); + break; + default: + UNIMPLEMENTED(); + } + str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset())); + blr(TMP); + LoadImmediate(TMP, VMTag::kDartTagId); + str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset())); + SetupCSPFromThread(THR); + + MoveRegister(dst, R0); + + AddImmediate(SP, FP, -registers.SpillSize()); + PopRegisters(registers); + LeaveFrame(); } -void Assembler::TsanStoreRelease(Register addr) { +void Assembler::TsanStoreRelease(Register src, + Register addr, + OperandSize size) { LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); - MoveRegister(R0, addr); - rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1); + + if (src == R0) { + MoveRegister(R1, src); + MoveRegister(R0, addr); + } else { + MoveRegister(R0, addr); + MoveRegister(R1, src); + } + LoadImmediate(R2, __ATOMIC_RELEASE); + + switch (size) { + case kEightBytes: + rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3); + break; + case kFourBytes: + case kUnsignedFourBytes: + rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3); + break; + default: + UNIMPLEMENTED(); + break; + } } static int CountLeadingZeros(uint64_t value, int width) { @@ -1779,10 +1832,7 @@ LeafRuntimeScope::~LeafRuntimeScope() { // SP might have been modified to reserve space for arguments // and ensure proper alignment of the stack frame. // We need to restore it before restoring registers. - const intptr_t kPushedRegistersSize = - kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize + - kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize; - __ AddImmediate(SP, FP, -kPushedRegistersSize); + __ AddImmediate(SP, FP, -kRuntimeCallSavedRegisters.SpillSize()); __ PopRegisters(kRuntimeCallSavedRegisters); } diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h index 338eca0a9bf..e381bc039a2 100644 --- a/runtime/vm/compiler/assembler/assembler_arm64.h +++ b/runtime/vm/compiler/assembler/assembler_arm64.h @@ -502,8 +502,8 @@ class Assembler : public AssemblerBase { StoreToOffset(src, base, offset, kEightBytes); } - void TsanLoadAcquire(Register addr); - void TsanStoreRelease(Register addr); + void TsanLoadAcquire(Register dst, Register addr, OperandSize size); + void TsanStoreRelease(Register src, Register addr, OperandSize size); void LoadAcquire(Register dst, const Address& address, @@ -515,9 +515,10 @@ class Assembler : public AssemblerBase { AddImmediate(TMP2, src, address.offset()); src = TMP2; } - ldar(dst, src, size); if (FLAG_target_thread_sanitizer) { - TsanLoadAcquire(src); + TsanLoadAcquire(dst, src, size); + } else { + ldar(dst, src, size); } } @@ -538,9 +539,10 @@ class Assembler : public AssemblerBase { AddImmediate(TMP2, dst, address.offset()); dst = TMP2; } - stlr(src, dst, size); if (FLAG_target_thread_sanitizer) { - TsanStoreRelease(dst); + TsanStoreRelease(src, dst, size); + } else { + stlr(src, dst, size); } } diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc index 2ee29025bc8..b416a3421b0 100644 --- a/runtime/vm/compiler/assembler/assembler_riscv.cc +++ b/runtime/vm/compiler/assembler/assembler_riscv.cc @@ -2880,8 +2880,7 @@ void Assembler::PushRegisters(const RegisterSet& regs) { // The order in which the registers are pushed must match the order // in which the registers are encoded in the safepoint's stack map. - intptr_t size = (regs.CpuRegisterCount() * target::kWordSize) + - (regs.FpuRegisterCount() * kFpuRegisterSize); + intptr_t size = regs.SpillSize(); if (size == 0) { return; // Skip no-op SP update. } @@ -2909,8 +2908,7 @@ void Assembler::PopRegisters(const RegisterSet& regs) { // The order in which the registers are pushed must match the order // in which the registers are encoded in the safepoint's stack map. - intptr_t size = (regs.CpuRegisterCount() * target::kWordSize) + - (regs.FpuRegisterCount() * kFpuRegisterSize); + intptr_t size = regs.SpillSize(); if (size == 0) { return; // Skip no-op SP update. } @@ -3084,15 +3082,92 @@ void Assembler::Jump(const Address& address) { jr(TMP2); } -void Assembler::TsanLoadAcquire(Register addr) { - LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); - MoveRegister(A0, addr); - rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1); +void Assembler::TsanLoadAcquire(Register dst, + const Address& addr, + OperandSize size) { + ASSERT(addr.base() != SP); + ASSERT(addr.base() != FP); + ASSERT(dst != SP); + ASSERT(dst != FP); + + RegisterSet registers(kDartVolatileCpuRegs & ~(1 << dst), + kAbiVolatileFpuRegs); + + subi(SP, SP, 4 * target::kWordSize); + sx(RA, Address(SP, 3 * target::kWordSize)); + sx(FP, Address(SP, 2 * target::kWordSize)); + sx(CODE_REG, Address(SP, 1 * target::kWordSize)); + sx(PP, Address(SP, 0 * target::kWordSize)); + addi(FP, SP, 4 * target::kWordSize); + + PushRegisters(registers); + ReserveAlignedFrameSpace(0); + + AddImmediate(A0, addr.base(), addr.offset()); + LoadImmediate(A1, __ATOMIC_ACQUIRE); + + switch (size) { + case kEightBytes: + lx(TMP2, compiler::Address( + THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread())); + break; + case kUnsignedFourBytes: + lx(TMP2, compiler::Address( + THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread())); + break; + default: + UNIMPLEMENTED(); + break; + } + sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset())); + jalr(TMP2); + LoadImmediate(TMP2, VMTag::kDartTagId); + sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset())); + + MoveRegister(dst, A0); + + subi(SP, FP, registers.SpillSize() + 4 * target::kWordSize); + PopRegisters(registers); + + subi(SP, FP, 4 * target::kWordSize); + lx(PP, Address(SP, 0 * target::kWordSize)); + lx(CODE_REG, Address(SP, 1 * target::kWordSize)); + lx(FP, Address(SP, 2 * target::kWordSize)); + lx(RA, Address(SP, 3 * target::kWordSize)); + addi(SP, SP, 4 * target::kWordSize); } -void Assembler::TsanStoreRelease(Register addr) { + +void Assembler::TsanStoreRelease(Register src, + const Address& addr, + OperandSize size) { + ASSERT(addr.base() != SP); + ASSERT(addr.base() != FP); + ASSERT(src != SP); + ASSERT(src != FP); + LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); - MoveRegister(A0, addr); - rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1); + + if (src == A0) { + MoveRegister(A1, src); + AddImmediate(A0, addr.base(), addr.offset()); + } else { + AddImmediate(A0, addr.base(), addr.offset()); + MoveRegister(A1, src); + } + LoadImmediate(A2, __ATOMIC_RELEASE); + + switch (size) { + case kEightBytes: + rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3); + break; + case kFourBytes: + case kUnsignedFourBytes: + rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3); + break; + default: + UNIMPLEMENTED(); + break; + } } void Assembler::LoadAcquire(Register dst, @@ -3100,6 +3175,11 @@ void Assembler::LoadAcquire(Register dst, OperandSize size) { ASSERT(dst != address.base()); + if (FLAG_target_thread_sanitizer) { + TsanLoadAcquire(dst, address, size); + return; + } + if (Supports(RV_Zalasr)) { Address addr = PrepareAtomicOffset(address.base(), address.offset()); switch (size) { @@ -3124,20 +3204,16 @@ void Assembler::LoadAcquire(Register dst, Load(dst, address, size); fence(HartEffects::kRead, HartEffects::kMemory); } - - if (FLAG_target_thread_sanitizer) { - if (address.offset() == 0) { - TsanLoadAcquire(address.base()); - } else { - AddImmediate(TMP2, address.base(), address.offset()); - TsanLoadAcquire(TMP2); - } - } } void Assembler::StoreRelease(Register src, const Address& address, OperandSize size) { + if (FLAG_target_thread_sanitizer) { + TsanStoreRelease(src, address, size); + return; + } + if (Supports(RV_Zalasr)) { Address addr = PrepareAtomicOffset(address.base(), address.offset()); switch (size) { @@ -4781,13 +4857,8 @@ void LeafRuntimeScope::Call(const RuntimeEntry& entry, LeafRuntimeScope::~LeafRuntimeScope() { if (preserve_registers_) { - const intptr_t kSavedRegistersSize = - kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize + - kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize + - 4 * target::kWordSize; - - __ subi(SP, FP, kSavedRegistersSize); - + __ subi(SP, FP, + kRuntimeCallSavedRegisters.SpillSize() + 4 * target::kWordSize); __ PopRegisters(kRuntimeCallSavedRegisters); } diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h index 8c8c01085d9..a4a56ac74fb 100644 --- a/runtime/vm/compiler/assembler/assembler_riscv.h +++ b/runtime/vm/compiler/assembler/assembler_riscv.h @@ -1007,8 +1007,8 @@ class Assembler : public MicroAssembler { StoreToOffset(src, base, offset, kWordBytes); } - void TsanLoadAcquire(Register addr); - void TsanStoreRelease(Register addr); + void TsanLoadAcquire(Register dst, const Address& address, OperandSize size); + void TsanStoreRelease(Register src, const Address& address, OperandSize size); void LoadAcquire(Register dst, const Address& address, diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc index b6b7ca7c8f0..98d713ee7dc 100644 --- a/runtime/vm/compiler/assembler/assembler_x64.cc +++ b/runtime/vm/compiler/assembler/assembler_x64.cc @@ -2106,15 +2106,7 @@ LeafRuntimeScope::~LeafRuntimeScope() { // RSP might have been modified to reserve space for arguments // and ensure proper alignment of the stack frame. // We need to restore it before restoring registers. - const intptr_t kPushedCpuRegistersCount = - RegisterSet::RegisterCount(CallingConventions::kVolatileCpuRegisters); - const intptr_t kPushedXmmRegistersCount = - RegisterSet::RegisterCount(CallingConventions::kVolatileXmmRegisters); - const intptr_t kPushedRegistersSize = - kPushedCpuRegistersCount * target::kWordSize + - kPushedXmmRegistersCount * kFpuRegisterSize; - - __ leaq(RSP, Address(RBP, -kPushedRegistersSize)); + __ leaq(RSP, Address(RBP, -kVolatileRegisterSet.SpillSize())); // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch. __ PopRegisters(kVolatileRegisterSet); @@ -2128,16 +2120,80 @@ LeafRuntimeScope::~LeafRuntimeScope() { __ LeaveFrame(); } -void Assembler::TsanLoadAcquire(Address addr) { - LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); +void Assembler::TsanLoadAcquire(Register dst, Address addr, OperandSize size) { + ASSERT(addr.base() != RSP); + ASSERT(addr.base() != RBP); + ASSERT(dst != RSP); + ASSERT(dst != RBP); + + RegisterSet registers(CallingConventions::kVolatileCpuRegisters & ~(1 << dst), + CallingConventions::kVolatileXmmRegisters); + + EnterFrame(0); + PushRegisters(registers); + ReserveAlignedFrameSpace(0); + leaq(CallingConventions::kArg1Reg, addr); - rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1); + LoadImmediate(CallingConventions::kArg2Reg, __ATOMIC_ACQUIRE); + + switch (size) { + case kEightBytes: + movq(RAX, compiler::Address( + THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread())); + break; + case kUnsignedFourBytes: + movq(RAX, compiler::Address( + THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread())); + break; + default: + UNIMPLEMENTED(); + break; + } + movq(compiler::Assembler::VMTagAddress(), RAX); + CallCFunction(RAX); + movq(compiler::Assembler::VMTagAddress(), + compiler::Immediate(VMTag::kDartTagId)); + + MoveRegister(dst, RAX); + + // RSP might have been modified to reserve space for arguments + // and ensure proper alignment of the stack frame. + // We need to restore it before restoring registers. + leaq(RSP, Address(RBP, -registers.SpillSize())); + + PopRegisters(registers); + LeaveFrame(); } -void Assembler::TsanStoreRelease(Address addr) { +void Assembler::TsanStoreRelease(Register src, Address addr, OperandSize size) { + ASSERT(addr.base() != RSP); + ASSERT(addr.base() != RBP); + ASSERT(src != RSP); + ASSERT(src != RBP); + LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true); - leaq(CallingConventions::kArg1Reg, addr); - rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1); + + if (CallingConventions::kArg1Reg == src) { + MoveRegister(CallingConventions::kArg2Reg, src); + leaq(CallingConventions::kArg1Reg, addr); + } else { + leaq(CallingConventions::kArg1Reg, addr); + MoveRegister(CallingConventions::kArg2Reg, src); + } + LoadImmediate(CallingConventions::kArg3Reg, __ATOMIC_RELEASE); + + switch (size) { + case kEightBytes: + rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3); + break; + case kFourBytes: + case kUnsignedFourBytes: + rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3); + break; + default: + UNIMPLEMENTED(); + break; + } } void Assembler::RestoreCodePointer() { diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h index d9ff09ab941..da85c237a3c 100644 --- a/runtime/vm/compiler/assembler/assembler_x64.h +++ b/runtime/vm/compiler/assembler/assembler_x64.h @@ -1159,37 +1159,35 @@ class Assembler : public AssemblerBase { } } - void TsanLoadAcquire(Address addr); - void TsanStoreRelease(Address addr); + void TsanLoadAcquire(Register dst, Address addr, OperandSize size); + void TsanStoreRelease(Register src, Address addr, OperandSize size); void LoadAcquire(Register dst, const Address& address, OperandSize size = kEightBytes) override { - // On intel loads have load-acquire behavior (i.e. loads are not re-ordered - // with other loads). - Load(dst, address, size); if (FLAG_target_thread_sanitizer) { - TsanLoadAcquire(address); + TsanLoadAcquire(dst, address, size); + } else { + // On intel loads have load-acquire behavior (i.e. loads are not + // re-ordered with other loads). + Load(dst, address, size); } } #if defined(DART_COMPRESSED_POINTERS) void LoadAcquireCompressed(Register dst, const Address& address) override { - // On intel loads have load-acquire behavior (i.e. loads are not re-ordered - // with other loads). - LoadCompressed(dst, address); - if (FLAG_target_thread_sanitizer) { - TsanLoadAcquire(address); - } + LoadAcquire(dst, address, kUnsignedFourBytes); + addq(dst, Address(THR, target::Thread::heap_base_offset())); } #endif void StoreRelease(Register src, const Address& address, OperandSize size = kWordBytes) override { - // On intel stores have store-release behavior (i.e. stores are not - // re-ordered with other stores). - Store(src, address, size); if (FLAG_target_thread_sanitizer) { - TsanStoreRelease(address); + TsanStoreRelease(src, address, size); + } else { + // On intel stores have store-release behavior (i.e. stores are not + // re-ordered with other stores). + Store(src, address, size); } } diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc index eba0a6af9a6..63dcbabe5a6 100644 --- a/runtime/vm/compiler/assembler/assembler_x64_test.cc +++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc @@ -6236,65 +6236,9 @@ ASSEMBLER_TEST_GENERATE(StoreReleaseLoadAcquire, assembler) { __ pushq(RCX); __ xorq(RCX, RCX); __ pushq(RCX); - - for (intptr_t i = 0; i < kNumberOfXmmRegisters; ++i) { - XmmRegister xmm_reg = static_cast(i); - if ((CallingConventions::kVolatileXmmRegisters & (1 << xmm_reg)) != 0) { - __ movq(RCX, Immediate(bit_cast(12.34f + i))); - __ movd(xmm_reg, RCX); - } - } - - for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) { - Register reg = static_cast(i); - if (reg == CallingConventions::kArg3Reg) { - continue; - } - if ((CallingConventions::kVolatileCpuRegisters & (1 << reg)) != 0) { - __ movq(reg, Immediate(0xAABBCCDD + i)); - } - } - __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RSP, 0); - - __ pushq(TMP); - - for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) { - Register reg = static_cast(i); - if (reg == CallingConventions::kArg3Reg) { - continue; - } - if ((CallingConventions::kVolatileCpuRegisters & (1 << reg)) != 0) { - Label ok; - if (reg == TMP) { - __ popq(TMP); - // Use kArg3Reg to validate TMP because TMP is - // needed for 64-bit cmpq below. - __ pushq(CallingConventions::kArg3Reg); - __ movq(CallingConventions::kArg3Reg, TMP); - reg = CallingConventions::kArg3Reg; - } - __ cmpq(reg, Immediate(0xAABBCCDD + i)); - __ j(EQUAL, &ok); - __ int3(); - __ Bind(&ok); - if (reg == CallingConventions::kArg3Reg) { - __ popq(CallingConventions::kArg3Reg); - } - } - } - - for (intptr_t i = 0; i < kNumberOfXmmRegisters; ++i) { - XmmRegister xmm_reg = static_cast(i); - if ((CallingConventions::kVolatileXmmRegisters & (1 << xmm_reg)) != 0) { - Label ok; - __ movq(RCX, xmm_reg); - __ cmpq(RCX, Immediate(bit_cast(12.34f + i))); - __ j(EQUAL, &ok); - __ int3(); - __ Bind(&ok); - } - } - __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RSP, 0); + __ movq(RCX, RSP); + __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RCX, 0); + __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RCX, 0); __ popq(RCX); __ popq(RCX); __ popq(THR); @@ -6315,8 +6259,9 @@ ASSEMBLER_TEST_GENERATE(StoreReleaseLoadAcquire1024, assembler) { __ xorq(RCX, RCX); __ pushq(RCX); __ subq(RSP, Immediate(1024)); - __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RSP, 1024); - __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RSP, 1024); + __ movq(RCX, RSP); + __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RCX, 1024); + __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RCX, 1024); __ addq(RSP, Immediate(1024)); __ popq(RCX); __ popq(RCX); @@ -6335,8 +6280,9 @@ ASSEMBLER_TEST_RUN(StoreReleaseLoadAcquire1024, test) { "xorq rcx,rcx\n" "push rcx\n" "subq rsp,0x400\n" - "movq [rsp+0x400],rdx\n" - "movq rax,[rsp+0x400]\n" + "movq rcx,rsp\n" + "movq [rcx+0x400],rdx\n" + "movq rax,[rcx+0x400]\n" "addq rsp,0x400\n" "pop rcx\n" "pop rcx\n" diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc index 0540417b6e1..5b26bae9418 100644 --- a/runtime/vm/compiler/backend/il_riscv.cc +++ b/runtime/vm/compiler/backend/il_riscv.cc @@ -6095,9 +6095,8 @@ class ShiftInt64OpSlowPath : public ThrowErrorSlowPathCode { // The unboxed int64 argument is passed through a dedicated slot in Thread. // TODO(dartbug.com/33549): Clean this up when unboxed values // could be passed as arguments. - __ sx(right, - compiler::Address( - THR, compiler::target::Thread::unboxed_runtime_arg_offset())); + __ StoreToOffset(right, THR, + compiler::target::Thread::unboxed_runtime_arg_offset()); #endif } }; diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h index 1d38e883b95..a00fb1aa79e 100644 --- a/runtime/vm/compiler/backend/locations.h +++ b/runtime/vm/compiler/backend/locations.h @@ -820,6 +820,10 @@ class RegisterSet : public ValueObject { intptr_t CpuRegisterCount() const { return RegisterCount(cpu_registers()); } intptr_t FpuRegisterCount() const { return RegisterCount(fpu_registers()); } + intptr_t SpillSize() const { + return CpuRegisterCount() * compiler::target::kWordSize + + FpuRegisterCount() * kFpuRegisterSize; + } bool IsEmpty() const { return CpuRegisterCount() == 0 && FpuRegisterCount() == 0; diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h index 644b69a8e04..ec3621830b3 100644 --- a/runtime/vm/compiler/runtime_offsets_extracted.h +++ b/runtime/vm/compiler/runtime_offsets_extracted.h @@ -344,7 +344,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3c8; + 0x3d0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -357,13 +357,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x408; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3cc; + Thread_double_truncate_round_supported_offset = 0x3d4; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x404; + Thread_service_extension_stream_offset = 0x40c; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -479,7 +479,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x330; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x34; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3f4; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3fc; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0xdc; static constexpr dart::compiler::target::word @@ -526,18 +526,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3d0; + Thread_unboxed_runtime_arg_offset = 0x3d8; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x314; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x3e0; -static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8; + 0x3e8; +static constexpr dart::compiler::target::word Thread_random_offset = 0x3f0; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f8; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -1062,7 +1062,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7a8; + 0x7b8; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -1075,13 +1075,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x7f8; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x808; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7b0; + Thread_double_truncate_round_supported_offset = 0x7c0; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x800; + Thread_service_extension_stream_offset = 0x810; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -1197,7 +1197,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x678; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x68; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7e0; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7f0; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -1244,18 +1244,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7b8; + Thread_unboxed_runtime_arg_offset = 0x7c8; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x640; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x7c8; -static constexpr dart::compiler::target::word Thread_random_offset = 0x7d0; + 0x7d8; +static constexpr dart::compiler::target::word Thread_random_offset = 0x7e0; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7d8; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e8; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -1780,7 +1780,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3bc; + 0x3c4; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -1793,13 +1793,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x3f8; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3c0; + Thread_double_truncate_round_supported_offset = 0x3c8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x3fc; + Thread_service_extension_stream_offset = 0x404; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -1915,7 +1915,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x324; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x34; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3ec; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3f4; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0xdc; static constexpr dart::compiler::target::word @@ -1962,18 +1962,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3c8; + Thread_unboxed_runtime_arg_offset = 0x3d0; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x308; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x3d8; -static constexpr dart::compiler::target::word Thread_random_offset = 0x3e0; + 0x3e0; +static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3e8; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -2497,7 +2497,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7f0; + 0x800; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -2510,13 +2510,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x850; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7f8; + Thread_double_truncate_round_supported_offset = 0x808; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x848; + Thread_service_extension_stream_offset = 0x858; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -2632,7 +2632,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x6c0; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x68; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x828; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x838; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -2679,18 +2679,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x800; + Thread_unboxed_runtime_arg_offset = 0x810; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x688; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x810; -static constexpr dart::compiler::target::word Thread_random_offset = 0x818; + 0x820; +static constexpr dart::compiler::target::word Thread_random_offset = 0x828; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x830; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -3219,7 +3219,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7b0; + 0x7c0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -3232,13 +3232,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc8; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x800; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x810; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7b8; + Thread_double_truncate_round_supported_offset = 0x7c8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x808; + Thread_service_extension_stream_offset = 0x818; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -3354,7 +3354,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x680; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x70; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7e8; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7f8; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0x1c0; static constexpr dart::compiler::target::word @@ -3401,7 +3401,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x50; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7c0; + Thread_unboxed_runtime_arg_offset = 0x7d0; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x648; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e8; @@ -3409,11 +3409,11 @@ static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x7d0; -static constexpr dart::compiler::target::word Thread_random_offset = 0x7d8; + 0x7e0; +static constexpr dart::compiler::target::word Thread_random_offset = 0x7e8; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x260; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e0; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7f0; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -3938,7 +3938,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -3951,13 +3951,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc8; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x848; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x858; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x800; + Thread_double_truncate_round_supported_offset = 0x810; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x850; + Thread_service_extension_stream_offset = 0x860; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -4073,7 +4073,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x6c8; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x70; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x830; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x840; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0x1c0; static constexpr dart::compiler::target::word @@ -4120,7 +4120,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x50; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x808; + Thread_unboxed_runtime_arg_offset = 0x818; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x690; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e8; @@ -4128,11 +4128,11 @@ static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x818; -static constexpr dart::compiler::target::word Thread_random_offset = 0x820; + 0x828; +static constexpr dart::compiler::target::word Thread_random_offset = 0x830; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x260; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x828; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x838; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -4657,7 +4657,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -4670,13 +4670,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x428; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x430; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3f4; + Thread_double_truncate_round_supported_offset = 0x3fc; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x42c; + Thread_service_extension_stream_offset = 0x434; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -4792,7 +4792,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x358; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x34; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x41c; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x424; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0xdc; static constexpr dart::compiler::target::word @@ -4839,18 +4839,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3f8; + Thread_unboxed_runtime_arg_offset = 0x400; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x33c; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x408; -static constexpr dart::compiler::target::word Thread_random_offset = 0x410; + 0x410; +static constexpr dart::compiler::target::word Thread_random_offset = 0x418; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x418; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x420; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -5376,7 +5376,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -5389,13 +5389,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x830; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7e8; + Thread_double_truncate_round_supported_offset = 0x7f8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x838; + Thread_service_extension_stream_offset = 0x848; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -5511,7 +5511,7 @@ static constexpr dart::compiler::target::word Thread_safepoint_state_offset = 0x6b0; static constexpr dart::compiler::target::word Thread_shared_field_table_values_offset = 0x68; -static constexpr dart::compiler::target::word Thread_single_step_offset = 0x818; +static constexpr dart::compiler::target::word Thread_single_step_offset = 0x828; static constexpr dart::compiler::target::word Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -5558,18 +5558,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7f0; + Thread_unboxed_runtime_arg_offset = 0x800; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x678; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x800; -static constexpr dart::compiler::target::word Thread_random_offset = 0x808; + 0x810; +static constexpr dart::compiler::target::word Thread_random_offset = 0x818; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x810; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -6088,7 +6088,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3c8; + 0x3d0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -6101,13 +6101,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x408; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3cc; + Thread_double_truncate_round_supported_offset = 0x3d4; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x404; + Thread_service_extension_stream_offset = 0x40c; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -6269,18 +6269,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3d0; + Thread_unboxed_runtime_arg_offset = 0x3d8; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x314; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x3e0; -static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8; + 0x3e8; +static constexpr dart::compiler::target::word Thread_random_offset = 0x3f0; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f8; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -6798,7 +6798,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7a8; + 0x7b8; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -6811,13 +6811,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x7f8; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x808; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7b0; + Thread_double_truncate_round_supported_offset = 0x7c0; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x800; + Thread_service_extension_stream_offset = 0x810; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -6979,18 +6979,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7b8; + Thread_unboxed_runtime_arg_offset = 0x7c8; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x640; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x7c8; -static constexpr dart::compiler::target::word Thread_random_offset = 0x7d0; + 0x7d8; +static constexpr dart::compiler::target::word Thread_random_offset = 0x7e0; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7d8; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e8; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -7508,7 +7508,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3bc; + 0x3c4; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -7521,13 +7521,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x3f8; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3c0; + Thread_double_truncate_round_supported_offset = 0x3c8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x3fc; + Thread_service_extension_stream_offset = 0x404; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -7689,18 +7689,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3c8; + Thread_unboxed_runtime_arg_offset = 0x3d0; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x308; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x3d8; -static constexpr dart::compiler::target::word Thread_random_offset = 0x3e0; + 0x3e0; +static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3e8; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -8217,7 +8217,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7f0; + 0x800; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -8230,13 +8230,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x850; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7f8; + Thread_double_truncate_round_supported_offset = 0x808; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x848; + Thread_service_extension_stream_offset = 0x858; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -8398,18 +8398,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x800; + Thread_unboxed_runtime_arg_offset = 0x810; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x688; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x810; -static constexpr dart::compiler::target::word Thread_random_offset = 0x818; + 0x820; +static constexpr dart::compiler::target::word Thread_random_offset = 0x828; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x830; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -8931,7 +8931,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7b0; + 0x7c0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -8944,13 +8944,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc8; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x800; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x810; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7b8; + Thread_double_truncate_round_supported_offset = 0x7c8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x808; + Thread_service_extension_stream_offset = 0x818; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -9112,7 +9112,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x50; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7c0; + Thread_unboxed_runtime_arg_offset = 0x7d0; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x648; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e8; @@ -9120,11 +9120,11 @@ static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x7d0; -static constexpr dart::compiler::target::word Thread_random_offset = 0x7d8; + 0x7e0; +static constexpr dart::compiler::target::word Thread_random_offset = 0x7e8; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x260; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e0; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7f0; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -9642,7 +9642,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -9655,13 +9655,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc8; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x848; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x858; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x800; + Thread_double_truncate_round_supported_offset = 0x810; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x850; + Thread_service_extension_stream_offset = 0x860; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -9823,7 +9823,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x50; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x808; + Thread_unboxed_runtime_arg_offset = 0x818; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x690; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e8; @@ -9831,11 +9831,11 @@ static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x818; -static constexpr dart::compiler::target::word Thread_random_offset = 0x820; + 0x828; +static constexpr dart::compiler::target::word Thread_random_offset = 0x830; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x260; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x828; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x838; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -10353,7 +10353,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -10366,13 +10366,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0xf8; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0x60; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x428; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x430; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x3f4; + Thread_double_truncate_round_supported_offset = 0x3fc; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x42c; + Thread_service_extension_stream_offset = 0x434; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -10534,18 +10534,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x24; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x3f8; + Thread_unboxed_runtime_arg_offset = 0x400; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x33c; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x408; -static constexpr dart::compiler::target::word Thread_random_offset = 0x410; + 0x410; +static constexpr dart::compiler::target::word Thread_random_offset = 0x418; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x12c; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x418; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x420; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -11064,7 +11064,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word Thread_api_top_scope_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -11077,13 +11077,13 @@ static constexpr dart::compiler::target::word Thread_call_to_runtime_entry_point_offset = 0x1f0; static constexpr dart::compiler::target::word Thread_call_to_runtime_stub_offset = 0xc0; -static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x830; +static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840; static constexpr dart::compiler::target::word Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - Thread_double_truncate_round_supported_offset = 0x7e8; + Thread_double_truncate_round_supported_offset = 0x7f8; static constexpr dart::compiler::target::word - Thread_service_extension_stream_offset = 0x838; + Thread_service_extension_stream_offset = 0x848; static constexpr dart::compiler::target::word Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word Thread_optimize_stub_offset = @@ -11245,18 +11245,18 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word Thread_top_offset = 0x48; static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - Thread_unboxed_runtime_arg_offset = 0x7f0; + Thread_unboxed_runtime_arg_offset = 0x800; static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x678; static constexpr dart::compiler::target::word Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word Thread_next_task_id_offset = - 0x800; -static constexpr dart::compiler::target::word Thread_random_offset = 0x808; + 0x810; +static constexpr dart::compiler::target::word Thread_random_offset = 0x818; static constexpr dart::compiler::target::word Thread_jump_to_frame_entry_point_offset = 0x258; -static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x810; +static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820; static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset = @@ -11812,7 +11812,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x3c8; + 0x3d0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -11828,13 +11828,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0x60; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x400; + 0x408; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x3cc; + AOT_Thread_double_truncate_round_supported_offset = 0x3d4; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x404; + AOT_Thread_service_extension_stream_offset = 0x40c; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -11956,7 +11956,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x34; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x3f4; + 0x3fc; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0xdc; static constexpr dart::compiler::target::word @@ -12007,19 +12007,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x24; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x3d0; + AOT_Thread_unboxed_runtime_arg_offset = 0x3d8; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x314; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x3e0; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3e8; + 0x3e8; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3f0; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x12c; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -12608,7 +12608,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7a8; + 0x7b8; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -12624,13 +12624,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7b0; + AOT_Thread_double_truncate_round_supported_offset = 0x7c0; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x800; + AOT_Thread_service_extension_stream_offset = 0x810; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -12752,7 +12752,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x68; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -12803,19 +12803,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7b8; + AOT_Thread_unboxed_runtime_arg_offset = 0x7c8; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x640; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x7c8; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d0; + 0x7d8; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e0; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x7d8; + 0x7e8; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -13411,7 +13411,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7f0; + 0x800; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -13427,13 +13427,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x840; + 0x850; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7f8; + AOT_Thread_double_truncate_round_supported_offset = 0x808; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x848; + AOT_Thread_service_extension_stream_offset = 0x858; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -13555,7 +13555,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x68; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x828; + 0x838; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -13606,19 +13606,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x800; + AOT_Thread_unboxed_runtime_arg_offset = 0x810; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x688; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x810; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818; + 0x820; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x828; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x820; + 0x830; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -14210,7 +14210,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7b0; + 0x7c0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -14226,13 +14226,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc8; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x800; + 0x810; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7b8; + AOT_Thread_double_truncate_round_supported_offset = 0x7c8; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x808; + AOT_Thread_service_extension_stream_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -14354,7 +14354,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x70; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x7e8; + 0x7f8; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0x1c0; static constexpr dart::compiler::target::word @@ -14405,7 +14405,7 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x50; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7c0; + AOT_Thread_unboxed_runtime_arg_offset = 0x7d0; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x648; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e8; @@ -14414,12 +14414,12 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x7d0; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d8; + 0x7e0; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e8; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x260; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -15009,7 +15009,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -15025,13 +15025,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc8; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x848; + 0x858; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x800; + AOT_Thread_double_truncate_round_supported_offset = 0x810; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x850; + AOT_Thread_service_extension_stream_offset = 0x860; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -15153,7 +15153,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x70; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x830; + 0x840; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0x1c0; static constexpr dart::compiler::target::word @@ -15204,7 +15204,7 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x50; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x808; + AOT_Thread_unboxed_runtime_arg_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x690; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e8; @@ -15213,12 +15213,12 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x818; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x820; + 0x828; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x830; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x260; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x828; + 0x838; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -15809,7 +15809,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -15825,13 +15825,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0x60; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x428; + 0x430; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x3f4; + AOT_Thread_double_truncate_round_supported_offset = 0x3fc; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x42c; + AOT_Thread_service_extension_stream_offset = 0x434; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -15953,7 +15953,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x34; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x41c; + 0x424; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0xdc; static constexpr dart::compiler::target::word @@ -16004,19 +16004,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x24; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x3f8; + AOT_Thread_unboxed_runtime_arg_offset = 0x400; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x33c; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x408; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x410; + 0x410; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x418; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x12c; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x418; + 0x420; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -16606,7 +16606,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -16622,13 +16622,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x830; + 0x840; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7e8; + AOT_Thread_double_truncate_round_supported_offset = 0x7f8; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x838; + AOT_Thread_service_extension_stream_offset = 0x848; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -16750,7 +16750,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_shared_field_table_values_offset = 0x68; static constexpr dart::compiler::target::word AOT_Thread_single_step_offset = - 0x818; + 0x828; static constexpr dart::compiler::target::word AOT_Thread_slow_type_test_stub_offset = 0x1b8; static constexpr dart::compiler::target::word @@ -16801,19 +16801,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7f0; + AOT_Thread_unboxed_runtime_arg_offset = 0x800; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x678; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x800; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x808; + 0x810; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x810; + 0x820; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -17396,7 +17396,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x3c8; + 0x3d0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -17412,13 +17412,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0x60; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x400; + 0x408; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x3cc; + AOT_Thread_double_truncate_round_supported_offset = 0x3d4; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x404; + AOT_Thread_service_extension_stream_offset = 0x40c; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -17589,19 +17589,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x24; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x3d0; + AOT_Thread_unboxed_runtime_arg_offset = 0x3d8; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x314; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x3e0; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3e8; + 0x3e8; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3f0; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x12c; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -18183,7 +18183,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7a8; + 0x7b8; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -18199,13 +18199,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7b0; + AOT_Thread_double_truncate_round_supported_offset = 0x7c0; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x800; + AOT_Thread_service_extension_stream_offset = 0x810; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -18376,19 +18376,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7b8; + AOT_Thread_unboxed_runtime_arg_offset = 0x7c8; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x640; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x7c8; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d0; + 0x7d8; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e0; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x7d8; + 0x7e8; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -18977,7 +18977,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7f0; + 0x800; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -18993,13 +18993,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x840; + 0x850; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7f8; + AOT_Thread_double_truncate_round_supported_offset = 0x808; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x848; + AOT_Thread_service_extension_stream_offset = 0x858; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -19170,19 +19170,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x800; + AOT_Thread_unboxed_runtime_arg_offset = 0x810; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x688; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x810; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818; + 0x820; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x828; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x820; + 0x830; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -19767,7 +19767,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7b0; + 0x7c0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -19783,13 +19783,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc8; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x800; + 0x810; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7b8; + AOT_Thread_double_truncate_round_supported_offset = 0x7c8; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x808; + AOT_Thread_service_extension_stream_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -19960,7 +19960,7 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x50; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7c0; + AOT_Thread_unboxed_runtime_arg_offset = 0x7d0; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x648; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e8; @@ -19969,12 +19969,12 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x7d0; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d8; + 0x7e0; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e8; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x260; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -20557,7 +20557,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x220; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7f8; + 0x808; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x150; static constexpr dart::compiler::target::word @@ -20573,13 +20573,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc8; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x848; + 0x858; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x60; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x800; + AOT_Thread_double_truncate_round_supported_offset = 0x810; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x850; + AOT_Thread_service_extension_stream_offset = 0x860; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x248; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -20750,7 +20750,7 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x50; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x808; + AOT_Thread_unboxed_runtime_arg_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x690; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e8; @@ -20759,12 +20759,12 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x818; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x820; + 0x828; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x830; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x260; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x828; + 0x838; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -21348,7 +21348,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x3f0; + 0x3f8; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0xa4; static constexpr dart::compiler::target::word @@ -21364,13 +21364,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0x60; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x428; + 0x430; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x2c; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x3f4; + AOT_Thread_double_truncate_round_supported_offset = 0x3fc; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x42c; + AOT_Thread_service_extension_stream_offset = 0x434; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x120; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -21541,19 +21541,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x24; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x10; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x3f8; + AOT_Thread_unboxed_runtime_arg_offset = 0x400; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x33c; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0xf0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x20; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x408; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x410; + 0x410; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x418; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x12c; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x418; + 0x420; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word @@ -22136,7 +22136,7 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_allocate_object_slow_entry_point_offset = 0x218; static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset = - 0x7e0; + 0x7f0; static constexpr dart::compiler::target::word AOT_Thread_async_exception_handler_stub_offset = 0x148; static constexpr dart::compiler::target::word @@ -22152,13 +22152,13 @@ static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word AOT_Thread_call_to_runtime_stub_offset = 0xc0; static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset = - 0x830; + 0x840; static constexpr dart::compiler::target::word AOT_Thread_dispatch_table_array_offset = 0x58; static constexpr dart::compiler::target::word - AOT_Thread_double_truncate_round_supported_offset = 0x7e8; + AOT_Thread_double_truncate_round_supported_offset = 0x7f8; static constexpr dart::compiler::target::word - AOT_Thread_service_extension_stream_offset = 0x838; + AOT_Thread_service_extension_stream_offset = 0x848; static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset = 0x240; static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset = @@ -22329,19 +22329,19 @@ static constexpr dart::compiler::target::word AOT_Thread_top_offset = 0x48; static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset = 0x20; static constexpr dart::compiler::target::word - AOT_Thread_unboxed_runtime_arg_offset = 0x7f0; + AOT_Thread_unboxed_runtime_arg_offset = 0x800; static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x678; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_entry_point_offset = 0x1e0; static constexpr dart::compiler::target::word AOT_Thread_write_barrier_mask_offset = 0x40; static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset = - 0x800; -static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x808; + 0x810; +static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818; static constexpr dart::compiler::target::word AOT_Thread_jump_to_frame_entry_point_offset = 0x258; static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset = - 0x810; + 0x820; static constexpr dart::compiler::target::word AOT_TsanUtils_setjmp_function_offset = 0x0; static constexpr dart::compiler::target::word diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc index c4700db40b5..f32d70f64d9 100644 --- a/runtime/vm/runtime_entry.cc +++ b/runtime/vm/runtime_entry.cc @@ -4872,10 +4872,20 @@ extern "C" void __msan_unpoison_param(size_t) { #endif #if !defined(USING_THREAD_SANITIZER) -extern "C" void __tsan_acquire(void* addr) { +extern "C" uint32_t __tsan_atomic32_load(uint32_t* addr, int order) { UNREACHABLE(); } -extern "C" void __tsan_release(void* addr) { +extern "C" void __tsan_atomic32_store(uint32_t* addr, + uint32_t value, + int order) { + UNREACHABLE(); +} +extern "C" uint64_t __tsan_atomic64_load(uint64_t* addr, int order) { + UNREACHABLE(); +} +extern "C" void __tsan_atomic64_store(uint64_t* addr, + uint64_t value, + int order) { UNREACHABLE(); } #endif @@ -4885,7 +4895,9 @@ extern "C" void __tsan_release(void* addr) { DEFINE_LEAF_RUNTIME_ENTRY(MsanUnpoison, 2, __msan_unpoison); DEFINE_LEAF_RUNTIME_ENTRY(MsanUnpoisonParam, 1, __msan_unpoison_param); -DEFINE_LEAF_RUNTIME_ENTRY(TsanLoadAcquire, 1, __tsan_acquire); -DEFINE_LEAF_RUNTIME_ENTRY(TsanStoreRelease, 1, __tsan_release); +DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic32Load, 2, __tsan_atomic32_load); +DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic32Store, 3, __tsan_atomic32_store); +DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic64Load, 2, __tsan_atomic64_load); +DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic64Store, 3, __tsan_atomic64_store); } // namespace dart diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h index 7a4bda2038e..5e4b166523e 100644 --- a/runtime/vm/runtime_entry_list.h +++ b/runtime/vm/runtime_entry_list.h @@ -127,8 +127,10 @@ namespace dart { V(void, PropagateError, Dart_Handle) \ V(void, MsanUnpoison, void*, size_t) \ V(void, MsanUnpoisonParam, size_t) \ - V(void, TsanLoadAcquire, void*) \ - V(void, TsanStoreRelease, void*) \ + V(uint32_t, TsanAtomic32Load, void*, int) \ + V(void, TsanAtomic32Store, void*, uint32_t, int) \ + V(uint64_t, TsanAtomic64Load, void*, int) \ + V(void, TsanAtomic64Store, void*, uint64_t, int) \ V(bool, TryDoubleAsInteger, Thread*) \ V(void*, MemoryMove, void*, const void*, size_t)