code:
From d51cb8c0f7966ac0b870e90e421cc8a796d98abf Mon Sep 17 00:00:00 2001
From: Simon South <simon@simonsouth.net>
Date: Tue, 9 Jun 2020 13:48:42 -0400
Subject: [PATCH] Extend AArch64 support

This adds to IcedTea 6 a patch that extends the support for AArch64 in
its version of HotSpot, allowing the portable Zero virtual machine to
be built for that platform.

The patch added is a backport of the one prepared for JDK 9 by the
OpenJDK AArch64 Porting Project, available (as of 11 June 2020) for
download from https://openjdk.java.net/jeps/237.
---
 Makefile.am                                   |    3 +-
 Makefile.in                                   |   12 +-
 .../hs23/aarch64-extended-support.patch       | 1766 +++++++++++++++++
 3 files changed, 1775 insertions(+), 6 deletions(-)
 create mode 100644 patches/hotspot/hs23/aarch64-extended-support.patch

diff --git a/Makefile.am b/Makefile.am
index 97dac85..f5c917b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -621,7 +621,8 @@ ICEDTEA_PATCHES = \
 	patches/openjdk/6260348-pr3068.patch \
 	patches/openjdk/6961123-pr2975.patch \
 	patches/pr2800-missing_resources.patch \
-	patches/pr3213-conditional_arm32jit.patch
+	patches/pr3213-conditional_arm32jit.patch \
+	patches/hotspot/hs23/aarch64-extended-support.patch

 if WITH_RHINO
 ICEDTEA_PATCHES += \
diff --git a/Makefile.in b/Makefile.in
index aced7c2..e3545ee 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1049,11 +1049,13 @@ ICEDTEA_PATCHES = $(DROP_PATCHES) $(SECURITY_PATCHES) \
 	patches/openjdk/6260348-pr3068.patch \
 	patches/openjdk/6961123-pr2975.patch \
 	patches/pr2800-missing_resources.patch \
-	patches/pr3213-conditional_arm32jit.patch $(am__append_21) \
-	$(am__append_22) $(am__append_23) $(am__append_24) \
-	$(am__append_25) $(am__append_26) $(am__append_27) \
-	$(am__append_28) $(am__append_29) $(am__append_30) \
-	$(am__append_31) $(am__append_32) $(DISTRIBUTION_PATCHES)
+	patches/pr3213-conditional_arm32jit.patch \
+	patches/hotspot/hs23/aarch64-extended-support.patch \
+	$(am__append_21) $(am__append_22) $(am__append_23) \
+	$(am__append_24) $(am__append_25) $(am__append_26) \
+	$(am__append_27) $(am__append_28) $(am__append_29) \
+	$(am__append_30) $(am__append_31) $(am__append_32) \
+	$(DISTRIBUTION_PATCHES)
 @ENABLE_NSS_FALSE@NSS_PATCHES = patches/nss-not-enabled-config.patch
 @ENABLE_NSS_TRUE@NSS_PATCHES = patches/nss-config.patch

