diff options
author | 2023-10-02 12:50:23 +0000 | |
---|---|---|
committer | 2023-10-02 16:47:20 +0000 | |
commit | ebe117b400190775c9a543a89874b999550d4508 (patch) | |
tree | 67f54bfae2a157b46863aefd9eb3e0aaf3cb4ac1 | |
parent | 317ab9e551f867476769ec5a6adbbafc6a8d1896 (diff) |
riscv64: Fix stack map validation.
Test: # Cherry-pick https://android-review.googlesource.com/2767026
. build/envsetup.sh
lunch aosp_cf_riscv64_phone-userdebug
m
Bug: 283082089
Change-Id: Ia48f3da1e98d35b7089b2fd333883519c5439d18
-rw-r--r-- | compiler/optimizing/stack_map_stream.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index 13bdcfcdf8..2ecda7610e 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -154,8 +154,10 @@ void StackMapStream::BeginStackMapEntry( // Create lambda method, which will be executed at the very end to verify data. // Parameters and local variables will be captured(stored) by the lambda "[=]". dchecks_.emplace_back([=](const CodeInfo& code_info) { + // The `native_pc_offset` may have been overridden using `SetStackMapNativePcOffset(.)`. + uint32_t final_native_pc_offset = GetStackMapNativePcOffset(stack_map_index); if (kind == StackMap::Kind::Default || kind == StackMap::Kind::OSR) { - StackMap stack_map = code_info.GetStackMapForNativePcOffset(native_pc_offset, + StackMap stack_map = code_info.GetStackMapForNativePcOffset(final_native_pc_offset, instruction_set_); CHECK_EQ(stack_map.Row(), stack_map_index); } else if (kind == StackMap::Kind::Catch) { @@ -164,7 +166,7 @@ void StackMapStream::BeginStackMapEntry( CHECK_EQ(stack_map.Row(), stack_map_index); } StackMap stack_map = code_info.GetStackMapAt(stack_map_index); - CHECK_EQ(stack_map.GetNativePcOffset(instruction_set_), native_pc_offset); + CHECK_EQ(stack_map.GetNativePcOffset(instruction_set_), final_native_pc_offset); CHECK_EQ(stack_map.GetKind(), static_cast<uint32_t>(kind)); CHECK_EQ(stack_map.GetDexPc(), dex_pc); CHECK_EQ(code_info.GetRegisterMaskOf(stack_map), register_mask); |