From c2f1576ba4e20186827fb007f3600c6f78fc69fb Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 17 May 2019 16:24:31 +0200 Subject: [PATCH] jdk: Update port to Freebsd 12 * fix NULL = nullptr in C++ semantic (arm, x86_64) * arm: disable soft float (full hard float support) * dummies some mmap flags issue genodelabs/genode#3289 --- lib/mk/spec/arm/jvm.mk | 2 +- ports/jdk.hash | 2 +- ports/jdk.port | 2 +- src/app/jdk/lib/jvm/dummies.cpp | 8 ++++ src/app/jdk/lib/jvm/os_genode.cpp | 6 +-- src/app/jdk/patches/nullptr.patch | 64 +++++++++++++++++++++++++++++++ 6 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 src/app/jdk/patches/nullptr.patch diff --git a/lib/mk/spec/arm/jvm.mk b/lib/mk/spec/arm/jvm.mk index a64c75b..8705800 100644 --- a/lib/mk/spec/arm/jvm.mk +++ b/lib/mk/spec/arm/jvm.mk @@ -1,5 +1,5 @@ CC_OPT = -DINCLUDE_SUFFIX_CPU=_arm -DHOTSPOT_LIB_ARCH='"arm"' -DARM -DARM32 \ - -Dlseek64=lseek -D__SOFTFP__ + -Dlseek64=lseek INC_DIR = $(call select_from_ports,jdk)/src/app/jdk/hotspot/src/cpu/arm/vm JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk diff --git a/ports/jdk.hash b/ports/jdk.hash index f16909c..4be640e 100644 --- a/ports/jdk.hash +++ b/ports/jdk.hash @@ -1 +1 @@ -1319e74653e97dbabed7ac973345ec6e243cc11b +32a27784725af3c4ed42e3c03bea2b106b578c3d diff --git a/ports/jdk.port b/ports/jdk.port index 717b4eb..c4e20fa 100644 --- a/ports/jdk.port +++ b/ports/jdk.port @@ -11,7 +11,7 @@ HASH_INPUT += $(REP_DIR)/src/app/jdk/files.list PATCHES := $(addprefix src/app/jdk/patches/,jdk.patch arm.patch \ icache.patch size.patch id.patch lir.patch mutex.patch \ - verified_entry.patch vfp.patch) + verified_entry.patch vfp.patch nullptr.patch) # This patch has to be applied to JDK when building the standard Java library # pollselectorprovider.patch diff --git a/src/app/jdk/lib/jvm/dummies.cpp b/src/app/jdk/lib/jvm/dummies.cpp index 0f3536a..910a394 100644 --- a/src/app/jdk/lib/jvm/dummies.cpp +++ b/src/app/jdk/lib/jvm/dummies.cpp @@ -2,6 +2,7 @@ extern "C" { #include +#include #include #include #include @@ -25,6 +26,13 @@ extern "C" void collector_func_load(char* name, { } +int dirfd(DIR *dirp) +{ + WARN_NOT_IMPL; + return -1; +} + + int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result) { diff --git a/src/app/jdk/lib/jvm/os_genode.cpp b/src/app/jdk/lib/jvm/os_genode.cpp index 33376b4..88c5307 100644 --- a/src/app/jdk/lib/jvm/os_genode.cpp +++ b/src/app/jdk/lib/jvm/os_genode.cpp @@ -2126,7 +2126,7 @@ void bsd_wrap_code(char* base, size_t size) { if (::write(fd, "", 1) == 1) { mmap(base, size, PROT_READ|PROT_WRITE|PROT_EXEC, - MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE, fd, 0); + MAP_PRIVATE|MAP_FIXED, fd, 0); } } ::close(fd); @@ -2199,7 +2199,7 @@ static char* anon_mmap(char* requested_addr, size_t bytes, bool fixed) { char * addr; int flags; - flags = MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS; + flags = MAP_PRIVATE | MAP_ANONYMOUS; if (fixed) { assert((uintptr_t)requested_addr % os::Bsd::page_size() == 0, "unaligned address"); flags |= MAP_FIXED; @@ -4599,7 +4599,7 @@ bool os::pd_uncommit_memory(char* addr, size_t size) { return ::mprotect(addr, size, PROT_NONE) == 0; #else uintptr_t res = (uintptr_t) ::mmap(addr, size, PROT_NONE, - MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE|MAP_ANONYMOUS, -1, 0); + MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); return res != (uintptr_t) MAP_FAILED; #endif } diff --git a/src/app/jdk/patches/nullptr.patch b/src/app/jdk/patches/nullptr.patch new file mode 100644 index 0000000..840cba3 --- /dev/null +++ b/src/app/jdk/patches/nullptr.patch @@ -0,0 +1,64 @@ +commit f961bd5de9ce37e4f7389d08e585389e719e4cdb +Author: Sebastian Sumpf +Date: Fri May 17 16:18:27 2019 +0200 + + jdk: remove NULL where it is not meant to be a pointer + +diff --git a/hotspot/src/cpu/arm/vm/interpreterRT_arm.cpp b/hotspot/src/cpu/arm/vm/interpreterRT_arm.cpp +index 4925f63..88a6066 100644 +--- a/hotspot/src/cpu/arm/vm/interpreterRT_arm.cpp ++++ b/hotspot/src/cpu/arm/vm/interpreterRT_arm.cpp +@@ -365,9 +365,9 @@ class SlowSignatureHandler: public NativeSignatureIterator { + virtual void pass_object() { + intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0)); + if(_last_gp < GPR_PARAMS) { +- _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? NULL : from_addr; ++ _toGP[_last_gp++] = (*(intptr_t*)from_addr == 0) ? 0 : from_addr; + } else { +- *_to++ = (*(intptr_t*)from_addr == 0) ? NULL : from_addr; ++ *_to++ = (*(intptr_t*)from_addr == 0) ? 0 : from_addr; + } + _from -= Interpreter::stackElementSize; + } +diff --git a/hotspot/src/cpu/arm/vm/sharedRuntime_arm.cpp b/hotspot/src/cpu/arm/vm/sharedRuntime_arm.cpp +index 48f0964..b9fcfbb 100644 +--- a/hotspot/src/cpu/arm/vm/sharedRuntime_arm.cpp ++++ b/hotspot/src/cpu/arm/vm/sharedRuntime_arm.cpp +@@ -1467,6 +1467,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, + #endif // __SOFTFP__ + + #ifdef __ABI_HARD__ ++ + case T_FLOAT: { + VMReg src = in_regs[i].first(); + VMReg dst = out_regs[i + extra_args].first(); +diff --git a/hotspot/src/cpu/x86/vm/interpreterRT_x86_64.cpp b/hotspot/src/cpu/x86/vm/interpreterRT_x86_64.cpp +index 40cc9d7..4ea7dce 100644 +--- a/hotspot/src/cpu/x86/vm/interpreterRT_x86_64.cpp ++++ b/hotspot/src/cpu/x86/vm/interpreterRT_x86_64.cpp +@@ -426,10 +426,10 @@ class SlowSignatureHandler + _from -= Interpreter::stackElementSize; + + if (_num_int_args < Argument::n_int_register_parameters_c-1) { +- *_int_args++ = (*from_addr == 0) ? NULL : (intptr_t)from_addr; ++ *_int_args++ = (*from_addr == 0) ? 0 : (intptr_t)from_addr; + _num_int_args++; + } else { +- *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr; ++ *_to++ = (*from_addr == 0) ? 0 : (intptr_t) from_addr; + } + } + +diff --git a/hotspot/src/os/bsd/vm/osThread_bsd.cpp b/hotspot/src/os/bsd/vm/osThread_bsd.cpp +index de1383b..1dc113f 100644 +--- a/hotspot/src/os/bsd/vm/osThread_bsd.cpp ++++ b/hotspot/src/os/bsd/vm/osThread_bsd.cpp +@@ -30,7 +30,7 @@ + + void OSThread::pd_initialize() { + assert(this != NULL, "check"); +-#ifdef __APPLE__ ++#if defined (__APPLE__) || defined (__GENODE__) + _thread_id = 0; + #else + _thread_id = NULL;