summaryrefslogtreecommitdiff
path: root/runtime/stack.h
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2020-09-01 15:02:00 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2020-09-02 13:10:42 +0000
commit6624d58c11b43a10c802037bf1c5754ca276156c (patch)
tree11e6ae686e70c091d50893f1169131c4c31081ad /runtime/stack.h
parentf9dbb97a1625b61a395406351e042921f9cfb455 (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.h21
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)