From 58fb5ed722dc9f1909dc9da35e08ebb788f4ba62 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 12 Jul 2017 14:16:55 +0200 Subject: [PATCH] jdk: OpenJDK for Genode OpenJDK version 9 for Genode, contains the interpreter version of the HotSpot virtual machine. fixes #2791 --- repos/ports/lib/import/import-jli.mk | 7 + repos/ports/lib/mk/java.inc | 47 + repos/ports/lib/mk/jdk_version.inc | 4 + repos/ports/lib/mk/jimage.mk | 23 + repos/ports/lib/mk/jli.mk | 26 + repos/ports/lib/mk/jnet.mk | 32 + repos/ports/lib/mk/jvm.inc | 610 +++++++++ repos/ports/lib/mk/jzip.mk | 16 + repos/ports/lib/mk/nio.mk | 42 + repos/ports/lib/mk/spec/arm/java.mk | 3 + repos/ports/lib/mk/spec/arm/jvm.mk | 4 + repos/ports/lib/mk/spec/x86_64/java.mk | 3 + repos/ports/lib/mk/spec/x86_64/jvm.mk | 4 + repos/ports/ports/jdk.hash | 1 + repos/ports/ports/jdk.port | 22 + repos/ports/ports/jdk_generated.hash | 1 + repos/ports/ports/jdk_generated.port | 9 + repos/ports/run/java.run | 106 ++ repos/ports/src/app/jdk/java/target.mk | 8 + repos/ports/src/app/jdk/lib/include/errno.h | 11 + .../ports/src/app/jdk/lib/include/os_bsd.hpp | 8 + .../ports/src/app/jdk/lib/include/ucontext.h | 1 + .../ports/src/app/jdk/lib/java/math_genode.c | 18 + repos/ports/src/app/jdk/lib/java/target.mk | 1 + repos/ports/src/app/jdk/lib/jvm/dummies.cpp | 97 ++ repos/ports/src/app/jdk/lib/jvm/target.mk | 1 + repos/ports/src/app/jdk/patches/arm.patch | 36 + repos/ports/src/app/jdk/patches/jdk.patch | 101 ++ repos/ports/src/app/jdk/patches/os_bsd.patch | 1147 +++++++++++++++++ .../src/app/jdk/patches/os_bsd_zero.patch | 13 + .../jdk/patches/pollselectorprovider.patch | 28 + repos/ports/src/app/jdk/patches/size.patch | 85 ++ 32 files changed, 2515 insertions(+) create mode 100644 repos/ports/lib/import/import-jli.mk create mode 100644 repos/ports/lib/mk/java.inc create mode 100644 repos/ports/lib/mk/jdk_version.inc create mode 100644 repos/ports/lib/mk/jimage.mk create mode 100644 repos/ports/lib/mk/jli.mk create mode 100644 repos/ports/lib/mk/jnet.mk create mode 100644 repos/ports/lib/mk/jvm.inc create mode 100644 repos/ports/lib/mk/jzip.mk create mode 100644 repos/ports/lib/mk/nio.mk create mode 100644 repos/ports/lib/mk/spec/arm/java.mk create mode 100644 repos/ports/lib/mk/spec/arm/jvm.mk create mode 100644 repos/ports/lib/mk/spec/x86_64/java.mk create mode 100644 repos/ports/lib/mk/spec/x86_64/jvm.mk create mode 100644 repos/ports/ports/jdk.hash create mode 100644 repos/ports/ports/jdk.port create mode 100644 repos/ports/ports/jdk_generated.hash create mode 100644 repos/ports/ports/jdk_generated.port create mode 100644 repos/ports/run/java.run create mode 100644 repos/ports/src/app/jdk/java/target.mk create mode 100644 repos/ports/src/app/jdk/lib/include/errno.h create mode 100644 repos/ports/src/app/jdk/lib/include/os_bsd.hpp create mode 100644 repos/ports/src/app/jdk/lib/include/ucontext.h create mode 100644 repos/ports/src/app/jdk/lib/java/math_genode.c create mode 100644 repos/ports/src/app/jdk/lib/java/target.mk create mode 100644 repos/ports/src/app/jdk/lib/jvm/dummies.cpp create mode 100644 repos/ports/src/app/jdk/lib/jvm/target.mk create mode 100644 repos/ports/src/app/jdk/patches/arm.patch create mode 100644 repos/ports/src/app/jdk/patches/jdk.patch create mode 100644 repos/ports/src/app/jdk/patches/os_bsd.patch create mode 100644 repos/ports/src/app/jdk/patches/os_bsd_zero.patch create mode 100644 repos/ports/src/app/jdk/patches/pollselectorprovider.patch create mode 100644 repos/ports/src/app/jdk/patches/size.patch diff --git a/repos/ports/lib/import/import-jli.mk b/repos/ports/lib/import/import-jli.mk new file mode 100644 index 0000000000..4b75e1614c --- /dev/null +++ b/repos/ports/lib/import/import-jli.mk @@ -0,0 +1,7 @@ +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +INC_DIR += $(JDK_BASE)/share/native/libjli \ + $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjli + + diff --git a/repos/ports/lib/mk/java.inc b/repos/ports/lib/mk/java.inc new file mode 100644 index 0000000000..cfd5f97743 --- /dev/null +++ b/repos/ports/lib/mk/java.inc @@ -0,0 +1,47 @@ +LIBS = libc +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk +JAVA_BASE = $(JDK_BASE)/share/native/libjava +VERIFY_BASE = $(JDK_BASE)/share/native/libverify + +CC_OLEVEL = -O0 + +SRC_C = $(notdir $(wildcard $(JAVA_BASE)/*.c)) +SRC_C += unix/native/libjava/canonicalize_md.c \ + unix/native/libjava/FileDescriptor_md.c \ + unix/native/libjava/FileInputStream_md.c \ + unix/native/libjava/FileOutputStream_md.c \ + unix/native/libjava/io_util_md.c \ + unix/native/libjava/java_props_md.c \ + unix/native/libjava/jdk_util_md.c \ + unix/native/libjava/jni_util_md.c \ + unix/native/libjava/ProcessEnvironment_md.c \ + unix/native/libjava/RandomAccessFile_md.c \ + unix/native/libjava/TimeZone_md.c \ + unix/native/libjava/UnixFileSystem_md.c + +SRC_C += check_format.c check_code.c +SRC_C += math_genode.c + + +include $(REP_DIR)/lib/mk/jdk_version.inc + +CC_C_OPT = $(JDK_VERSION) +CC_C_OPT += -D_ALLBSD_SOURCE -D__GENODE__ +CC_OPT_unix/native/libjava/TimeZone_md = -D__linux__ + +INC_DIR += $(REP_DIR)/src/app/jdk/lib/include \ + $(JDK_GENERATED)/include/java.base \ + $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libfdlibm \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava + +vpath %.c $(JAVA_BASE) +vpath %.c $(VERIFY_BASE) +vpath %.c $(JDK_BASE) +vpath %.c $(REP_DIR)/src/app/jdk/lib/java + +# vi: set ft=make : diff --git a/repos/ports/lib/mk/jdk_version.inc b/repos/ports/lib/mk/jdk_version.inc new file mode 100644 index 0000000000..c06493819c --- /dev/null +++ b/repos/ports/lib/mk/jdk_version.inc @@ -0,0 +1,4 @@ +JDK_VERSION = -DVERSION_SPECIFICATION='"9"' -DVERSION_SHORT='"9-internal"' \ + -DVERSION_MAJOR=9 -DVERSION_MINOR=0 -DVERSION_SECURITY=0 \ + -DVERSION_BUILD=0 -DVERSION_PATCH=0 \ + -DVERSION_STRING='"9-genode.openjdk"' diff --git a/repos/ports/lib/mk/jimage.mk b/repos/ports/lib/mk/jimage.mk new file mode 100644 index 0000000000..9cb88b7bb0 --- /dev/null +++ b/repos/ports/lib/mk/jimage.mk @@ -0,0 +1,23 @@ +LIBS = libc +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +CC_CXX_WARN_STRICT = + +SRC_CC = endian.cpp \ + imageDecompressor.cpp \ + imageFile.cpp \ + jimage.cpp \ + NativeImageBuffer.cpp \ + osSupport_unix.cpp + +INC_DIR += $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/share/native/libjimage \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava \ + $(JDK_GENERATED)/include/java.base + +vpath %.cpp $(JDK_BASE)/share/native/libjimage +vpath %.cpp $(JDK_BASE)/unix/native/libjimage diff --git a/repos/ports/lib/mk/jli.mk b/repos/ports/lib/mk/jli.mk new file mode 100644 index 0000000000..5035ac4f7e --- /dev/null +++ b/repos/ports/lib/mk/jli.mk @@ -0,0 +1,26 @@ +LIBS = libc zlib +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base + +CC_OLEVEL = -O0 + +SRC_C = args.c \ + java.c \ + java_md_common.c \ + java_md_solinux.c \ + jli_util.c \ + parse_manifest.c \ + splashscreen_stubs.c \ + wildcard.c + + +INC_DIR += $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjli \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjli + +CC_C_OPT = -D__linux__ -D__GENODE__ -Dlseek64=lseek + +vpath %.c $(JDK_BASE)/share/native/libjli +vpath %.c $(JDK_BASE)/unix/native/libjli + diff --git a/repos/ports/lib/mk/jnet.mk b/repos/ports/lib/mk/jnet.mk new file mode 100644 index 0000000000..2e5039ea94 --- /dev/null +++ b/repos/ports/lib/mk/jnet.mk @@ -0,0 +1,32 @@ +LIBS = libc +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +SRC_C = bsd_close.c \ + net_util.c \ + net_util_md.c \ + InetAddress.c \ + Inet4Address.c \ + Inet4AddressImpl.c \ + Inet6Address.c \ + InetAddressImplFactory.c \ + PlainSocketImpl.c + +INC_DIR += $(JDK_GENERATED)/include/java.base \ + $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/share/native/libnet \ + $(JDK_BASE)/share/native/libnio \ + $(JDK_BASE)/share/native/libnio/ch \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava \ + $(JDK_BASE)/unix/native/libnet \ + $(JDK_BASE)/unix/native/libnio + +CC_C_OPT = -D_ALLBSD_SOURCE -include netinet/in.h +CC_OPT_net_util_md += -include sys/socket.h + +vpath %.c $(JDK_BASE)/unix/native/libnet +vpath %.c $(JDK_BASE)/share/native/libnet +vpath %.c $(JDK_BASE)/macosx/native/libnet diff --git a/repos/ports/lib/mk/jvm.inc b/repos/ports/lib/mk/jvm.inc new file mode 100644 index 0000000000..72b09fc7c7 --- /dev/null +++ b/repos/ports/lib/mk/jvm.inc @@ -0,0 +1,610 @@ +#/build/jdk/openjdk-jdk9-jdk9/build/linux-x86_64-normal-zero-release/hotspot/variant-zero/gensrc/jvmtifiles/bytecodeInterpreterWithChecks.cpp +# /build/jdk/openjdk-jdk9-jdk9/build/linux-x86_64-normal-zero-release/hotspot/variant-zero/gensrc/jvmtifiles/jvmtiEnter.cpp +# /build/jdk/openjdk-jdk9-jdk9/build/linux-x86_64-normal-zero-release/hotspot/variant-zero/gensrc/jvmtifiles/jvmtiEnterTrace.cpp + +LIBS = stdcxx pthread jzip jimage nio jnet ffi +SHARED_LIB = yes +HOTSPOT_BASE = $(call select_from_ports,jdk)/src/app/jdk/hotspot/src +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +CC_CXX_WARN_STRICT = + +include $(REP_DIR)/lib/mk/jdk_version.inc + +CC_OPT += -fpermissive -Wno-comment -Wno-reorder -Wno-switch -Wno-unused-variable \ + -Wno-delete-non-virtual-dtor -Wno-unused-function -Wno-format \ + -Wno-unused-local-typedefs -Wno-unused-but-set-variable \ + -Wno-parentheses + +CC_OPT += -D__GENODE__ + +CC_OPT += -DINCLUDE_SUFFIX_OS=_bsd -DTARGET_COMPILER_gcc -D_ALLBSD_SOURCE -DUSE_LIBRARY_BASED_TLS_ONLY \ + -DVM_LITTLE_ENDIAN -DINCLUDE_SUFFIX_CPU=_zero -DZERO -DCC_INTERP -DTARGET_ARCH_zero \ + -DINCLUDE_JVMCI=0 -DRELEASE -DPRODUCT + + +INC_DIR += $(JDK_GENERATED)/include \ + $(REP_DIR)/src/app/jdk/lib/include \ + $(HOTSPOT_BASE)/os \ + $(HOTSPOT_BASE)/os/bsd/vm \ + $(HOTSPOT_BASE)/os/posix/vm \ + $(HOTSPOT_BASE)/os_cpu/bsd_zero/vm \ + $(HOTSPOT_BASE)/cpu/zero/vm \ + $(HOTSPOT_BASE)/share/vm \ + $(HOTSPOT_BASE)/share/vm/precompiled \ + $(HOTSPOT_BASE)/share/vm/prims + +# +# Genode specific +# +SRC_CC += dummies.cpp + + +# +# Generated +# +SRC_CC += jvmtiEnter.cpp jvmtiEnterTrace.cpp + + +# +# Hotspot +# +SRC_CC += cpu/zero/vm/abstractInterpreter_zero.cpp \ + cpu/zero/vm/assembler_zero.cpp \ + cpu/zero/vm/bytecodeInterpreter_zero.cpp \ + cpu/zero/vm/compiledIC_zero.cpp \ + cpu/zero/vm/cppInterpreterGenerator_zero.cpp \ + cpu/zero/vm/cppInterpreter_zero.cpp \ + cpu/zero/vm/debug_zero.cpp \ + cpu/zero/vm/depChecker_zero.cpp \ + cpu/zero/vm/disassembler_zero.cpp \ + cpu/zero/vm/frame_zero.cpp \ + cpu/zero/vm/icache_zero.cpp \ + cpu/zero/vm/icBuffer_zero.cpp \ + cpu/zero/vm/interpreterRT_zero.cpp \ + cpu/zero/vm/jniFastGetField_zero.cpp \ + cpu/zero/vm/metaspaceShared_zero.cpp \ + cpu/zero/vm/methodHandles_zero.cpp \ + cpu/zero/vm/nativeInst_zero.cpp \ + cpu/zero/vm/register_zero.cpp \ + cpu/zero/vm/relocInfo_zero.cpp \ + cpu/zero/vm/sharedRuntime_zero.cpp \ + cpu/zero/vm/stack_zero.cpp \ + cpu/zero/vm/stubGenerator_zero.cpp \ + cpu/zero/vm/stubRoutines_zero.cpp \ + cpu/zero/vm/vmreg_zero.cpp \ + cpu/zero/vm/vm_version_zero.cpp \ + cpu/zero/vm/vtableStubs_zero.cpp \ + os_cpu/bsd_zero/vm/assembler_bsd_zero.cpp \ + os_cpu/bsd_zero/vm/os_bsd_zero.cpp \ + os_cpu/bsd_zero/vm/thread_bsd_zero.cpp \ + os_cpu/bsd_zero/vm/vm_version_bsd_zero.cpp \ + os/bsd/vm/attachListener_bsd.cpp \ + os/bsd/vm/decoder_machO.cpp \ + os/bsd/vm/jvm_bsd.cpp \ + os/bsd/vm/os_bsd.cpp \ + os/bsd/vm/osThread_bsd.cpp \ + os/bsd/vm/perfMemory_bsd.cpp \ + os/bsd/vm/stubRoutines_bsd.cpp \ + os/bsd/vm/threadCritical_bsd.cpp \ + os/linux/vm/decoder_linux.cpp \ + os/posix/vm/os_posix.cpp \ + os/posix/vm/threadLocalStorage_posix.cpp \ + os/posix/vm/vmError_posix.cpp \ + share/vm/asm/assembler.cpp \ + share/vm/asm/codeBuffer.cpp \ + share/vm/asm/register.cpp \ + share/vm/ci/ciArray.cpp \ + share/vm/ci/ciArrayKlass.cpp \ + share/vm/ci/ciBaseObject.cpp \ + share/vm/ci/ciCallSite.cpp \ + share/vm/ci/ciConstant.cpp \ + share/vm/ci/ciConstantPoolCache.cpp \ + share/vm/ci/ciEnv.cpp \ + share/vm/ci/ciExceptionHandler.cpp \ + share/vm/ci/ciField.cpp \ + share/vm/ci/ciFlags.cpp \ + share/vm/ci/ciInstance.cpp \ + share/vm/ci/ciInstanceKlass.cpp \ + share/vm/ci/ciKlass.cpp \ + share/vm/ci/ciMemberName.cpp \ + share/vm/ci/ciMetadata.cpp \ + share/vm/ci/ciMethodBlocks.cpp \ + share/vm/ci/ciMethod.cpp \ + share/vm/ci/ciMethodData.cpp \ + share/vm/ci/ciMethodHandle.cpp \ + share/vm/ci/ciNullObject.cpp \ + share/vm/ci/ciObjArray.cpp \ + share/vm/ci/ciObjArrayKlass.cpp \ + share/vm/ci/ciObject.cpp \ + share/vm/ci/ciObjectFactory.cpp \ + share/vm/ci/ciReplay.cpp \ + share/vm/ci/ciSignature.cpp \ + share/vm/ci/ciStreams.cpp \ + share/vm/ci/ciSymbol.cpp \ + share/vm/ci/ciTypeArray.cpp \ + share/vm/ci/ciTypeArrayKlass.cpp \ + share/vm/ci/ciType.cpp \ + share/vm/ci/ciUtilities.cpp \ + share/vm/classfile/altHashing.cpp \ + share/vm/classfile/bytecodeAssembler.cpp \ + share/vm/classfile/classFileError.cpp \ + share/vm/classfile/classFileParser.cpp \ + share/vm/classfile/classFileStream.cpp \ + share/vm/classfile/classListParser.cpp \ + share/vm/classfile/classLoader.cpp \ + share/vm/classfile/classLoaderData.cpp \ + share/vm/classfile/classLoaderExt.cpp \ + share/vm/classfile/classLoaderStats.cpp \ + share/vm/classfile/compactHashtable.cpp \ + share/vm/classfile/defaultMethods.cpp \ + share/vm/classfile/dictionary.cpp \ + share/vm/classfile/javaAssertions.cpp \ + share/vm/classfile/javaClasses.cpp \ + share/vm/classfile/klassFactory.cpp \ + share/vm/classfile/loaderConstraints.cpp \ + share/vm/classfile/metadataOnStackMark.cpp \ + share/vm/classfile/moduleEntry.cpp \ + share/vm/classfile/modules.cpp \ + share/vm/classfile/packageEntry.cpp \ + share/vm/classfile/placeholders.cpp \ + share/vm/classfile/resolutionErrors.cpp \ + share/vm/classfile/sharedPathsMiscInfo.cpp \ + share/vm/classfile/stackMapFrame.cpp \ + share/vm/classfile/stackMapTable.cpp \ + share/vm/classfile/stringTable.cpp \ + share/vm/classfile/symbolTable.cpp \ + share/vm/classfile/systemDictionary.cpp \ + share/vm/classfile/verificationType.cpp \ + share/vm/classfile/verifier.cpp \ + share/vm/classfile/vmSymbols.cpp \ + share/vm/code/codeBlob.cpp \ + share/vm/code/codeCache.cpp \ + share/vm/code/compiledIC.cpp \ + share/vm/code/compiledMethod.cpp \ + share/vm/code/compressedStream.cpp \ + share/vm/code/debugInfo.cpp \ + share/vm/code/debugInfoRec.cpp \ + share/vm/code/dependencies.cpp \ + share/vm/code/dependencyContext.cpp \ + share/vm/code/exceptionHandlerTable.cpp \ + share/vm/code/icBuffer.cpp \ + share/vm/code/location.cpp \ + share/vm/code/nmethod.cpp \ + share/vm/code/oopRecorder.cpp \ + share/vm/code/pcDesc.cpp \ + share/vm/code/relocInfo.cpp \ + share/vm/code/relocInfo_ext.cpp \ + share/vm/code/scopeDesc.cpp \ + share/vm/code/stubs.cpp \ + share/vm/code/vmreg.cpp \ + share/vm/code/vtableStubs.cpp \ + share/vm/compiler/abstractCompiler.cpp \ + share/vm/compiler/compileBroker.cpp \ + share/vm/compiler/compileLog.cpp \ + share/vm/compiler/compilerDefinitions.cpp \ + share/vm/compiler/compilerDirectives.cpp \ + share/vm/compiler/compilerOracle.cpp \ + share/vm/compiler/compileTask.cpp \ + share/vm/compiler/directivesParser.cpp \ + share/vm/compiler/disassembler.cpp \ + share/vm/compiler/methodLiveness.cpp \ + share/vm/compiler/methodMatcher.cpp \ + share/vm/compiler/oopMap.cpp \ + share/vm/gc/cms/adaptiveFreeList.cpp \ + share/vm/gc/cms/allocationStats.cpp \ + share/vm/gc/cms/cmsCollectorPolicy.cpp \ + share/vm/gc/cms/cmsLockVerifier.cpp \ + share/vm/gc/cms/cmsOopClosures.cpp \ + share/vm/gc/cms/compactibleFreeListSpace.cpp \ + share/vm/gc/cms/concurrentMarkSweepGeneration.cpp \ + share/vm/gc/cms/concurrentMarkSweepThread.cpp \ + share/vm/gc/cms/freeChunk.cpp \ + share/vm/gc/cms/gSpaceCounters.cpp \ + share/vm/gc/cms/parCardTableModRefBS.cpp \ + share/vm/gc/cms/parNewGeneration.cpp \ + share/vm/gc/cms/parOopClosures.cpp \ + share/vm/gc/cms/promotionInfo.cpp \ + share/vm/gc/cms/vmCMSOperations.cpp \ + share/vm/gc/cms/yieldingWorkgroup.cpp \ + share/vm/gc/g1/collectionSetChooser.cpp \ + share/vm/gc/g1/concurrentG1Refine.cpp \ + share/vm/gc/g1/concurrentG1RefineThread.cpp \ + share/vm/gc/g1/concurrentMarkThread.cpp \ + share/vm/gc/g1/dirtyCardQueue.cpp \ + share/vm/gc/g1/g1Allocator.cpp \ + share/vm/gc/g1/g1Allocator_ext.cpp \ + share/vm/gc/g1/g1AllocRegion.cpp \ + share/vm/gc/g1/g1Analytics.cpp \ + share/vm/gc/g1/g1BiasedArray.cpp \ + share/vm/gc/g1/g1BlockOffsetTable.cpp \ + share/vm/gc/g1/g1CardCounts.cpp \ + share/vm/gc/g1/g1CardLiveData.cpp \ + share/vm/gc/g1/g1CodeBlobClosure.cpp \ + share/vm/gc/g1/g1CodeCacheRemSet.cpp \ + share/vm/gc/g1/g1CollectedHeap.cpp \ + share/vm/gc/g1/g1CollectedHeap_ext.cpp \ + share/vm/gc/g1/g1CollectionSet.cpp \ + share/vm/gc/g1/g1CollectorPolicy.cpp \ + share/vm/gc/g1/g1ConcurrentMark.cpp \ + share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.cpp \ + share/vm/gc/g1/g1DefaultPolicy.cpp \ + share/vm/gc/g1/g1EvacFailure.cpp \ + share/vm/gc/g1/g1EvacStats.cpp \ + share/vm/gc/g1/g1FromCardCache.cpp \ + share/vm/gc/g1/g1GCPhaseTimes.cpp \ + share/vm/gc/g1/g1_globals.cpp \ + share/vm/gc/g1/g1HeapSizingPolicy.cpp \ + share/vm/gc/g1/g1HeapSizingPolicy_ext.cpp \ + share/vm/gc/g1/g1HeapTransition.cpp \ + share/vm/gc/g1/g1HeapVerifier.cpp \ + share/vm/gc/g1/g1HotCardCache.cpp \ + share/vm/gc/g1/g1IHOPControl.cpp \ + share/vm/gc/g1/g1MarkSweep.cpp \ + share/vm/gc/g1/g1MarkSweep_ext.cpp \ + share/vm/gc/g1/g1MMUTracker.cpp \ + share/vm/gc/g1/g1MonitoringSupport.cpp \ + share/vm/gc/g1/g1OopClosures.cpp \ + share/vm/gc/g1/g1PageBasedVirtualSpace.cpp \ + share/vm/gc/g1/g1ParScanThreadState.cpp \ + share/vm/gc/g1/g1ParScanThreadState_ext.cpp \ + share/vm/gc/g1/g1RegionToSpaceMapper.cpp \ + share/vm/gc/g1/g1RemSet.cpp \ + share/vm/gc/g1/g1RemSetSummary.cpp \ + share/vm/gc/g1/g1RootClosures.cpp \ + share/vm/gc/g1/g1RootClosures_ext.cpp \ + share/vm/gc/g1/g1RootProcessor.cpp \ + share/vm/gc/g1/g1SATBCardTableModRefBS.cpp \ + share/vm/gc/g1/g1StringDedup.cpp \ + share/vm/gc/g1/g1StringDedupQueue.cpp \ + share/vm/gc/g1/g1StringDedupStat.cpp \ + share/vm/gc/g1/g1StringDedupTable.cpp \ + share/vm/gc/g1/g1StringDedupThread.cpp \ + share/vm/gc/g1/g1SurvivorRegions.cpp \ + share/vm/gc/g1/g1YoungGenSizer.cpp \ + share/vm/gc/g1/g1YoungRemSetSamplingThread.cpp \ + share/vm/gc/g1/heapRegion.cpp \ + share/vm/gc/g1/heapRegionManager.cpp \ + share/vm/gc/g1/heapRegionRemSet.cpp \ + share/vm/gc/g1/heapRegionSet.cpp \ + share/vm/gc/g1/heapRegionTracer.cpp \ + share/vm/gc/g1/heapRegionType.cpp \ + share/vm/gc/g1/hSpaceCounters.cpp \ + share/vm/gc/g1/ptrQueue.cpp \ + share/vm/gc/g1/satbMarkQueue.cpp \ + share/vm/gc/g1/sparsePRT.cpp \ + share/vm/gc/g1/survRateGroup.cpp \ + share/vm/gc/g1/suspendibleThreadSet.cpp \ + share/vm/gc/g1/vm_operations_g1.cpp \ + share/vm/gc/g1/workerDataArray.cpp \ + share/vm/gc/parallel/adjoiningGenerations.cpp \ + share/vm/gc/parallel/adjoiningVirtualSpaces.cpp \ + share/vm/gc/parallel/asPSOldGen.cpp \ + share/vm/gc/parallel/asPSYoungGen.cpp \ + share/vm/gc/parallel/cardTableExtension.cpp \ + share/vm/gc/parallel/gcAdaptivePolicyCounters.cpp \ + share/vm/gc/parallel/gcTaskManager.cpp \ + share/vm/gc/parallel/gcTaskThread.cpp \ + share/vm/gc/parallel/generationSizer.cpp \ + share/vm/gc/parallel/immutableSpace.cpp \ + share/vm/gc/parallel/mutableNUMASpace.cpp \ + share/vm/gc/parallel/mutableSpace.cpp \ + share/vm/gc/parallel/objectStartArray.cpp \ + share/vm/gc/parallel/parallelScavengeHeap.cpp \ + share/vm/gc/parallel/parMarkBitMap.cpp \ + share/vm/gc/parallel/pcTasks.cpp \ + share/vm/gc/parallel/psAdaptiveSizePolicy.cpp \ + share/vm/gc/parallel/psCompactionManager.cpp \ + share/vm/gc/parallel/psGCAdaptivePolicyCounters.cpp \ + share/vm/gc/parallel/psGenerationCounters.cpp \ + share/vm/gc/parallel/psMarkSweep.cpp \ + share/vm/gc/parallel/psMarkSweepDecorator.cpp \ + share/vm/gc/parallel/psOldGen.cpp \ + share/vm/gc/parallel/psParallelCompact.cpp \ + share/vm/gc/parallel/psPromotionLAB.cpp \ + share/vm/gc/parallel/psPromotionManager.cpp \ + share/vm/gc/parallel/psScavenge.cpp \ + share/vm/gc/parallel/psTasks.cpp \ + share/vm/gc/parallel/psVirtualspace.cpp \ + share/vm/gc/parallel/psYoungGen.cpp \ + share/vm/gc/parallel/spaceCounters.cpp \ + share/vm/gc/parallel/vmPSOperations.cpp \ + share/vm/gc/serial/cSpaceCounters.cpp \ + share/vm/gc/serial/defNewGeneration.cpp \ + share/vm/gc/serial/genMarkSweep.cpp \ + share/vm/gc/serial/markSweep.cpp \ + share/vm/gc/serial/tenuredGeneration.cpp \ + share/vm/gc/shared/adaptiveSizePolicy.cpp \ + share/vm/gc/shared/ageTable.cpp \ + share/vm/gc/shared/ageTableTracer.cpp \ + share/vm/gc/shared/allocTracer.cpp \ + share/vm/gc/shared/barrierSet.cpp \ + share/vm/gc/shared/blockOffsetTable.cpp \ + share/vm/gc/shared/cardGeneration.cpp \ + share/vm/gc/shared/cardTableModRefBS.cpp \ + share/vm/gc/shared/cardTableModRefBSForCTRS.cpp \ + share/vm/gc/shared/cardTableRS.cpp \ + share/vm/gc/shared/collectedHeap.cpp \ + share/vm/gc/shared/collectorCounters.cpp \ + share/vm/gc/shared/collectorPolicy.cpp \ + share/vm/gc/shared/concurrentGCThread.cpp \ + share/vm/gc/shared/gcCause.cpp \ + share/vm/gc/shared/gcId.cpp \ + share/vm/gc/shared/gcLocker.cpp \ + share/vm/gc/shared/gcPolicyCounters.cpp \ + share/vm/gc/shared/gcStats.cpp \ + share/vm/gc/shared/gcTimer.cpp \ + share/vm/gc/shared/gcTrace.cpp \ + share/vm/gc/shared/gcTraceSend.cpp \ + share/vm/gc/shared/gcTraceTime.cpp \ + share/vm/gc/shared/gcUtil.cpp \ + share/vm/gc/shared/genCollectedHeap.cpp \ + share/vm/gc/shared/generationCounters.cpp \ + share/vm/gc/shared/generation.cpp \ + share/vm/gc/shared/generationSpec.cpp \ + share/vm/gc/shared/genOopClosures.cpp \ + share/vm/gc/shared/objectCountEventSender.cpp \ + share/vm/gc/shared/plab.cpp \ + share/vm/gc/shared/preservedMarks.cpp \ + share/vm/gc/shared/referencePolicy.cpp \ + share/vm/gc/shared/referenceProcessor.cpp \ + share/vm/gc/shared/space.cpp \ + share/vm/gc/shared/spaceDecorator.cpp \ + share/vm/gc/shared/strongRootsScope.cpp \ + share/vm/gc/shared/taskqueue.cpp \ + share/vm/gc/shared/threadLocalAllocBuffer.cpp \ + share/vm/gc/shared/vmGCOperations.cpp \ + share/vm/gc/shared/workgroup.cpp \ + share/vm/interpreter/abstractInterpreter.cpp \ + share/vm/interpreter/bytecode.cpp \ + share/vm/interpreter/bytecodeHistogram.cpp \ + share/vm/interpreter/bytecodeInterpreter.cpp \ + share/vm/interpreter/bytecodeInterpreterWithChecks.cpp \ + share/vm/interpreter/bytecodes.cpp \ + share/vm/interpreter/bytecodeStream.cpp \ + share/vm/interpreter/bytecodeTracer.cpp \ + share/vm/interpreter/cppInterpreter.cpp \ + share/vm/interpreter/cppInterpreterGenerator.cpp \ + share/vm/interpreter/interpreter.cpp \ + share/vm/interpreter/interpreterRuntime.cpp \ + share/vm/interpreter/invocationCounter.cpp \ + share/vm/interpreter/linkResolver.cpp \ + share/vm/interpreter/oopMapCache.cpp \ + share/vm/interpreter/rewriter.cpp \ + share/vm/interpreter/templateInterpreter.cpp \ + share/vm/interpreter/templateInterpreterGenerator.cpp \ + share/vm/interpreter/templateTable.cpp \ + share/vm/logging/logConfiguration.cpp \ + share/vm/logging/logDecorations.cpp \ + share/vm/logging/logDecorators.cpp \ + share/vm/logging/logDiagnosticCommand.cpp \ + share/vm/logging/logFileOutput.cpp \ + share/vm/logging/logFileStreamOutput.cpp \ + share/vm/logging/logLevel.cpp \ + share/vm/logging/logMessageBuffer.cpp \ + share/vm/logging/logOutput.cpp \ + share/vm/logging/logOutputList.cpp \ + share/vm/logging/logStream.cpp \ + share/vm/logging/logTag.cpp \ + share/vm/logging/logTagLevelExpression.cpp \ + share/vm/logging/logTagSet.cpp \ + share/vm/logging/logTagSetDescriptions.cpp \ + share/vm/memory/allocation.cpp \ + share/vm/memory/binaryTreeDictionary.cpp \ + share/vm/memory/filemap.cpp \ + share/vm/memory/freeBlockDictionary.cpp \ + share/vm/memory/freeList.cpp \ + share/vm/memory/guardedMemory.cpp \ + share/vm/memory/heap.cpp \ + share/vm/memory/heapInspection.cpp \ + share/vm/memory/iterator.cpp \ + share/vm/memory/memRegion.cpp \ + share/vm/memory/metachunk.cpp \ + share/vm/memory/metaspaceCounters.cpp \ + share/vm/memory/metaspace.cpp \ + share/vm/memory/metaspaceShared.cpp \ + share/vm/memory/metaspaceTracer.cpp \ + share/vm/memory/oopFactory.cpp \ + share/vm/memory/resourceArea.cpp \ + share/vm/memory/universe.cpp \ + share/vm/memory/universe_ext.cpp \ + share/vm/memory/virtualspace.cpp \ + share/vm/oops/annotations.cpp \ + share/vm/oops/arrayKlass.cpp \ + share/vm/oops/compiledICHolder.cpp \ + share/vm/oops/constantPool.cpp \ + share/vm/oops/constMethod.cpp \ + share/vm/oops/cpCache.cpp \ + share/vm/oops/generateOopMap.cpp \ + share/vm/oops/instanceKlass.cpp \ + share/vm/oops/instanceMirrorKlass.cpp \ + share/vm/oops/instanceOop.cpp \ + share/vm/oops/instanceRefKlass.cpp \ + share/vm/oops/klass.cpp \ + share/vm/oops/klassVtable.cpp \ + share/vm/oops/markOop.cpp \ + share/vm/oops/metadata.cpp \ + share/vm/oops/methodCounters.cpp \ + share/vm/oops/method.cpp \ + share/vm/oops/methodData.cpp \ + share/vm/oops/objArrayKlass.cpp \ + share/vm/oops/objArrayOop.cpp \ + share/vm/oops/oop.cpp \ + share/vm/oops/oopsHierarchy.cpp \ + share/vm/oops/symbol.cpp \ + share/vm/oops/typeArrayKlass.cpp \ + share/vm/prims/evmCompat.cpp \ + share/vm/prims/forte.cpp \ + share/vm/prims/jniCheck.cpp \ + share/vm/prims/jni.cpp \ + share/vm/prims/jniFastGetField.cpp \ + share/vm/prims/jvm.cpp \ + share/vm/prims/jvmtiClassFileReconstituter.cpp \ + share/vm/prims/jvmtiCodeBlobEvents.cpp \ + share/vm/prims/jvmtiEnvBase.cpp \ + share/vm/prims/jvmtiEnv.cpp \ + share/vm/prims/jvmtiEnvThreadState.cpp \ + share/vm/prims/jvmtiEventController.cpp \ + share/vm/prims/jvmtiExport.cpp \ + share/vm/prims/jvmtiExtensions.cpp \ + share/vm/prims/jvmtiGetLoadedClasses.cpp \ + share/vm/prims/jvmtiImpl.cpp \ + share/vm/prims/jvmtiManageCapabilities.cpp \ + share/vm/prims/jvmtiRawMonitor.cpp \ + share/vm/prims/jvmtiRedefineClasses.cpp \ + share/vm/prims/jvmtiTagMap.cpp \ + share/vm/prims/jvmtiThreadState.cpp \ + share/vm/prims/jvmtiTrace.cpp \ + share/vm/prims/jvmtiUtil.cpp \ + share/vm/prims/methodComparator.cpp \ + share/vm/prims/methodHandles.cpp \ + share/vm/prims/nativeLookup.cpp \ + share/vm/prims/perf.cpp \ + share/vm/prims/privilegedStack.cpp \ + share/vm/prims/stackwalk.cpp \ + share/vm/prims/unsafe.cpp \ + share/vm/prims/wbtestmethods/parserTests.cpp \ + share/vm/prims/whitebox.cpp \ + share/vm/prims/whitebox_ext.cpp \ + share/vm/runtime/advancedThresholdPolicy.cpp \ + share/vm/runtime/arguments.cpp \ + share/vm/runtime/arguments_ext.cpp \ + share/vm/runtime/basicLock.cpp \ + share/vm/runtime/biasedLocking.cpp \ + share/vm/runtime/commandLineFlagConstraintList.cpp \ + share/vm/runtime/commandLineFlagConstraintsCompiler.cpp \ + share/vm/runtime/commandLineFlagConstraintsGC.cpp \ + share/vm/runtime/commandLineFlagConstraintsRuntime.cpp \ + share/vm/runtime/commandLineFlagRangeList.cpp \ + share/vm/runtime/commandLineFlagWriteableList.cpp \ + share/vm/runtime/compilationPolicy.cpp \ + share/vm/runtime/deoptimization.cpp \ + share/vm/runtime/fieldDescriptor.cpp \ + share/vm/runtime/fieldType.cpp \ + share/vm/runtime/fprofiler.cpp \ + share/vm/runtime/frame.cpp \ + share/vm/runtime/globals.cpp \ + share/vm/runtime/handles.cpp \ + share/vm/runtime/icache.cpp \ + share/vm/runtime/init.cpp \ + share/vm/runtime/interfaceSupport.cpp \ + share/vm/runtime/javaCalls.cpp \ + share/vm/runtime/java.cpp \ + share/vm/runtime/jniHandles.cpp \ + share/vm/runtime/jniPeriodicChecker.cpp \ + share/vm/runtime/memprofiler.cpp \ + share/vm/runtime/monitorChunk.cpp \ + share/vm/runtime/mutex.cpp \ + share/vm/runtime/mutexLocker.cpp \ + share/vm/runtime/objectMonitor.cpp \ + share/vm/runtime/orderAccess.cpp \ + share/vm/runtime/os.cpp \ + share/vm/runtime/osThread.cpp \ + share/vm/runtime/park.cpp \ + share/vm/runtime/perfData.cpp \ + share/vm/runtime/perfMemory.cpp \ + share/vm/runtime/reflection.cpp \ + share/vm/runtime/reflectionUtils.cpp \ + share/vm/runtime/relocator.cpp \ + share/vm/runtime/rframe.cpp \ + share/vm/runtime/rtmLocking.cpp \ + share/vm/runtime/safepoint.cpp \ + share/vm/runtime/serviceThread.cpp \ + share/vm/runtime/sharedRuntime.cpp \ + share/vm/runtime/sharedRuntimeTrans.cpp \ + share/vm/runtime/sharedRuntimeTrig.cpp \ + share/vm/runtime/signature.cpp \ + share/vm/runtime/simpleThresholdPolicy.cpp \ + share/vm/runtime/stackValueCollection.cpp \ + share/vm/runtime/stackValue.cpp \ + share/vm/runtime/statSampler.cpp \ + share/vm/runtime/stubCodeGenerator.cpp \ + share/vm/runtime/stubRoutines.cpp \ + share/vm/runtime/sweeper.cpp \ + share/vm/runtime/synchronizer.cpp \ + share/vm/runtime/task.cpp \ + share/vm/runtime/thread.cpp \ + share/vm/runtime/thread_ext.cpp \ + share/vm/runtime/timer.cpp \ + share/vm/runtime/timerTrace.cpp \ + share/vm/runtime/unhandledOops.cpp \ + share/vm/runtime/vframeArray.cpp \ + share/vm/runtime/vframe.cpp \ + share/vm/runtime/vframe_hp.cpp \ + share/vm/runtime/vm_operations.cpp \ + share/vm/runtime/vmStructs.cpp \ + share/vm/runtime/vmThread.cpp \ + share/vm/runtime/vm_version.cpp \ + share/vm/services/attachListener.cpp \ + share/vm/services/classLoadingService.cpp \ + share/vm/services/diagnosticArgument.cpp \ + share/vm/services/diagnosticCommand.cpp \ + share/vm/services/diagnosticFramework.cpp \ + share/vm/services/dtraceAttacher.cpp \ + share/vm/services/g1MemoryPool.cpp \ + share/vm/services/gcNotifier.cpp \ + share/vm/services/heapDumper.cpp \ + share/vm/services/lowMemoryDetector.cpp \ + share/vm/services/mallocSiteTable.cpp \ + share/vm/services/mallocTracker.cpp \ + share/vm/services/management.cpp \ + share/vm/services/memBaseline.cpp \ + share/vm/services/memoryManager.cpp \ + share/vm/services/memoryPool.cpp \ + share/vm/services/memoryService.cpp \ + share/vm/services/memReporter.cpp \ + share/vm/services/memTracker.cpp \ + share/vm/services/nmtCommon.cpp \ + share/vm/services/nmtDCmd.cpp \ + share/vm/services/psMemoryPool.cpp \ + share/vm/services/runtimeService.cpp \ + share/vm/services/threadService.cpp \ + share/vm/services/virtualMemoryTracker.cpp \ + share/vm/services/writeableFlags.cpp \ + share/vm/trace/traceBackend.cpp \ + share/vm/trace/traceStream.cpp \ + share/vm/utilities/accessFlags.cpp \ + share/vm/utilities/bitMap.cpp \ + share/vm/utilities/constantTag.cpp \ + share/vm/utilities/copy.cpp \ + share/vm/utilities/debug.cpp \ + share/vm/utilities/decoder.cpp \ + share/vm/utilities/decoder_elf.cpp \ + share/vm/utilities/elfFile.cpp \ + share/vm/utilities/elfFuncDescTable.cpp \ + share/vm/utilities/elfStringTable.cpp \ + share/vm/utilities/elfSymbolTable.cpp \ + share/vm/utilities/errorReporter.cpp \ + share/vm/utilities/events.cpp \ + share/vm/utilities/exceptions.cpp \ + share/vm/utilities/globalDefinitions.cpp \ + share/vm/utilities/growableArray.cpp \ + share/vm/utilities/hashtable.cpp \ + share/vm/utilities/histogram.cpp \ + share/vm/utilities/internalVMTests.cpp \ + share/vm/utilities/intHisto.cpp \ + share/vm/utilities/json.cpp \ + share/vm/utilities/nativeCallStack.cpp \ + share/vm/utilities/numberSeq.cpp \ + share/vm/utilities/ostream.cpp \ + share/vm/utilities/preserveException.cpp \ + share/vm/utilities/sizes.cpp \ + share/vm/utilities/stringUtils.cpp \ + share/vm/utilities/ticks.cpp \ + share/vm/utilities/utf8.cpp \ + share/vm/utilities/vmError.cpp \ + share/vm/utilities/xmlstream.cpp + +CC_OPT_share/vm/runtime/vm_version += $(JDK_VERSION) \ + -DHOTSPOT_VERSION_STRING='"9-internal+0-adhoc.genode.openjdk-jdk9-jdk9"'\ + -DDEBUG_LEVEL='"release"' -DHOTSPOT_VM_DISTRO='"OpenJDK"' \ + -DHOTSPOT_BUILD_USER='"genode"' + +CC_OPT_share/vm/interpreter/bytecodeInterpreterWithChecks += -DVM_JVMTI + +vpath dummies.cpp $(REP_DIR)/src/app/jdk/lib/jvm +vpath jvmtiEnter.cpp $(JDK_GENERATED)/src +vpath jvmtiEnterTrace.cpp $(JDK_GENERATED)/src +vpath %.cpp $(HOTSPOT_BASE) + +# vi: set ft=make : diff --git a/repos/ports/lib/mk/jzip.mk b/repos/ports/lib/mk/jzip.mk new file mode 100644 index 0000000000..6de6ad73d1 --- /dev/null +++ b/repos/ports/lib/mk/jzip.mk @@ -0,0 +1,16 @@ +LIBS = libc zlib +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +SRC_C = Adler32.c CRC32.c Deflater.c Inflater.c zip_util.c + +INC_DIR += $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava \ + $(JDK_GENERATED)/include/java.base + +CC_C_OPT = -D_ALLBSD_SOURCE + +vpath %.c $(JDK_BASE)/share/native/libzip diff --git a/repos/ports/lib/mk/nio.mk b/repos/ports/lib/mk/nio.mk new file mode 100644 index 0000000000..6ed2e26152 --- /dev/null +++ b/repos/ports/lib/mk/nio.mk @@ -0,0 +1,42 @@ +LIBS = libc +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +SRC_C = fs/UnixNativeDispatcher.c \ + fs/UnixCopyFile.c \ + MappedByteBuffer.c \ + ch/UnixAsynchronousServerSocketChannelImpl.c \ + ch/FileKey.c \ + ch/UnixAsynchronousSocketChannelImpl.c \ + ch/SocketDispatcher.c \ + ch/NativeThread.c \ + ch/DatagramChannelImpl.c \ + ch/FileChannelImpl.c \ + ch/PollArrayWrapper.c \ + ch/InheritedChannel.c \ + ch/Net.c \ + ch/FileDispatcherImpl.c \ + ch/IOUtil.c \ + ch/DatagramDispatcher.c \ + ch/ServerSocketChannelImpl.c \ + ch/SocketChannelImpl.c + + +INC_DIR += $(JDK_GENERATED)/include/java.base \ + $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/share/native/libnet \ + $(JDK_BASE)/share/native/libnio \ + $(JDK_BASE)/share/native/libnio/ch \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava \ + $(JDK_BASE)/unix/native/libnet \ + $(JDK_BASE)/unix/native/libnio + +CC_C_OPT = -D_ALLBSD_SOURCE -include netinet/in.h + +CC_OPT_ch/Net += -DIPV6_ADD_MEMBERSHIP=IPV6_JOIN_GROUP -DIPV6_DROP_MEMBERSHIP=IPV6_LEAVE_GROUP +CC_OPT_net_util_md += -include sys/socket.h + +vpath %.c $(JDK_BASE)/unix/native/libnio diff --git a/repos/ports/lib/mk/spec/arm/java.mk b/repos/ports/lib/mk/spec/arm/java.mk new file mode 100644 index 0000000000..ad243f0bad --- /dev/null +++ b/repos/ports/lib/mk/spec/arm/java.mk @@ -0,0 +1,3 @@ +CC_OPT = -DARCHPROPNAME='"arm"' + +include $(REP_DIR)/lib/mk/java.inc diff --git a/repos/ports/lib/mk/spec/arm/jvm.mk b/repos/ports/lib/mk/spec/arm/jvm.mk new file mode 100644 index 0000000000..271e117ba0 --- /dev/null +++ b/repos/ports/lib/mk/spec/arm/jvm.mk @@ -0,0 +1,4 @@ +CC_OPT = -DHOTSPOT_LIB_ARCH='"arm"' -DARM -DARM32 \ + -DZERO_LIBARCH='"arm"' + +include $(REP_DIR)/lib/mk/jvm.inc diff --git a/repos/ports/lib/mk/spec/x86_64/java.mk b/repos/ports/lib/mk/spec/x86_64/java.mk new file mode 100644 index 0000000000..6a307554b6 --- /dev/null +++ b/repos/ports/lib/mk/spec/x86_64/java.mk @@ -0,0 +1,3 @@ +CC_OPT = -DARCHPROPNAME='"amd64"' + +include $(REP_DIR)/lib/mk/java.inc diff --git a/repos/ports/lib/mk/spec/x86_64/jvm.mk b/repos/ports/lib/mk/spec/x86_64/jvm.mk new file mode 100644 index 0000000000..72c51b3c7d --- /dev/null +++ b/repos/ports/lib/mk/spec/x86_64/jvm.mk @@ -0,0 +1,4 @@ +CC_OPT = -DAMD64 -DHOTSPOT_LIB_ARCH='"amd64"' \ + -DZERO_LIBARCH='"amd64"' + +include $(REP_DIR)/lib/mk/jvm.inc diff --git a/repos/ports/ports/jdk.hash b/repos/ports/ports/jdk.hash new file mode 100644 index 0000000000..189525e2aa --- /dev/null +++ b/repos/ports/ports/jdk.hash @@ -0,0 +1 @@ +1cbaaddb5f951dd82dc7da847ac86e00ef1cd1dd diff --git a/repos/ports/ports/jdk.port b/repos/ports/ports/jdk.port new file mode 100644 index 0000000000..0740212925 --- /dev/null +++ b/repos/ports/ports/jdk.port @@ -0,0 +1,22 @@ +LICENSE := GPLv2 +VERSION := 64892f1c9874938dfcdc235b5c051dd761cdd833 +DOWNLOADS := jdk.archive + +NAME(jdk) := jdk.tgz +URL(jdk) := https://api.github.com/repos/dmlloyd/openjdk/tarball/$(VERSION) +SHA(jdk) := 46a6bfab37216a8726bb55ab11743536678810ae +DIR(jdk) := src/app/jdk + +PATCHES := $(addprefix src/app/jdk/patches/,jdk.patch arm.patch size.patch \ + pollselectorprovider.patch os_bsd.patch \ + os_bsd_zero.patch) +PATCH_OPT := -p1 -d src/app/jdk + +gen_file := src/app/jdk/hotspot/src/share/vm/interpreter/bytecodeInterpreterWithChecks.cpp + +default: $(gen_file) + +$(gen_file): _patch + $(VERBOSE)cp $(@D)/bytecodeInterpreter.cpp $(gen_file) + +# vi: set ft=make : diff --git a/repos/ports/ports/jdk_generated.hash b/repos/ports/ports/jdk_generated.hash new file mode 100644 index 0000000000..3acc0a03ef --- /dev/null +++ b/repos/ports/ports/jdk_generated.hash @@ -0,0 +1 @@ +a122728151284665ca99aa71cec49a81347fac76 diff --git a/repos/ports/ports/jdk_generated.port b/repos/ports/ports/jdk_generated.port new file mode 100644 index 0000000000..9f8a4254a6 --- /dev/null +++ b/repos/ports/ports/jdk_generated.port @@ -0,0 +1,9 @@ +LICENSE := GPLv2 +VERSION := git +DOWNLOADS := jdk_generated.git + +URL(jdk_generated) := https://github.com/ssumpf/jdk_generated.git +REV(jdk_generated) := cede347a20501628db7feb43e4beacefdb6761b2 +DIR(jdk_generated) := src/app/jdk + +# vi: set ft=make : diff --git a/repos/ports/run/java.run b/repos/ports/run/java.run new file mode 100644 index 0000000000..c39618f2a6 --- /dev/null +++ b/repos/ports/run/java.run @@ -0,0 +1,106 @@ +set build_components { + core init + drivers/timer + app/jdk/java +} + +build $build_components +create_boot_directory + +proc copy_test_data { } { + set ::env(MAKEFLAGS) s + set jdk_data [exec [genode_dir]/tool/ports/current jdk_generated]/src/app/jdk/bin + exec cp $jdk_data/classes.tar bin/. + exec cp $jdk_data/hello.tar bin/. + exec cp $jdk_data/tzdb.dat bin/. +} + +copy_test_data + +set config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2000-01-01 00:00 + + + + + + + -server KNOWN +-client IGNORE + + + + + + + + + + + + + + + + +} + +install_config $config + +set boot_modules { + core init ld.lib.so timer + java jli.lib.so + java.lib.so jvm.lib.so jzip.lib.so jimage.lib.so + libc.lib.so libm.lib.so libc_pipe.lib.so + zlib.lib.so nio.lib.so jnet.lib.so + posix.lib.so pthread.lib.so stdcxx.lib.so ffi.lib.so + vfs.lib.so + classes.tar hello.tar +} + + +build_boot_image $boot_modules + +append qemu_args " -nographic" + +run_genode_until {.*Hello, Genode.*} 180 + +exec rm bin/classes.tar bin/hello.tar bin/tzdb.dat diff --git a/repos/ports/src/app/jdk/java/target.mk b/repos/ports/src/app/jdk/java/target.mk new file mode 100644 index 0000000000..f7b7f82acf --- /dev/null +++ b/repos/ports/src/app/jdk/java/target.mk @@ -0,0 +1,8 @@ +TARGET = java +SRC_C = main.c +LIBS = jli java jvm libc posix libc_pipe + +CC_C_OPT = -DVERSION_STRING='"9-genode.openjdk"' -D__GENODE__ + +JDK_PATH = $(call select_from_ports,jdk)/src/app/jdk +vpath main.c $(JDK_PATH)/jdk/src/java.base/share/native/launcher diff --git a/repos/ports/src/app/jdk/lib/include/errno.h b/repos/ports/src/app/jdk/lib/include/errno.h new file mode 100644 index 0000000000..052a9211fa --- /dev/null +++ b/repos/ports/src/app/jdk/lib/include/errno.h @@ -0,0 +1,11 @@ +#ifndef _INCLUDE__ERRNO_H_ +#define _INCLUDE__ERRNO_H_ + +#include + +#define ENOSTR 60 +#define ENODATA 61 +#define ETIME 62 +#define ENOSR 63 + +#endif /* _INCLUDE__ERRNO_H_ */ diff --git a/repos/ports/src/app/jdk/lib/include/os_bsd.hpp b/repos/ports/src/app/jdk/lib/include/os_bsd.hpp new file mode 100644 index 0000000000..299ff5aec8 --- /dev/null +++ b/repos/ports/src/app/jdk/lib/include/os_bsd.hpp @@ -0,0 +1,8 @@ +#ifndef _INCLUDE__OS_BSD_HPP_ +#define _INCLUDE__OS_BSD_HPP_ + +#include + +static int cmpxchg(int oldval, int newval, volatile int *ptr); + +#endif /* _INCLUDE__OS_BSD_HPP_ */ diff --git a/repos/ports/src/app/jdk/lib/include/ucontext.h b/repos/ports/src/app/jdk/lib/include/ucontext.h new file mode 100644 index 0000000000..73c2166c84 --- /dev/null +++ b/repos/ports/src/app/jdk/lib/include/ucontext.h @@ -0,0 +1 @@ +#include diff --git a/repos/ports/src/app/jdk/lib/java/math_genode.c b/repos/ports/src/app/jdk/lib/java/math_genode.c new file mode 100644 index 0000000000..c0fb5a16d1 --- /dev/null +++ b/repos/ports/src/app/jdk/lib/java/math_genode.c @@ -0,0 +1,18 @@ +#include + +double jacos(double d) { return acos(d); } +double jasin(double d) { return asin(d); } +double jatan(double d) { return atan(d); } +double jatan2(double d1, double d2) { return atan2(d1, d2); } +double jcos(double d) { return cos(d); } +double jcosh(double d) { return cosh(d); } +double jexpm1(double d) { return expm1(d); } +double jlog(double d) { return log(d); } +double jlog10(double d) { return log10(d); } +double jlog1p(double d) { return log1p(d); } +double jremainder(double d1, double d2) { return remainder(d1, d2); } +double jsin(double d) { return sin(d); } +double jsinh(double d) { return sinh(d); } +double jsqrt(double d) { return sqrt(d); } +double jtan(double d) { return tan(d); } +double jtanh(double d) { return tanh(d); } diff --git a/repos/ports/src/app/jdk/lib/java/target.mk b/repos/ports/src/app/jdk/lib/java/target.mk new file mode 100644 index 0000000000..3a0ad90902 --- /dev/null +++ b/repos/ports/src/app/jdk/lib/java/target.mk @@ -0,0 +1 @@ +LIBS = java diff --git a/repos/ports/src/app/jdk/lib/jvm/dummies.cpp b/repos/ports/src/app/jdk/lib/jvm/dummies.cpp new file mode 100644 index 0000000000..a1fd475aff --- /dev/null +++ b/repos/ports/src/app/jdk/lib/jvm/dummies.cpp @@ -0,0 +1,97 @@ +#include +#include + +extern "C" { +#include +#include +#include +#include +#include +#include +} + +#if 0 +#define WARN_NOT_IMPL Genode::warning(__func__, " not implemented (jvm)"); +#else +#define WARN_NOT_IMPL +#endif + +extern "C" void collector_func_load(char* name, + void* null_argument_1, + void* null_argument_2, + void *vaddr, + int size, + int zero_argument, + void* null_argument_3) +{ } + + +int getpwuid_r(uid_t uid, struct passwd *pwd, + char *buf, size_t buflen, struct passwd **result) +{ + *result = nullptr; + return -1; +} + + +int getpwnam_r(const char *name, struct passwd *pwd, + char *buf, size_t buflen, struct passwd **result) +{ + WARN_NOT_IMPL; + return -1; +} + + +int mincore(const void *, size_t, char *) +{ + WARN_NOT_IMPL; + return -1; +} + + +int msync(void *addr, size_t length, int flags) +{ + WARN_NOT_IMPL; + return -1; +} + + +int lchown(const char *pathname, uid_t owner, gid_t group) +{ + WARN_NOT_IMPL; + return -1; +} + + +int futimes(int fd, const struct timeval tv[2]) +{ + WARN_NOT_IMPL; + return -1; +} + + +ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags) +{ + WARN_NOT_IMPL; + return -1; +} + + +int socketpair(int domain, int type, int protocol, int sv[2]) +{ + WARN_NOT_IMPL; + return 0; +} + +int sigaction(int signum, const struct sigaction *act, + struct sigaction *oldact) +{ + WARN_NOT_IMPL; + return 0; +} + + +extern "C" void backtrace() +{ + Genode::backtrace(); +} diff --git a/repos/ports/src/app/jdk/lib/jvm/target.mk b/repos/ports/src/app/jdk/lib/jvm/target.mk new file mode 100644 index 0000000000..af67ffa4d4 --- /dev/null +++ b/repos/ports/src/app/jdk/lib/jvm/target.mk @@ -0,0 +1 @@ +LIBS = jvm diff --git a/repos/ports/src/app/jdk/patches/arm.patch b/repos/ports/src/app/jdk/patches/arm.patch new file mode 100644 index 0000000000..322c0d6164 --- /dev/null +++ b/repos/ports/src/app/jdk/patches/arm.patch @@ -0,0 +1,36 @@ +diff --git a/hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.hpp b/hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.hpp +index e808340..560a8d3 100644 +--- a/hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.hpp ++++ b/hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.hpp +@@ -111,8 +111,12 @@ static inline int m68k_lock_test_and_set(volatile int *ptr, int newval) { + */ + + typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr); +-#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *) 0xffff0fc0) + ++#ifdef __GENODE__ ++#define __kernel_cmpxchg os::cmpxchg ++#else ++#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *) 0xffff0fc0) ++#endif + + + /* Perform an atomic compare and swap: if the current value of `*PTR' +diff --git a/hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp b/hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp +index fb3017c..f5c2d37 100644 +--- a/hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp ++++ b/hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp +@@ -37,7 +37,13 @@ + * helper for all gcc versions so it is unreliable to use as well. + */ + typedef void (__kernel_dmb_t) (void); ++ ++#ifdef __GENODE__ ++static inline void __kernel_dmb(void) { asm volatile ("dmb ish": : :"memory"); } ++#else + #define __kernel_dmb (*(__kernel_dmb_t *) 0xffff0fa0) ++#endif ++ + + #define FULL_MEM_BARRIER __kernel_dmb() + #define LIGHT_MEM_BARRIER __kernel_dmb() diff --git a/repos/ports/src/app/jdk/patches/jdk.patch b/repos/ports/src/app/jdk/patches/jdk.patch new file mode 100644 index 0000000000..0737da4143 --- /dev/null +++ b/repos/ports/src/app/jdk/patches/jdk.patch @@ -0,0 +1,101 @@ +commit 9521d3210cb2979888d3c9ed5a7c8e0e4dd548da +Author: Sebastian Sumpf +Date: Wed Sep 27 09:58:20 2017 +0200 + + hotspot: Genode patches + +diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +index 197079ba1..b1972ca31 100644 +--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp ++++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +@@ -426,7 +426,7 @@ class VM_Version_StubGenerator: public StubCodeGenerator { + __ xorl(rsi, rsi); + VM_Version::set_cpuinfo_segv_addr(__ pc()); + // Generate SEGV +- __ movl(rax, Address(rsi, 0)); ++ //__ movl(rax, Address(rsi, 0)); + + VM_Version::set_cpuinfo_cont_addr(__ pc()); + // Returns here after signal. Save xmm0 to check it later. +diff --git a/hotspot/src/os/bsd/vm/jvm_bsd.h b/hotspot/src/os/bsd/vm/jvm_bsd.h +index f099198d1..5fa636a7d 100644 +--- a/hotspot/src/os/bsd/vm/jvm_bsd.h ++++ b/hotspot/src/os/bsd/vm/jvm_bsd.h +@@ -68,7 +68,7 @@ + #define AGENT_ONUNLOAD_SYMBOLS {"Agent_OnUnload"} + #define AGENT_ONATTACH_SYMBOLS {"Agent_OnAttach"} + +-#define JNI_LIB_PREFIX "lib" ++#define JNI_LIB_PREFIX "" + #ifdef __APPLE__ + #define JNI_LIB_SUFFIX ".dylib" + #else +diff --git a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +index 3a405dec2..e5963f3fc 100644 +--- a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp ++++ b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +@@ -44,7 +44,7 @@ inline bool os::obsolete_option(const JavaVMOption *option) { + } + + inline bool os::uses_stack_guard_pages() { +- return true; ++ return false; + } + + inline bool os::must_commit_stack_guard_pages() { +diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp +index 5885906f6..e482a405a 100644 +--- a/hotspot/src/os/posix/vm/os_posix.cpp ++++ b/hotspot/src/os/posix/vm/os_posix.cpp +@@ -185,7 +185,7 @@ int os::log_vsnprintf(char* buf, size_t len, const char* fmt, va_list args) { + } + + int os::get_fileno(FILE* fp) { +- return NOT_AIX(::)fileno(fp); ++ return fileno(fp); + } + + struct tm* os::gmtime_pd(const time_t* clock, struct tm* res) { +diff --git a/jdk/src/java.base/unix/native/include/jvm_md.h b/jdk/src/java.base/unix/native/include/jvm_md.h +index 818ab732a..23692e9ac 100644 +--- a/jdk/src/java.base/unix/native/include/jvm_md.h ++++ b/jdk/src/java.base/unix/native/include/jvm_md.h +@@ -40,10 +40,18 @@ + #define JNI_ONLOAD_SYMBOLS {"JNI_OnLoad"} + #define JNI_ONUNLOAD_SYMBOLS {"JNI_OnUnload"} + ++#ifdef __GENODE__ ++#define JNI_LIB_PREFIX "" ++#else + #define JNI_LIB_PREFIX "lib" ++#endif ++ + #ifdef __APPLE__ + #define JNI_LIB_SUFFIX ".dylib" + #define VERSIONED_JNI_LIB_NAME(NAME, VERSION) JNI_LIB_PREFIX NAME "." VERSION JNI_LIB_SUFFIX ++#elif defined(__GENODE__) ++#define JNI_LIB_SUFFIX ".lib.so" ++#define VERSIONED_JNI_LIB_NAME(NAME, VERSION) JNI_LIB_PREFIX NAME JNI_LIB_SUFFIX "." VERSION + #else + #define JNI_LIB_SUFFIX ".so" + #define VERSIONED_JNI_LIB_NAME(NAME, VERSION) JNI_LIB_PREFIX NAME JNI_LIB_SUFFIX "." VERSION +diff --git a/jdk/src/java.base/unix/native/libjli/java_md_solinux.c b/jdk/src/java.base/unix/native/libjli/java_md_solinux.c +index cb9afc098..2d5af9fc6 100644 +--- a/jdk/src/java.base/unix/native/libjli/java_md_solinux.c ++++ b/jdk/src/java.base/unix/native/libjli/java_md_solinux.c +@@ -37,9 +37,14 @@ + #include + #include "manifest_info.h" + +- ++#ifdef __GENODE__ ++#define JVM_DLL "jvm.lib.so" ++#define JAVA_DLL "java.lib.so" ++#else + #define JVM_DLL "libjvm.so" + #define JAVA_DLL "libjava.so" ++#endif ++ + #ifdef AIX + #define LD_LIBRARY_PATH "LIBPATH" + #else diff --git a/repos/ports/src/app/jdk/patches/os_bsd.patch b/repos/ports/src/app/jdk/patches/os_bsd.patch new file mode 100644 index 0000000000..9b7a5f8975 --- /dev/null +++ b/repos/ports/src/app/jdk/patches/os_bsd.patch @@ -0,0 +1,1147 @@ +diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp +index 9261440..2348f1a 100644 +--- a/hotspot/src/os/bsd/vm/os_bsd.cpp ++++ b/hotspot/src/os/bsd/vm/os_bsd.cpp +@@ -21,6 +21,26 @@ + * questions. + * + */ ++#ifdef ZERO ++#undef ZERO ++#define ZERO_ENABLE ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef ZERO_ENABLE ++#define ZERO ++#endif ++ ++/* libc includes */ ++#include /* 'malloc'/ 'exit' */ + + // no precompiled headers + #include "classfile/classLoader.hpp" +@@ -97,7 +117,6 @@ + # include + # include + # include +-# include + #ifndef __APPLE__ + # include + #endif +@@ -106,17 +125,21 @@ + # include + # include + ++ + #if defined(__FreeBSD__) || defined(__NetBSD__) + #include + #endif + +-#ifdef __APPLE__ +- #include // semaphore_* API +- #include +- #include +- #include ++#if 0 ++#define NOT_IMPL ({ \ ++ PDBG("called not implmemented\n"); \ ++}) ++#else ++#define NOT_IMPL + #endif + ++extern "C" void backtrace(); ++ + #ifndef MAP_ANONYMOUS + #define MAP_ANONYMOUS MAP_ANON + #endif +@@ -141,6 +164,13 @@ int (*os::Bsd::_clock_gettime)(clockid_t, struct timespec *) = NULL; + pthread_t os::Bsd::_main_thread; + int os::Bsd::_page_size = -1; + ++int clock_getres(clockid_t, struct timespec *res) ++{ ++ res->tv_sec = 0; ++ res->tv_nsec = 1000*1000; /* 1ms */ ++ return 0; ++} ++ + static jlong initial_time_count=0; + + static int clock_tics_per_sec = 100; +@@ -547,52 +577,6 @@ bool os::Bsd::is_sig_ignored(int sig) { + } + } + +-void os::Bsd::signal_sets_init() { +- // Should also have an assertion stating we are still single-threaded. +- assert(!signal_sets_initialized, "Already initialized"); +- // Fill in signals that are necessarily unblocked for all threads in +- // the VM. Currently, we unblock the following signals: +- // SHUTDOWN{1,2,3}_SIGNAL: for shutdown hooks support (unless over-ridden +- // by -Xrs (=ReduceSignalUsage)); +- // BREAK_SIGNAL which is unblocked only by the VM thread and blocked by all +- // other threads. The "ReduceSignalUsage" boolean tells us not to alter +- // the dispositions or masks wrt these signals. +- // Programs embedding the VM that want to use the above signals for their +- // own purposes must, at this time, use the "-Xrs" option to prevent +- // interference with shutdown hooks and BREAK_SIGNAL thread dumping. +- // (See bug 4345157, and other related bugs). +- // In reality, though, unblocking these signals is really a nop, since +- // these signals are not blocked by default. +- sigemptyset(&unblocked_sigs); +- sigemptyset(&allowdebug_blocked_sigs); +- sigaddset(&unblocked_sigs, SIGILL); +- sigaddset(&unblocked_sigs, SIGSEGV); +- sigaddset(&unblocked_sigs, SIGBUS); +- sigaddset(&unblocked_sigs, SIGFPE); +- sigaddset(&unblocked_sigs, SR_signum); +- +- if (!ReduceSignalUsage) { +- if (!os::Bsd::is_sig_ignored(SHUTDOWN1_SIGNAL)) { +- sigaddset(&unblocked_sigs, SHUTDOWN1_SIGNAL); +- sigaddset(&allowdebug_blocked_sigs, SHUTDOWN1_SIGNAL); +- } +- if (!os::Bsd::is_sig_ignored(SHUTDOWN2_SIGNAL)) { +- sigaddset(&unblocked_sigs, SHUTDOWN2_SIGNAL); +- sigaddset(&allowdebug_blocked_sigs, SHUTDOWN2_SIGNAL); +- } +- if (!os::Bsd::is_sig_ignored(SHUTDOWN3_SIGNAL)) { +- sigaddset(&unblocked_sigs, SHUTDOWN3_SIGNAL); +- sigaddset(&allowdebug_blocked_sigs, SHUTDOWN3_SIGNAL); +- } +- } +- // Fill in signals that are blocked by all but the VM thread. +- sigemptyset(&vm_sigs); +- if (!ReduceSignalUsage) { +- sigaddset(&vm_sigs, BREAK_SIGNAL); +- } +- debug_only(signal_sets_initialized = true); +- +-} + + // These are signals that are unblocked while a thread is running Java. + // (For some reason, they get blocked by default.) +@@ -1180,14 +1144,18 @@ int os::current_process_id() { + + // DLL functions + +-#define JNI_LIB_PREFIX "lib" ++#define JNI_LIB_PREFIX "" + #ifdef __APPLE__ + #define JNI_LIB_SUFFIX ".dylib" + #else +- #define JNI_LIB_SUFFIX ".so" ++ #undef JNI_LIB_SUFFIX ++ #define JNI_LIB_SUFFIX ".lib.so" + #endif + +-const char* os::dll_file_extension() { return JNI_LIB_SUFFIX; } ++const char* os::dll_file_extension() ++{ ++ return JNI_LIB_SUFFIX; ++} + + // This must be hard coded because it's the system's temporary + // directory not the java application's temp directory, ala java.io.tmpdir. +@@ -1375,6 +1343,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { + } + #else + void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { ++ + #ifdef STATIC_BUILD + return os::get_default_process_handle(); + #else +@@ -1617,6 +1586,7 @@ int os::get_loaded_modules_info(os::LoadedModulesCallbackFunc callback, void *pa + } + + dlclose(handle); ++ return 1; + #elif defined(__APPLE__) + for (uint32_t i = 1; i < _dyld_image_count(); i++) { + // Value for top_address is returned as 0 since we don't have any information about module size +@@ -1675,30 +1645,7 @@ void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) { + } + + void os::get_summary_cpu_info(char* buf, size_t buflen) { +- unsigned int mhz; +- size_t size = sizeof(mhz); +- int mib[] = { CTL_HW, HW_CPU_FREQ }; +- if (sysctl(mib, 2, &mhz, &size, NULL, 0) < 0) { +- mhz = 1; // looks like an error but can be divided by +- } else { +- mhz /= 1000000; // reported in millions +- } +- +- char model[100]; +- size = sizeof(model); +- int mib_model[] = { CTL_HW, HW_MODEL }; +- if (sysctl(mib_model, 2, model, &size, NULL, 0) < 0) { +- strncpy(model, cpu_arch, sizeof(model)); +- } +- +- char machine[100]; +- size = sizeof(machine); +- int mib_machine[] = { CTL_HW, HW_MACHINE }; +- if (sysctl(mib_machine, 2, machine, &size, NULL, 0) < 0) { +- strncpy(machine, "", sizeof(machine)); +- } +- +- snprintf(buf, buflen, "%s %s %d MHz", model, machine, mhz); ++ NOT_IMPL; + } + + void os::print_memory_info(outputStream* st) { +@@ -1888,6 +1835,8 @@ void* os::signal(int signal_number, void* handler) { + } + + void os::signal_raise(int signal_number) { ++ printf("%s called from", __func__); ++ backtrace(); + ::raise(signal_number); + } + +@@ -2131,58 +2080,6 @@ static void warn_fail_commit_memory(char* addr, size_t size, bool exec, + os::errno_name(err), err); + } + +-// NOTE: Bsd kernel does not really reserve the pages for us. +-// All it does is to check if there are enough free pages +-// left at the time of mmap(). This could be a potential +-// problem. +-bool os::pd_commit_memory(char* addr, size_t size, bool exec) { +- int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; +-#ifdef __OpenBSD__ +- // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD +- if (::mprotect(addr, size, prot) == 0) { +- return true; +- } +-#else +- uintptr_t res = (uintptr_t) ::mmap(addr, size, prot, +- MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); +- if (res != (uintptr_t) MAP_FAILED) { +- return true; +- } +-#endif +- +- // Warn about any commit errors we see in non-product builds just +- // in case mmap() doesn't work as described on the man page. +- NOT_PRODUCT(warn_fail_commit_memory(addr, size, exec, errno);) +- +- return false; +-} +- +-bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, +- bool exec) { +- // alignment_hint is ignored on this OS +- return pd_commit_memory(addr, size, exec); +-} +- +-void os::pd_commit_memory_or_exit(char* addr, size_t size, bool exec, +- const char* mesg) { +- assert(mesg != NULL, "mesg must be specified"); +- if (!pd_commit_memory(addr, size, exec)) { +- // add extra info in product mode for vm_exit_out_of_memory(): +- PRODUCT_ONLY(warn_fail_commit_memory(addr, size, exec, errno);) +- vm_exit_out_of_memory(size, OOM_MMAP_ERROR, "%s", mesg); +- } +-} +- +-void os::pd_commit_memory_or_exit(char* addr, size_t size, +- size_t alignment_hint, bool exec, +- const char* mesg) { +- // alignment_hint is ignored on this OS +- pd_commit_memory_or_exit(addr, size, exec, mesg); +-} +- +-void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +-} +- + void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { + ::madvise(addr, bytes, MADV_DONTNEED); + } +@@ -2220,19 +2117,9 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info + } + + +-bool os::pd_uncommit_memory(char* addr, size_t size) { +-#ifdef __OpenBSD__ +- // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD +- 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); +- return res != (uintptr_t) MAP_FAILED; +-#endif +-} +- + bool os::pd_create_stack_guard_pages(char* addr, size_t size) { +- return os::commit_memory(addr, size, !ExecMem); ++ NOT_IMPL; ++ return true; + } + + // If this is a growable mapping, remove the guard pages entirely by +@@ -2270,15 +2157,6 @@ static int anon_munmap(char * addr, size_t size) { + return ::munmap(addr, size) == 0; + } + +-char* os::pd_reserve_memory(size_t bytes, char* requested_addr, +- size_t alignment_hint) { +- return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); +-} +- +-bool os::pd_release_memory(char* addr, size_t size) { +- return anon_munmap(addr, size); +-} +- + static bool bsd_mprotect(char* addr, size_t size, int prot) { + // Bsd wants the mprotect address argument to be page aligned. + char* bottom = (char*)align_size_down((intptr_t)addr, os::Bsd::page_size()); +@@ -2331,80 +2209,13 @@ void os::large_page_init() { + + + char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr, bool exec) { +- fatal("This code is not used or maintained."); +- +- // "exec" is passed in but not used. Creating the shared image for +- // the code cache doesn't have an SHM_X executable permission to check. +- assert(UseLargePages && UseSHM, "only for SHM large pages"); +- +- key_t key = IPC_PRIVATE; +- char *addr; +- +- bool warn_on_failure = UseLargePages && +- (!FLAG_IS_DEFAULT(UseLargePages) || +- !FLAG_IS_DEFAULT(LargePageSizeInBytes)); +- +- // Create a large shared memory region to attach to based on size. +- // Currently, size is the total size of the heap +- int shmid = shmget(key, bytes, IPC_CREAT|SHM_R|SHM_W); +- if (shmid == -1) { +- // Possible reasons for shmget failure: +- // 1. shmmax is too small for Java heap. +- // > check shmmax value: cat /proc/sys/kernel/shmmax +- // > increase shmmax value: echo "0xffffffff" > /proc/sys/kernel/shmmax +- // 2. not enough large page memory. +- // > check available large pages: cat /proc/meminfo +- // > increase amount of large pages: +- // echo new_value > /proc/sys/vm/nr_hugepages +- // Note 1: different Bsd may use different name for this property, +- // e.g. on Redhat AS-3 it is "hugetlb_pool". +- // Note 2: it's possible there's enough physical memory available but +- // they are so fragmented after a long run that they can't +- // coalesce into large pages. Try to reserve large pages when +- // the system is still "fresh". +- if (warn_on_failure) { +- warning("Failed to reserve shared memory (errno = %d).", errno); +- } +- return NULL; +- } +- +- // attach to the region +- addr = (char*)shmat(shmid, req_addr, 0); +- int err = errno; +- +- // Remove shmid. If shmat() is successful, the actual shared memory segment +- // will be deleted when it's detached by shmdt() or when the process +- // terminates. If shmat() is not successful this will remove the shared +- // segment immediately. +- shmctl(shmid, IPC_RMID, NULL); +- +- if ((intptr_t)addr == -1) { +- if (warn_on_failure) { +- warning("Failed to attach shared memory (errno = %d).", err); +- } +- return NULL; +- } +- +- // The memory is committed +- MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); +- +- return addr; ++ NOT_IMPL; ++ return nullptr; + } + + bool os::release_memory_special(char* base, size_t bytes) { +- if (MemTracker::tracking_level() > NMT_minimal) { +- Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); +- // detaching the SHM segment will also delete it, see reserve_memory_special() +- int rslt = shmdt(base); +- if (rslt == 0) { +- tkr.record((address)base, bytes); +- return true; +- } else { +- return false; +- } +- } else { +- return shmdt(base) == 0; +- } ++ NOT_IMPL; ++ return false; + } + + size_t os::large_page_size() { +@@ -2422,82 +2233,6 @@ bool os::can_execute_large_page_memory() { + return UseHugeTLBFS; + } + +-// Reserve memory at an arbitrary address, only if that area is +-// available (and not reserved for something else). +- +-char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +- const int max_tries = 10; +- char* base[max_tries]; +- size_t size[max_tries]; +- const size_t gap = 0x000000; +- +- // Assert only that the size is a multiple of the page size, since +- // that's all that mmap requires, and since that's all we really know +- // about at this low abstraction level. If we need higher alignment, +- // we can either pass an alignment to this method or verify alignment +- // in one of the methods further up the call chain. See bug 5044738. +- assert(bytes % os::vm_page_size() == 0, "reserving unexpected size block"); +- +- // Repeatedly allocate blocks until the block is allocated at the +- // right spot. +- +- // Bsd mmap allows caller to pass an address as hint; give it a try first, +- // if kernel honors the hint then we can return immediately. +- char * addr = anon_mmap(requested_addr, bytes, false); +- if (addr == requested_addr) { +- return requested_addr; +- } +- +- if (addr != NULL) { +- // mmap() is successful but it fails to reserve at the requested address +- anon_munmap(addr, bytes); +- } +- +- int i; +- for (i = 0; i < max_tries; ++i) { +- base[i] = reserve_memory(bytes); +- +- if (base[i] != NULL) { +- // Is this the block we wanted? +- if (base[i] == requested_addr) { +- size[i] = bytes; +- break; +- } +- +- // Does this overlap the block we wanted? Give back the overlapped +- // parts and try again. +- +- size_t top_overlap = requested_addr + (bytes + gap) - base[i]; +- if (top_overlap >= 0 && top_overlap < bytes) { +- unmap_memory(base[i], top_overlap); +- base[i] += top_overlap; +- size[i] = bytes - top_overlap; +- } else { +- size_t bottom_overlap = base[i] + bytes - requested_addr; +- if (bottom_overlap >= 0 && bottom_overlap < bytes) { +- unmap_memory(requested_addr, bottom_overlap); +- size[i] = bytes - bottom_overlap; +- } else { +- size[i] = bytes; +- } +- } +- } +- } +- +- // Give back the unused reserved pieces. +- +- for (int j = 0; j < i; ++j) { +- if (base[j] != NULL) { +- unmap_memory(base[j], size[j]); +- } +- } +- +- if (i < max_tries) { +- return requested_addr; +- } else { +- return NULL; +- } +-} + + size_t os::read(int fd, void *buf, unsigned int nBytes) { + RESTARTABLE_RETURN_INT(::read(fd, buf, nBytes)); +@@ -2618,53 +2353,13 @@ static int prio_init() { + } + + OSReturn os::set_native_priority(Thread* thread, int newpri) { +- if (!UseThreadPriorities || ThreadPriorityPolicy == 0) return OS_OK; +- +-#ifdef __OpenBSD__ +- // OpenBSD pthread_setprio starves low priority threads +- return OS_OK; +-#elif defined(__FreeBSD__) +- int ret = pthread_setprio(thread->osthread()->pthread_id(), newpri); +-#elif defined(__APPLE__) || defined(__NetBSD__) +- struct sched_param sp; +- int policy; +- pthread_t self = pthread_self(); +- +- if (pthread_getschedparam(self, &policy, &sp) != 0) { +- return OS_ERR; +- } +- +- sp.sched_priority = newpri; +- if (pthread_setschedparam(self, policy, &sp) != 0) { +- return OS_ERR; +- } +- ++ NOT_IMPL; + return OS_OK; +-#else +- int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri); +- return (ret == 0) ? OS_OK : OS_ERR; +-#endif + } + + OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) { +- if (!UseThreadPriorities || ThreadPriorityPolicy == 0) { +- *priority_ptr = java_to_os_priority[NormPriority]; +- return OS_OK; +- } +- +- errno = 0; +-#if defined(__OpenBSD__) || defined(__FreeBSD__) +- *priority_ptr = pthread_getprio(thread->osthread()->pthread_id()); +-#elif defined(__APPLE__) || defined(__NetBSD__) +- int policy; +- struct sched_param sp; +- +- pthread_getschedparam(pthread_self(), &policy, &sp); +- *priority_ptr = sp.sched_priority; +-#else +- *priority_ptr = getpriority(PRIO_PROCESS, thread->osthread()->thread_id()); +-#endif +- return (*priority_ptr != -1 || errno == 0 ? OS_OK : OS_ERR); ++ NOT_IMPL; ++ return OS_OK; + } + + // Hint to the underlying OS that a task switch would not be good. +@@ -2786,47 +2481,6 @@ static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) { + } + + +-static int SR_initialize() { +- struct sigaction act; +- char *s; +- // Get signal number to use for suspend/resume +- if ((s = ::getenv("_JAVA_SR_SIGNUM")) != 0) { +- int sig = ::strtol(s, 0, 10); +- if (sig > MAX2(SIGSEGV, SIGBUS) && // See 4355769. +- sig < NSIG) { // Must be legal signal and fit into sigflags[]. +- SR_signum = sig; +- } else { +- warning("You set _JAVA_SR_SIGNUM=%d. It must be in range [%d, %d]. Using %d instead.", +- sig, MAX2(SIGSEGV, SIGBUS)+1, NSIG-1, SR_signum); +- } +- } +- +- assert(SR_signum > SIGSEGV && SR_signum > SIGBUS, +- "SR_signum must be greater than max(SIGSEGV, SIGBUS), see 4355769"); +- +- sigemptyset(&SR_sigset); +- sigaddset(&SR_sigset, SR_signum); +- +- // Set up signal handler for suspend/resume +- act.sa_flags = SA_RESTART|SA_SIGINFO; +- act.sa_handler = (void (*)(int)) SR_handler; +- +- // SR_signum is blocked by default. +- // 4528190 - We also need to block pthread restart signal (32 on all +- // supported Bsd platforms). Note that BsdThreads need to block +- // this signal for all threads to work properly. So we don't have +- // to use hard-coded signal number when setting up the mask. +- pthread_sigmask(SIG_BLOCK, NULL, &act.sa_mask); +- +- if (sigaction(SR_signum, &act, 0) == -1) { +- return -1; +- } +- +- // Save signal flag +- os::Bsd::set_our_sigflags(SR_signum, act.sa_flags); +- return 0; +-} +- + static int sr_notify(OSThread* osthread) { + int status = pthread_kill(osthread->pthread_id(), SR_signum); + assert_status(status == 0, status, "pthread_kill"); +@@ -3119,85 +2773,6 @@ void os::Bsd::set_signal_handler(int sig, bool set_installed) { + assert(oldhand2 == oldhand, "no concurrent signal handler installation"); + } + +-// install signal handlers for signals that HotSpot needs to +-// handle in order to support Java-level exception handling. +- +-void os::Bsd::install_signal_handlers() { +- if (!signal_handlers_are_installed) { +- signal_handlers_are_installed = true; +- +- // signal-chaining +- typedef void (*signal_setting_t)(); +- signal_setting_t begin_signal_setting = NULL; +- signal_setting_t end_signal_setting = NULL; +- begin_signal_setting = CAST_TO_FN_PTR(signal_setting_t, +- dlsym(RTLD_DEFAULT, "JVM_begin_signal_setting")); +- if (begin_signal_setting != NULL) { +- end_signal_setting = CAST_TO_FN_PTR(signal_setting_t, +- dlsym(RTLD_DEFAULT, "JVM_end_signal_setting")); +- get_signal_action = CAST_TO_FN_PTR(get_signal_t, +- dlsym(RTLD_DEFAULT, "JVM_get_signal_action")); +- libjsig_is_loaded = true; +- assert(UseSignalChaining, "should enable signal-chaining"); +- } +- if (libjsig_is_loaded) { +- // Tell libjsig jvm is setting signal handlers +- (*begin_signal_setting)(); +- } +- +- set_signal_handler(SIGSEGV, true); +- set_signal_handler(SIGPIPE, true); +- set_signal_handler(SIGBUS, true); +- set_signal_handler(SIGILL, true); +- set_signal_handler(SIGFPE, true); +- set_signal_handler(SIGXFSZ, true); +- +-#if defined(__APPLE__) +- // In Mac OS X 10.4, CrashReporter will write a crash log for all 'fatal' signals, including +- // signals caught and handled by the JVM. To work around this, we reset the mach task +- // signal handler that's placed on our process by CrashReporter. This disables +- // CrashReporter-based reporting. +- // +- // This work-around is not necessary for 10.5+, as CrashReporter no longer intercedes +- // on caught fatal signals. +- // +- // Additionally, gdb installs both standard BSD signal handlers, and mach exception +- // handlers. By replacing the existing task exception handler, we disable gdb's mach +- // exception handling, while leaving the standard BSD signal handlers functional. +- kern_return_t kr; +- kr = task_set_exception_ports(mach_task_self(), +- EXC_MASK_BAD_ACCESS | EXC_MASK_ARITHMETIC, +- MACH_PORT_NULL, +- EXCEPTION_STATE_IDENTITY, +- MACHINE_THREAD_STATE); +- +- assert(kr == KERN_SUCCESS, "could not set mach task signal handler"); +-#endif +- +- if (libjsig_is_loaded) { +- // Tell libjsig jvm finishes setting signal handlers +- (*end_signal_setting)(); +- } +- +- // We don't activate signal checker if libjsig is in place, we trust ourselves +- // and if UserSignalHandler is installed all bets are off +- if (CheckJNICalls) { +- if (libjsig_is_loaded) { +- if (PrintJNIResolving) { +- tty->print_cr("Info: libjsig is activated, all active signal checking is disabled"); +- } +- check_signals = false; +- } +- if (AllowUserSignalHandlers) { +- if (PrintJNIResolving) { +- tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled"); +- } +- check_signals = false; +- } +- } +- } +-} +- + + ///// + // glibc on Bsd platform uses non-documented flag +@@ -3469,14 +3044,6 @@ jint os::init_2(void) { + log_info(os)("Memory Serialize Page address: " INTPTR_FORMAT, p2i(mem_serialize_page)); + } + +- // initialize suspend/resume support - must do this before signal_sets_init() +- if (SR_initialize() != 0) { +- perror("SR_initialize failed"); +- return JNI_ERR; +- } +- +- Bsd::signal_sets_init(); +- Bsd::install_signal_handlers(); + + // Check and sets minimum stack sizes against command line options + if (Posix::set_minimum_stack_sizes() == JNI_ERR) { +@@ -3542,16 +3109,18 @@ jint os::init_2(void) { + + // Mark the polling page as unreadable + void os::make_polling_page_unreadable(void) { +- if (!guard_memory((char*)_polling_page, Bsd::page_size())) { +- fatal("Could not disable polling page"); +- } ++ //if (!guard_memory((char*)_polling_page, Bsd::page_size())) { ++ // fatal("Could not disable polling page"); ++ //} ++ NOT_IMPL; + } + + // Mark the polling page as readable + void os::make_polling_page_readable(void) { +- if (!bsd_mprotect((char *)_polling_page, Bsd::page_size(), PROT_READ)) { +- fatal("Could not enable polling page"); +- } ++ //if (!bsd_mprotect((char *)_polling_page, Bsd::page_size(), PROT_READ)) { ++ // fatal("Could not enable polling page"); ++ //} ++ NOT_IMPL; + } + + int os::active_processor_count() { +@@ -3581,6 +3150,9 @@ bool os::bind_to_processor(uint processor_id) { + } + + void os::SuspendedThreadTask::internal_do_task() { ++ printf("%s called from", __func__); ++ backtrace(); ++ + if (do_suspend(_thread->osthread())) { + SuspendedThreadTaskContext context(_thread, _thread->osthread()->ucontext()); + do_task(context); +@@ -3721,7 +3293,7 @@ static inline struct timespec get_mtime(const char* filename) { + #ifdef __APPLE__ + return st.st_mtimespec; + #else +- return st.st_mtim; ++ return st.st_mtimespec; + #endif + } + +@@ -3910,11 +3482,6 @@ char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, + } + + +-// Unmap a block of memory. +-bool os::pd_unmap_memory(char* addr, size_t bytes) { +- return munmap(addr, bytes) == 0; +-} +- + // current_thread_cpu_time(bool) and thread_cpu_time(Thread*, bool) + // are used by JVM M&M and JVMTI to get user+sys or user CPU time + // of a thread. +@@ -4555,3 +4122,407 @@ bool os::start_debugging(char *buf, int buflen) { + } + return yes; + } ++ ++/************************** ++ ** VM region management ** ++ **************************/ ++ ++ ++namespace Genode { ++ class Vm_area; ++ class Vm_area_registry; ++ class Vm_region_map; ++}; ++ ++class Genode::Vm_region_map ++{ ++ public: ++ ++ typedef Region_map_client::Local_addr Local_addr; ++ ++ private: ++ ++ enum { VM_SIZE = 384ul * 1024 * 1024 }; ++ Env &_env; ++ Rm_connection _rm_connection { _env }; ++ Region_map_client _rm { _rm_connection.create(VM_SIZE) }; ++ addr_t const _base { _env.rm().attach(_rm.dataspace()) }; ++ Allocator_avl _range; ++ ++ public: ++ ++ Vm_region_map(Env &env, Allocator &md_alloc) ++ : _env(env), _range(&md_alloc) ++ { ++ _range.add_range(_base, VM_SIZE); ++ } ++ ++ addr_t alloc_region(size_t size, int align) ++ { ++ addr_t addr = 0; ++ if (_range.alloc_aligned(size, (void **)&addr, ++ align > 12 ? align : 12).error()) ++ throw -1; ++ ++ return addr; ++ } ++ ++ void free_region(addr_t vaddr) { _range.free((void *)vaddr); } ++ ++ Local_addr attach_at(Dataspace_capability ds, addr_t local_addr) ++ { ++ return retry( ++ [&] () { ++ return _rm.attach_at(ds, local_addr - _base); ++ }, ++ [&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); }); ++ } ++ ++ Local_addr attach_executable(Dataspace_capability ds, addr_t local_addr) ++ { ++ return retry( ++ [&] () { ++ return _rm.attach_executable(ds, local_addr - _base); ++ }, ++ [&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); }); ++ } ++ ++ void detach(Local_addr local_addr) { _rm.detach((addr_t)local_addr - _base); } ++}; ++ ++class Genode::Vm_area ++{ ++ private: ++ ++ struct Vm_area_ds ++ { ++ addr_t base; ++ size_t size; ++ Ram_dataspace_capability ds; ++ ++ Vm_area_ds(addr_t base, size_t size, Ram_dataspace_capability ds) ++ : base(base), size(size), ds(ds) { } ++ ++ virtual ~Vm_area_ds() { }; ++ }; ++ ++ typedef Registered Vm_handle; ++ ++ Env &_env; ++ Heap &_heap; ++ Vm_region_map &_rm; ++ size_t const _base; ++ addr_t const _size; ++ Registry _ds; ++ ++ public: ++ ++ Vm_area(Env &env, Heap &heap, Vm_region_map &rm, addr_t base, size_t size) ++ : _env(env), _heap(heap), _rm(rm), _base(base), _size(size) ++ { } ++ ++ addr_t base() const { return _base; } ++ size_t size() const { return _size; } ++ ++ bool inside(addr_t base, size_t size) { ++ return base >= _base && (base + size) <= (_base + _size); } ++ ++ bool commit(addr_t base, size_t size, bool executable) ++ { ++ if (!inside(base, size)) ++ return false; ++ ++ Ram_dataspace_capability ds = _env.ram().alloc(size); ++ ++ try { ++ if (executable) ++ _rm.attach_executable(ds, base); ++ else ++ _rm.attach_at(ds, base); ++ } catch (...) { ++ _env.ram().free(ds); ++ return false; ++ } ++ ++ new (_heap) Vm_handle(_ds, base, size, ds); ++ ++ return true; ++ } ++ ++ virtual ~Vm_area() ++ { ++ _ds.for_each([&] (Vm_handle &vm) { ++ ++ _rm.detach(vm.base); ++ _env.ram().free(vm.ds); ++ destroy(_heap, &vm); ++ }); ++ } ++}; ++ ++ ++class Genode::Vm_area_registry ++{ ++ private: ++ ++ typedef Registered Vm_area_handle; ++ ++ Env &_env; ++ Heap _heap { _env.ram(), _env.rm() }; ++ Registry _registry; ++ Vm_region_map _rm { _env, _heap }; ++ ++ public: ++ ++ Vm_area_registry(Env &env) : _env(env) ++ { } ++ ++ addr_t reserve(size_t size, addr_t base, int align) ++ { ++ if (base) { ++ Genode::error("vm_start set"); ++ while(1); ++ } ++ base = _rm.alloc_region(size, align); ++ Vm_area *vm = new (&_heap) Vm_area_handle(_registry, _env, _heap, _rm, base, size); ++ return base; ++ } ++ ++ bool commit(addr_t base, size_t size, bool executable) ++ { ++ bool success = false; ++ ++ _registry.for_each([&] (Vm_area_handle &vm) { ++ if (success) return; ++ success = vm.commit(base, size, executable); ++ }); ++ ++ return success; ++ } ++ ++ bool release(addr_t base, size_t size) ++ { ++ bool success = false; ++ ++ _registry.for_each([&] (Vm_area_handle &vm) { ++ if (success || !vm.inside(base, size)) return; ++ ++ if (base != vm.base() || size != vm.size()) { ++ error(__func__, " sub region release ", " addr: ", Hex(base), " vm addr: ", Hex(vm.base()), ++ " size: ", Hex(size), " vm size: ", Hex(vm.size())); ++ while (1); ++ } ++ ++ _rm.free_region(vm.base()); ++ destroy(_heap, &vm); ++ success = true; ++ }); ++ ++ if (!success) error(__func__, " failed"); ++ ++ return success; ++ } ++}; ++ ++static Genode::Constructible vm_reg; ++ ++char* os::pd_reserve_memory(size_t bytes, char* requested_addr, ++ size_t alignment_hint) ++{ ++ try { ++ Genode::addr_t addr = vm_reg->reserve(bytes, (Genode::addr_t)requested_addr, ++ alignment_hint ? Genode::log2(alignment_hint) : 12); ++ return (char *)addr; ++ } catch (...) { ++ Genode::error(__PRETTY_FUNCTION__, " exception!"); ++ } ++ return nullptr; ++} ++ ++ ++/* ++ * Reserve memory at an arbitrary address, only if that area is ++ * available (and not reserved for something else) ++ */ ++char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) ++{ ++ return pd_reserve_memory(bytes, requested_addr, 0); ++} ++ ++ ++bool os::pd_release_memory(char* addr, size_t size) { ++ return vm_reg->release((Genode::addr_t)addr, size); ++} ++ ++ ++bool os::pd_unmap_memory(char* addr, size_t bytes) { ++ return vm_reg->release((Genode::addr_t)addr, bytes); ++} ++ ++ ++bool os::pd_commit_memory(char* addr, size_t size, bool exec) { ++ ++ if (!addr) { ++ Genode::error(__PRETTY_FUNCTION__, " addr == 0"); ++ while(1); ++ } ++ ++ return vm_reg->commit((Genode::addr_t)addr, size, exec); ++} ++ ++ ++bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, ++ bool exec) { ++ // alignment_hint is ignored on this OS ++ return pd_commit_memory(addr, size, exec); ++} ++ ++ ++void os::pd_commit_memory_or_exit(char* addr, size_t size, bool exec, ++ const char* mesg) { ++ assert(mesg != NULL, "mesg must be specified"); ++ if (!pd_commit_memory(addr, size, exec)) { ++ // add extra info in product mode for vm_exit_out_of_memory(): ++ PRODUCT_ONLY(warn_fail_commit_memory(addr, size, exec, errno);) ++ vm_exit_out_of_memory(size, OOM_MMAP_ERROR, "%s", mesg); ++ } ++} ++ ++ ++void os::pd_commit_memory_or_exit(char* addr, size_t size, ++ size_t alignment_hint, bool exec, ++ const char* mesg) { ++ // alignment_hint is ignored on this OS ++ pd_commit_memory_or_exit(addr, size, exec, mesg); ++} ++ ++ ++void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { ++ NOT_IMPL; ++} ++ ++ ++bool os::pd_uncommit_memory(char* addr, size_t size) { ++ Genode::error(__PRETTY_FUNCTION__, "addr: ", (void *)addr, " size: ", (void *)size); ++ while (1); ++#ifdef __OpenBSD__ ++ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD ++ 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); ++ return res != (uintptr_t) MAP_FAILED; ++#endif ++} ++ ++ ++/************ ++ ** atomic ** ++ ************/ ++ ++int os::cmpxchg(int oldval, int newval, volatile int *ptr) ++{ ++ return !Genode::cmpxchg(ptr, oldval, newval); ++} ++ ++ ++/****************** ++ ** Startup code ** ++ ******************/ ++ ++extern char **genode_argv; ++extern int genode_argc; ++extern char **genode_envp; ++ ++/* initial environment for the FreeBSD libc implementation */ ++extern char **environ; ++ ++/* provided by the application */ ++extern "C" int main(int argc, char ** argv, char **envp); ++ ++ ++static void construct_component(Libc::Env &env) ++{ ++ using Genode::Xml_node; ++ using Genode::Xml_attribute; ++ ++ env.config([&] (Xml_node const &node) { ++ int argc = 0; ++ int envc = 0; ++ char **argv; ++ char **envp; ++ ++ /* count the number of arguments and environment variables */ ++ node.for_each_sub_node([&] (Xml_node const &node) { ++ /* check if the 'value' attribute exists */ ++ if (node.has_type("arg") && node.has_attribute("value")) ++ ++argc; ++ else ++ if (node.has_type("env") && node.has_attribute("key") && node.has_attribute("value")) ++ ++envc; ++ }); ++ ++ if (argc == 0 && envc == 0) ++ return; /* from lambda */ ++ ++ /* arguments and environment are a contiguous array (but don't count on it) */ ++ argv = (char**)malloc((argc + envc + 1) * sizeof(char*)); ++ envp = &argv[argc]; ++ ++ /* read the arguments */ ++ int arg_i = 0; ++ int env_i = 0; ++ node.for_each_sub_node([&] (Xml_node const &node) { ++ /* insert an argument */ ++ if (node.has_type("arg")) try { ++ Xml_attribute attr = node.attribute("value"); ++ ++ Genode::size_t const arg_len = attr.value_size()+1; ++ char *arg = argv[arg_i] = (char*)malloc(arg_len); ++ ++ attr.value(arg, arg_len); ++ ++arg_i; ++ ++ } catch (Xml_node::Nonexistent_sub_node) { } ++ ++ else ++ ++ /* insert an environment variable */ ++ if (node.has_type("env")) try { ++ Xml_attribute key_attr = node.attribute("key"); ++ Xml_attribute val_attr = node.attribute("value"); ++ ++ Genode::size_t const pair_len = ++ key_attr.value_size() + ++ val_attr.value_size() + 1; ++ char *env = envp[env_i] = (char*)malloc(pair_len); ++ ++ Genode::size_t off = 0; ++ key_attr.value(&env[off], key_attr.value_size()+1); ++ off = key_attr.value_size(); ++ env[off++] = '='; ++ val_attr.value(&env[off], val_attr.value_size()+1); ++ ++env_i; ++ ++ } catch (Xml_node::Nonexistent_sub_node) { } ++ }); ++ ++ envp[env_i] = NULL; ++ ++ /* register command-line arguments at Genode's startup code */ ++ genode_argc = argc; ++ genode_argv = argv; ++ genode_envp = environ = envp; ++ }); ++ ++ exit(main(genode_argc, genode_argv, genode_envp)); ++} ++ ++ ++void Libc::Component::construct(Libc::Env &env) ++{ ++ vm_reg.construct(env); ++ ++ Libc::with_libc([&] () { construct_component(env); }); ++} ++ diff --git a/repos/ports/src/app/jdk/patches/os_bsd_zero.patch b/repos/ports/src/app/jdk/patches/os_bsd_zero.patch new file mode 100644 index 0000000000..4016ef35eb --- /dev/null +++ b/repos/ports/src/app/jdk/patches/os_bsd_zero.patch @@ -0,0 +1,13 @@ +diff --git a/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp b/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp +index 15a5b7d..e4d30f7 100644 +--- a/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp ++++ b/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp +@@ -63,7 +63,7 @@ + extern sigjmp_buf* get_jmp_buf_for_continuation(); + + address os::current_stack_pointer() { +- address dummy = (address) &dummy; ++ volatile address dummy = (address) &dummy; + return dummy; + } + diff --git a/repos/ports/src/app/jdk/patches/pollselectorprovider.patch b/repos/ports/src/app/jdk/patches/pollselectorprovider.patch new file mode 100644 index 0000000000..b3afb3492a --- /dev/null +++ b/repos/ports/src/app/jdk/patches/pollselectorprovider.patch @@ -0,0 +1,28 @@ +Use PollSelectorProvider instead of EPollSelectorProvider + +diff --git a/jdk/src/java.base/linux/classes/sun/nio/ch/DefaultSelectorProvider.java b/jdk/src/java.base/linux/classes/sun/nio/ch/DefaultSelectorProvider.java +index 1278f15..3f23cc4 100644 +--- a/jdk/src/java.base/linux/classes/sun/nio/ch/DefaultSelectorProvider.java ++++ b/jdk/src/java.base/linux/classes/sun/nio/ch/DefaultSelectorProvider.java +@@ -42,7 +42,7 @@ public class DefaultSelectorProvider { + * Returns the default SelectorProvider. + */ + public static SelectorProvider create() { +- return new sun.nio.ch.EPollSelectorProvider(); ++ return new sun.nio.ch.PollSelectorProvider(); + } + + } +diff --git a/make/CompileJavaModules.gmk b/make/CompileJavaModules.gmk +index 090434a..507dd10 100644 +--- a/make/CompileJavaModules.gmk ++++ b/make/CompileJavaModules.gmk +@@ -55,7 +55,7 @@ java.base_EXCLUDES += java/lang/doc-files + # data files and shouldn't go in the product + java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java + +-ifneq ($(filter solaris macosx linux windows,$(OPENJDK_TARGET_OS)), ) ++ifneq ($(filter solaris macosx windows,$(OPENJDK_TARGET_OS)), ) + java.base_EXCLUDE_FILES += \ + sun/nio/ch/AbstractPollSelectorImpl.java \ + sun/nio/ch/PollSelectorImpl.java \ diff --git a/repos/ports/src/app/jdk/patches/size.patch b/repos/ports/src/app/jdk/patches/size.patch new file mode 100644 index 0000000000..8d65c14ef9 --- /dev/null +++ b/repos/ports/src/app/jdk/patches/size.patch @@ -0,0 +1,85 @@ +commit 7a6a25557a0b21e0d3202f04a4172b3fa5e9a4e9 +Author: Sebastian Sumpf +Date: Mon Apr 16 11:08:15 2018 +0200 + + jdk: size_t patch + +diff --git a/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp +index 0a2a462..7bc5011 100644 +--- a/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp ++++ b/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp +@@ -99,7 +99,7 @@ size_t G1PageBasedVirtualSpace::uncommitted_size() const { + return reserved_size() - committed_size(); + } + +-size_t G1PageBasedVirtualSpace::addr_to_page_index(char* addr) const { ++uintptr_t G1PageBasedVirtualSpace::addr_to_page_index(char* addr) const { + return (addr - _low_boundary) / _page_size; + } + +diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp +index 952aa5f..ab3c3b8 100644 +--- a/hotspot/src/share/vm/prims/whitebox.cpp ++++ b/hotspot/src/share/vm/prims/whitebox.cpp +@@ -1022,7 +1022,7 @@ WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name)) + WB_END + + WB_ENTRY(jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name)) +- uintx result; ++ size_t result; + if (GetVMFlag (thread, env, name, &result, &CommandLineFlags::size_tAt)) { + ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI + return longBox(thread, env, result); +diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp +index 92f18dd..9164cbf 100644 +--- a/hotspot/src/share/vm/runtime/arguments.cpp ++++ b/hotspot/src/share/vm/runtime/arguments.cpp +@@ -78,7 +78,7 @@ SystemProperty* Arguments::_system_properties = NULL; + const char* Arguments::_gc_log_filename = NULL; + bool Arguments::_has_profile = false; + size_t Arguments::_conservative_max_heap_alignment = 0; +-size_t Arguments::_min_heap_size = 0; ++uintx Arguments::_min_heap_size = 0; + Arguments::Mode Arguments::_mode = _mixed; + bool Arguments::_java_compiler = false; + bool Arguments::_xdebug_mode = false; +diff --git a/hotspot/src/share/vm/utilities/globalDefinitions.hpp b/hotspot/src/share/vm/utilities/globalDefinitions.hpp +index dbb080e..11c3278 100644 +--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp ++++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp +@@ -284,8 +284,7 @@ inline size_t byte_size_in_exact_unit(size_t s) { + + // intx and uintx are the 'extended' int and 'extended' unsigned int types; + // they are 32bit wide on a 32-bit platform, and 64bit wide on a 64bit platform. +- +-typedef intptr_t intx; ++typedef intptr_t intx; + typedef uintptr_t uintx; + + const intx min_intx = (intx)1 << (sizeof(intx)*BitsPerByte-1); +@@ -1106,10 +1105,10 @@ inline intptr_t bitfield(intptr_t x, int start_bit_no, int field_length) { + // and 64-bit overloaded functions, which does not work, and having + // explicitly-typed versions of these routines (i.e., MAX2I, MAX2L) + // will be even more error-prone than macros. +-template inline T MAX2(T a, T b) { return (a > b) ? a : b; } +-template inline T MIN2(T a, T b) { return (a < b) ? a : b; } ++template inline T MAX2(T a, U b) { return (a > b) ? a : b; } ++template inline T MIN2(T a, U b) { return (a < b) ? a : b; } + template inline T MAX3(T a, T b, T c) { return MAX2(MAX2(a, b), c); } +-template inline T MIN3(T a, T b, T c) { return MIN2(MIN2(a, b), c); } ++template inline T MIN3(T a, U b, V c) { return MIN2(MIN2(a, b), c); } + template inline T MAX4(T a, T b, T c, T d) { return MAX2(MAX3(a, b, c), d); } + template inline T MIN4(T a, T b, T c, T d) { return MIN2(MIN3(a, b, c), d); } + +diff --git a/hotspot/src/share/vm/utilities/macros.hpp b/hotspot/src/share/vm/utilities/macros.hpp +index f24e4ff..534cb29 100644 +--- a/hotspot/src/share/vm/utilities/macros.hpp ++++ b/hotspot/src/share/vm/utilities/macros.hpp +@@ -334,7 +334,6 @@ + #endif + + #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) +-#define BSD + #define BSD_ONLY(code) code + #define NOT_BSD(code) + #else