diff options
author | Andreas Gampe <agampe@google.com> | 2014-03-21 17:25:57 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-03-21 17:25:57 -0700 |
commit | 9de65ff3a9c49b91d80be292020f012f3d0a24ef (patch) | |
tree | bf19a3f908d438e81bd549b895ba84f5d3dd4536 /runtime | |
parent | 6a3fe330227f2192f6ce97915d62f46247f89378 (diff) | |
download | art-9de65ff3a9c49b91d80be292020f012f3d0a24ef.tar.gz art-9de65ff3a9c49b91d80be292020f012f3d0a24ef.tar.bz2 art-9de65ff3a9c49b91d80be292020f012f3d0a24ef.zip |
Fixes to mem_map wraparound and ARM64 quick_invoke assembly
There are only 6 free GPRs for passing in a non-static invoke. This
corrupted one register for long-signature methods.
The wrap-around did not actually wrap around correctly.
Change-Id: I62658dadeb83bb22960b9455e211d26ffaa20f6f
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/arch/arm64/quick_entrypoints_arm64.S | 4 | ||||
-rw-r--r-- | runtime/mem_map.cc | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/runtime/arch/arm64/quick_entrypoints_arm64.S b/runtime/arch/arm64/quick_entrypoints_arm64.S index 2d64e7f598..9db07f81d4 100644 --- a/runtime/arch/arm64/quick_entrypoints_arm64.S +++ b/runtime/arch/arm64/quick_entrypoints_arm64.S @@ -453,7 +453,7 @@ SAVE_SIZE_AND_METHOD=SAVE_SIZE+8 cmp w17, #'J' // is this a long? bne .LisOther - cmp x8, # 7*12 // Skip this load if all registers full. + cmp x8, # 6*12 // Skip this load if all registers full. beq .LfillRegisters add x17, x12, x8 // Calculate subroutine to jump to. @@ -461,7 +461,7 @@ SAVE_SIZE_AND_METHOD=SAVE_SIZE+8 .LisOther: // Everything else takes one vReg. - cmp x8, # 7*12 // Skip this load if all registers full. + cmp x8, # 6*12 // Skip this load if all registers full. beq .LfillRegisters add x17, x11, x8 // Calculate subroutine to jump to. br x17 diff --git a/runtime/mem_map.cc b/runtime/mem_map.cc index 0af25e740a..9f01189ff2 100644 --- a/runtime/mem_map.cc +++ b/runtime/mem_map.cc @@ -143,7 +143,7 @@ MemMap* MemMap::MapAnonymous(const char* name, byte* expected, size_t byte_count // Not enough memory until 4GB. if (first_run) { // Try another time from the bottom; - next_mem_pos_ = LOW_MEM_START; + ptr = LOW_MEM_START - kPageSize; first_run = false; continue; } else { |