diff -Nur openjdk.orig/common/autoconf/platform.m4 openjdk/common/autoconf/platform.m4
--- openjdk.orig/common/autoconf/platform.m4	2015-12-23 01:50:32.000000000 +0100
+++ openjdk/common/autoconf/platform.m4	2016-01-08 17:54:55.814451099 +0100
@@ -36,25 +36,85 @@
       VAR_CPU_BITS=64
       VAR_CPU_ENDIAN=little
       ;;
-    i?86)
+    x86|i?86)
       VAR_CPU=x86
       VAR_CPU_ARCH=x86
       VAR_CPU_BITS=32
       VAR_CPU_ENDIAN=little
       ;;
+    alpha*)
+      VAR_CPU=alpha
+      VAR_CPU_ARCH=alpha
+      VAR_CPU_BITS=64
+      VAR_CPU_ENDIAN=little
+      ;;
+    arm*eb)
+      VAR_CPU=armeb
+      VAR_CPU_ARCH=arm
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=big
+      ;;
     arm*)
       VAR_CPU=arm
       VAR_CPU_ARCH=arm
       VAR_CPU_BITS=32
       VAR_CPU_ENDIAN=little
       ;;
+    aarch64eb)
+      VAR_CPU=aarch64eb
+      VAR_CPU_ARCH=aarch64
+      VAR_CPU_BITS=64
+      VAR_CPU_ENDIAN=big
+      ;;
     aarch64)
       VAR_CPU=aarch64
       VAR_CPU_ARCH=aarch64
       VAR_CPU_BITS=64
       VAR_CPU_ENDIAN=little
       ;;
-    powerpc)
+    m68k)
+      VAR_CPU=m68k
+      VAR_CPU_ARCH=m68k
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=big
+      ;;
+    mips)
+      VAR_CPU=mips
+      VAR_CPU_ARCH=mips
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=big
+      ;;
+    mipsel)
+      VAR_CPU=mipsel
+      VAR_CPU_ARCH=mipsel
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=little
+      ;;
+    mipsn32)
+      VAR_CPU=mipsn32
+      VAR_CPU_ARCH=mipsn32
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=big
+      ;;
+    mipsn32el)
+      VAR_CPU=mipsn32el
+      VAR_CPU_ARCH=mipsn32el
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=little
+      ;;
+    mips64)
+      VAR_CPU=mips64
+      VAR_CPU_ARCH=mips64
+      VAR_CPU_BITS=64
+      VAR_CPU_ENDIAN=big
+      ;;
+    mips64el)
+      VAR_CPU=mips64el
+      VAR_CPU_ARCH=mips64el
+      VAR_CPU_BITS=64
+      VAR_CPU_ENDIAN=little
+      ;;
+    powerpc|ppc)
       VAR_CPU=ppc
       VAR_CPU_ARCH=ppc
       VAR_CPU_BITS=32
@@ -66,12 +126,18 @@
       VAR_CPU_BITS=64
       VAR_CPU_ENDIAN=big
       ;;
-    powerpc64le)
+    powerpc64le|ppc64le)
       VAR_CPU=ppc64
       VAR_CPU_ARCH=ppc
       VAR_CPU_BITS=64
       VAR_CPU_ENDIAN=little
       ;;
+    sh*)
+      VAR_CPU=sh
+      VAR_CPU_ARCH=sh
+      VAR_CPU_BITS=32
+      VAR_CPU_ENDIAN=little
+      ;;
     s390)
       VAR_CPU=s390
       VAR_CPU_ARCH=s390
@@ -371,6 +437,11 @@
 
   # ZERO_ARCHDEF is used to enable architecture-specific code
   case "${OPENJDK_TARGET_CPU}" in
+    alpha*)  ZERO_ARCHDEF=ALPHA ;;
+    m68k)  ZERO_ARCHDEF=M68K ;;
+    mips|mipsn32|mips64)  ZERO_ARCHDEF=MIPS ;;
+    mipsel|mipsn32el|mips64el)  ZERO_ARCHDEF=MIPSEL ;;
+    sh*)   ZERO_ARCHDEF=sh  ;;
     ppc)     ZERO_ARCHDEF=PPC32 ;;
     ppc64)   ZERO_ARCHDEF=PPC64 ;;
     s390*)   ZERO_ARCHDEF=S390  ;;
diff -Nur openjdk.orig/hotspot/src/cpu/zero/vm/entry_zero.hpp openjdk/hotspot/src/cpu/zero/vm/entry_zero.hpp
--- openjdk.orig/hotspot/src/cpu/zero/vm/entry_zero.hpp	2015-12-23 01:50:46.000000000 +0100
+++ openjdk/hotspot/src/cpu/zero/vm/entry_zero.hpp	2016-01-06 11:43:50.108091228 +0100
@@ -26,6 +26,8 @@
 #ifndef CPU_ZERO_VM_ENTRY_ZERO_HPP
 #define CPU_ZERO_VM_ENTRY_ZERO_HPP
 
