summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2023-10-02 12:50:23 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2023-10-02 16:47:20 +0000
commitebe117b400190775c9a543a89874b999550d4508 (patch)
tree67f54bfae2a157b46863aefd9eb3e0aaf3cb4ac1
parent317ab9e551f867476769ec5a6adbbafc6a8d1896 (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.cc6
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);