--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp +++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp @@ -112,7 +112,6 @@ # include # include # include -# include # include # include # include @@ -632,6 +631,13 @@ // detecting pthread library void os::Linux::libpthread_init() { +#if 1 + // Hard code Alpine Linux supported uclibc/musl compatible settings + os::Linux::set_glibc_version("glibc 2.9"); + os::Linux::set_libpthread_version("NPTL"); + os::Linux::set_is_NPTL(); + os::Linux::set_is_floating_stack(); +#else // Save glibc and pthread version strings. Note that _CS_GNU_LIBC_VERSION // and _CS_GNU_LIBPTHREAD_VERSION are supported in glibc >= 2.3.2. Use a // generic name for earlier versions. @@ -690,6 +696,7 @@ if (os::Linux::is_NPTL() || os::Linux::supports_variable_stack_size()) { os::Linux::set_is_floating_stack(); } +#endif } ///////////////////////////////////////////////////////////////////////////// @@ -2951,11 +2958,7 @@ // 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) { - void *f = dlvsym(handle, name, "libnuma_1.1"); - if (f == NULL) { - f = dlsym(handle, name); - } - return f; + return dlsym(handle, name); } bool os::Linux::libnuma_init() { @@ -5312,7 +5315,25 @@ // Linux doesn't yet have a (official) notion of processor sets, // so just return the system wide load average. int os::loadavg(double loadavg[], int nelem) { +#ifdef __UCLIBC__ + FILE *LOADAVG; + double avg[3] = { 0.0, 0.0, 0.0 }; + int i, res = -1;; + + if ((LOADAVG = fopen("/proc/loadavg", "r"))) { + fscanf(LOADAVG, "%lf %lf %lf", &avg[0], &avg[1], &avg[2]); + res = 0; + fclose(LOADAVG); + } + + for (i = 0; (i < nelem) && (i < 3); i++) { + loadavg[i] = avg[i]; + } + + return res; +#else return ::getloadavg(loadavg, nelem); +#endif } void os::pause() { --- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp +++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp @@ -253,7 +253,7 @@ #elif defined(__APPLE__) inline int g_isnan(double f) { return isnan(f); } #elif defined(LINUX) || defined(_ALLBSD_SOURCE) -inline int g_isnan(float f) { return isnanf(f); } +inline int g_isnan(float f) { return isnan(f); } inline int g_isnan(double f) { return isnan(f); } #else #error "missing platform-specific definition here" @@ -267,8 +267,8 @@ // Checking for finiteness -inline int g_isfinite(jfloat f) { return finite(f); } -inline int g_isfinite(jdouble f) { return finite(f); } +inline int g_isfinite(jfloat f) { return isfinite(f); } +inline int g_isfinite(jdouble f) { return isfinite(f); } // Wide characters