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 # include # include +# ifndef __UCLIBC__ # include +# endif # include # include # include @@ -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 #include #include -#ifdef __linux__ +#if defined(__GLIBC__) && !defined(__UCLIBC__) #include #endif @@ -799,7 +799,7 @@ return ret; } -#ifdef __linux__ +#if defined(__GLIBC__) && !defined(__UCLIBC__) void print_stack(void) { void *array[10];