diff --git a/patches/hotspot/hs23/aarch64-extended-support.patch b/patches/hotspot/hs23/aarch64-extended-support.patch
new file mode 100644
index 0000000..7817f4d
--- /dev/null
+++ b/patches/hotspot/hs23/aarch64-extended-support.patch
@@ -0,0 +1,1766 @@
+diff --git openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
+index 5771fdd..b23cc17 100644
+--- openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
++++ openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
+@@ -304,6 +304,9 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
+ #ifdef amd64
+ #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
+ #endif
++#ifdef aarch64
++#define NPRGREG 32
++#endif
+ #if defined(sparc) || defined(sparcv9)
+ #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
+ #endif
+@@ -406,6 +409,12 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
+   regs[REG_INDEX(R_O7)]  = gregs.u_regs[14];
+ #endif /* sparc */
+
++#if defined(aarch64)
++
++#define REG_INDEX(reg) sun_jvm_hotspot_debugger_aarch64_AARCH64ThreadContext_##reg
++
++#endif /* aarch64 */
++
+
+   (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
+   return array;
+diff --git openjdk.orig/hotspot/agent/src/os/linux/libproc.h openjdk/hotspot/agent/src/os/linux/libproc.h
+index e4d77f7..c02b841 100644
+--- openjdk.orig/hotspot/agent/src/os/linux/libproc.h
++++ openjdk/hotspot/agent/src/os/linux/libproc.h
+@@ -54,6 +54,10 @@ struct pt_regs {
+
+ #endif //sparc or sparcv9
+
++#if defined(aarch64)
++#include "asm/ptrace.h"
++#endif
++
+ /************************************************************************************
+
+ 0. This is very minimal subset of Solaris libproc just enough for current application.
+@@ -97,6 +101,9 @@ unsigned long   regs[IA64_REG_COUNT];     /* integer and fp regs */
+ #if defined(sparc)  || defined(sparcv9)
+ #define user_regs_struct  pt_regs
+ #endif
++#if defined(aarch64)
++#define user_regs_struct user_pt_regs
++#endif
+
+ // This C bool type must be int for compatibility with Linux calls and
+ // it would be a mistake to equivalence it to C++ bool on many platforms
+diff --git openjdk.orig/hotspot/make/defs.make openjdk/hotspot/make/defs.make
+index 44f21f8..4e8d00b 100644
+--- openjdk.orig/hotspot/make/defs.make
++++ openjdk/hotspot/make/defs.make
+@@ -232,7 +232,7 @@ ifneq ($(OSNAME),windows)
+
+   # Use uname output for SRCARCH, but deal with platform differences. If ARCH
+   # is not explicitly listed below, it is treated as x86.
+-  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc zero,$(ARCH)))
++  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc aarch64 zero,$(ARCH)))
+   ARCH/       = x86
+   ARCH/sparc  = sparc
+   ARCH/sparc64= sparc
+@@ -242,6 +242,7 @@ ifneq ($(OSNAME),windows)
+   ARCH/ppc64  = ppc
+   ARCH/ppc    = ppc
+   ARCH/arm    = arm
++  ARCH/aarch64= aarch64
+   ARCH/zero   = zero
+
+   # BUILDARCH is usually the same as SRCARCH, except for sparcv9
+@@ -267,11 +268,12 @@ ifneq ($(OSNAME),windows)
+   LIBARCH/sparcv9 = sparcv9
+   LIBARCH/ia64    = ia64
+   LIBARCH/ppc64   = ppc
++  LIBARCH/aarch64 = aarch64
+   LIBARCH/ppc     = ppc
+   LIBARCH/arm     = arm
+   LIBARCH/zero    = $(ZERO_LIBARCH)
+
+-  LP64_ARCH = sparcv9 amd64 ia64 zero
++  LP64_ARCH = sparcv9 amd64 ia64 aarch64 zero
+ endif
+
+ # Required make macro settings for all platforms
+diff --git openjdk.orig/hotspot/make/linux/makefiles/buildtree.make openjdk/hotspot/make/linux/makefiles/buildtree.make
+index 7c3d4f9..3bc7e8a 100644
+--- openjdk.orig/hotspot/make/linux/makefiles/buildtree.make
++++ openjdk/hotspot/make/linux/makefiles/buildtree.make
+@@ -385,6 +385,7 @@ DATA_MODE/sparc   = 32
+ DATA_MODE/sparcv9 = 64
+ DATA_MODE/amd64   = 64
+ DATA_MODE/ia64    = 64
++DATA_MODE/aarch64 = 64
+ DATA_MODE/zero    = $(ARCH_DATA_MODEL)
+
+ JAVA_FLAG/32 = -d32
+diff --git openjdk.orig/hotspot/make/linux/makefiles/defs.make openjdk/hotspot/make/linux/makefiles/defs.make
+index 7bb3149..39ffda4 100644
+--- openjdk.orig/hotspot/make/linux/makefiles/defs.make
++++ openjdk/hotspot/make/linux/makefiles/defs.make
+@@ -118,6 +118,15 @@ ifeq ($(ARCH), ppc)
+   HS_ARCH          = ppc
+ endif
+
++# AARCH64
++ifeq ($(ARCH), aarch64)
++  ARCH_DATA_MODEL  = 64
++  MAKE_ARGS        += LP64=1
++  PLATFORM         = linux-aarch64
++  VM_PLATFORM      = linux_aarch64
++  HS_ARCH          = aarch64
++endif
++
+ # determine if HotSpot is being built in JDK6 or earlier version
+ JDK6_OR_EARLIER=0
+ ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
+diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
+index 897e3a6..44f1673 100644
+--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make
++++ openjdk/hotspot/make/linux/makefiles/gcc.make
+@@ -104,6 +104,7 @@ endif
+ ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
+ ARCHFLAG/i486    = -m32 -march=i586
+ ARCHFLAG/amd64   = -m64
++ARCHFLAG/aarch64 =
+ ARCHFLAG/ia64    =
+ ARCHFLAG/sparc   = -m32 -mcpu=v9
+ ARCHFLAG/sparcv9 = -m64 -mcpu=v9
+diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+index c1b0e5c..9f7cda0 100644
+--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+@@ -296,6 +296,8 @@ static char cpu_arch[] = "sparcv9";
+ #  else
+ static char cpu_arch[] = "sparc";
+ #  endif
++#elif defined(AARCH64)
++static char cpu_arch[] = "aarch64";
+ #else
+ #error Add appropriate cpu_arch setting
+ #endif
+@@ -1442,7 +1444,7 @@ void os::Linux::clock_init() {
+ #ifndef SYS_clock_getres
+
+ #if defined(IA32) || defined(AMD64)
+-#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229)
++#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229) AARCH64_ONLY(114)
+ #define sys_clock_getres(x,y)  ::syscall(SYS_clock_getres, x, y)
+ #else
+ #warning "SYS_clock_getres not defined for this platform, disabling fast_thread_cpu_time"
+@@ -1930,7 +1932,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
+     static  Elf32_Half running_arch_code=EM_AARCH64;
+   #else
+     #error Method os::dll_load requires that one of following is defined:\
+-         IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH
++      IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH, AARCH64
+   #endif
+
+   // Identify compatability class for VM's architecture and library's architecture
+@@ -3056,7 +3058,7 @@ void os::large_page_init() {
+
+ #ifndef ZERO
+     _large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
+-                       ARM_ONLY(2 * M) PPC_ONLY(4 * M);
++                       ARM_ONLY(2 * M) PPC_ONLY(4 * M) AARCH64_ONLY(2 * M);
+ #endif // ZERO
+
+     FILE *fp = fopen("/proc/meminfo", "r");
+@@ -5378,11 +5380,11 @@ void Parker::unpark() {
+ extern char** environ;
+
+ #ifndef __NR_fork
+-#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
++#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57) AARCH64_ONLY(1079)
+ #endif
+
+ #ifndef __NR_execve
+-#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
++#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59) AARCH64_ONLY(221)
+ #endif
+
+ // Run the specified command in a separate process. Return its exit value,
+diff --git openjdk.orig/hotspot/src/share/vm/adlc/main.cpp openjdk/hotspot/src/share/vm/adlc/main.cpp
+index 47e207a..b93504e 100644
+--- openjdk.orig/hotspot/src/share/vm/adlc/main.cpp
++++ openjdk/hotspot/src/share/vm/adlc/main.cpp
+@@ -244,6 +244,11 @@ int main(int argc, char *argv[])
+   AD.addInclude(AD._CPP_file, "assembler_arm.inline.hpp");
+   AD.addInclude(AD._CPP_file, "nativeInst_arm.hpp");
+   AD.addInclude(AD._CPP_file, "vmreg_arm.inline.hpp");
++#endif
++#ifdef TARGET_ARCH_aarch64
++  AD.addInclude(AD._CPP_file, "assembler_aarch64.inline.hpp");
++  AD.addInclude(AD._CPP_file, "nativeInst_aarch64.hpp");
++  AD.addInclude(AD._CPP_file, "vmreg_aarch64.inline.hpp");
+ #endif
+   AD.addInclude(AD._HPP_file, "memory/allocation.hpp");
+   AD.addInclude(AD._HPP_file, "opto/machnode.hpp");
+diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp openjdk/hotspot/src/share/vm/asm/assembler.cpp
+index 2bcdcbc..57787ac 100644
+--- openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp
++++ openjdk/hotspot/src/share/vm/asm/assembler.cpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "assembler_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.inline.hpp"
++#endif
+
+
+ // Implementation of AbstractAssembler
+diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp openjdk/hotspot/src/share/vm/asm/assembler.hpp
+index c25aa3f..4f77825 100644
+--- openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp
++++ openjdk/hotspot/src/share/vm/asm/assembler.hpp
+@@ -51,6 +51,10 @@
+ # include "register_ppc.hpp"
+ # include "vm_version_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "register_aarch64.hpp"
++# include "vm_version_aarch64.hpp"
++#endif
+
+ // This file contains platform-independent assembler declarations.
+
+@@ -459,6 +463,9 @@ class AbstractAssembler : public ResourceObj  {
+ #ifdef TARGET_ARCH_ppc
+ # include "assembler_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.hpp"
++#endif
+
+
+ #endif // SHARE_VM_ASM_ASSEMBLER_HPP
+diff --git openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
+index 685297a..002faef 100644
+--- openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp
++++ openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
+@@ -573,6 +573,9 @@ class CodeBuffer: public StackObj {
+ #ifdef TARGET_ARCH_ppc
+ # include "codeBuffer_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "codeBuffer_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
+index c95a23c..2ec31e5 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
+@@ -877,6 +877,13 @@ static bool match(UnsafeRawOp* x,
+     return false;
+   }
+
++// AARCH64 cannot handle shifts which are not either 0, or log2 of the type size
++#ifdef AARCH64
++  if (*log2_scale != 0 &&
++	(1 << *log2_scale) != type2aelembytes(x->basic_type(), true))
++    return false;
++#endif
++
+   // If the value is pinned then it will be always be computed so
+   // there's no profit to reshaping the expression.
+   return !root->is_pinned();
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
+index bebb3b0..ddaceb7 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "register_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "register_aarch64.hpp"
++#endif
+
+ // set frame size and return address offset to these values in blobs
+ // (if the compiled frame uses ebp as link pointer on IA; otherwise,
+@@ -62,6 +65,9 @@ enum {
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_Defs_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_Defs_aarch64.hpp"
++#endif
+
+
+ // native word offsets from memory address
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
+index a1e4c38..491b064 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
+@@ -44,6 +44,9 @@ class FpuStackSim;
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_FpuStackSim_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_FpuStackSim_aarch64.hpp"
++#endif
+
+
+ #endif // SHARE_VM_C1_C1_FPUSTACKSIM_HPP
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
+index ea50b27..6a3dc63 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmreg_aarch64.inline.hpp"
++#endif
+
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
+index 288fc5c..e9a0250 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
+@@ -93,6 +93,9 @@ class FrameMap : public CompilationResourceObj {
+ #endif
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_FrameMap_ppc.hpp"
++#endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_FrameMap_aarch64.hpp"
+ #endif
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
+index 776a6a3..6e1a362 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
+@@ -67,7 +67,7 @@ FloatRegister LIR_OprDesc::as_double_reg() const {
+
+ #endif
+
+-#ifdef ARM
++#if defined(ARM) || defined (TARGET_ARCH_aarch64)
+
+ FloatRegister LIR_OprDesc::as_float_reg() const {
+   return as_FloatRegister(fpu_regnr());
+@@ -147,7 +147,11 @@ void LIR_Address::verify() const {
+ #endif
+ #ifdef _LP64
+   assert(base()->is_cpu_register(), "wrong base operand");
++#ifndef TARGET_ARCH_aarch64
+   assert(index()->is_illegal() || index()->is_double_cpu(), "wrong index operand");
++#else
++  assert(index()->is_illegal() || index()->is_double_cpu() || index()->is_single_cpu(), "wrong index operand");
++#endif
+   assert(base()->type() == T_OBJECT || base()->type() == T_LONG,
+          "wrong type for addresses");
+ #else
+@@ -545,7 +549,7 @@ void LIR_OpVisitState::visit(LIR_Op* op) {
+       assert(opConvert->_info == NULL, "must be");
+       if (opConvert->_opr->is_valid())       do_input(opConvert->_opr);
+       if (opConvert->_result->is_valid())    do_output(opConvert->_result);
+-#ifdef PPC
++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
+       if (opConvert->_tmp1->is_valid())      do_temp(opConvert->_tmp1);
+       if (opConvert->_tmp2->is_valid())      do_temp(opConvert->_tmp2);
+ #endif
+@@ -1468,6 +1472,11 @@ void LIR_OprDesc::print(outputStream* out) const {
+     out->print("fpu%d", fpu_regnr());
+   } else if (is_double_fpu()) {
+     out->print("fpu%d", fpu_regnrLo());
++#elif defined(AARCH64)
++  } else if (is_single_fpu()) {
++    out->print("fpu%d", fpu_regnr());
++  } else if (is_double_fpu()) {
++    out->print("fpu%d", fpu_regnrLo());
+ #elif defined(ARM)
+   } else if (is_single_fpu()) {
+     out->print("s%d", fpu_regnr());
+@@ -1836,7 +1845,7 @@ void LIR_OpConvert::print_instr(outputStream* out) const {
+   print_bytecode(out, bytecode());
+   in_opr()->print(out);                  out->print(" ");
+   result_opr()->print(out);              out->print(" ");
+-#ifdef PPC
++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
+   if(tmp1()->is_valid()) {
+     tmp1()->print(out); out->print(" ");
+     tmp2()->print(out); out->print(" ");
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
+index f8589c3..eb3383f 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
+@@ -437,8 +437,8 @@ class LIR_OprDesc: public CompilationResourceObj {
+   XMMRegister as_xmm_double_reg() const;
+   // for compatibility with RInfo
+   int fpu () const                                  { return lo_reg_half(); }
+-#endif // X86
+-#if defined(SPARC) || defined(ARM) || defined(PPC)
++#endif
++#if defined(SPARC) || defined(ARM) || defined(PPC) || defined(AARCH64)
+   FloatRegister as_float_reg   () const;
+   FloatRegister as_double_reg  () const;
+ #endif
+@@ -526,7 +526,7 @@ class LIR_Address: public LIR_OprPtr {
+      , _type(type)
+      , _disp(0) { verify(); }
+
+-#if defined(X86) || defined(ARM)
++#if defined(X86) || defined(ARM) || defined(AARCH64)
+   LIR_Address(LIR_Opr base, LIR_Opr index, Scale scale, intx disp, BasicType type):
+        _base(base)
+      , _index(index)
+@@ -601,7 +601,7 @@ class LIR_OprFact: public AllStatic {
+                                                                              LIR_OprDesc::fpu_register         |
+                                                                              LIR_OprDesc::double_size); }
+ #endif
+-#ifdef X86
++#if defined(X86) || defined(AARCH64)
+   static LIR_Opr double_fpu(int reg)            { return (LIR_Opr)(intptr_t)((reg  << LIR_OprDesc::reg1_shift) |
+                                                                              (reg  << LIR_OprDesc::reg2_shift) |
+                                                                              LIR_OprDesc::double_type          |
+@@ -1398,7 +1398,7 @@ class LIR_OpConvert: public LIR_Op1 {
+  private:
+    Bytecodes::Code _bytecode;
+    ConversionStub* _stub;
+-#ifdef PPC
++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
+   LIR_Opr _tmp1;
+   LIR_Opr _tmp2;
+ #endif
+@@ -1413,7 +1413,7 @@ class LIR_OpConvert: public LIR_Op1 {
+ #endif
+      , _bytecode(code)                           {}
+
+-#ifdef PPC
++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
+    LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result, ConversionStub* stub
+                  ,LIR_Opr tmp1, LIR_Opr tmp2)
+      : LIR_Op1(lir_convert, opr, result)
+@@ -1425,7 +1425,7 @@ class LIR_OpConvert: public LIR_Op1 {
+
+   Bytecodes::Code bytecode() const               { return _bytecode; }
+   ConversionStub* stub() const                   { return _stub; }
+-#ifdef PPC
++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
+   LIR_Opr tmp1() const                           { return _tmp1; }
+   LIR_Opr tmp2() const                           { return _tmp2; }
+ #endif
+@@ -1973,7 +1973,14 @@ class LIR_List: public CompilationResourceObj {
+ #ifdef PPC
+   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); }
+ #endif
++#if defined (TARGET_ARCH_aarch64)
++  void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst,
++	       ConversionStub* stub = NULL, LIR_Opr tmp1 = LIR_OprDesc::illegalOpr()) {
++    append(new LIR_OpConvert(code, left, dst, stub, tmp1, LIR_OprDesc::illegalOpr()));
++  }
++#else
+   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); }
++#endif
+
+   void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and,  left, right, dst)); }
+   void logical_or  (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or,   left, right, dst)); }
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
+index 528f21e..4d83fca 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
+@@ -50,6 +50,10 @@
+ # include "nativeInst_ppc.hpp"
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++# include "vmreg_aarch64.inline.hpp"
++#endif
+
+
+ void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_code, Register obj, CodeEmitInfo* info) {
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
+index 58adf59..f4a49b3 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
+@@ -261,6 +261,9 @@ class LIR_Assembler: public CompilationResourceObj {
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_LIRAssembler_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_LIRAssembler_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
+index aaae71d..93f9f5f 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
+@@ -47,6 +47,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmreg_aarch64.inline.hpp"
++#endif
+
+
+ #ifndef PRODUCT
+@@ -2190,7 +2193,7 @@ LIR_Opr LinearScan::color_lir_opr(LIR_Opr opr, int op_id, LIR_OpVisitState::OprM
+
+   LIR_Opr res = operand_for_interval(interval);
+
+-#ifdef X86
++#if defined(X86) || defined(AARCH64)
+   // new semantic for is_last_use: not only set on definite end of interval,
+   // but also before hole
+   // This may still miss some cases (e.g. for dead values), but it is not necessary that the
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
+index 0c06f1b..a152328 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
+@@ -985,6 +985,9 @@ class LinearScanTimers : public StackObj {
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_LinearScan_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_LinearScan_aarch64.hpp"
++#endif
+
+
+ #endif // SHARE_VM_C1_C1_LINEARSCAN_HPP
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
+index 55d9803..eda2174 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "assembler_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.inline.hpp"
++#endif
+
+ class CodeEmitInfo;
+
+@@ -73,6 +76,9 @@ class C1_MacroAssembler: public MacroAssembler {
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_MacroAssembler_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_MacroAssembler_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
+index 765dec4..f0b3aae 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp
++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
+@@ -1103,6 +1103,7 @@ JRT_END
+ // completes we can check for deoptimization. This simplifies the
+ // assembly code in the cpu directories.
+ //
++#ifndef TARGET_ARCH_aarch64
+ int Runtime1::move_klass_patching(JavaThread* thread) {
+ //
+ // NOTE: we are still in Java
+@@ -1150,6 +1151,7 @@ int Runtime1::access_field_patching(JavaThread* thread) {
+
+   return caller_is_deopted();
+ JRT_END
++#endif
+
+
+ JRT_LEAF(void, Runtime1::trace_block_entry(jint block_id))
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
+index 2032564..19261be 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
+@@ -159,6 +159,9 @@ class Runtime1: public AllStatic {
+   static int move_klass_patching(JavaThread* thread);
+
+   static void patch_code(JavaThread* thread, StubID stub_id);
++#ifdef TARGET_ARCH_aarch64
++  static void patch_code_aarch64(JavaThread* thread, StubID stub_id);
++#endif
+
+  public:
+   // initialization
+diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
+index 15f3cc1..4143a87 100644
+--- openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp
++++ openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
+@@ -38,6 +38,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_globals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_globals_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "c1_globals_linux.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
+index cf6f0e5..b128b3a 100644
+--- openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp
++++ openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ // Input stream for reading .class file
+ //
+diff --git openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
+index f876029..ac415b6 100644
+--- openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp
++++ openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
+@@ -46,6 +46,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ class StackMapReader;
+
+diff --git openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp openjdk/hotspot/src/share/vm/classfile/verifier.cpp
+index c5c5e11..9c22a21 100644
+--- openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp
++++ openjdk/hotspot/src/share/vm/classfile/verifier.cpp
+@@ -60,6 +60,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ #define NOFAILOVER_MAJOR_VERSION 51
+
+diff --git openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp openjdk/hotspot/src/share/vm/code/codeBlob.cpp
+index 244c320..429e0be 100644
+--- openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp
++++ openjdk/hotspot/src/share/vm/code/codeBlob.cpp
+@@ -54,6 +54,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++#endif
+ #ifdef COMPILER1
+ #include "c1/c1_Runtime1.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp openjdk/hotspot/src/share/vm/code/compiledIC.hpp
+index fe1cfb3..c9f6a2e 100644
+--- openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp
++++ openjdk/hotspot/src/share/vm/code/compiledIC.hpp
+@@ -44,6 +44,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++#endif
+
+ //-----------------------------------------------------------------------------
+ // The CompiledIC represents a compiled inline cache.
+diff --git openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp openjdk/hotspot/src/share/vm/code/icBuffer.cpp
+index ed70457..d022482 100644
+--- openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp
++++ openjdk/hotspot/src/share/vm/code/icBuffer.cpp
+@@ -52,6 +52,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "assembler_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.inline.hpp"
++#endif
+
+
+ DEF_STUB_INTERFACE(ICStub);
+diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp openjdk/hotspot/src/share/vm/code/relocInfo.cpp
+index 4fd82df..78310e6 100644
+--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp
++++ openjdk/hotspot/src/share/vm/code/relocInfo.cpp
+@@ -49,6 +49,10 @@
+ # include "assembler_ppc.inline.hpp"
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.inline.hpp"
++# include "nativeInst_aarch64.hpp"
++#endif
+
+
+ const RelocationHolder RelocationHolder::none; // its type is relocInfo::none
+diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp openjdk/hotspot/src/share/vm/code/relocInfo.hpp
+index 1d14b44..3823889 100644
+--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp
++++ openjdk/hotspot/src/share/vm/code/relocInfo.hpp
+@@ -435,6 +435,9 @@ class relocInfo VALUE_OBJ_CLASS_SPEC {
+ #endif
+ #ifdef TARGET_ARCH_ppc
+ # include "relocInfo_ppc.hpp"
++#endif
++#ifdef TARGET_ARCH_aarch64
++# include "relocInfo_aarch64.hpp"
+ #endif
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp openjdk/hotspot/src/share/vm/code/vmreg.hpp
+index d57e6f8..1c18e47 100644
+--- openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp
++++ openjdk/hotspot/src/share/vm/code/vmreg.hpp
+@@ -42,6 +42,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "register_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "register_aarch64.hpp"
++#endif
+ #ifdef COMPILER2
+ #include "opto/adlcVMDeps.hpp"
+ #include "utilities/ostream.hpp"
+@@ -63,6 +66,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/adGlobals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/adGlobals_aarch64.hpp"
++#endif
+ #endif
+
+ //------------------------------VMReg------------------------------------------
+@@ -182,6 +188,9 @@ public:
+ #ifdef TARGET_ARCH_ppc
+ # include "vmreg_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmreg_aarch64.hpp"
++#endif
+
+
+ };
+diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
+index 9603e86..3a67259 100644
+--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp
++++ openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
+@@ -47,6 +47,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "depChecker_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "depChecker_aarch64.hpp"
++#endif
+ #ifdef SHARK
+ #include "shark/sharkEntry.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
+index a70b8cc..4c90c9a 100644
+--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp
++++ openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
+@@ -78,6 +78,9 @@ class Disassembler {
+ #endif
+ #ifdef TARGET_ARCH_ppc
+ # include "disassembler_ppc.hpp"
++#endif
++#ifdef TARGET_ARCH_aarch64
++# include "disassembler_aarch64.hpp"
+ #endif
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
+index d23f37a..24ca30e 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
+@@ -44,6 +44,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "interp_masm_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "interp_masm_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
+index 107161a..205d0f7 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ class ciBytecodeStream;
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
+index e637414..308ad3b 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
+@@ -47,6 +47,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ #ifdef CC_INTERP
+
+@@ -618,6 +621,9 @@ void print();
+ #ifdef TARGET_ARCH_ppc
+ # include "bytecodeInterpreter_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytecodeInterpreter_aarch64.hpp"
++#endif
+
+
+ }; // BytecodeInterpreter
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
+index 3715a52..0d6a8aa 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
+@@ -58,6 +58,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytecodeInterpreter_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytecodeInterpreter_aarch64.inline.hpp"
++#endif
+
+ #endif // CC_INTERP
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
+index 6106eac..f3dee0a 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ // A BytecodeStream is used for fast iteration over the bytecodes
+ // of a methodOop.
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
+index 04f3f64..48ef30e 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp
++++ openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+
+ #if defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER < 1600))
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
+index e3a9f2e..8347473 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
+@@ -101,6 +101,9 @@ class CppInterpreter: public AbstractInterpreter {
+ #ifdef TARGET_ARCH_ppc
+ # include "cppInterpreter_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "cppInterpreter_aarch64.hpp"
++#endif
+
+
+ };
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
+index c27805e..272f6e8 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
+@@ -59,6 +59,9 @@ class CppInterpreterGenerator: public AbstractInterpreterGenerator {
+ #ifdef TARGET_ARCH_ppc
+ # include "cppInterpreterGenerator_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "cppInterpreterGenerator_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
+index 0ab0be7..6a6822f 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
+@@ -158,6 +158,9 @@ class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateI
+ #ifdef TARGET_ARCH_ppc
+ # include "interpreter_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "interpreter_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
+index 7bc43ec..0434ca3 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
+@@ -56,6 +56,9 @@ InterpreterGenerator(StubQueue* _code);
+ #ifdef TARGET_ARCH_ppc
+ # include "interpreterGenerator_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "interpreterGenerator_aarch64.hpp"
++#endif
+
+
+ };
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
+index e451c04..37700fb 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
+@@ -71,6 +71,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vm_version_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vm_version_aarch64.hpp"
++#endif
+ #ifdef COMPILER2
+ #include "opto/runtime.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
+index 93c1a9e..425400e 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
+@@ -164,6 +164,9 @@ class InterpreterRuntime: AllStatic {
+ #endif
+ #ifdef TARGET_ARCH_ppc
+ # include "interpreterRT_ppc.hpp"
++#endif
++#ifdef TARGET_ARCH_aarch64
++# include "interpreterRT_aarch64.hpp"
+ #endif
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
+index 25d74f7..f78a16e 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
+@@ -198,6 +198,9 @@ class TemplateInterpreter: public AbstractInterpreter {
+ #ifdef TARGET_ARCH_ppc
+ # include "templateInterpreter_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "templateInterpreter_aarch64.hpp"
++#endif
+
+
+ };
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
+index fb7bdc5..6007630 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
+@@ -101,6 +101,9 @@ class TemplateInterpreterGenerator: public AbstractInterpreterGenerator {
+ #ifdef TARGET_ARCH_ppc
+ # include "templateInterpreterGenerator_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "templateInterpreterGenerator_aarch64.hpp"
++#endif
+
+
+ };
+diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
+index 5d2a7e8..c5e0f0a 100644
+--- openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp
++++ openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "interp_masm_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "interp_masm_aarch64.hpp"
++#endif
+
+ #ifndef CC_INTERP
+ // All the necessary definitions used for (bytecode) template generation. Instead of
+@@ -373,6 +376,9 @@ class TemplateTable: AllStatic {
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "templateTable_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "templateTable_aarch64.hpp"
++#endif
+
+ };
+ #endif /* !CC_INTERP */
+diff --git openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
+index c2f985d..3d0d0fc 100644
+--- openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp
++++ openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
+@@ -45,6 +45,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ // A constantPool is an array containing class constants as described in the
+ // class file.
+diff --git openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
+index db14b2e..c8b326f 100644
+--- openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp
++++ openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
+@@ -58,6 +58,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ // Implementation of all inlined member functions defined in oop.hpp
+ // We need a separate file to avoid circular references
+diff --git openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
+index fc73160..2c5ec41 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp
++++ openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
+@@ -47,6 +47,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmreg_aarch64.inline.hpp"
++#endif
+
+ // The functions in this file builds OopMaps after all scheduling is done.
+ //
+diff --git openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
+index f73dcbd..462c875 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp
++++ openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
+@@ -35,6 +35,9 @@
+ #ifdef TARGET_ARCH_arm
+ # include "c2_globals_arm.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c2_globals_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "c2_globals_linux.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
+index 713e3f1..948e447 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp
++++ openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+
+ volatile int C2Compiler::_runtimes = uninitialized;
+diff --git openjdk.orig/hotspot/src/share/vm/opto/compile.cpp openjdk/hotspot/src/share/vm/opto/compile.cpp
+index a7ee07a..91dc290 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/compile.cpp
++++ openjdk/hotspot/src/share/vm/opto/compile.cpp
+@@ -80,6 +80,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+
+ // -------------------- Compile::mach_constant_base_node -----------------------
+diff --git openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp openjdk/hotspot/src/share/vm/opto/gcm.cpp
+index 8b8f311..4deb0b4 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp
++++ openjdk/hotspot/src/share/vm/opto/gcm.cpp
+@@ -53,6 +53,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ // Portions of code courtesy of Clifford Click
+
+diff --git openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp openjdk/hotspot/src/share/vm/opto/lcm.cpp
+index aee6123..4b9aaed 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp
++++ openjdk/hotspot/src/share/vm/opto/lcm.cpp
+@@ -48,6 +48,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ // Optimization - Graph Style
+
+diff --git openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp openjdk/hotspot/src/share/vm/opto/locknode.hpp
+index 91b99bc..665594f 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp
++++ openjdk/hotspot/src/share/vm/opto/locknode.hpp
+@@ -46,6 +46,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ //------------------------------BoxLockNode------------------------------------
+ class BoxLockNode : public Node {
+diff --git openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp openjdk/hotspot/src/share/vm/opto/matcher.cpp
+index ca2d4e3..d0f55c5 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp
++++ openjdk/hotspot/src/share/vm/opto/matcher.cpp
+@@ -55,6 +55,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ OptoReg::Name OptoReg::c_frame_pointer;
+
+diff --git openjdk.orig/hotspot/src/share/vm/opto/output.hpp openjdk/hotspot/src/share/vm/opto/output.hpp
+index 50b6e76..6a920b2 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/output.hpp
++++ openjdk/hotspot/src/share/vm/opto/output.hpp
+@@ -45,6 +45,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ class Arena;
+ class Bundle;
+diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp openjdk/hotspot/src/share/vm/opto/regmask.cpp
+index ce220f0..20c6028 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp
++++ openjdk/hotspot/src/share/vm/opto/regmask.cpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+ #define RM_SIZE _RM_SIZE /* a constant private to the class RegMask */
+
+diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp openjdk/hotspot/src/share/vm/opto/regmask.hpp
+index e50ff84..26c6854 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp
++++ openjdk/hotspot/src/share/vm/opto/regmask.hpp
+@@ -46,6 +46,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/adGlobals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/adGlobals_aarch64.hpp"
++#endif
+
+ // Some fun naming (textual) substitutions:
+ //
+diff --git openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp openjdk/hotspot/src/share/vm/opto/runtime.cpp
+index d315f10..11a58b1 100644
+--- openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp
++++ openjdk/hotspot/src/share/vm/opto/runtime.cpp
+@@ -86,6 +86,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+
+
+ // For debugging purposes:
+diff --git openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
+index 3bf4ecd..2ad9014 100644
+--- openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp
++++ openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
+@@ -51,6 +51,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "jniTypes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "jniTypes_aarch64.hpp"
++#endif
+
+
+ // Heap objects are allowed to be directly referenced only in VM code,
+diff --git openjdk.orig/hotspot/src/share/vm/prims/jni_md.h openjdk/hotspot/src/share/vm/prims/jni_md.h
+index 7fa5829..3bd4e31 100644
+--- openjdk.orig/hotspot/src/share/vm/prims/jni_md.h
++++ openjdk/hotspot/src/share/vm/prims/jni_md.h
+@@ -39,6 +39,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "jni_ppc.h"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "jni_aarch64.h"
++#endif
+
+
+ /*
+diff --git openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
+index 97dd154..fd1fa43 100644
+--- openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
++++ openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
+@@ -43,6 +43,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+ // FIXME: add Deprecated, LVTT attributes
+ // FIXME: fix Synthetic attribute
+ // FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes()
+diff --git openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
+index 514ba6a..ea747d0 100644
+--- openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp
++++ openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
+@@ -738,6 +738,9 @@ public:
+ #ifdef TARGET_ARCH_ppc
+ # include "methodHandles_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "methodHandles_aarch64.hpp"
++#endif
+ };
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp openjdk/hotspot/src/share/vm/runtime/atomic.cpp
+index 80780d7..5a34f15 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp
++++ openjdk/hotspot/src/share/vm/runtime/atomic.cpp
+@@ -60,6 +60,9 @@
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "atomic_linux_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "atomic_linux_aarch64.inline.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "atomic_bsd_x86.inline.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
+index 4735588..4e7958a 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp
++++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
+@@ -65,6 +65,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmreg_aarch64.inline.hpp"
++#endif
+ #ifdef COMPILER2
+ #ifdef TARGET_ARCH_MODEL_x86_32
+ # include "adfiles/ad_x86_32.hpp"
+@@ -84,6 +87,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/ad_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/ad_aarch64.hpp"
++#endif
+ #endif
+
+ bool DeoptimizationMarker::_is_active = false;
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
+index bff4310..1129cd6 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
++++ openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++#endif
+
+ class RegisteredProbes;
+ typedef jlong OpaqueProbes;
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp openjdk/hotspot/src/share/vm/runtime/frame.cpp
+index 7ae9aa8..6654714 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp
++++ openjdk/hotspot/src/share/vm/runtime/frame.cpp
+@@ -59,6 +59,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++#endif
+
+ RegisterMap::RegisterMap(JavaThread *thread, bool update_map) {
+   _thread         = thread;
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp openjdk/hotspot/src/share/vm/runtime/frame.hpp
+index c55380e..c13caae 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp
++++ openjdk/hotspot/src/share/vm/runtime/frame.hpp
+@@ -50,6 +50,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/adGlobals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/adGlobals_aarch64.hpp"
++#endif
+ #endif
+ #ifdef ZERO
+ #ifdef TARGET_ARCH_zero
+@@ -491,6 +494,9 @@ class frame VALUE_OBJ_CLASS_SPEC {
+ #ifdef TARGET_ARCH_ppc
+ # include "frame_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "frame_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
+index b80b042..f6e1b0e 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp
++++ openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
+@@ -46,6 +46,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "jniTypes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "jniTypes_aarch64.hpp"
++#endif
+ #ifdef ZERO
+ #ifdef TARGET_ARCH_zero
+ # include "entryFrame_zero.hpp"
+@@ -100,6 +103,9 @@ inline bool frame::is_first_frame() const {
+ #ifdef TARGET_ARCH_ppc
+ # include "frame_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "frame_aarch64.inline.hpp"
++#endif
+
+
+ #endif // SHARE_VM_RUNTIME_FRAME_INLINE_HPP
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
+index 10d74cd..4cc5dfb 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp
++++ openjdk/hotspot/src/share/vm/runtime/globals.hpp
+@@ -52,6 +52,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "globals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "globals_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "globals_linux.hpp"
+ #endif
+@@ -88,6 +91,9 @@
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "globals_linux_ppc.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "globals_linux_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "globals_bsd_x86.hpp"
+ #endif
+@@ -107,6 +113,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "c1_globals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c1_globals_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "c1_globals_linux.hpp"
+ #endif
+@@ -130,6 +139,9 @@
+ #ifdef TARGET_ARCH_arm
+ # include "c2_globals_arm.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "c2_globals_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "c2_globals_linux.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp openjdk/hotspot/src/share/vm/runtime/icache.hpp
+index d460a0f..9a3b9c8 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp
++++ openjdk/hotspot/src/share/vm/runtime/icache.hpp
+@@ -83,6 +83,9 @@ class AbstractICache : AllStatic {
+ #ifdef TARGET_ARCH_ppc
+ # include "icache_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "icache_aarch64.hpp"
++#endif
+
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/java.cpp openjdk/hotspot/src/share/vm/runtime/java.cpp
+index fc3b67a..46794b0 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/java.cpp
++++ openjdk/hotspot/src/share/vm/runtime/java.cpp
+@@ -78,6 +78,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vm_version_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vm_version_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
+index d4f8595..bc2ca9b 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp
++++ openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
+@@ -45,6 +45,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "jniTypes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "jniTypes_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
+index 8374aa2..6be5f79 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
++++ openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
+@@ -47,6 +47,9 @@
+ #ifdef TARGET_OS_ARCH_linux_arm
+ # include "orderAccess_linux_arm.inline.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "orderAccess_linux_aarch64.inline.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "orderAccess_linux_ppc.inline.hpp"
+ #endif
+@@ -121,6 +124,9 @@ friend class JavaCallWrapper;
+ #ifdef TARGET_ARCH_ppc
+ # include "javaFrameAnchor_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "javaFrameAnchor_aarch64.hpp"
++#endif
+
+
+ public:
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/os.hpp openjdk/hotspot/src/share/vm/runtime/os.hpp
+index 5867deb..0f1fbb4 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/os.hpp
++++ openjdk/hotspot/src/share/vm/runtime/os.hpp
+@@ -719,6 +719,9 @@ class os: AllStatic {
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "os_linux_ppc.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "os_linux_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "os_bsd_x86.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
+index 5dd677a..7bd425f 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp
++++ openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
+@@ -42,6 +42,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "register_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "register_aarch64.hpp"
++#endif
+
+ class JavaThread;
+
+@@ -150,6 +153,9 @@ class RegisterMap : public StackObj {
+ #ifdef TARGET_ARCH_ppc
+ # include "registerMap_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "registerMap_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp openjdk/hotspot/src/share/vm/runtime/relocator.hpp
+index c34866f..790bd80 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp
++++ openjdk/hotspot/src/share/vm/runtime/relocator.hpp
+@@ -42,6 +42,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "bytes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "bytes_aarch64.hpp"
++#endif
+
+ // This code has been converted from the 1.1E java virtual machine
+ // Thanks to the JavaTopics group for using the code
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
+index c29d257..a842bb3 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp
++++ openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
+@@ -70,6 +70,10 @@
+ # include "nativeInst_ppc.hpp"
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++# include "vmreg_aarch64.inline.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
+index c25dcfe..aa7caff 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp
++++ openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
+@@ -76,6 +76,10 @@
+ # include "nativeInst_ppc.hpp"
+ # include "vmreg_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++# include "vmreg_aarch64.inline.hpp"
++#endif
+ #ifdef COMPILER1
+ #include "c1/c1_Runtime1.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
+index 110f712..779f994 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp
++++ openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
+@@ -39,6 +39,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "jniTypes_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "jniTypes_aarch64.hpp"
++#endif
+
+ jint StackValueCollection::int_at(int slot) const {
+   intptr_t val =  at(slot)->get_int();
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
+index 0b24def..c82a214 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp
++++ openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
+@@ -48,6 +48,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vm_version_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vm_version_aarch64.hpp"
++#endif
+
+ // --------------------------------------------------------
+ // StatSamplerTask
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
+index b6068a5..4ef7e38 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
++++ openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
+@@ -42,6 +42,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "assembler_ppc.inline.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "assembler_aarch64.inline.hpp"
++#endif
+
+
+ // Implementation of StubCodeDesc
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
+index 8481dce..f233b56 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp
++++ openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
+@@ -46,6 +46,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "nativeInst_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "nativeInst_aarch64.hpp"
++#endif
+
+ // StubRoutines provides entry points to assembly routines used by
+ // compiled code and the run-time system. Platform-specific entry
+@@ -116,6 +119,9 @@ class StubRoutines: AllStatic {
+ #endif
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "stubRoutines_ppc.hpp"
++#endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "stubRoutines_aarch64.hpp"
+ #endif
+
+
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp openjdk/hotspot/src/share/vm/runtime/thread.hpp
+index 7846cc0..6964c22 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp
++++ openjdk/hotspot/src/share/vm/runtime/thread.hpp
+@@ -1651,6 +1651,9 @@ public:
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "thread_linux_ppc.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "thread_linux_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "thread_bsd_x86.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
+index c2f7a9e..26ef559 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
++++ openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
+@@ -68,6 +68,9 @@ class ThreadLocalStorage : AllStatic {
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "threadLS_linux_ppc.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "threadLS_linux_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "threadLS_bsd_x86.hpp"
+ #endif
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
+index 8afd933..359f9fc 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp
++++ openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
+@@ -125,6 +125,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vmStructs_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vmStructs_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_FAMILY_linux
+ # include "thread_linux.inline.hpp"
+ #endif
+@@ -161,6 +164,9 @@
+ #ifdef TARGET_OS_ARCH_linux_ppc
+ # include "vmStructs_linux_ppc.hpp"
+ #endif
++#ifdef TARGET_OS_ARCH_linux_aarch64
++# include "vmStructs_linux_aarch64.hpp"
++#endif
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "vmStructs_bsd_x86.hpp"
+ #endif
+@@ -221,6 +227,9 @@
+ #ifdef TARGET_ARCH_MODEL_ppc
+ # include "adfiles/adGlobals_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_MODEL_aarch64
++# include "adfiles/adGlobals_aarch64.hpp"
++#endif
+ #endif
+
+ // Note: the cross-product of (c1, c2, product, nonproduct, ...),
+diff --git openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
+index 2d51b67..bba9b01 100644
+--- openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp
++++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
+@@ -41,6 +41,9 @@
+ #ifdef TARGET_ARCH_ppc
+ # include "vm_version_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "vm_version_aarch64.hpp"
++#endif
+
+ const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
+ const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
+@@ -185,6 +188,7 @@ const char* Abstract_VM_Version::jre_release_version() {
+                  AMD64_ONLY("amd64")             \
+                  ARM_ONLY("arm")                 \
+                  PPC_ONLY("ppc")                 \
++                 AARCH64_ONLY("aarch64")         \
+                  SPARC_ONLY("sparc")
+ #endif // ZERO
+
+diff --git openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp openjdk/hotspot/src/share/vm/utilities/copy.hpp
+index 3dcbfee..198590f 100644
+--- openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp
++++ openjdk/hotspot/src/share/vm/utilities/copy.hpp
+@@ -337,6 +337,9 @@ class Copy : AllStatic {
+ #ifdef TARGET_ARCH_ppc
+ # include "copy_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "copy_aarch64.hpp"
++#endif
+
+ };
+
+diff --git openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
+index b55b0ac..5d11e26 100644
+--- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp
++++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
+@@ -346,6 +346,9 @@ extern int LogMinObjAlignmentInBytes;
+ #ifdef TARGET_ARCH_ppc
+ # include "globalDefinitions_ppc.hpp"
+ #endif
++#ifdef TARGET_ARCH_aarch64
++# include "globalDefinitions_aarch64.hpp"
++#endif
+
+
+ // The byte alignment to be used by Arena::Amalloc.  See bugid 4169348.
+diff --git openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp openjdk/hotspot/src/share/vm/utilities/macros.hpp
+index 003f2af..2aa7f87 100644
+--- openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp
++++ openjdk/hotspot/src/share/vm/utilities/macros.hpp
+@@ -261,6 +261,14 @@
+ #define NOT_ARM(code) code
+ #endif
+
++#ifdef AARCH64
++#define AARCH64_ONLY(code) code
++#define NOT_AARCH64(code)
++#else
++#define AARCH64_ONLY(code)
++#define NOT_AARCH64(code) code
++#endif
++
+ #ifdef JAVASE_EMBEDDED
+ #define EMBEDDED_ONLY(code) code
+ #define NOT_EMBEDDED(code)
--
2.26.2


code:
From 919dd016be1abd213b3a7d0e9a3b79e3286ef6ad Mon Sep 17 00:00:00 2001
From: Simon South <simon@simonsouth.net>
Date: Wed, 10 Jun 2020 13:02:09 -0400
Subject: [PATCH] aarch64: Use only C++98

This patch removes an unneeded C++ template that causes the build to
fail for aarch64 using gcc 7.5.0 and its default support for only the
C++98 standard.

It is based on original work by Severin Gehwolf <sgehwolf@redhat.com>.
See: https://bugzilla.redhat.com/show_bug.cgi?id=1307224
---
 src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
index 0bc0a2b..6f73ca0 100644
--- a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
+++ b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
@@ -194,10 +194,6 @@ static int reg2offset_out(VMReg r) {
   return (r->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size;
 }

-template <class T> static const T& min (const T& a, const T& b) {
-  return (a > b) ? b : a;
-}
-
 // ---------------------------------------------------------------------------
 // Read the array of BasicTypes from a signature, and compute where the
 // arguments should go.  Values in the VMRegPair regs array refer to 4-byte
--
2.26.2

repo_name: maximed/guix

license: mit


code:
Fix CVE-2020-10531:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531

Patch copied from upstream source repository (changes to the test suite
are commented out):

https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca

From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001
From: Frank Tang <ftang@chromium.org>
Date: Sat, 1 Feb 2020 02:39:04 +0000
Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append

See #971
---
 icu4c/source/common/unistr.cpp          |  6 ++-
 icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++
 icu4c/source/test/intltest/ustrtest.h   |  1 +
 3 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp
index 901bb3358ba..077b4d6ef20 100644
--- a/icu4c/source/common/unistr.cpp
+++ b/icu4c/source/common/unistr.cpp
@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
   }

   int32_t oldLength = length();
-  int32_t newLength = oldLength + srcLength;
+  int32_t newLength;
+  if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
+    setToBogus();
+    return *this;
+  }

   // Check for append onto ourself
   const UChar* oldArray = getArrayStart();
#diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
#index b6515ea813c..ad38bdf53a3 100644
#--- a/icu4c/source/test/intltest/ustrtest.cpp
#+++ b/icu4c/source/test/intltest/ustrtest.cpp
#@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
#     TESTCASE_AUTO(TestWCharPointers);
#     TESTCASE_AUTO(TestNullPointers);
#     TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
#+    TESTCASE_AUTO(TestLargeAppend);
#     TESTCASE_AUTO_END;
# }
#
#@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
#     str.insert(2, sub);
#     assertEquals("", u"abbcdcde", str);
# }
#+
#+void UnicodeStringTest::TestLargeAppend() {
#+    if(quick) return;
#+
#+    IcuTestErrorCode status(*this, "TestLargeAppend");
#+    // Make a large UnicodeString
#+    int32_t len = 0xAFFFFFF;
#+    UnicodeString str;
#+    char16_t *buf = str.getBuffer(len);
#+    // A fast way to set buffer to valid Unicode.
#+    // 4E4E is a valid unicode character
#+    uprv_memset(buf, 0x4e, len * 2);
#+    str.releaseBuffer(len);
#+    UnicodeString dest;
#+    // Append it 16 times
#+    // 0xAFFFFFF times 16 is 0xA4FFFFF1,
#+    // which is greater than INT32_MAX, which is 0x7FFFFFFF.
#+    int64_t total = 0;
#+    for (int32_t i = 0; i < 16; i++) {
#+        dest.append(str);
#+        total += len;
#+        if (total <= INT32_MAX) {
#+            assertFalse("dest is not bogus", dest.isBogus());
#+        } else {
#+            assertTrue("dest should be bogus", dest.isBogus());
#+        }
#+    }
#+    dest.remove();
#+    total = 0;
#+    for (int32_t i = 0; i < 16; i++) {
#+        dest.append(str);
#+        total += len;
#+        if (total + len <= INT32_MAX) {
#+            assertFalse("dest is not bogus", dest.isBogus());
#+        } else if (total <= INT32_MAX) {
#+            // Check that a string of exactly the maximum size works
#+            UnicodeString str2;
#+            int32_t remain = INT32_MAX - total;
#+            char16_t *buf2 = str2.getBuffer(remain);
#+            if (buf2 == nullptr) {
#+                // if somehow memory allocation fail, return the test
#+                return;
#+            }
#+            uprv_memset(buf2, 0x4e, remain * 2);
#+            str2.releaseBuffer(remain);
#+            dest.append(str2);
#+            total += remain;
#+            assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
#+            assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
#+            assertFalse("dest is not bogus", dest.isBogus());
#+
#+            // Check that a string size+1 goes bogus
#+            str2.truncate(1);
#+            dest.append(str2);
#+            total++;
#+            assertTrue("dest should be bogus", dest.isBogus());
#+        } else {
#+            assertTrue("dest should be bogus", dest.isBogus());
#+        }
#+    }
#+}
#diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h
#index 218befdcc68..4a356a92c7a 100644
#--- a/icu4c/source/test/intltest/ustrtest.h
#+++ b/icu4c/source/test/intltest/ustrtest.h
#@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest {
#     void TestWCharPointers();
#     void TestNullPointers();
#     void TestUnicodeStringInsertAppendToSelf();
#+    void TestLargeAppend();
# };
#
# #endif


code:
This patch fixes an issues where temporary files were created in an insecure
way.

It was first intruduced in version 3.8.3-7 and fixes
http://bugs.debian.org/438540
--- a/src/tag_file.cpp
+++ b/src/tag_file.cpp
@@ -242,8 +242,8 @@
     strcpy(sTempFile, filename.c_str());
     strcat(sTempFile, sTmpSuffix.c_str());

-#if ((defined(__GNUC__) && __GNUC__ >= 3  ) || !defined(HAVE_MKSTEMP))
-    // This section is for Windows folk && gcc 3.x folk
+#if !defined(HAVE_MKSTEMP)
+    // This section is for Windows folk
     fstream tmpOut;
     createFile(sTempFile, tmpOut);

@@ -257,7 +257,7 @@
       tmpOut.write((char *)tmpBuffer, nBytes);
     }

-#else //((defined(__GNUC__) && __GNUC__ >= 3  ) || !defined(HAVE_MKSTEMP))
+#else //!defined(HAVE_MKSTEMP)

     // else we gotta make a temp file, copy the tag into it, copy the
     // rest of the old file after the tag, delete the old file, rename
@@ -270,7 +270,7 @@
       //ID3_THROW_DESC(ID3E_NoFile, "couldn't open temp file");
     }

-    ofstream tmpOut(fd);
+    ofstream tmpOut(sTempFile);
     if (!tmpOut)
     {
       tmpOut.close();
@@ -285,14 +285,14 @@
     uchar tmpBuffer[BUFSIZ];
     while (file)
     {
-      file.read(tmpBuffer, BUFSIZ);
+      file.read((char *)tmpBuffer, BUFSIZ);
       size_t nBytes = file.gcount();
-      tmpOut.write(tmpBuffer, nBytes);
+      tmpOut.write((char *)tmpBuffer, nBytes);
     }

     close(fd); //closes the file

-#endif ////((defined(__GNUC__) && __GNUC__ >= 3  ) || !defined(HAVE_MKSTEMP))
+#endif ////!defined(HAVE_MKSTEMP)

     tmpOut.close();
     file.close();


code:
diff -ruN id3lib-3.8.3.orig/ChangeLog id3lib-3.8.3/ChangeLog
--- id3lib-3.8.3.orig/ChangeLog	2003-03-02 01:23:00.000000000 +0100
+++ id3lib-3.8.3/ChangeLog	2006-02-22 00:33:59.946214472 +0100
@@ -1,3 +1,8 @@
+2006-02-17  Jerome Couderc
+
+    * Patch from Spoon to fix UTF-16 writing bug
+      http://sourceforge.net/tracker/index.php?func=detail&aid=1016290&group_id=979&atid=300979
+
 2003-03-02 Sunday 17:38   Thijmen Klok <thijmen@id3lib.org>

 	* THANKS (1.20): added more people
diff -ruN id3lib-3.8.3.orig/src/io_helpers.cpp id3lib-3.8.3/src/io_helpers.cpp
--- id3lib-3.8.3.orig/src/io_helpers.cpp	2003-03-02 01:23:00.000000000 +0100
+++ id3lib-3.8.3/src/io_helpers.cpp	2006-02-22 00:35:02.926639992 +0100
@@ -363,11 +363,22 @@
     // Write the BOM: 0xFEFF
     unicode_t BOM = 0xFEFF;
     writer.writeChars((const unsigned char*) &BOM, 2);
+    // Patch from Spoon : 2004-08-25 14:17
+    //   http://sourceforge.net/tracker/index.php?func=detail&aid=1016290&group_id=979&atid=300979
+    // Wrong code
+    //for (size_t i = 0; i < size; i += 2)
+    //{
+    //  unicode_t ch = (data[i] << 8) | data[i+1];
+    //  writer.writeChars((const unsigned char*) &ch, 2);
+    //}
+    // Right code
+    unsigned char *pdata = (unsigned char *) data.c_str();
     for (size_t i = 0; i < size; i += 2)
     {
-      unicode_t ch = (data[i] << 8) | data[i+1];
+      unicode_t ch = (pdata[i] << 8) | pdata[i+1];
       writer.writeChars((const unsigned char*) &ch, 2);
     }
+    // End patch
   }
   return writer.getCur() - beg;
 }


code:
The "pkg010" test output depends on the version of optparse-applicative being
used.  The expected output requires optparse-applicative >= 0.15.1.0.  Skip
the test for now.

--- idris-1.3.3/test/TestData.hs	2021-01-19 23:05:24.238958262 -0600
+++ idris-1.3.3/test/TestData.hs	2021-01-19 23:10:33.314390997 -0600
@@ -212,8 +212,10 @@
       (  5, ANY  ),
       (  6, ANY  ),
       (  7, ANY  ),
-      (  8, ANY  ),
-      ( 10, ANY  )]),
+      (  8, ANY  )]),
+--      FIXME: Expected output depends on optparse-applicative version.
+--      See https://github.com/idris-lang/Idris-dev/issues/4896
+--      ( 10, ANY  )]),
   ("prelude",         "Prelude",
     [ (  1, ANY  )]),
   ("primitives",      "Primitive types",


code:
Fix FTBFS on i686-linux due to rounding issue (see references).

Fixes Guix bug #22049 (see below).

Copied from Debian.

Source:
https://sources.debian.net/src/ilmbase/2.2.0-11/debian/patches/testBoxAlgo.patch/
https://sources.debian.net/src/ilmbase/2.2.0-11/debian/patches/testBox.patch/

References:
https://lists.nongnu.org/archive/html/openexr-devel/2015-12/msg00001.html
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22049
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815712
https://anonscm.debian.org/cgit/pkg-phototools/ilmbase.git/commit/?id=ab28bb45cdad8adc32e345b777ab8e692b1d9a9c

---

Subject: testBoxAlgo: allow fuzzy match of b12 == b2
From: Steven Chamberlain <steven@pyro.eu.org>
Date: Wed, 24 Feb 2016 01:04:11 +0000

Also fix a pre-existing typo.

--- a/IlmBase/ImathTest/testBoxAlgo.cpp
+++ b/IlmBase/ImathTest/testBoxAlgo.cpp
@@ -886,10 +886,11 @@ boxMatrixTransform ()

     assert (approximatelyEqual (b2.min, b4.min, e));
     assert (approximatelyEqual (b2.max, b4.max, e));
-    assert (approximatelyEqual (b3.max, b4.max, e));
+    assert (approximatelyEqual (b3.min, b4.min, e));
     assert (approximatelyEqual (b3.max, b4.max, e));

-    assert (b21 == b2);
+    assert (approximatelyEqual (b2.min, b21.min, e));
+    assert (approximatelyEqual (b2.max, b21.max, e));
     assert (b31 == b3);

     M[0][3] = 1;

---

Subject: testBox: allow fuzzy comparison of floats, doubles
From: Steven Chamberlain <steven@pyro.eu.org>
Date: Wed, 24 Feb 2016 01:10:11 +0000

Allow for inexact values, as long as the error is smaller than the
epsilon of the data type.

On 32-bit x86, allow even greater discrepency at double
precision, due to possible double-rounding.  See
https://lists.nongnu.org/archive/html/openexr-devel/2015-12/msg00001.html

--- a/IlmBase/ImathTest/testBox.cpp
+++ b/IlmBase/ImathTest/testBox.cpp
@@ -47,6 +47,58 @@ using namespace IMATH_INTERNAL_NAMESPACE

 namespace {

+template <class T>
+bool
+approximatelyEqual (const T &p1, const T &p2)
+{
+	/* int and short should be exact */
+	return (p1 == p2);
+}
+
+bool
+approximatelyEqual (const Vec2<float> &p1, const Vec2<float> &p2)
+{
+    float e = limits<float>::epsilon();
+    float m = 0;
+
+    for (int i = 0; i < 2; ++i)
+    {
+	m = max (m, abs (p1[i]));
+	m = max (m, abs (p2[i]));
+    }
+
+    for (int i = 0; i < 2; ++i)
+	if (!equalWithAbsError (p1[i], p2[i], m * e))
+	    return false;
+
+    return true;
+}
+
+bool
+approximatelyEqual (const Vec2<double> &p1, const Vec2<double> &p2)
+{
+#if defined(__i386__) || defined(_M_IX86)
+    /* double-rounding on 32-bit x86 may cause larger error:
+       use epsilon of float rather than double */
+    double e = limits<float>::epsilon();
+#else
+    double e = limits<double>::epsilon();
+#endif
+    double m = 0;
+
+    for (int i = 0; i < 2; ++i)
+    {
+	m = max (m, abs (p1[i]));
+	m = max (m, abs (p2[i]));
+    }
+
+    for (int i = 0; i < 2; ++i)
+	if (!equalWithAbsError (p1[i], p2[i], m * e))
+	    return false;
+
+    return true;
+}
+
 //
 // Test case generation utility - create a vector of IMATH_INTERNAL_NAMESPACE::Vec{2,3,4}
 // with all permutations of integers 1..T::dimensions().
@@ -250,7 +302,8 @@ testExtendByPoint(const char *type)

         IMATH_INTERNAL_NAMESPACE::Box<T> b;
         b.extendBy(p);
-        assert(b.min == p && b.max == p);
+        assert (approximatelyEqual (b.min, p));
+        assert (approximatelyEqual (b.max, p));
     }

     //
@@ -283,7 +336,8 @@ testExtendByPoint(const char *type)

             b.extendBy(p);

-            assert(b.min == min && b.max == max);
+            assert (approximatelyEqual (b.min, min));
+            assert (approximatelyEqual (b.max, max));
         }
     }
 }
@@ -358,7 +412,8 @@ testExtendByBox(const char *type)
             }
             b.extendBy(IMATH_INTERNAL_NAMESPACE::Box<T>(p0, p1));

-            assert(b.min == min && b.max == max);
+            assert (approximatelyEqual (b.min, min));
+            assert (approximatelyEqual (b.max, max));
         }
     }
 }


code:
We omit the ChangeLog changes below, since they do not apply cleanly.

From 6ee5059cd3ac8d82714a1ab1321399b88539abf0 Mon Sep 17 00:00:00 2001
From: Cristy <urban-warrior@imagemagick.org>
Date: Mon, 30 Nov 2020 16:26:59 +0000
Subject: [PATCH] possible TIFF related-heap buffer overflow (alert & POC by
 Hardik Shah)

---
 ChangeLog     | 6 ++++++
 coders/tiff.c | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/coders/tiff.c b/coders/tiff.c
index e98f927ab..1eecf17ae 100644
--- a/coders/tiff.c
+++ b/coders/tiff.c
@@ -1975,7 +1975,7 @@ static Image *ReadTIFFImage(const ImageInfo *image_info,
         extent+=image->columns*sizeof(uint32);
 #endif
         strip_pixels=(unsigned char *) AcquireQuantumMemory(extent,
-          sizeof(*strip_pixels));
+          2*sizeof(*strip_pixels));
         if (strip_pixels == (unsigned char *) NULL)
           ThrowTIFFException(ResourceLimitError,"MemoryAllocationFailed");
         (void) memset(strip_pixels,0,extent*sizeof(*strip_pixels));


code:
From 512668dfd92b20d0d08b91d62b422d8262573281 Mon Sep 17 00:00:00 2001
From: Dirk Lemstra <dirk@lemstra.org>
Date: Wed, 24 Mar 2021 20:37:15 +0100
Subject: [PATCH] Throw exception when no exception was raised but status was
 false (#3432).

---
 coders/dcm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/coders/dcm.c b/coders/dcm.c
index 7a68ed6e8..ed17c9567 100644
--- a/coders/dcm.c
+++ b/coders/dcm.c
@@ -3989,6 +3989,8 @@ static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (redmap != (int *) NULL)
           redmap=(int *) RelinquishMagickMemory(redmap);
         image=DestroyImageList(image);
+        if ((status == MagickFalse) && (exception->severity < ErrorException))
+          ThrowReaderException(CorruptImageError,"CorruptImage");
         return(GetFirstImageInList(images));
       }
     if (info.depth != (1UL*MAGICKCORE_QUANTUM_DEPTH))
--
2.31.0


code:
From c8f25953ad1dd38a8b2d92738f0f742ad7e0bce7 Mon Sep 17 00:00:00 2001
From: Cristy <mikayla-grace@urban-warrior.org>
Date: Sun, 21 Mar 2021 21:21:15 -0400
Subject: [PATCH] https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32322

---
 coders/dcm.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/coders/dcm.c b/coders/dcm.c
index 29eed9618..7a68ed6e8 100644
--- a/coders/dcm.c
+++ b/coders/dcm.c
@@ -2984,12 +2984,12 @@ static MagickBooleanType ReadDCMPixels(Image *image,DCMInfo *info,
         }
       else
         {
-          SetPixelRed(q,(Quantum) (((ssize_t) pixel.red) |
-            (((ssize_t) GetPixelRed(q)) << 8)));
-          SetPixelGreen(q,(Quantum) (((ssize_t) pixel.green) |
-            (((ssize_t) GetPixelGreen(q)) << 8)));
-          SetPixelBlue(q,(Quantum) (((ssize_t) pixel.blue) |
-            (((ssize_t) GetPixelBlue(q)) << 8)));
+          SetPixelRed(q,(Quantum) (((size_t) pixel.red) |
+            (((size_t) GetPixelRed(q)) << 8)));
+          SetPixelGreen(q,(Quantum) (((size_t) pixel.green) |
+            (((size_t) GetPixelGreen(q)) << 8)));
+          SetPixelBlue(q,(Quantum) (((size_t) pixel.blue) |
+            (((size_t) GetPixelBlue(q)) << 8)));
         }
       q++;
     }
--
2.31.0


code:
From 6a5d3575487487f2703383338bd17c8c25068f19 Mon Sep 17 00:00:00 2001
From: Cristy <mikayla-grace@urban-warrior.org>
Date: Thu, 25 Mar 2021 08:58:18 -0400
Subject: [PATCH] eliminate compiler warning

---
 coders/thumbnail.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/coders/thumbnail.c b/coders/thumbnail.c
index 3833341b0..1e2bfe8c2 100644
--- a/coders/thumbnail.c
+++ b/coders/thumbnail.c
@@ -199,7 +199,7 @@ static MagickBooleanType WriteTHUMBNAILImage(const ImageInfo *image_info,
     q++;
   }
   if ((q > (GetStringInfoDatum(profile)+GetStringInfoLength(profile))) ||
-      (length > (GetStringInfoDatum(profile)+GetStringInfoLength(profile)-q)))
+      ((ssize_t) length > (GetStringInfoDatum(profile)+GetStringInfoLength(profile)-q)))
     ThrowWriterException(CoderError,"ImageDoesNotHaveAThumbnail");
   thumbnail_image=BlobToImage(image_info,q,length,&image->exception);
   if (thumbnail_image == (Image *) NULL)
--
2.31.0