diff options
author | 2020-09-01 15:02:00 +0100 | |
---|---|---|
committer | 2020-09-02 13:10:42 +0000 | |
commit | 6624d58c11b43a10c802037bf1c5754ca276156c (patch) | |
tree | 11e6ae686e70c091d50893f1169131c4c31081ad /runtime/stack.h | |
parent | f9dbb97a1625b61a395406351e042921f9cfb455 (diff) |
Fix bug in StackVisitor::GetVReg.
Floats can be stored in core registers within compiled code, so use the
representation returned by the stack maps to know which register to read
a value.
Bug: 147572335
Test: 457-regs
Change-Id: Ibe6642f2fae8206f2c230006ae85d73b47501c3b
Diffstat (limited to 'runtime/stack.h')
-rw-r--r-- | runtime/stack.h | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/runtime/stack.h b/runtime/stack.h index 30d7533cfe..c7465365f8 100644 --- a/runtime/stack.h +++ b/runtime/stack.h @@ -126,7 +126,7 @@ class StackVisitor { StackWalkKind walk_kind, bool check_suspended = true); - bool GetRegisterIfAccessible(uint32_t reg, VRegKind kind, uint32_t* val) const + bool GetRegisterIfAccessible(uint32_t reg, DexRegisterLocation::Kind kind, uint32_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); public: @@ -326,21 +326,24 @@ class StackVisitor { bool GetVRegFromDebuggerShadowFrame(uint16_t vreg, VRegKind kind, uint32_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); - bool GetVRegFromOptimizedCode(ArtMethod* m, uint16_t vreg, VRegKind kind, + bool GetVRegFromOptimizedCode(ArtMethod* m, + uint16_t vreg, + VRegKind kind, uint32_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); - bool GetVRegPairFromDebuggerShadowFrame(uint16_t vreg, VRegKind kind_lo, VRegKind kind_hi, + bool GetVRegPairFromDebuggerShadowFrame(uint16_t vreg, + VRegKind kind_lo, + VRegKind kind_hi, uint64_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); - bool GetVRegPairFromOptimizedCode(ArtMethod* m, uint16_t vreg, - VRegKind kind_lo, VRegKind kind_hi, + bool GetVRegPairFromOptimizedCode(ArtMethod* m, + uint16_t vreg, + VRegKind kind_lo, + VRegKind kind_hi, uint64_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); - bool GetVRegFromOptimizedCode(DexRegisterLocation location, VRegKind kind, uint32_t* val) const - REQUIRES_SHARED(Locks::mutator_lock_); - bool GetRegisterPairIfAccessible(uint32_t reg_lo, uint32_t reg_hi, VRegKind kind_lo, - uint64_t* val) const + bool GetVRegFromOptimizedCode(DexRegisterLocation location, uint32_t* val) const REQUIRES_SHARED(Locks::mutator_lock_); ShadowFrame* PrepareSetVReg(ArtMethod* m, uint16_t vreg, bool wide) |