Hello community,

here is the log from the commit of package java-1_8_0-openjdk for 
openSUSE:Factory checked in at 2016-06-29 15:00:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/java-1_8_0-openjdk (Old)
 and      /work/SRC/openSUSE:Factory/.java-1_8_0-openjdk.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "java-1_8_0-openjdk"

Changes:
--------
--- /work/SRC/openSUSE:Factory/java-1_8_0-openjdk/java-1_8_0-openjdk.changes    
2016-06-14 23:05:28.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.java-1_8_0-openjdk.new/java-1_8_0-openjdk.changes   
    2016-06-29 15:00:58.000000000 +0200
@@ -1,0 +2,6 @@
+Tue Jun 14 11:46:16 UTC 2016 - [email protected]
+
+- Fix aarch64 running with 48 bits va space (bsc#984684)
+  * hotspot-aarch64-fix-48bit-va.patch
+
+-------------------------------------------------------------------

New:
----
  hotspot-aarch64-fix-48bit-va.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ java-1_8_0-openjdk.spec ++++++
--- /var/tmp/diff_new_pack.OH3lCP/_old  2016-06-29 15:01:01.000000000 +0200
+++ /var/tmp/diff_new_pack.OH3lCP/_new  2016-06-29 15:01:01.000000000 +0200
@@ -176,6 +176,8 @@
 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 %{PATCH14}
 %endif
 
+patch -p1 -i %{PATCH15}
+
 %ifarch ppc ppc64 ppc64le
 # PPC fixes
 patch -p0 -i %{PATCH103}

++++++ hotspot-aarch64-fix-48bit-va.patch ++++++
# 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;
 }

Reply via email to