From d72dd700f066530632ee3dd99ceeaec9aceb5089c7ed534eac65693a3db067ef Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Wed, 15 Jun 2016 05:47:57 +0000 Subject: [PATCH] Accepting request 402031 from home:algraf:branches:Java:Factory - Fix aarch64 running with 48 bits va space (bsc#984684) * hotspot-aarch64-fix-48bit-va.patch OBS-URL: https://build.opensuse.org/request/show/402031 OBS-URL: https://build.opensuse.org/package/show/Java:Factory/java-1_8_0-openjdk?expand=0&rev=169 --- hotspot-aarch64-fix-48bit-va.patch | 43 ++++++++++++++++++++++++++++++ java-1_8_0-openjdk.changes | 7 ++++- java-1_8_0-openjdk.spec | 4 +++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 hotspot-aarch64-fix-48bit-va.patch diff --git a/hotspot-aarch64-fix-48bit-va.patch b/hotspot-aarch64-fix-48bit-va.patch new file mode 100644 index 0000000..9bccfb4 --- /dev/null +++ b/hotspot-aarch64-fix-48bit-va.patch @@ -0,0 +1,43 @@ +# HG changeset patch +# User enevill +# Date 1454603068 0 +# Thu Feb 04 16:24:28 2016 +0000 +# Node ID ded2073b67bdd9c9f2ae924397341b762329aaef +# Parent f918c20107d9acb189498095308c2f49c8dbc84e +8148783: aarch64: SEGV running SpecJBB2013 +Summary: Fix calculation of offset for adrp +Reviewed-by: aph + +diff --git a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +--- a/openjdk/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp ++++ b/openjdk/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +@@ -127,7 +127,10 @@ + Instruction_aarch64::extract(insn2, 4, 0)) { + // movk #imm16<<32 + Instruction_aarch64::patch(branch + 4, 20, 5, (uint64_t)target >> 32); +- offset &= (1<<20)-1; ++ long dest = ((long)target & 0xffffffffL) | ((long)branch & 0xffff00000000L); ++ long pc_page = (long)branch >> 12; ++ long adr_page = (long)dest >> 12; ++ offset = adr_page - pc_page; + instructions = 2; + } + } +@@ -3998,11 +4001,12 @@ + if (offset_high >= -(1<<20) && offset_low < (1<<20)) { + _adrp(reg1, dest.target()); + } else { +- unsigned long pc_page = (unsigned long)pc() >> 12; +- long offset = dest_page - pc_page; +- offset = (offset & ((1<<20)-1)) << 12; +- _adrp(reg1, pc()+offset); +- movk(reg1, (unsigned long)dest.target() >> 32, 32); ++ unsigned long source = (unsigned long)pc(); ++ unsigned long target = (unsigned long)dest.target(); ++ unsigned long adrp_target = (target & 0xffffffffUL) | (source & 0xffff00000000UL); ++ ++ _adrp(reg1, (address)adrp_target); ++ movk(reg1, target >> 32, 32); + } + byte_offset = (unsigned long)dest.target() & 0xfff; + } diff --git a/java-1_8_0-openjdk.changes b/java-1_8_0-openjdk.changes index 93b7c45..7f04c26 100644 --- a/java-1_8_0-openjdk.changes +++ b/java-1_8_0-openjdk.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jun 14 11:46:16 UTC 2016 - agraf@suse.com + +- Fix aarch64 running with 48 bits va space (bsc#984684) + * hotspot-aarch64-fix-48bit-va.patch + ------------------------------------------------------------------- Fri Jun 3 09:01:23 UTC 2016 - fstrba@suse.com @@ -19,7 +25,6 @@ Tue May 31 06:47:43 UTC 2016 - fstrba@suse.com + Fix build with gcc 6.1 - Add -fno-delete-null-pointer-checks -fno-lifetime-dse to try to avoid some crashes - ------------------------------------------------------------------- Thu Apr 28 08:19:17 UTC 2016 - fstrba@suse.com diff --git a/java-1_8_0-openjdk.spec b/java-1_8_0-openjdk.spec index 36078c6..062dc3f 100644 --- a/java-1_8_0-openjdk.spec +++ b/java-1_8_0-openjdk.spec @@ -176,6 +176,8 @@ Patch12: adlc-parser.patch Patch13: implicit-pointer-decl.patch # Avoid triggering inactivity timeout while generating javadoc in zero VM Patch14: zero-javadoc-verbose.patch +# Fix 48 bit va space on aarch64 +Patch15: hotspot-aarch64-fix-48bit-va.patch # # OpenJDK specific patches # @@ -493,6 +495,8 @@ patch -p0 -i %{PATCH13} patch -p0 -i %{PATCH14} %endif +patch -p1 -i %{PATCH15} + %ifarch ppc ppc64 ppc64le # PPC fixes patch -p0 -i %{PATCH103}