summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-03-21 17:25:57 -0700
committerAndreas Gampe <agampe@google.com>2014-03-21 17:25:57 -0700
commit9de65ff3a9c49b91d80be292020f012f3d0a24ef (patch)
treebf19a3f908d438e81bd549b895ba84f5d3dd4536 /runtime
parent6a3fe330227f2192f6ce97915d62f46247f89378 (diff)
downloadart-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.S4
-rw-r--r--runtime/mem_map.cc2
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 {