+#include "interpreter/cppInterpreter.hpp"
+
 class ZeroEntry {
  public:
   ZeroEntry() {
diff -Nur openjdk.orig/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp openjdk/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp
--- openjdk.orig/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp	2015-12-23 01:50:46.000000000 +0100
+++ openjdk/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp	2016-01-06 11:43:50.108091228 +0100
@@ -25,6 +25,7 @@
 
 #include "precompiled.hpp"
 #include "assembler_zero.inline.hpp"
+#include "entry_zero.hpp"
 #include "memory/resourceArea.hpp"
 #include "nativeInst_zero.hpp"
 #include "oops/oop.inline.hpp"
diff -Nur openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp	2015-12-23 01:50:46.000000000 +0100
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp	2016-01-06 11:43:50.112090962 +0100
@@ -94,7 +94,9 @@
 # include <string.h>
 # include <syscall.h>
 # include <sys/sysinfo.h>
+# ifndef __UCLIBC__
 # include <gnu/libc-version.h>
+# endif
 # include <sys/ipc.h>
 # include <sys/shm.h>
 # include <link.h>
@@ -533,6 +535,7 @@
 # define _CS_GNU_LIBPTHREAD_VERSION 3
 # endif
 
+# ifndef __UCLIBC__
   size_t n = confstr(_CS_GNU_LIBC_VERSION, NULL, 0);
   if (n > 0) {
      char *str = (char *)malloc(n, mtInternal);
@@ -545,6 +548,10 @@
               "glibc %s %s", gnu_get_libc_version(), gnu_get_libc_release());
      os::Linux::set_glibc_version(_gnu_libc_version);
   }
+# else
+  size_t n = 1;
+  os::Linux::set_glibc_version("2");
+# endif
 
   n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0);
   if (n > 0) {
@@ -2789,10 +2796,14 @@
 // If we are running with earlier version, which did not have symbol versions,
 // we should use the base version.
 void* os::Linux::libnuma_dlsym(void* handle, const char *name) {
+#ifndef __UCLIBC__
   void *f = dlvsym(handle, name, "libnuma_1.1");
   if (f == NULL) {
     f = dlsym(handle, name);
   }
+#else
+  void *f = dlsym(handle, name);
+#endif
   return f;
 }
 
@@ -4805,7 +4816,7 @@
 
   Linux::capture_initial_stack(JavaThread::stack_size_at_create());
 
-#if defined(IA32)
+#if defined(IA32) && !defined(ZERO)
   workaround_expand_exec_shield_cs_limit();
 #endif
 
@@ -5437,6 +5448,43 @@
 // System loadavg support.  Returns -1 if load average cannot be obtained.
 // Linux doesn't yet have a (official) notion of processor sets,
 // so just return the system wide load average.
+#ifdef __UCLIBC__
+static int getloadavg (double loadavg[], int nelem)
+{
+  int fd;
+
+  fd = open ("/proc/loadavg", O_RDONLY);
+  if (fd < 0)
+    return -1;
+  else
+    {
+      char buf[65], *p;
+      ssize_t nread;
+      int i;
+
+      nread = read (fd, buf, sizeof buf - 1);
+      close (fd);
+      if (nread <= 0)
+	return -1;
+      buf[nread - 1] = '\0';
+
+      if (nelem > 3)
+	nelem = 3;
+      p = buf;
+      for (i = 0; i < nelem; ++i)
+	{
+	  char *endp;
+	  loadavg[i] = strtod (p, &endp);
+	  if (endp == p)
+	    return -1;
+	  p = endp;
+	}
+
+      return i;
+    }
+}
+#endif
+
 int os::loadavg(double loadavg[], int nelem) {
   return ::getloadavg(loadavg, nelem);
 }
diff -Nur openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
--- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp	2015-12-23 01:50:46.000000000 +0100
+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp	2016-01-06 11:43:50.220083765 +0100
@@ -223,6 +223,10 @@
 #define BREAKPOINT ::breakpoint()
 #endif
 
+#ifdef __UCLIBC__
+#define isnanf __isnanf
+#endif
+
 // checking for nanness
 #ifdef SOLARIS
 #ifdef SPARC
@@ -249,8 +253,13 @@
 
 // Checking for finiteness
 
+#ifdef __UCLIBC__
+inline int g_isfinite(jfloat  f)                 { return isfinite(f); }
+inline int g_isfinite(jdouble f)                 { return isfinite(f); }
+#else
 inline int g_isfinite(jfloat  f)                 { return finite(f); }
 inline int g_isfinite(jdouble f)                 { return finite(f); }
+#endif
 
 
 // Wide characters
diff -Nur openjdk.orig/jdk/src/solaris/native/sun/xawt/XToolkit.c openjdk/jdk/src/solaris/native/sun/xawt/XToolkit.c
--- openjdk.orig/jdk/src/solaris/native/sun/xawt/XToolkit.c	2015-12-23 01:50:56.000000000 +0100
+++ openjdk/jdk/src/solaris/native/sun/xawt/XToolkit.c	2016-01-06 12:56:51.970983142 +0100
@@ -27,7 +27,7 @@
 #include <X11/Xutil.h>
 #include <X11/Xos.h>
 #include <X11/Xatom.h>
-#ifdef __linux__
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
 #include <execinfo.h>
 #endif
 
@@ -799,7 +799,7 @@
     return ret;
 }
 
-#ifdef __linux__
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
 void print_stack(void)
 {
   void *array[10];