25 lines
1.1 KiB
Diff
25 lines
1.1 KiB
Diff
# HG changeset patch
|
|
# User hshi
|
|
# Date 1455640059 0
|
|
# Tue Feb 16 16:27:39 2016 +0000
|
|
# Node ID f90e98d9a3e53ffa6d4611bec799d8a9b338d82c
|
|
# Parent 225180d970c1fd447b87de8122016cdbfaea0dff
|
|
8147805: aarch64: C1 segmentation fault due to inline Unsafe.getAndSetObject
|
|
Summary: In Aarch64 LIR_Assembler.atomic_op, keep stored data reference register in decompressed forms as it may be used later
|
|
Reviewed-by: aph
|
|
Contributed-by: hui.shi@linaro.org, felix.yang@linaro.org
|
|
|
|
diff -r 225180d970c1 -r f90e98d9a3e5 src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
|
|
--- openjdk/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Thu Jan 21 22:17:05 2016 +0000
|
|
+++ openjdk/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Tue Feb 16 16:27:39 2016 +0000
|
|
@@ -3202,7 +3202,8 @@
|
|
Register obj = as_reg(data);
|
|
Register dst = as_reg(dest);
|
|
if (is_oop && UseCompressedOops) {
|
|
- __ encode_heap_oop(obj);
|
|
+ __ encode_heap_oop(rscratch1, obj);
|
|
+ obj = rscratch1;
|
|
}
|
|
assert_different_registers(obj, addr.base(), tmp, rscratch2, dst);
|
|
Label again;
|