--- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Thu Jun 20 14:09:22 2019 +0100
+++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp Mon Jun 24 11:37:56 2019 -0700
@@ -1383,7 +1383,12 @@
// save regs before copy_memory
__ push(RegSet::of(d, count), sp);
}
- copy_memory(aligned, s, d, count, rscratch1, size);
+ {
+ // UnsafeCopyMemory page error: continue after ucm
+ bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size);
+ UnsafeCopyMemoryMark ucmm(this, add_entry, true);
+ copy_memory(aligned, s, d, count, rscratch1, size);
+ }
if (is_oop) {
__ pop(RegSet::of(d, count), sp);
@@ -1455,7 +1460,12 @@
// save regs before copy_memory
__ push(RegSet::of(d, count), sp);
}
- copy_memory(aligned, s, d, count, rscratch1, -size);
+ {
+ // UnsafeCopyMemory page error: continue after ucm
+ bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size);
+ UnsafeCopyMemoryMark ucmm(this, add_entry, true);
+ copy_memory(aligned, s, d, count, rscratch1, -size);
+ }
if (is_oop) {
__ pop(RegSet::of(d, count), sp);
if (VerifyOops)
@@ -5816,6 +5826,10 @@
}
}; // end class declaration
+#define UCM_TABLE_MAX_ENTRIES 8
void StubGenerator_generate(CodeBuffer* code, bool all) {
+ if (UnsafeCopyMemory::_table == NULL) {
+ UnsafeCopyMemory::create_table(UCM_TABLE_MAX_ENTRIES);
+ }
StubGenerator g(code, all);
}