diff --git a/lib/import/import-jli.mk b/lib/import/import-jli.mk new file mode 100644 index 0000000..4b75e16 --- /dev/null +++ b/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/lib/mk/java.inc b/lib/mk/java.inc new file mode 100644 index 0000000..f9b2774 --- /dev/null +++ b/lib/mk/java.inc @@ -0,0 +1,45 @@ +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 + +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/lib/mk/jdk_version.inc b/lib/mk/jdk_version.inc new file mode 100644 index 0000000..c064938 --- /dev/null +++ b/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/lib/mk/jimage.mk b/lib/mk/jimage.mk new file mode 100644 index 0000000..9cb88b7 --- /dev/null +++ b/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/lib/mk/jli.mk b/lib/mk/jli.mk new file mode 100644 index 0000000..9aaad07 --- /dev/null +++ b/lib/mk/jli.mk @@ -0,0 +1,24 @@ +LIBS = libc zlib +SHARED_LIB = yes +JDK_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.base + +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/lib/mk/jnet.mk b/lib/mk/jnet.mk new file mode 100644 index 0000000..a99e82e --- /dev/null +++ b/lib/mk/jnet.mk @@ -0,0 +1,34 @@ +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 \ + NetworkInterface.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 +CC_OPT_NetworkInterface += -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/lib/mk/jvm.inc b/lib/mk/jvm.inc new file mode 100644 index 0000000..1b53356 --- /dev/null +++ b/lib/mk/jvm.inc @@ -0,0 +1,685 @@ +LIBS = stdcxx jzip jimage nio jnet libc libc_pipe +SHARED_LIB = yes +HOTSPOT_BASE = $(call select_from_ports,jdk)/src/app/jdk/hotspot/src + +CC_CXX_WARN_STRICT = + +include $(REP_DIR)/lib/mk/jdk_version.inc + +CC_OPT += -fpermissive -fno-delete-null-pointer-checks \ + -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__ + +##XXX: may have to use our own +CC_OPT += -DINCLUDE_SUFFIX_OS=_bsd -DTARGET_COMPILER_gcc -D_ALLBSD_SOURCE -DUSE_LIBRARY_BASED_TLS_ONLY \ + -DVM_LITTLE_ENDIAN + +CC_OLEVEL = -O0 + +## DEBUGGING ## +#CC_OPT += -DASSERT + +INC_DIR += $(HOTSPOT_BASE)/os/bsd/vm \ + $(HOTSPOT_BASE)/os/posix/vm \ + + +INC_DIR += $(REP_DIR)/src/app/jdk/lib/include \ + $(JDK_GENERATED)/include \ + $(HOTSPOT_BASE)/share/vm \ + $(HOTSPOT_BASE)/share/vm/precompiled \ + $(HOTSPOT_BASE)/share/vm/prims + +SRC_CC += os_genode.cpp dummies.cpp + + +SRC_CONE += share/vm/c1/c1_Canonicalizer.cpp \ + share/vm/c1/c1_CFGPrinter.cpp \ + share/vm/c1/c1_Compilation.cpp \ + share/vm/c1/c1_Compiler.cpp \ + share/vm/c1/c1_Defs.cpp \ + share/vm/c1/c1_FrameMap.cpp \ + share/vm/c1/c1_globals.cpp \ + share/vm/c1/c1_GraphBuilder.cpp \ + share/vm/c1/c1_Instruction.cpp \ + share/vm/c1/c1_InstructionPrinter.cpp \ + share/vm/c1/c1_IR.cpp \ + share/vm/c1/c1_LinearScan.cpp \ + share/vm/c1/c1_LIRAssembler.cpp \ + share/vm/c1/c1_LIR.cpp \ + share/vm/c1/c1_LIRGenerator.cpp \ + share/vm/c1/c1_Optimizer.cpp \ + share/vm/c1/c1_RangeCheckElimination.cpp \ + share/vm/c1/c1_Runtime1.cpp \ + share/vm/c1/c1_ValueMap.cpp \ + share/vm/c1/c1_ValueSet.cpp \ + share/vm/c1/c1_ValueStack.cpp \ + share/vm/c1/c1_ValueType.cpp \ + share/vm/ci/ciMethod.cpp + +SRC_CTWO += share/vm/ci/bcEscapeAnalyzer.cpp \ + share/vm/ci/ciTypeFlow.cpp \ + share/vm/code/codeBlob.cpp \ + share/vm/jvmci/jvmci_globals.cpp \ + share/vm/opto/addnode.cpp \ + share/vm/opto/arraycopynode.cpp \ + share/vm/opto/block.cpp \ + share/vm/opto/buildOopMap.cpp \ + share/vm/opto/bytecodeInfo.cpp \ + share/vm/opto/c2compiler.cpp \ + share/vm/opto/callGenerator.cpp \ + share/vm/opto/callnode.cpp \ + share/vm/opto/castnode.cpp \ + share/vm/opto/cfgnode.cpp \ + share/vm/opto/chaitin.cpp \ + share/vm/opto/classes.cpp \ + share/vm/opto/coalesce.cpp \ + share/vm/opto/compile.cpp \ + share/vm/opto/connode.cpp \ + share/vm/opto/convertnode.cpp \ + share/vm/opto/countbitsnode.cpp \ + share/vm/opto/divnode.cpp \ + share/vm/opto/doCall.cpp \ + share/vm/opto/domgraph.cpp \ + share/vm/opto/escape.cpp \ + share/vm/opto/gcm.cpp \ + share/vm/opto/generateOptoStub.cpp \ + share/vm/opto/graphKit.cpp \ + share/vm/opto/idealGraphPrinter.cpp \ + share/vm/opto/idealKit.cpp \ + share/vm/opto/ifg.cpp \ + share/vm/opto/ifnode.cpp \ + share/vm/opto/indexSet.cpp \ + share/vm/opto/intrinsicnode.cpp \ + share/vm/opto/lcm.cpp \ + share/vm/opto/library_call.cpp \ + share/vm/opto/live.cpp \ + share/vm/opto/locknode.cpp \ + share/vm/opto/loopnode.cpp \ + share/vm/opto/loopopts.cpp \ + share/vm/opto/loopPredicate.cpp \ + share/vm/opto/loopTransform.cpp \ + share/vm/opto/loopUnswitch.cpp \ + share/vm/opto/machnode.cpp \ + share/vm/opto/macroArrayCopy.cpp \ + share/vm/opto/macro.cpp \ + share/vm/opto/matcher.cpp \ + share/vm/opto/mathexactnode.cpp \ + share/vm/opto/memnode.cpp \ + share/vm/opto/movenode.cpp \ + share/vm/opto/mulnode.cpp \ + share/vm/opto/multnode.cpp \ + share/vm/opto/narrowptrnode.cpp \ + share/vm/opto/node.cpp \ + share/vm/opto/opaquenode.cpp \ + share/vm/opto/opcodes.cpp \ + share/vm/opto/output.cpp \ + share/vm/opto/parse1.cpp \ + share/vm/opto/parse2.cpp \ + share/vm/opto/parse3.cpp \ + share/vm/opto/parseHelper.cpp \ + share/vm/opto/phase.cpp \ + share/vm/opto/phaseX.cpp \ + share/vm/opto/postaloc.cpp \ + share/vm/opto/regalloc.cpp \ + share/vm/opto/regmask.cpp \ + share/vm/opto/reg_split.cpp \ + share/vm/opto/replacednodes.cpp \ + share/vm/opto/rootnode.cpp \ + share/vm/opto/runtime.cpp \ + share/vm/opto/split_if.cpp \ + share/vm/opto/stringopts.cpp \ + share/vm/opto/subnode.cpp \ + share/vm/opto/superword.cpp \ + share/vm/opto/type.cpp \ + share/vm/opto/vectornode.cpp \ + share/vm/prims/jvm.cpp \ + share/vm/runtime/globals.cpp \ + share/vm/runtime/sharedRuntime.cpp + +# +# create CC_OPT_file for c1/c2 compiler +# +$(foreach FILE, $(SRC_CONE:.cpp=), $(eval CC_OPT_$(FILE) = -DCOMPILER1)) +$(foreach FILE, $(SRC_CTWO:.cpp=), $(eval CC_OPT_$(FILE) = -DCOMPILER2)) + +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_cpu/arm/vm/vm_version_arm_32 += -DKUSER_HELPER_VERSION_ADDR=0x0 + +SRC_CC += $(SRC_CONE) $(SRC_CTWO) \ + os/bsd/dtrace/generateJvmOffsets.cpp \ + os/bsd/vm/attachListener_bsd.cpp \ + os/bsd/vm/decoder_machO.cpp \ + os/bsd/vm/jvm_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/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/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/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/jvmci/jvmciCodeInstaller.cpp \ + share/vm/jvmci/jvmciCompiler.cpp \ + share/vm/jvmci/jvmciCompilerToVM.cpp \ + share/vm/jvmci/jvmciEnv.cpp \ + share/vm/jvmci/jvmciJavaClasses.cpp \ + share/vm/jvmci/jvmciRuntime.cpp \ + share/vm/jvmci/vmStructs_jvmci.cpp \ + share/vm/libadt/dict.cpp \ + share/vm/libadt/set.cpp \ + share/vm/libadt/vectset.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/opto/c2_globals.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/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/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/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 + +#SRC_CC = cpu/arm/vm/runtime_arm.cpp + +vpath os_genode.cpp $(REP_DIR)/src/app/jdk/lib/jvm +vpath dummies.cpp $(REP_DIR)/src/app/jdk/lib/jvm +vpath %.cpp $(HOTSPOT_BASE) +vpath %.s $(HOTSPOT_BASE) + +# vi: set ft=make : diff --git a/lib/mk/jzip.mk b/lib/mk/jzip.mk new file mode 100644 index 0000000..6de6ad7 --- /dev/null +++ b/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/lib/mk/management.mk b/lib/mk/management.mk new file mode 100644 index 0000000..d6c1f60 --- /dev/null +++ b/lib/mk/management.mk @@ -0,0 +1,24 @@ +LIBS = libc +SHARED_LIB = yes +NATIVE_BASE = $(call select_from_ports,jdk)/src/app/jdk/jdk/src/java.management/share/native/ +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 = ClassLoadingImpl.c \ + GarbageCollectorImpl.c \ + HotspotThread.c \ + management.c \ + MemoryImpl.c \ + MemoryManagerImpl.c \ + MemoryPoolImpl.c \ + ThreadImpl.c \ + VMManagementImpl.c + +INC_DIR += $(JDK_GENERATED)/include/java.management \ + $(JDK_BASE)/share/native/include \ + $(JDK_BASE)/share/native/libjava \ + $(JDK_BASE)/unix/native/include \ + $(JDK_BASE)/unix/native/libjava \ + $(NATIVE_BASE)/include + +vpath %c $(NATIVE_BASE)/libmanagement diff --git a/lib/mk/nio.mk b/lib/mk/nio.mk new file mode 100644 index 0000000..6ed2e26 --- /dev/null +++ b/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/lib/mk/spec/arm/java.mk b/lib/mk/spec/arm/java.mk new file mode 100644 index 0000000..ad243f0 --- /dev/null +++ b/lib/mk/spec/arm/java.mk @@ -0,0 +1,3 @@ +CC_OPT = -DARCHPROPNAME='"arm"' + +include $(REP_DIR)/lib/mk/java.inc diff --git a/lib/mk/spec/arm/jvm.mk b/lib/mk/spec/arm/jvm.mk new file mode 100644 index 0000000..a64c75b --- /dev/null +++ b/lib/mk/spec/arm/jvm.mk @@ -0,0 +1,87 @@ +CC_OPT = -DINCLUDE_SUFFIX_CPU=_arm -DHOTSPOT_LIB_ARCH='"arm"' -DARM -DARM32 \ + -Dlseek64=lseek -D__SOFTFP__ + +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 + +INC_DIR += $(HOTSPOT_BASE)/os_cpu/bsd_zero/vm \ + $(HOTSPOT_BASE)/os_cpu/linux_arm/vm + +SRC_CC = os_genode_arm.cpp + +SRC_CONE = cpu/arm/vm/c1_CodeStubs_arm.cpp \ + cpu/arm/vm/c1_FpuStackSim_arm.cpp \ + cpu/arm/vm/c1_FrameMap_arm.cpp \ + cpu/arm/vm/c1_LinearScan_arm.cpp \ + cpu/arm/vm/c1_LIRAssembler_arm.cpp \ + cpu/arm/vm/c1_LIRGenerator_arm.cpp \ + cpu/arm/vm/c1_LIR_arm.cpp \ + cpu/arm/vm/c1_MacroAssembler_arm.cpp \ + cpu/arm/vm/c1_Runtime1_arm.cpp + +SRC_CTWO = cpu/arm/vm/assembler_arm_32.cpp \ + cpu/arm/vm/compiledIC_arm.cpp \ + cpu/arm/vm/macroAssembler_arm.cpp \ + cpu/arm/vm/sharedRuntime_arm.cpp + +SRC_CC += cpu/arm/vm/abstractInterpreter_arm.cpp \ + cpu/arm/vm/assembler_arm.cpp \ + cpu/arm/vm/debug_arm.cpp \ + cpu/arm/vm/depChecker_arm.cpp \ + cpu/arm/vm/frame_arm.cpp \ + cpu/arm/vm/icache_arm.cpp \ + cpu/arm/vm/icBuffer_arm.cpp \ + cpu/arm/vm/interp_masm_arm.cpp \ + cpu/arm/vm/interpreterRT_arm.cpp \ + cpu/arm/vm/jniFastGetField_arm.cpp \ + cpu/arm/vm/jvmciCodeInstaller_arm.cpp \ + cpu/arm/vm/macroAssembler_arm.cpp \ + cpu/arm/vm/metaspaceShared_arm.cpp \ + cpu/arm/vm/methodHandles_arm.cpp \ + cpu/arm/vm/nativeInst_arm_32.cpp \ + cpu/arm/vm/register_definitions_arm.cpp \ + cpu/arm/vm/register_arm.cpp \ + cpu/arm/vm/relocInfo_arm.cpp \ + cpu/arm/vm/runtime_arm.cpp \ + cpu/arm/vm/sharedRuntime_arm.cpp \ + cpu/arm/vm/stubGenerator_arm.cpp \ + cpu/arm/vm/stubRoutines_arm.cpp \ + cpu/arm/vm/templateInterpreterGenerator_arm.cpp \ + cpu/arm/vm/templateInterpreterGenerator_arm.cpp \ + cpu/arm/vm/templateTable_arm.cpp \ + cpu/arm/vm/vmreg_arm.cpp \ + cpu/arm/vm/vm_version_arm_32.cpp \ + cpu/arm/vm/vtableStubs_arm.cpp \ + os_cpu/linux_arm/vm/macroAssembler_linux_arm_32.cpp + +SRC_S = os_cpu/linux_arm/vm/linux_arm_32.s +## +## Force preprocessing +## +CC_OPT_cpu/arm/vm/runtime_arm += -DCOMPILER2 + +# +# XXX: generated source +# +SRC_GEN = ad_arm.cpp ad_arm_format.cpp ad_arm_clone.cpp ad_arm_gen.cpp \ + ad_arm_expand.cpp ad_arm_misc.cpp ad_arm_peephole.cpp \ + ad_arm_pipeline.cpp dfa_arm.cpp jvmtiEnterTrace.cpp jvmtiEnter.cpp + +$(foreach FILE, $(SRC_GEN:.cpp=), $(eval CC_OPT_$(FILE) = -DLINUX -D_GNU_SOURCE -DCOMPILER2)) +SRC_CC += $(SRC_GEN) + + +vpath ad_arm.cpp $(JDK_GENERATED)/src +vpath ad_arm_format.cpp $(JDK_GENERATED)/src +vpath ad_arm_clone.cpp $(JDK_GENERATED)/src +vpath ad_arm_gen.cpp $(JDK_GENERATED)/src +vpath ad_arm_expand.cpp $(JDK_GENERATED)/src +vpath ad_arm_misc.cpp $(JDK_GENERATED)/src +vpath ad_arm_peephole.cpp $(JDK_GENERATED)/src +vpath ad_arm_pipeline.cpp $(JDK_GENERATED)/src +vpath dfa_arm.cpp $(JDK_GENERATED)/src +vpath jvmtiEnterTrace.cpp $(JDK_GENERATED)/src +vpath jvmtiEnter.cpp $(JDK_GENERATED)/src +vpath os_genode_arm.cpp $(REP_DIR)/src/app/jdk/lib/jvm/spec/arm + +include $(REP_DIR)/lib/mk/jvm.inc diff --git a/lib/mk/spec/x86_64/java.mk b/lib/mk/spec/x86_64/java.mk new file mode 100644 index 0000000..6a30755 --- /dev/null +++ b/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/lib/mk/spec/x86_64/jvm.mk b/lib/mk/spec/x86_64/jvm.mk new file mode 100644 index 0000000..a184164 --- /dev/null +++ b/lib/mk/spec/x86_64/jvm.mk @@ -0,0 +1,97 @@ +CC_OPT = -DINCLUDE_SUFFIX_CPU=_x86 -DAMD64 -DHOTSPOT_LIB_ARCH='"amd64"' + +INC_DIR = $(call select_from_ports,jdk)/src/app/jdk/hotspot/src/cpu/x86/vm +JDK_GENERATED = $(call select_from_ports,jdk_generated)/src/app/jdk + +INC_DIR += $(HOTSPOT_BASE)/os_cpu/bsd_x86/vm + +SRC_CONE = cpu/x86/vm/c1_CodeStubs_x86.cpp \ + cpu/x86/vm/c1_FpuStackSim_x86.cpp \ + cpu/x86/vm/c1_FrameMap_x86.cpp \ + cpu/x86/vm/c1_LinearScan_x86.cpp \ + cpu/x86/vm/c1_LIRAssembler_x86.cpp \ + cpu/x86/vm/c1_LIRGenerator_x86.cpp \ + cpu/x86/vm/c1_LIR_x86.cpp \ + cpu/x86/vm/c1_MacroAssembler_x86.cpp \ + cpu/x86/vm/c1_Runtime1_x86.cpp + +SRC_CTWO = cpu/x86/vm/c2_init_x86.cpp \ + cpu/x86/vm/compiledIC_x86.cpp \ + cpu/x86/vm/macroAssembler_x86.cpp \ + cpu/x86/vm/sharedRuntime_x86_64.cpp + +SRC_CC = cpu/x86/vm/abstractInterpreter_x86.cpp \ + cpu/x86/vm/assembler_x86.cpp \ + cpu/x86/vm/debug_x86.cpp \ + cpu/x86/vm/depChecker_x86.cpp \ + cpu/x86/vm/frame_x86.cpp \ + cpu/x86/vm/icache_x86.cpp \ + cpu/x86/vm/icBuffer_x86.cpp \ + cpu/x86/vm/interp_masm_x86.cpp \ + cpu/x86/vm/interpreterRT_x86_64.cpp \ + cpu/x86/vm/jniFastGetField_x86_64.cpp \ + cpu/x86/vm/jvmciCodeInstaller_x86.cpp \ + cpu/x86/vm/macroAssembler_x86_cos.cpp \ + cpu/x86/vm/macroAssembler_x86_exp.cpp \ + cpu/x86/vm/macroAssembler_x86_log10.cpp \ + cpu/x86/vm/macroAssembler_x86_log.cpp \ + cpu/x86/vm/macroAssembler_x86_pow.cpp \ + cpu/x86/vm/macroAssembler_x86_sha.cpp \ + cpu/x86/vm/macroAssembler_x86_sin.cpp \ + cpu/x86/vm/macroAssembler_x86_tan.cpp \ + cpu/x86/vm/metaspaceShared_x86_64.cpp \ + cpu/x86/vm/methodHandles_x86.cpp \ + cpu/x86/vm/nativeInst_x86.cpp \ + cpu/x86/vm/register_definitions_x86.cpp \ + cpu/x86/vm/registerMap_x86.cpp \ + cpu/x86/vm/register_x86.cpp \ + cpu/x86/vm/relocInfo_x86.cpp \ + cpu/x86/vm/runtime_x86_64.cpp \ + cpu/x86/vm/sharedRuntime_x86.cpp \ + cpu/x86/vm/stubGenerator_x86_64.cpp \ + cpu/x86/vm/stubRoutines_x86_64.cpp \ + cpu/x86/vm/stubRoutines_x86.cpp \ + cpu/x86/vm/templateInterpreterGenerator_x86_64.cpp \ + cpu/x86/vm/templateInterpreterGenerator_x86.cpp \ + cpu/x86/vm/templateTable_x86.cpp \ + cpu/x86/vm/vmreg_x86.cpp \ + cpu/x86/vm/vm_version_x86.cpp \ + cpu/x86/vm/vtableStubs_x86_64.cpp \ + os_cpu/bsd_x86/vm/assembler_bsd_x86.cpp \ + os_cpu/bsd_x86/vm/os_bsd_x86.cpp \ + os_cpu/bsd_x86/vm/thread_bsd_x86.cpp \ + os_cpu/bsd_x86/vm/vm_version_bsd_x86.cpp + +SRC_S = os_cpu/bsd_x86/vm/bsd_x86_64.s + +# +# Force preprocessing +# +CC_OPT_os_cpu/bsd_x86/vm/bsd_x86_64 = -x assembler-with-cpp +CC_OPT_share/vm/runtime/rtmLocking = -DINCLUDE_RTM_OPT + +# +# XXX: generated source +# +SRC_GEN = ad_x86.cpp ad_x86_format.cpp ad_x86_clone.cpp ad_x86_gen.cpp \ + ad_x86_expand.cpp ad_x86_misc.cpp ad_x86_peephole.cpp \ + ad_x86_pipeline.cpp dfa_x86.cpp jvmtiEnterTrace.cpp jvmtiEnter.cpp + +$(foreach FILE, $(SRC_GEN:.cpp=), $(eval CC_OPT_$(FILE) = -DLINUX -D_GNU_SOURCE -DCOMPILER2)) +SRC_CC += $(SRC_GEN) + + +vpath ad_x86.cpp $(JDK_GENERATED)/src +vpath ad_x86_format.cpp $(JDK_GENERATED)/src +vpath ad_x86_clone.cpp $(JDK_GENERATED)/src +vpath ad_x86_gen.cpp $(JDK_GENERATED)/src +vpath ad_x86_expand.cpp $(JDK_GENERATED)/src +vpath ad_x86_misc.cpp $(JDK_GENERATED)/src +vpath ad_x86_peephole.cpp $(JDK_GENERATED)/src +vpath ad_x86_pipeline.cpp $(JDK_GENERATED)/src +vpath dfa_x86.cpp $(JDK_GENERATED)/src +vpath jvmtiEnterTrace.cpp $(JDK_GENERATED)/src +vpath jvmtiEnter.cpp $(JDK_GENERATED)/src + + +include $(REP_DIR)/lib/mk/jvm.inc diff --git a/ports/jdk.hash b/ports/jdk.hash new file mode 100644 index 0000000..a2e3f15 --- /dev/null +++ b/ports/jdk.hash @@ -0,0 +1 @@ +e878af950a95fe36270ae12dcfb2bb0b7d6c12e7 diff --git a/ports/jdk.port b/ports/jdk.port new file mode 100644 index 0000000..82c433c --- /dev/null +++ b/ports/jdk.port @@ -0,0 +1,19 @@ +LICENSE := GPLv2 +VERSION := 64892f1c9874938dfcdc235b5c051dd761cdd833 +DOWNLOADS := jdk.archive + +NAME(jdk) := jdk.tgz +URL(jdk) := https://api.github.com/repos/dmlloyd/openjdk/tarball/$(VERSION) +SHA(jdk) := d5b032d5d312148d1c15cde975aa43c4dfa4f2441472d70270ffd6aa22a33694 +TAR_OPT(jdk) := --strip-components=1 --files-from=$(REP_DIR)/src/app/jdk/files.list +DIR(jdk) := src/app/jdk + +PATCHES := $(addprefix src/app/jdk/patches/,jdk.patch arm.patch \ + icache.patch size.patch) + +# This patch has to be applied to JDK when building the standard Java library +# pollselectorprovider.patch + +PATCH_OPT := -p1 -d src/app/jdk + +# vi: set ft=make : diff --git a/ports/jdk_generated.hash b/ports/jdk_generated.hash new file mode 100644 index 0000000..2fd789e --- /dev/null +++ b/ports/jdk_generated.hash @@ -0,0 +1 @@ +29aa37f2c68c1f10ed798f48b34bdccecdb6b942 diff --git a/ports/jdk_generated.port b/ports/jdk_generated.port new file mode 100644 index 0000000..0967605 --- /dev/null +++ b/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) := 481deffcb4a346c36f15f3b26c44be0dcb356218 +DIR(jdk_generated) := src/app/jdk + +# vi: set ft=make : diff --git a/recipes/pkg/jdk_demo/README b/recipes/pkg/jdk_demo/README new file mode 100644 index 0000000..af84632 --- /dev/null +++ b/recipes/pkg/jdk_demo/README @@ -0,0 +1 @@ +This package contains a Hello World! example for OpenJDK. diff --git a/recipes/pkg/jdk_demo/archives b/recipes/pkg/jdk_demo/archives new file mode 100644 index 0000000..4b02d4a --- /dev/null +++ b/recipes/pkg/jdk_demo/archives @@ -0,0 +1,6 @@ +_/raw/jdk +_/src/jdk +_/src/libc +_/src/stdcxx +_/src/vfs +_/src/zlib diff --git a/recipes/pkg/jdk_demo/hash b/recipes/pkg/jdk_demo/hash new file mode 100644 index 0000000..9e34aed --- /dev/null +++ b/recipes/pkg/jdk_demo/hash @@ -0,0 +1 @@ +2018-11-27 a8076069a98b771ef9fa425c5877dd57b469db2e diff --git a/recipes/pkg/jdk_demo/runtime b/recipes/pkg/jdk_demo/runtime new file mode 100644 index 0000000..10dd270 --- /dev/null +++ b/recipes/pkg/jdk_demo/runtime @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2000-01-01 00:00 + + + + + + + -server KNOWN +-client IGNORE + + + + + + + + + + + + + + + + + diff --git a/recipes/raw/jdk/content.mk b/recipes/raw/jdk/content.mk new file mode 100644 index 0000000..a00f472 --- /dev/null +++ b/recipes/raw/jdk/content.mk @@ -0,0 +1,12 @@ +content: tzdb.dat hello.tar classes.tar + +GENERATED_DIR := $(call port_dir,$(REP_DIR)/ports/jdk_generated)/src/app/jdk/bin + +tzdb.dat: + cp $(GENERATED_DIR)/$@ $@ + +hello.tar: + cp $(GENERATED_DIR)/$@ $@ + +classes.tar: + cp $(GENERATED_DIR)/$@ $@ diff --git a/recipes/raw/jdk/hash b/recipes/raw/jdk/hash new file mode 100644 index 0000000..ef2e5e1 --- /dev/null +++ b/recipes/raw/jdk/hash @@ -0,0 +1 @@ +2018-11-26 d03f7e204179413e2a721a65e5b5ce07c3464fea diff --git a/recipes/src/jdk/content.mk b/recipes/src/jdk/content.mk new file mode 100644 index 0000000..b5ec561 --- /dev/null +++ b/recipes/src/jdk/content.mk @@ -0,0 +1,42 @@ +LIB_MK_FILES := java.inc jdk_version.inc jimage.mk jli.mk \ + jnet.mk jvm.inc jzip.mk management.mk nio.mk \ + $(foreach SPEC,x86_64 arm, \ + spec/$(SPEC)/java.mk spec/$(SPEC)/jvm.mk) \ + +MIRROR_FROM_REP_DIR := src/app/jdk \ + $(addprefix lib/mk/,$(LIB_MK_FILES)) \ + lib/import/import-jli.mk + +content: $(MIRROR_FROM_REP_DIR) + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +MIRROR_FROM_LIBPORTS := include/libc-plugin \ + lib/mk/libc_pipe.mk \ + src/lib/libc_pipe + +content: $(MIRROR_FROM_LIBPORTS) + +$(MIRROR_FROM_LIBPORTS): + mkdir -p $(dir $@) + cp -r $(GENODE_DIR)/repos/libports/$@ $@ + +PORT_DIR := $(call port_dir,$(REP_DIR)/ports/jdk) +GENERATED_DIR := $(call port_dir,$(REP_DIR)/ports/jdk_generated) + +src/app/jdk/hotspot: $(MIRROR_FROM_REP_DIR) + mkdir -p $(dir $@) + cp -r $(PORT_DIR)/src/app/jdk/* src/app/jdk/ + +src/app/jdk/src: src/app/jdk/hotspot + cp -r $(GENERATED_DIR)/src/app/jdk/include \ + $(GENERATED_DIR)/src/app/jdk/src \ + src/app/jdk + +content: src/app/jdk/src + +content: LICENSE + +LICENSE: + cp $(PORT_DIR)/src/app/jdk/$@ $@ diff --git a/recipes/src/jdk/hash b/recipes/src/jdk/hash new file mode 100644 index 0000000..d3db728 --- /dev/null +++ b/recipes/src/jdk/hash @@ -0,0 +1 @@ +2018-11-27 fd32f8448204c238c784486ad632f23a42c4785b diff --git a/recipes/src/jdk/used_apis b/recipes/src/jdk/used_apis new file mode 100644 index 0000000..3648c0c --- /dev/null +++ b/recipes/src/jdk/used_apis @@ -0,0 +1,6 @@ +base +libc +os +stdcxx +timer_session +zlib diff --git a/run/java.run b/run/java.run new file mode 100644 index 0000000..9cd6ae0 --- /dev/null +++ b/run/java.run @@ -0,0 +1,92 @@ + +set build_components { + core init + drivers/timer + app/jdk/java +} + +build $build_components +create_boot_directory + +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 hello.tar + 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 + vfs.lib.so stdcxx.lib.so + classes.tar tzdb.dat management.lib.so +} + +build_boot_image $boot_modules + +append qemu_args " -nographic -serial mon:stdio " + +run_genode_until forever diff --git a/src/app/jdk/files.list b/src/app/jdk/files.list new file mode 100644 index 0000000..b071fb5 --- /dev/null +++ b/src/app/jdk/files.list @@ -0,0 +1,1833 @@ +dmlloyd-openjdk-64892f1/LICENSE +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/abstractInterpreter_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm_32.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm_32.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm_64.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/assembler_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/bytes_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_CodeStubs_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_Defs_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_FpuStackSim_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_FpuStackSim_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_FrameMap_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_FrameMap_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_globals_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LinearScan_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LinearScan_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LIR_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LIRAssembler_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LIRAssembler_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LIRGenerator_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_LIRGenerator_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_MacroAssembler_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_MacroAssembler_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c1_Runtime1_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/c2_globals_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/codeBuffer_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/compiledIC_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/copy_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/debug_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/depChecker_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/depChecker_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/disassembler_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/frame_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/frame_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/frame_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/globalDefinitions_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/globals_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/icache_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/icache_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/icBuffer_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/interp_masm_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/interp_masm_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/interpreterRT_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/interpreterRT_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/javaFrameAnchor_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/jni_arm.h +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/jniFastGetField_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/jniTypes_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/jvmciCodeInstaller_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/macroAssembler_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/macroAssembler_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/macroAssembler_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/metaspaceShared_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/methodHandles_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/methodHandles_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/nativeInst_arm_32.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/nativeInst_arm_32.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/nativeInst_arm_64.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/nativeInst_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/register_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/register_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/register_definitions_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/registerMap_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/relocInfo_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/relocInfo_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/runtime_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/sharedRuntime_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/stubGenerator_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/stubRoutines_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/stubRoutines_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/stubRoutinesCrypto_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/templateInterpreterGenerator_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/templateTable_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/templateTable_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vmreg_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vmreg_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vmreg_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vmStructs_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vm_version_arm_32.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vm_version_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/arm/vm/vtableStubs_arm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/abstractInterpreter_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/assembler_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/assembler_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/assembler_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/bytes_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_Defs_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_FpuStackSim_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_FpuStackSim_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_FrameMap_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_FrameMap_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_globals_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_LIR_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/c2_init_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/codeBuffer_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/compiledIC_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/copy_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/crc32c.h +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/debug_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/depChecker_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/depChecker_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/disassembler_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/frame_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/frame_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/frame_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/globalDefinitions_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/globals_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/icache_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/icache_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/icBuffer_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/interp_masm_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/interpreterRT_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/interpreterRT_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/javaFrameAnchor_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/jniFastGetField_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/jniTypes_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/jni_x86.h +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/jvmciCodeInstaller_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_cos.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_exp.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_log10.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_log.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_pow.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_sha.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_sin.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/macroAssembler_x86_tan.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/metaspaceShared_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/methodHandles_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/nativeInst_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/nativeInst_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/register_definitions_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/registerMap_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/registerMap_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/register_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/register_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/relocInfo_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/relocInfo_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/runtime_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/sharedRuntime_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/stubRoutines_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/stubRoutines_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/templateInterpreterGenerator_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/templateInterpreterGenerator_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/templateTable_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/templateTable_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vmreg_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vmreg_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vmStructs_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vm_version_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/dtrace/generateJvmOffsets.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/dtrace/generateJvmOffsets.h +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/dtrace/jvm_dtrace.h +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/dtrace/libjvm_db.h +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/attachListener_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/c1_globals_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/c2_globals_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/decoder_machO.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/decoder_machO.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/globals_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/interfaceSupport_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/jvm_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/jvm_bsd.h +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/os_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/os_share_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/osThread_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/osThread_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/semaphore_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/stubRoutines_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/threadCritical_bsd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/bsd/vm/vmStructs_bsd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/assembler_bsd_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/atomic_bsd_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/bsd_x86_64.s +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/copy_bsd_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/orderAccess_bsd_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/prefetch_bsd_x86.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/thread_bsd_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_x86/vm/vm_version_bsd_x86.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/bytes_bsd_zero.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/prefetch_bsd_zero.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/thread_bsd_zero.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/bsd_zero/vm/vmStructs_bsd_zero.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/atomic_linux_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/bytes_linux_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/copy_linux_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/globals_linux_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/linux_arm_32.s +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/macroAssembler_linux_arm_32.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/orderAccess_linux_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/os_linux_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/prefetch_linux_arm.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/thread_linux_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os_cpu/linux_arm/vm/vmStructs_linux_arm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/c1_globals_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/c2_globals_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/decoder_linux.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/globals_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/interfaceSupport_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/os_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/os_linux.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/os_share_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/osThread_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/linux/vm/vmStructs_linux.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/posix/vm/os_posix.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/posix/vm/os_posix.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/posix/vm/semaphore_posix.hpp +dmlloyd-openjdk-64892f1/hotspot/src/os/posix/vm/threadLocalStorage_posix.cpp +dmlloyd-openjdk-64892f1/hotspot/src/os/posix/vm/vmError_posix.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/tools/hsdis/hsdis.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/adlc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/adlparse.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/archDesc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/arena.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/dict2.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/filebuff.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/forms.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/formsopt.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/adlc/formssel.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/aot/aotCodeHeap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/aot/aotCompiledMethod.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/aot/aotLoader.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/aot/aotLoader.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/aot/compiledIC_aot.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/assembler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/assembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/assembler.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/codeBuffer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/codeBuffer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/macroAssembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/macroAssembler.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/register.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/asm/register.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Canonicalizer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_CFGPrinter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_CodeStubs.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Compilation.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Compilation.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Compiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Compiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Defs.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Defs.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_FrameMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_FrameMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_globals.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Instruction.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Instruction.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_InstructionPrinter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_IR.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_IR.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LinearScan.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LinearScan.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIR.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_LIR.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Optimizer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Optimizer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_RangeCheckElimination.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_RangeCheckElimination.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Runtime1.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_Runtime1.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueStack.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueStack.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueType.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/c1/c1_ValueType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciArrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciArrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciBaseObject.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciBaseObject.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciCallProfile.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciCallSite.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciCallSite.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciClassList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciConstant.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciConstant.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciConstantPoolCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciConstantPoolCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciEnv.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciEnv.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciExceptionHandler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciExceptionHandler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciField.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciField.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciFlags.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciFlags.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciInstance.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciInstance.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciInstanceKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciInstanceKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMemberName.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMemberName.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMetadata.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMetadata.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodBlocks.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodBlocks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethod.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodData.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodData.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodHandle.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodHandle.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethod.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciMethodType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciNullObject.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciNullObject.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjArrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjArrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObject.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjectFactory.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObjectFactory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciObject.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciReplay.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciReplay.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciSignature.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciSignature.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciStreams.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciStreams.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciSymbol.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciSymbol.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeArrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeArrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciType.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeFlow.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciTypeFlow.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciUtilities.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/ciUtilities.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/ci/compilerInterface.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/altHashing.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/altHashing.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/bytecodeAssembler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/bytecodeAssembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classFileError.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classFileParser.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classFileParser.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classFileStream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classFileStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classListParser.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classListParser.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoader.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderData.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderData.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderData.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderExt.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderExt.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoader.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderStats.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/classLoaderStats.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/compactHashtable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/compactHashtable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/compactHashtable.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/defaultMethods.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/defaultMethods.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/dictionary.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/dictionary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/javaAssertions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/javaAssertions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/javaClasses.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/javaClasses.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/javaClasses.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/jimage.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/klassFactory.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/klassFactory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/loaderConstraints.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/loaderConstraints.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/metadataOnStackMark.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/metadataOnStackMark.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/moduleEntry.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/moduleEntry.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/modules.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/modules.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/packageEntry.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/packageEntry.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/placeholders.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/placeholders.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/resolutionErrors.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/resolutionErrors.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/sharedClassUtil.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/sharedPathsMiscInfo.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/sharedPathsMiscInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stackMapFrame.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stackMapFrame.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stackMapTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stackMapTableFormat.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stackMapTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stringTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/stringTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/symbolTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/symbolTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/systemDictionary.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/systemDictionary_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/systemDictionary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/verificationType.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/verificationType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/verifier.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/verifier.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/vmSymbols.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/vmSymbols_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/classfile/vmSymbols.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/codeBlob.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/codeBlob.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/codeCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/codeCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compiledIC.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compiledIC.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compiledMethod.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compiledMethod.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compressedStream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/compressedStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/debugInfo.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/debugInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/debugInfoRec.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/debugInfoRec.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/dependencies.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/dependencies.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/dependencyContext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/dependencyContext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/exceptionHandlerTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/exceptionHandlerTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/icBuffer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/icBuffer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/jvmticmlr.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/location.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/location.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/nativeInst.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/nmethod.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/nmethod.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/oopRecorder.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/oopRecorder.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/pcDesc.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/pcDesc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/relocInfo.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/relocInfo_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/relocInfo_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/relocInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/scopeDesc.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/scopeDesc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/stubs.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/stubs.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/vmreg.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/vmreg.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/vmreg.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/vtableStubs.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/code/vtableStubs.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/abstractCompiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/abstractCompiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileBroker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileBroker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileLog.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileLog.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerDefinitions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerDefinitions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerDirectives.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerDirectives.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerOracle.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compilerOracle.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileTask.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/compileTask.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/directivesParser.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/directivesParser.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/disassembler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/disassembler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/methodLiveness.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/methodLiveness.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/methodMatcher.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/methodMatcher.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/oopMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/compiler/oopMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/adaptiveFreeList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/adaptiveFreeList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/allocationStats.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/allocationStats.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsCollectorPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsLockVerifier.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsLockVerifier.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsOopClosures.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsOopClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/cmsOopClosures.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/compactibleFreeListSpace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/concurrentMarkSweepThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/freeChunk.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/freeChunk.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/gSpaceCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/gSpaceCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parCardTableModRefBS.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parNewGeneration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parNewGeneration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parNewGeneration.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parOopClosures.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parOopClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/parOopClosures.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/promotionInfo.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/promotionInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/vmCMSOperations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/vmCMSOperations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/vmStructs_cms.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/vmStructs_parNew.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/cms/yieldingWorkgroup.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/bufferingOopClosure.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentG1Refine.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentG1Refine.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentG1RefineThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentMarkThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentMarkThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/concurrentMarkThread.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/dirtyCardQueue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/dirtyCardQueue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/evacuationInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1AllocationContext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Allocator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Allocator_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Allocator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Allocator.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1AllocRegion.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1AllocRegion.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1AllocRegion.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Analytics.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Analytics.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1BiasedArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1BiasedArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1BlockOffsetTable.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CardCounts.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CardCounts.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CardLiveData.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CardLiveData.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CardLiveData.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CodeBlobClosure.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CodeBlobClosure.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CodeCacheRemSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CodeRootSetTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectedHeap_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectedHeap.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectionSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectionSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1CollectorState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMark.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMark.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMark.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ConcurrentMarkObjArrayProcessor.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1DefaultPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1DefaultPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EdenRegions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EvacFailure.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EvacFailure.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EvacStats.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EvacStats.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1EvacStats.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1FromCardCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1FromCardCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1GCPhaseTimes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1_globals.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1_globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapRegionTraceType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapSizingPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapSizingPolicy_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapSizingPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapTransition.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapTransition.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapVerifier.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HeapVerifier.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HotCardCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HotCardCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1HRPrinter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1IHOPControl.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1IHOPControl.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1InCSetState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1InitialMarkToMixedTimeTracker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MarkSweep.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MarkSweep_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MarkSweep.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MMUTracker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MMUTracker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1MonitoringSupport.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1OopClosures.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1OopClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1OopClosures.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1PageBasedVirtualSpace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ParScanThreadState_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1ParScanThreadState.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Policy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1Predictions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RegionToSpaceMapper.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RemSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RemSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RemSet.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RemSetSummary.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RemSetSummary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RootClosures.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RootClosures_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RootClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RootProcessor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SATBCardTableModRefBS.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SharedClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1_specialized_oop_closures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedup.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedup.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupQueue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupStat.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupStat.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1StringDedupThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SurvivorRegions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1SurvivorRegions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1YCTypes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1YoungGenSizer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1YoungGenSizer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1YoungRemSetSamplingThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/g1YoungRemSetSamplingThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionBounds.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionBounds.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegion.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegion.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegion.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionManager.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionManager.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionRemSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionRemSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionSet.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionTracer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionTracer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionType.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/heapRegionType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/hSpaceCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/hSpaceCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/ptrQueue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/ptrQueue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/satbMarkQueue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/satbMarkQueue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/sparsePRT.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/sparsePRT.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/survRateGroup.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/survRateGroup.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/suspendibleThreadSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/vm_operations_g1.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/vm_operations_g1.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/vmStructs_g1.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/workerDataArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/workerDataArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/g1/workerDataArray.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/adjoiningGenerations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/adjoiningVirtualSpaces.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/asPSOldGen.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/asPSOldGen.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/asPSYoungGen.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/asPSYoungGen.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/cardTableExtension.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/cardTableExtension.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcAdaptivePolicyCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcTaskManager.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcTaskManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcTaskThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/gcTaskThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/generationSizer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/generationSizer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/immutableSpace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/immutableSpace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/mutableNUMASpace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/mutableSpace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/mutableSpace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/objectStartArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/objectStartArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/objectStartArray.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/parallelScavengeHeap.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/parMarkBitMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/parMarkBitMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/pcTasks.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/pcTasks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psCompactionManager.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psCompactionManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psCompactionManager.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psGCAdaptivePolicyCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psGenerationCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psGenerationCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psMarkSweep.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psMarkSweepDecorator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psMarkSweep.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psOldGen.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psOldGen.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psParallelCompact.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psParallelCompact.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionLAB.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionLAB.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionLAB.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionManager.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psPromotionManager.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psScavenge.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psScavenge.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psScavenge.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psTasks.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psTasks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psVirtualspace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psVirtualspace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psYoungGen.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/psYoungGen.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/spaceCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/spaceCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/vmPSOperations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/vmPSOperations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/parallel/vmStructs_parallelgc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/cSpaceCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/cSpaceCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/defNewGeneration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/defNewGeneration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/defNewGeneration.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/genMarkSweep.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/genMarkSweep.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/markSweep.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/markSweep.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/markSweep.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/tenuredGeneration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/tenuredGeneration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/serial/tenuredGeneration.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/adaptiveSizePolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/ageTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/ageTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/ageTable.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/ageTableTracer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/ageTableTracer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/allocTracer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/allocTracer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/barrierSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/barrierSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/barrierSet.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/blockOffsetTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/blockOffsetTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/blockOffsetTable.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardGeneration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardGeneration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardGeneration.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableModRefBS.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableModRefBSForCTRS.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableModRefBSForCTRS.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableModRefBS.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableModRefBS.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableRS.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/cardTableRS.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectedHeap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectedHeap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectorCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectorCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectorPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/collectorPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/concurrentGCThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/concurrentGCThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/copyFailedInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcCause.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcCause.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcHeapSummary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcId.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcId.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcLocker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcLocker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcLocker.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcName.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcPolicyCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcPolicyCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcStats.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcStats.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTimer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTimer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTrace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTrace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTraceSend.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTraceTime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTraceTime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcTraceTime.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcUtil.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcUtil.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/gcWhen.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/genCollectedHeap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generationCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generationCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generation.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generation.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generationSpec.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/generationSpec.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/genOopClosures.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/genOopClosures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/genOopClosures.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/isGCActiveMark.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/memset_with_concurrent_readers.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/modRefBarrierSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/objectCountEventSender.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/objectCountEventSender.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/plab.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/plab.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/plab.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/preservedMarks.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/preservedMarks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/preservedMarks.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referencePolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referencePolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referenceProcessor.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/space.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/spaceDecorator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/spaceDecorator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/space.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/space.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/specialized_oop_closures.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/strongRootsScope.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/strongRootsScope.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/taskqueue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/taskqueue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/taskqueue.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/vmGCOperations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/vmGCOperations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/workerManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/workgroup.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/gc/shared/workgroup.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/abstractInterpreter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeHistogram.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeHistogram.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeInterpreterProfiling.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeStream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeTracer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/bytecodeTracer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/cppInterpreter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/cppInterpreter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/interp_masm.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/interpreter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/interpreter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/invocationCounter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/invocationCounter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/linkResolver.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/linkResolver.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/oopMapCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/oopMapCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/rewriter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/rewriter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateInterpreter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateInterpreter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/interpreter/templateTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/compilerRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCodeInstaller.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCompiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCompiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciEnv.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciEnv.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmci_globals.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmci_globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciJavaClasses.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciJavaClasses.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciRuntime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/jvmciRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/systemDictionary_jvmci.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/vmStructs_compiler_runtime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/vmStructs_jvmci.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/vmStructs_jvmci.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/jvmci/vmSymbols_jvmci.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/dict.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/dict.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/set.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/set.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/vectset.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/libadt/vectset.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logConfiguration.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logConfiguration.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDecorations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDecorations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDecorators.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDecorators.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDiagnosticCommand.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logDiagnosticCommand.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logFileOutput.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logFileOutput.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logFileStreamOutput.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logFileStreamOutput.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logHandle.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/log.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logLevel.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logLevel.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logMessageBuffer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logMessageBuffer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logMessage.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logOutput.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logOutput.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logOutputList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logOutputList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logPrefix.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logStream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logStream.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTag.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTag_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTag.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagLevelExpression.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagLevelExpression.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagSetDescriptions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagSetDescriptions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/logging/logTagSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/allocation.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/allocation.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/allocation.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/filemap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/filemap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/freeBlockDictionary.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/freeBlockDictionary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/freeList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/freeList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/guardedMemory.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/guardedMemory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/heap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/heap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/heapInspection.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/heapInspection.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/iterator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/iterator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/iterator.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/memRegion.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/memRegion.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metachunk.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metachunk.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metadataFactory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceChunkFreeListSummary.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceGCThresholdUpdater.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceShared.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceShared.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceTracer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/metaspaceTracer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/oopFactory.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/oopFactory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/padded.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/padded.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/referenceType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/resourceArea.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/resourceArea.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/universe.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/universe_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/universe.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/universe.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/virtualspace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/memory/virtualspace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/annotations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/annotations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/arrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/arrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/arrayKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/arrayOop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/compiledICHolder.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/compiledICHolder.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/constantPool.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/constantPool.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/constMethod.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/constMethod.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/cpCache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/cpCache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/fieldInfo.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/fieldStreams.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/generateOopMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/generateOopMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceClassLoaderKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceClassLoaderKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceMirrorKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceOop.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceOop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceRefKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceRefKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/instanceRefKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/klass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/klass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/klass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/klassVtable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/klassVtable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/markOop.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/markOop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/markOop.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/metadata.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/metadata.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/methodCounters.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/methodCounters.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/method.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/methodData.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/methodData.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/method.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayOop.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayOop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/objArrayOop.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/oop.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/oop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/oop.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/oopsHierarchy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/oopsHierarchy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/symbol.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/symbol.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/typeArrayKlass.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/typeArrayKlass.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/typeArrayKlass.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/typeArrayOop.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/typeArrayOop.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/oops/verifyOopClosure.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/addnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/addnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/ad.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/adlcVMDeps.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/arraycopynode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/arraycopynode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/block.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/block.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/buildOopMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/bytecodeInfo.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/c2compiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/c2compiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/c2_globals.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/c2_globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/callGenerator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/callGenerator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/callnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/callnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/castnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/castnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/cfgnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/cfgnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/chaitin.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/chaitin.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/classes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/classes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/coalesce.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/coalesce.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/compile.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/compile.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/connode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/connode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/convertnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/convertnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/countbitsnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/countbitsnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/divnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/divnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/doCall.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/domgraph.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/escape.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/escape.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/gcm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/generateOptoStub.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/graphKit.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/graphKit.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/idealGraphPrinter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/idealGraphPrinter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/idealKit.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/idealKit.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/ifg.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/ifnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/indexSet.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/indexSet.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/intrinsicnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/intrinsicnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/lcm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/library_call.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/live.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/live.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/locknode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/locknode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopopts.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopPredicate.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopTransform.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/loopUnswitch.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/machnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/machnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/macroArrayCopy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/macro.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/macro.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/matcher.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/matcher.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/mathexactnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/mathexactnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/memnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/memnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/movenode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/movenode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/mulnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/mulnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/multnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/multnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/narrowptrnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/narrowptrnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/node.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/node.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/opaquenode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/opaquenode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/opcodes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/opcodes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/optoreg.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/output.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/output.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/parse1.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/parse2.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/parse3.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/parseHelper.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/parse.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/phase.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/phase.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/phasetype.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/phaseX.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/phaseX.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/postaloc.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/regalloc.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/regalloc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/regmask.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/regmask.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/reg_split.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/replacednodes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/replacednodes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/rootnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/rootnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/runtime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/runtime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/split_if.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/stringopts.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/stringopts.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/subnode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/subnode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/superword.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/superword.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/type.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/type.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/vectornode.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/opto/vectornode.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/precompiled/precompiled.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/evmCompat.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/forte.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/forte.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jniCheck.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jniCheck.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jni.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jniExport.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jniFastGetField.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jniFastGetField.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jni.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jni_md.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvm.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvm.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvm_misc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiAgentThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnv.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEventController.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEventController.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiEventController.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiExport.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiExport.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiExtensions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiExtensions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiImpl.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiImpl.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiManageCapabilities.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiRawMonitor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiThreadState.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiThreadState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiThreadState.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiTrace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiTrace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiUtil.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/jvmtiUtil.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/methodComparator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/methodComparator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/methodHandles.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/methodHandles.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/nativeLookup.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/nativeLookup.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/perf.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/privilegedStack.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/privilegedStack.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/stackwalk.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/stackwalk.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/unsafe.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/unsafe.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/wbtestmethods/parserTests.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/wbtestmethods/parserTests.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/whitebox.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/whitebox_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/prims/whitebox.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/advancedThresholdPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/arguments.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/arguments_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/arguments_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/arguments.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/atomic.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/basicLock.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/basicLock.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/biasedLocking.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/biasedLocking.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsGC.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsGC.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsRuntime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagConstraintsRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagRangeList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagRangeList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagWriteableList.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/commandLineFlagWriteableList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/compilationPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/compilationPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/deoptimization.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/deoptimization.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/extendedPC.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fieldDescriptor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fieldDescriptor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fieldType.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fieldType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fprofiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/fprofiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/frame.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/frame.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/frame.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/globals.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/globals_extension.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/globals_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/handles.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/handles.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/handles.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/icache.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/icache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/init.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/init.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/interfaceSupport.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/interfaceSupport.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/javaCalls.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/javaCalls.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/java.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/java.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/jniHandles.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/jniHandles.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/jniPeriodicChecker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/jniPeriodicChecker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/memprofiler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/memprofiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/monitorChunk.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/monitorChunk.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/mutex.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/mutex.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/mutexLocker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/mutexLocker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/objectMonitor.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/objectMonitor.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/objectMonitor.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/orderAccess.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/orderAccess.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/orderAccess.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/os.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/os_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/os.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/os.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/osThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/osThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/park.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/park.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/perfData.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/perfData.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/perfMemory.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/perfMemory.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/prefetch.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/prefetch.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/reflection.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/reflection.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/reflectionUtils.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/reflectionUtils.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/registerMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/relocator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/relocator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/rframe.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/rframe.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/rtmLocking.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/rtmLocking.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/safepoint.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/safepoint.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/semaphore.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/serviceThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/serviceThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sharedRuntime.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sharedRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sharedRuntimeMath.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sharedRuntimeTrans.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sharedRuntimeTrig.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/signature.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/signature.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/simpleThresholdPolicy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stackValueCollection.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stackValueCollection.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stackValue.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stackValue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/statSampler.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/statSampler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stubRoutines.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/stubRoutines.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sweeper.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/sweeper.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/synchronizer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/synchronizer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/task.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/task.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/thread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/threadCritical.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/thread_ext.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/thread_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/thread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/thread.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/threadLocalStorage.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/timer.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/timer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/timerTrace.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/timerTrace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/unhandledOops.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/unhandledOops.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframeArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframeArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframe.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframe_hp.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframe_hp.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vframe.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vm_operations.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vm_operations.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmStructs.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmStructs_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmStructs.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmStructs_trace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmThread.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vmThread.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vm_version.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/runtime/vm_version.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/allocationContextService.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/allocationSite.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/attachListener.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/attachListener.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/classLoadingService.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/classLoadingService.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticArgument.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticArgument.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticCommand.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticCommand_ext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticCommand.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticFramework.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/diagnosticFramework.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/dtraceAttacher.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/dtraceAttacher.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/g1MemoryPool.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/g1MemoryPool.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/gcNotifier.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/gcNotifier.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/heapDumper.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/heapDumper.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/jmm.h +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/lowMemoryDetector.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/lowMemoryDetector.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/mallocSiteTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/mallocSiteTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/mallocTracker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/mallocTracker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/mallocTracker.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/management.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/management.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memBaseline.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memBaseline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryManager.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryPool.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryPool.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryService.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryService.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memoryUsage.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memReporter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memReporter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memTracker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/memTracker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/nmtCommon.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/nmtCommon.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/nmtDCmd.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/nmtDCmd.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/psMemoryPool.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/psMemoryPool.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/runtimeService.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/runtimeService.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/serviceUtil.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/threadService.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/threadService.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/virtualMemoryTracker.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/virtualMemoryTracker.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/writeableFlags.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/services/writeableFlags.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/llvmHeaders.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/llvmValue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkBlock.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkBuilder.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkCacheDecache.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkCodeBuffer.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkCompiler.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkConstant.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkContext.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkEntry.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkFunction.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/shark_globals.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkInliner.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkIntrinsics.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkInvariants.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkMemoryManager.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkNativeWrapper.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkRuntime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkStack.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkState.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkStateScanner.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkType.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/shark/sharkValue.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/noTraceBackend.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceBackend.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceBackend.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceDataTypes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceEvent.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceMacros.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceStream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/traceTime.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/trace/tracing.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/accessFlags.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/accessFlags.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/array.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/bitMap.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/bitMap.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/bitMap.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/bytes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/chunkedList.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/constantTag.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/constantTag.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/copy.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/copy.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/debug.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/debug.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/decoder.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/decoder_elf.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/decoder_elf.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/decoder.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/defaultStream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/dtrace_disabled.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/dtrace.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfFile.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfFile.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfFuncDescTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfFuncDescTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfStringTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfStringTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfSymbolTable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/elfSymbolTable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/errorReporter.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/errorReporter.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/events.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/events.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/exceptions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/exceptions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/fakeRttiSupport.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions_sparcWorks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/globalDefinitions_xlc.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/growableArray.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/growableArray.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/hashtable.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/hashtable.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/hashtable.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/histogram.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/histogram.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/internalVMTests.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/internalVMTests.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/intHisto.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/intHisto.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/json.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/json.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/linkedlist.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/macros.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/nativeCallStack.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/nativeCallStack.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/numberSeq.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/numberSeq.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/ostream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/ostream.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/pair.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/preserveException.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/preserveException.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/quickSort.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/resourceHash.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/sizes.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/sizes.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/stack.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/stack.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/stringUtils.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/stringUtils.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/ticks.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/ticks.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/ticks.inline.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/utf8.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/utf8.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/vmError.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/vmError.hpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/xmlstream.cpp +dmlloyd-openjdk-64892f1/hotspot/src/share/vm/utilities/xmlstream.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/macosx/native/libnet/bsd_close.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/include/classfile_constants.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/include/jni.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/include/jvm.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/include/jvmticmlr.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/launcher/defines.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/launcher/main.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libfdlibm/fdlibm.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libfdlibm/jfdlibm.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/AccessController.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Array.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/AtomicLong.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/BootLoader.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/check_version.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Class.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/ClassLoader.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/ConstantPool.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Double.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Executable.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Field.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/FileInputStream.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Float.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/gdefs.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/io_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/io_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/java_props.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jdk_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jdk_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jio.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jlong.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jni_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/jni_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Module.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/NativeAccessors.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Object.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/ObjectInputStream.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/ObjectOutputStream.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/ObjectStreamClass.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/RandomAccessFile.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Reference.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Reflection.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Runtime.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/SecurityManager.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Shutdown.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Signal.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/sizecalc.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/StackStreamFactory.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/StackTraceElement.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/StrictMath.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/String.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/StringCoding.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/System.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Thread.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/Throwable.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/TimeZone.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/verify_stub.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/VM.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjava/VMSupport.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/endian.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/endian.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/imageDecompressor.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/imageDecompressor.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/imageFile.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/imageFile.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/inttypes.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/jimage.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/jimage.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/NativeImageBuffer.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjimage/osSupport.hpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/args.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/emessages.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/java.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/java.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/jli_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/jli_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/manifest_info.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/parse_manifest.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/splashscreen.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/splashscreen_stubs.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/wildcard.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libjli/wildcard.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnet/Inet4Address.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnet/Inet6Address.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnet/InetAddress.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnet/net_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnet/net_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libnio/ch/nio.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libverify/check_code.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libverify/check_format.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libverify/opcodes.in_out +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/Adler32.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/CRC32.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/Deflater.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/Inflater.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/zip_util.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/share/native/libzip/zip_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/include/jni_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/include/jvm_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/canonicalize_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/childproc.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/FileDescriptor_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/FileInputStream_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/FileOutputStream_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/gdefs_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/io_util_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/io_util_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/java_props_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/jdk_util_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/jdk_util_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/jlong_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/jni_util_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/locale_str.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/ProcessEnvironment_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/RandomAccessFile_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/TimeZone_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/TimeZone_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjava/UnixFileSystem_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjimage/osSupport_unix.cpp +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjli/java_md_common.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjli/java_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjli/java_md_solinux.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libjli/java_md_solinux.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/InetAddressImplFactory.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/net_util_md.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/net_util_md.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/NetworkInterface.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnet/PlainSocketImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/DatagramDispatcher.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/FileChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/FileDispatcherImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/FileKey.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/InheritedChannel.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/IOUtil.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/NativeThread.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/Net.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/nio_util.h +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/PollArrayWrapper.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/ServerSocketChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/SocketChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/SocketDispatcher.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/UnixAsynchronousServerSocketChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/ch/UnixAsynchronousSocketChannelImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/fs/UnixCopyFile.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c +dmlloyd-openjdk-64892f1/jdk/src/java.base/unix/native/libnio/MappedByteBuffer.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/include/jmm.h +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/ClassLoadingImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/GarbageCollectorImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/HotspotThread.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/management.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/management.h +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/MemoryImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/MemoryManagerImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/MemoryPoolImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/ThreadImpl.c +dmlloyd-openjdk-64892f1/jdk/src/java.management/share/native/libmanagement/VMManagementImpl.c diff --git a/src/app/jdk/java/target.mk b/src/app/jdk/java/target.mk new file mode 100644 index 0000000..5197007 --- /dev/null +++ b/src/app/jdk/java/target.mk @@ -0,0 +1,13 @@ +TARGET = java +SRC_C = main.c +LIBS = base jli java jvm libc libm + +# +# native C implementations for standard library Java classes +# +LIBS += management + +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/src/app/jdk/lib/include/alloca.h b/src/app/jdk/lib/include/alloca.h new file mode 100644 index 0000000..cba966e --- /dev/null +++ b/src/app/jdk/lib/include/alloca.h @@ -0,0 +1,10 @@ +#ifndef _INCLUDE__ALLOCA_H_ +#define _INCLUDE__ALLOCA_H_ + + +static inline void *alloca(unsigned long size) +{ + return __builtin_alloca(size); +} + +#endif /* _INCLUDE__ALLOCA_H_ */ diff --git a/src/app/jdk/lib/include/atomic_bsd_arm.hpp b/src/app/jdk/lib/include/atomic_bsd_arm.hpp new file mode 100644 index 0000000..db5e495 --- /dev/null +++ b/src/app/jdk/lib/include/atomic_bsd_arm.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/bytes_bsd_arm.inline.hpp b/src/app/jdk/lib/include/bytes_bsd_arm.inline.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/app/jdk/lib/include/copy_bsd_arm.inline.hpp b/src/app/jdk/lib/include/copy_bsd_arm.inline.hpp new file mode 100644 index 0000000..83552ee --- /dev/null +++ b/src/app/jdk/lib/include/copy_bsd_arm.inline.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/errno.h b/src/app/jdk/lib/include/errno.h new file mode 100644 index 0000000..052a921 --- /dev/null +++ b/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/src/app/jdk/lib/include/globals_bsd_arm.hpp b/src/app/jdk/lib/include/globals_bsd_arm.hpp new file mode 100644 index 0000000..0eed4d3 --- /dev/null +++ b/src/app/jdk/lib/include/globals_bsd_arm.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/jdk_util_md.h b/src/app/jdk/lib/include/jdk_util_md.h new file mode 100644 index 0000000..842c763 --- /dev/null +++ b/src/app/jdk/lib/include/jdk_util_md.h @@ -0,0 +1,9 @@ +#ifndef JDK_UTIL_MD_H +#define JDK_UTIL_MD_H + +#include + +#define ISNANF(f) isnanf(f) +#define ISNAND(d) isnan(d) + +#endif /* JDK_UTIL_MD_H */ diff --git a/src/app/jdk/lib/include/orderAccess_bsd_arm.inline.hpp b/src/app/jdk/lib/include/orderAccess_bsd_arm.inline.hpp new file mode 100644 index 0000000..37c2e7b --- /dev/null +++ b/src/app/jdk/lib/include/orderAccess_bsd_arm.inline.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/os_bsd.hpp b/src/app/jdk/lib/include/os_bsd.hpp new file mode 100644 index 0000000..299ff5a --- /dev/null +++ b/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/src/app/jdk/lib/include/os_bsd_arm.hpp b/src/app/jdk/lib/include/os_bsd_arm.hpp new file mode 100644 index 0000000..abd475f --- /dev/null +++ b/src/app/jdk/lib/include/os_bsd_arm.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/prefetch_bsd_arm.inline.hpp b/src/app/jdk/lib/include/prefetch_bsd_arm.inline.hpp new file mode 100644 index 0000000..84a08ea --- /dev/null +++ b/src/app/jdk/lib/include/prefetch_bsd_arm.inline.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/sys/stat.h b/src/app/jdk/lib/include/sys/stat.h new file mode 100644 index 0000000..3560249 --- /dev/null +++ b/src/app/jdk/lib/include/sys/stat.h @@ -0,0 +1,12 @@ +#ifndef _INCLUDE__SYS__STAT_H_ +#define _INCLUDE__SYS__STAT_H_ + +#include <../libc/sys/stat.h> +#include + +#define stat64 stat +#define fstat64 fstat +#define ftruncate64 ftruncate +#define open64 open + +#endif /* _INCLUDE__SYS__STAT_H_ */ diff --git a/src/app/jdk/lib/include/thread_bsd_arm.hpp b/src/app/jdk/lib/include/thread_bsd_arm.hpp new file mode 100644 index 0000000..78a3e62 --- /dev/null +++ b/src/app/jdk/lib/include/thread_bsd_arm.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/ucontext.h b/src/app/jdk/lib/include/ucontext.h new file mode 100644 index 0000000..73c2166 --- /dev/null +++ b/src/app/jdk/lib/include/ucontext.h @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/include/vmStructs_bsd_arm.hpp b/src/app/jdk/lib/include/vmStructs_bsd_arm.hpp new file mode 100644 index 0000000..0774dad --- /dev/null +++ b/src/app/jdk/lib/include/vmStructs_bsd_arm.hpp @@ -0,0 +1 @@ +#include diff --git a/src/app/jdk/lib/java/math_genode.c b/src/app/jdk/lib/java/math_genode.c new file mode 100644 index 0000000..c0fb5a1 --- /dev/null +++ b/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/src/app/jdk/lib/java/target.mk b/src/app/jdk/lib/java/target.mk new file mode 100644 index 0000000..3a0ad90 --- /dev/null +++ b/src/app/jdk/lib/java/target.mk @@ -0,0 +1 @@ +LIBS = java diff --git a/src/app/jdk/lib/jvm/dummies.cpp b/src/app/jdk/lib/jvm/dummies.cpp new file mode 100644 index 0000000..0f3536a --- /dev/null +++ b/src/app/jdk/lib/jvm/dummies.cpp @@ -0,0 +1,109 @@ +#include + +extern "C" { +#include +#include +#include +#include +#include +#include +} + +#if 0 +#define WARN_NOT_IMPL Genode::warning(__func__, " not implemented (jvm) from ", __builtin_return_address(0)); +#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; +} + + +extern "C" int getifaddrs(struct ifaddrs **pif) +{ + WARN_NOT_IMPL; + return -1; +} + + +extern "C" void freeifaddrs(struct ifaddrs *ifp) +{ + WARN_NOT_IMPL; +} + + +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/src/app/jdk/lib/jvm/os_genode.cpp b/src/app/jdk/lib/jvm/os_genode.cpp new file mode 100644 index 0000000..e017ec0 --- /dev/null +++ b/src/app/jdk/lib/jvm/os_genode.cpp @@ -0,0 +1,4710 @@ +/* + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +/* libc includes */ +#include /* 'malloc'/ 'exit' */ + +// no precompiled headers +#include "classfile/classLoader.hpp" +#include "classfile/systemDictionary.hpp" +#include "classfile/vmSymbols.hpp" +#include "code/icBuffer.hpp" +#include "code/vtableStubs.hpp" +#include "compiler/compileBroker.hpp" +#include "compiler/disassembler.hpp" +#include "interpreter/interpreter.hpp" +#include "jvm_bsd.h" +#include "logging/log.hpp" +#include "memory/allocation.inline.hpp" +#include "memory/filemap.hpp" +#include "oops/oop.inline.hpp" +#include "os_bsd.inline.hpp" +#include "os_share_bsd.hpp" +#include "prims/jniFastGetField.hpp" +#include "prims/jvm.h" +#include "prims/jvm_misc.hpp" +#include "runtime/arguments.hpp" +#include "runtime/atomic.hpp" +#include "runtime/extendedPC.hpp" +#include "runtime/globals.hpp" +#include "runtime/interfaceSupport.hpp" +#include "runtime/java.hpp" +#include "runtime/javaCalls.hpp" +#include "runtime/mutexLocker.hpp" +#include "runtime/objectMonitor.hpp" +#include "runtime/orderAccess.inline.hpp" +#include "runtime/osThread.hpp" +#include "runtime/perfMemory.hpp" +#include "runtime/sharedRuntime.hpp" +#include "runtime/statSampler.hpp" +#include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" +#include "runtime/threadCritical.hpp" +#include "runtime/timer.hpp" +#include "semaphore_bsd.hpp" +#include "services/attachListener.hpp" +#include "services/memTracker.hpp" +#include "services/runtimeService.hpp" +#include "utilities/decoder.hpp" +#include "utilities/defaultStream.hpp" +#include "utilities/events.hpp" +#include "utilities/growableArray.hpp" +#include "utilities/vmError.hpp" + +// put OS-includes here +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#ifndef __APPLE__ +# include +#endif +# include +# include +# include +# include + + +#if defined(__FreeBSD__) || defined(__NetBSD__) + #include +#endif + +#if 0 +#define NOT_IMPL ({ \ + PDBG("called not implmemented"); \ +}) +#else +#define NOT_IMPL +#endif + +extern "C" void backtrace(); + +#ifndef MAP_ANONYMOUS + #define MAP_ANONYMOUS MAP_ANON +#endif + +#define MAX_PATH (2 * K) + +// for timer info max values which include all bits +#define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF) + +#define LARGEPAGES_BIT (1 << 6) + +//////////////////////////////////////////////////////////////////////////////// +// global variables +julong os::Bsd::_physical_memory = 0; + +#ifdef __APPLE__ +mach_timebase_info_data_t os::Bsd::_timebase_info = {0, 0}; +volatile uint64_t os::Bsd::_max_abstime = 0; +#else +int (*os::Bsd::_clock_gettime)(clockid_t, struct timespec *) = NULL; +#endif +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; + +// For diagnostics to print a message once. see run_periodic_checks +static sigset_t check_signal_done; +static bool check_signals = true; + +static pid_t _initial_pid = 0; + +// Signal number used to suspend/resume a thread + +// do not use any signal number less than SIGSEGV, see 4355769 +static int SR_signum = SIGUSR2; +sigset_t SR_sigset; + + +//////////////////////////////////////////////////////////////////////////////// +// utility functions + +static int SR_initialize(); +static void unpackTime(timespec* absTime, bool isAbsolute, jlong time); + +julong os::available_memory() { + return Bsd::available_memory(); +} + +// available here means free +julong os::Bsd::available_memory() { + uint64_t available = physical_memory() >> 2; +#ifdef __APPLE__ + mach_msg_type_number_t count = HOST_VM_INFO64_COUNT; + vm_statistics64_data_t vmstat; + kern_return_t kerr = host_statistics64(mach_host_self(), HOST_VM_INFO64, + (host_info64_t)&vmstat, &count); + assert(kerr == KERN_SUCCESS, + "host_statistics64 failed - check mach_host_self() and count"); + if (kerr == KERN_SUCCESS) { + available = vmstat.free_count * os::vm_page_size(); + } +#endif + return available; +} + +julong os::physical_memory() { + return Bsd::physical_memory(); +} + +// Return true if user is running as root. + +bool os::have_special_privileges() { + static bool init = false; + static bool privileges = false; + if (!init) { + privileges = (getuid() != geteuid()) || (getgid() != getegid()); + init = true; + } + return privileges; +} + + + +// Cpu architecture string +#if defined(ZERO) +static char cpu_arch[] = ZERO_LIBARCH; +#elif defined(IA64) +static char cpu_arch[] = "ia64"; +#elif defined(IA32) +static char cpu_arch[] = "i386"; +#elif defined(AMD64) +static char cpu_arch[] = "amd64"; +#elif defined(ARM) +static char cpu_arch[] = "arm"; +#elif defined(PPC32) +static char cpu_arch[] = "ppc"; +#elif defined(SPARC) + #ifdef _LP64 +static char cpu_arch[] = "sparcv9"; + #else +static char cpu_arch[] = "sparc"; + #endif +#else + #error Add appropriate cpu_arch setting +#endif + +// Compiler variant +#ifdef COMPILER2 + #define COMPILER_VARIANT "server" +#else + #define COMPILER_VARIANT "client" +#endif + + +void os::Bsd::initialize_system_info() { + int mib[2]; + size_t len; + int cpu_val; + julong mem_val = 0; + + + // get processors count via hw.ncpus sysctl + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + len = sizeof(cpu_val); + if (sysctl(mib, 2, &cpu_val, &len, NULL, 0) != -1 && cpu_val >= 1) { + assert(len == sizeof(cpu_val), "unexpected data size"); + set_processor_count(cpu_val); + } else { + set_processor_count(1); // fallback + } + + // get physical memory via hw.memsize sysctl (hw.memsize is used + // since it returns a 64 bit value) + mib[0] = CTL_HW; + +#if defined (HW_MEMSIZE) // Apple + mib[1] = HW_MEMSIZE; +#elif defined(HW_PHYSMEM) // Most of BSD + mib[1] = HW_PHYSMEM; +#elif defined(HW_REALMEM) // Old FreeBSD + mib[1] = HW_REALMEM; +#else + #error No ways to get physmem +#endif + + len = sizeof(mem_val); + if (sysctl(mib, 2, &mem_val, &len, NULL, 0) != -1) { + assert(len == sizeof(mem_val), "unexpected data size"); + _physical_memory = mem_val; + } else { + _physical_memory = 256 * 1024 * 1024; // fallback (XXXBSD?) + } + +#ifdef __OpenBSD__ + { + // limit _physical_memory memory view on OpenBSD since + // datasize rlimit restricts us anyway. + struct rlimit limits; + getrlimit(RLIMIT_DATA, &limits); + _physical_memory = MIN2(_physical_memory, (julong)limits.rlim_cur); + } +#endif +} + +#ifdef __APPLE__ +static const char *get_home() { + const char *home_dir = ::getenv("HOME"); + if ((home_dir == NULL) || (*home_dir == '\0')) { + struct passwd *passwd_info = getpwuid(geteuid()); + if (passwd_info != NULL) { + home_dir = passwd_info->pw_dir; + } + } + + return home_dir; +} +#endif + +void os::init_system_properties_values() { + // The next steps are taken in the product version: + // + // Obtain the JAVA_HOME value from the location of libjvm.so. + // This library should be located at: + // /jre/lib//{client|server}/libjvm.so. + // + // If "/jre/lib/" appears at the right place in the path, then we + // assume libjvm.so is installed in a JDK and we use this path. + // + // Otherwise exit with message: "Could not create the Java virtual machine." + // + // The following extra steps are taken in the debugging version: + // + // If "/jre/lib/" does NOT appear at the right place in the path + // instead of exit check for $JAVA_HOME environment variable. + // + // If it is defined and we are able to locate $JAVA_HOME/jre/lib/, + // then we append a fake suffix "hotspot/libjvm.so" to this path so + // it looks like libjvm.so is installed there + // /jre/lib//hotspot/libjvm.so. + // + // Otherwise exit. + // + // Important note: if the location of libjvm.so changes this + // code needs to be changed accordingly. + + // See ld(1): + // The linker uses the following search paths to locate required + // shared libraries: + // 1: ... + // ... + // 7: The default directories, normally /lib and /usr/lib. +#ifndef DEFAULT_LIBPATH + #define DEFAULT_LIBPATH "/lib:/usr/lib" +#endif + +// Base path of extensions installed on the system. +#define SYS_EXT_DIR "/usr/java/packages" +#define EXTENSIONS_DIR "/lib/ext" + +#ifndef __APPLE__ + + // Buffer that fits several sprintfs. + // Note that the space for the colon and the trailing null are provided + // by the nulls included by the sizeof operator. + const size_t bufsize = + MAX2((size_t)MAXPATHLEN, // For dll_dir & friends. + (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + sizeof(SYS_EXT_DIR) + sizeof(EXTENSIONS_DIR)); // extensions dir + char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); + + // sysclasspath, java_home, dll_dir + { + char *pslash; + os::jvm_path(buf, bufsize); + + // Found the full path to libjvm.so. + // Now cut the path to /jre if we can. + *(strrchr(buf, '/')) = '\0'; // Get rid of /libjvm.so. + pslash = strrchr(buf, '/'); + if (pslash != NULL) { + *pslash = '\0'; // Get rid of /{client|server|hotspot}. + } + Arguments::set_dll_dir(buf); + + if (pslash != NULL) { + pslash = strrchr(buf, '/'); + if (pslash != NULL) { + *pslash = '\0'; // Get rid of /. + pslash = strrchr(buf, '/'); + if (pslash != NULL) { + *pslash = '\0'; // Get rid of /lib. + } + } + } + Arguments::set_java_home(buf); + set_boot_path('/', ':'); + } + + // Where to look for native libraries. + // + // Note: Due to a legacy implementation, most of the library path + // is set in the launcher. This was to accomodate linking restrictions + // on legacy Bsd implementations (which are no longer supported). + // Eventually, all the library path setting will be done here. + // + // However, to prevent the proliferation of improperly built native + // libraries, the new path component /usr/java/packages is added here. + // Eventually, all the library path setting will be done here. + { + // Get the user setting of LD_LIBRARY_PATH, and prepended it. It + // should always exist (until the legacy problem cited above is + // addressed). + const char *v = ::getenv("LD_LIBRARY_PATH"); + const char *v_colon = ":"; + if (v == NULL) { v = ""; v_colon = ""; } + // That's +1 for the colon and +1 for the trailing '\0'. + char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, + strlen(v) + 1 + + sizeof(SYS_EXT_DIR) + sizeof("/lib/") + strlen(cpu_arch) + sizeof(DEFAULT_LIBPATH) + 1, + mtInternal); + sprintf(ld_library_path, "%s%s" SYS_EXT_DIR "/lib/%s:" DEFAULT_LIBPATH, v, v_colon, cpu_arch); + Arguments::set_library_path(ld_library_path); + FREE_C_HEAP_ARRAY(char, ld_library_path); + } + + // Extensions directories. + sprintf(buf, "%s" EXTENSIONS_DIR ":" SYS_EXT_DIR EXTENSIONS_DIR, Arguments::get_java_home()); + Arguments::set_ext_dirs(buf); + + FREE_C_HEAP_ARRAY(char, buf); + +#else // __APPLE__ + + #define SYS_EXTENSIONS_DIR "/Library/Java/Extensions" + #define SYS_EXTENSIONS_DIRS SYS_EXTENSIONS_DIR ":/Network" SYS_EXTENSIONS_DIR ":/System" SYS_EXTENSIONS_DIR ":/usr/lib/java" + + const char *user_home_dir = get_home(); + // The null in SYS_EXTENSIONS_DIRS counts for the size of the colon after user_home_dir. + size_t system_ext_size = strlen(user_home_dir) + sizeof(SYS_EXTENSIONS_DIR) + + sizeof(SYS_EXTENSIONS_DIRS); + + // Buffer that fits several sprintfs. + // Note that the space for the colon and the trailing null are provided + // by the nulls included by the sizeof operator. + const size_t bufsize = + MAX2((size_t)MAXPATHLEN, // for dll_dir & friends. + (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + system_ext_size); // extensions dir + char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); + + // sysclasspath, java_home, dll_dir + { + char *pslash; + os::jvm_path(buf, bufsize); + + // Found the full path to libjvm.so. + // Now cut the path to /jre if we can. + *(strrchr(buf, '/')) = '\0'; // Get rid of /libjvm.so. + pslash = strrchr(buf, '/'); + if (pslash != NULL) { + *pslash = '\0'; // Get rid of /{client|server|hotspot}. + } +#ifdef STATIC_BUILD + strcat(buf, "/lib"); +#endif + + Arguments::set_dll_dir(buf); + + if (pslash != NULL) { + pslash = strrchr(buf, '/'); + if (pslash != NULL) { + *pslash = '\0'; // Get rid of /lib. + } + } + Arguments::set_java_home(buf); + set_boot_path('/', ':'); + } + + // Where to look for native libraries. + // + // Note: Due to a legacy implementation, most of the library path + // is set in the launcher. This was to accomodate linking restrictions + // on legacy Bsd implementations (which are no longer supported). + // Eventually, all the library path setting will be done here. + // + // However, to prevent the proliferation of improperly built native + // libraries, the new path component /usr/java/packages is added here. + // Eventually, all the library path setting will be done here. + { + // Get the user setting of LD_LIBRARY_PATH, and prepended it. It + // should always exist (until the legacy problem cited above is + // addressed). + // Prepend the default path with the JAVA_LIBRARY_PATH so that the app launcher code + // can specify a directory inside an app wrapper + const char *l = ::getenv("JAVA_LIBRARY_PATH"); + const char *l_colon = ":"; + if (l == NULL) { l = ""; l_colon = ""; } + + const char *v = ::getenv("DYLD_LIBRARY_PATH"); + const char *v_colon = ":"; + if (v == NULL) { v = ""; v_colon = ""; } + + // Apple's Java6 has "." at the beginning of java.library.path. + // OpenJDK on Windows has "." at the end of java.library.path. + // OpenJDK on Linux and Solaris don't have "." in java.library.path + // at all. To ease the transition from Apple's Java6 to OpenJDK7, + // "." is appended to the end of java.library.path. Yes, this + // could cause a change in behavior, but Apple's Java6 behavior + // can be achieved by putting "." at the beginning of the + // JAVA_LIBRARY_PATH environment variable. + char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, + strlen(v) + 1 + strlen(l) + 1 + + system_ext_size + 3, + mtInternal); + sprintf(ld_library_path, "%s%s%s%s%s" SYS_EXTENSIONS_DIR ":" SYS_EXTENSIONS_DIRS ":.", + v, v_colon, l, l_colon, user_home_dir); + Arguments::set_library_path(ld_library_path); + FREE_C_HEAP_ARRAY(char, ld_library_path); + } + + // Extensions directories. + // + // Note that the space for the colon and the trailing null are provided + // by the nulls included by the sizeof operator (so actually one byte more + // than necessary is allocated). + sprintf(buf, "%s" SYS_EXTENSIONS_DIR ":%s" EXTENSIONS_DIR ":" SYS_EXTENSIONS_DIRS, + user_home_dir, Arguments::get_java_home()); + Arguments::set_ext_dirs(buf); + + FREE_C_HEAP_ARRAY(char, buf); + +#undef SYS_EXTENSIONS_DIR +#undef SYS_EXTENSIONS_DIRS + +#endif // __APPLE__ + +#undef SYS_EXT_DIR +#undef EXTENSIONS_DIR +} + +//////////////////////////////////////////////////////////////////////////////// +// breakpoint support + +void os::breakpoint() { + BREAKPOINT; +} + +extern "C" void breakpoint() { + // use debugger to set breakpoint here +} + +//////////////////////////////////////////////////////////////////////////////// +// signal support + +debug_only(static bool signal_sets_initialized = false); +static sigset_t unblocked_sigs, vm_sigs, allowdebug_blocked_sigs; + +bool os::Bsd::is_sig_ignored(int sig) { + struct sigaction oact; + sigaction(sig, (struct sigaction*)NULL, &oact); + void* ohlr = oact.sa_sigaction ? CAST_FROM_FN_PTR(void*, oact.sa_sigaction) + : CAST_FROM_FN_PTR(void*, oact.sa_handler); + if (ohlr == CAST_FROM_FN_PTR(void*, SIG_IGN)) { + return true; + } else { + return false; + } +} + + +#if 0 +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); + +} +#endif + +// These are signals that are unblocked while a thread is running Java. +// (For some reason, they get blocked by default.) +sigset_t* os::Bsd::unblocked_signals() { + //assert(signal_sets_initialized, "Not initialized"); + NOT_IMPL; + return &unblocked_sigs; +} + +// These are the signals that are blocked while a (non-VM) thread is +// running Java. Only the VM thread handles these signals. +sigset_t* os::Bsd::vm_signals() { + //assert(signal_sets_initialized, "Not initialized"); + NOT_IMPL; + return &vm_sigs; +} + +// These are signals that are blocked during cond_wait to allow debugger in +sigset_t* os::Bsd::allowdebug_blocked_signals() { + //assert(signal_sets_initialized, "Not initialized"); + NOT_IMPL; + return &allowdebug_blocked_sigs; +} + +void os::Bsd::hotspot_sigmask(Thread* thread) { + + //Save caller's signal mask before setting VM signal mask + sigset_t caller_sigmask; + pthread_sigmask(SIG_BLOCK, NULL, &caller_sigmask); + + OSThread* osthread = thread->osthread(); + osthread->set_caller_sigmask(caller_sigmask); + + pthread_sigmask(SIG_UNBLOCK, os::Bsd::unblocked_signals(), NULL); + + if (!ReduceSignalUsage) { + if (thread->is_VM_thread()) { + // Only the VM thread handles BREAK_SIGNAL ... + pthread_sigmask(SIG_UNBLOCK, vm_signals(), NULL); + } else { + // ... all other threads block BREAK_SIGNAL + pthread_sigmask(SIG_BLOCK, vm_signals(), NULL); + } + } +} + + +////////////////////////////////////////////////////////////////////////////// +// create new thread + +#ifdef __APPLE__ +// library handle for calling objc_registerThreadWithCollector() +// without static linking to the libobjc library + #define OBJC_LIB "/usr/lib/libobjc.dylib" + #define OBJC_GCREGISTER "objc_registerThreadWithCollector" +typedef void (*objc_registerThreadWithCollector_t)(); +extern "C" objc_registerThreadWithCollector_t objc_registerThreadWithCollectorFunction; +objc_registerThreadWithCollector_t objc_registerThreadWithCollectorFunction = NULL; +#endif + +#ifdef __APPLE__ +static uint64_t locate_unique_thread_id(mach_port_t mach_thread_port) { + // Additional thread_id used to correlate threads in SA + thread_identifier_info_data_t m_ident_info; + mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT; + + thread_info(mach_thread_port, THREAD_IDENTIFIER_INFO, + (thread_info_t) &m_ident_info, &count); + + return m_ident_info.thread_id; +} +#endif + +// Thread start routine for all newly created threads +static void *thread_native_entry(Thread *thread) { + // Try to randomize the cache line index of hot stack frames. + // This helps when threads of the same stack traces evict each other's + // cache lines. The threads can be either from the same JVM instance, or + // from different JVM instances. The benefit is especially true for + // processors with hyperthreading technology. + static int counter = 0; + int pid = os::current_process_id(); + alloca(((pid ^ counter++) & 7) * 128); + + thread->initialize_thread_current(); + + OSThread* osthread = thread->osthread(); + Monitor* sync = osthread->startThread_lock(); + + osthread->set_thread_id(os::Bsd::gettid()); + + log_info(os, thread)("Thread is alive (tid: " UINTX_FORMAT ", pthread id: " UINTX_FORMAT ").", + os::current_thread_id(), (uintx) pthread_self()); + +#ifdef __APPLE__ + uint64_t unique_thread_id = locate_unique_thread_id(osthread->thread_id()); + guarantee(unique_thread_id != 0, "unique thread id was not found"); + osthread->set_unique_thread_id(unique_thread_id); +#endif + // initialize signal mask for this thread + os::Bsd::hotspot_sigmask(thread); + + // initialize floating point control register + os::Bsd::init_thread_fpu_state(); + +#ifdef __APPLE__ + // register thread with objc gc + if (objc_registerThreadWithCollectorFunction != NULL) { + objc_registerThreadWithCollectorFunction(); + } +#endif + + // handshaking with parent thread + { + MutexLockerEx ml(sync, Mutex::_no_safepoint_check_flag); + + // notify parent thread + osthread->set_state(INITIALIZED); + sync->notify_all(); + + // wait until os::start_thread() + while (osthread->get_state() == INITIALIZED) { + sync->wait(Mutex::_no_safepoint_check_flag); + } + } + + // call one more level start routine + thread->run(); + + log_info(os, thread)("Thread finished (tid: " UINTX_FORMAT ", pthread id: " UINTX_FORMAT ").", + os::current_thread_id(), (uintx) pthread_self()); + + // If a thread has not deleted itself ("delete this") as part of its + // termination sequence, we have to ensure thread-local-storage is + // cleared before we actually terminate. No threads should ever be + // deleted asynchronously with respect to their termination. + if (Thread::current_or_null_safe() != NULL) { + assert(Thread::current_or_null_safe() == thread, "current thread is wrong"); + thread->clear_thread_current(); + } + + return 0; +} + +bool os::create_thread(Thread* thread, ThreadType thr_type, + size_t req_stack_size) { + assert(thread->osthread() == NULL, "caller responsible"); + + // Allocate the OSThread object + OSThread* osthread = new OSThread(NULL, NULL); + if (osthread == NULL) { + return false; + } + + // set the correct thread state + osthread->set_thread_type(thr_type); + + // Initial state is ALLOCATED but not INITIALIZED + osthread->set_state(ALLOCATED); + + thread->set_osthread(osthread); + + // init thread attributes + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + + // calculate stack size if it's not specified by caller + size_t stack_size = os::Posix::get_initial_stack_size(thr_type, req_stack_size); + pthread_attr_setstacksize(&attr, stack_size); + + ThreadState state; + + { + pthread_t tid; + int ret = pthread_create(&tid, &attr, (void* (*)(void*)) thread_native_entry, thread); + + char buf[64]; + if (ret == 0) { + log_info(os, thread)("Thread started (pthread id: " UINTX_FORMAT ", attributes: %s). ", + (uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr)); + } else { + log_warning(os, thread)("Failed to start thread - pthread_create failed (%s) for attributes: %s.", + os::errno_name(ret), os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr)); + } + + pthread_attr_destroy(&attr); + + if (ret != 0) { + // Need to clean up stuff we've allocated so far + thread->set_osthread(NULL); + delete osthread; + return false; + } + + // Store pthread info into the OSThread + osthread->set_pthread_id(tid); + + // Wait until child thread is either initialized or aborted + { + Monitor* sync_with_child = osthread->startThread_lock(); + MutexLockerEx ml(sync_with_child, Mutex::_no_safepoint_check_flag); + while ((state = osthread->get_state()) == ALLOCATED) { + sync_with_child->wait(Mutex::_no_safepoint_check_flag); + } + } + + } + + // Aborted due to thread limit being reached + if (state == ZOMBIE) { + thread->set_osthread(NULL); + delete osthread; + return false; + } + + // The thread is returned suspended (in state INITIALIZED), + // and is started higher up in the call chain + assert(state == INITIALIZED, "race condition"); + return true; +} + +///////////////////////////////////////////////////////////////////////////// +// attach existing thread + +// bootstrap the main thread +bool os::create_main_thread(JavaThread* thread) { + assert(os::Bsd::_main_thread == pthread_self(), "should be called inside main thread"); + return create_attached_thread(thread); +} + +bool os::create_attached_thread(JavaThread* thread) { +#ifdef ASSERT + thread->verify_not_published(); +#endif + + // Allocate the OSThread object + OSThread* osthread = new OSThread(NULL, NULL); + + if (osthread == NULL) { + return false; + } + + osthread->set_thread_id(os::Bsd::gettid()); + + // Store pthread info into the OSThread +#ifdef __APPLE__ + uint64_t unique_thread_id = locate_unique_thread_id(osthread->thread_id()); + guarantee(unique_thread_id != 0, "just checking"); + osthread->set_unique_thread_id(unique_thread_id); +#endif + osthread->set_pthread_id(::pthread_self()); + + // initialize floating point control register + os::Bsd::init_thread_fpu_state(); + + // Initial thread state is RUNNABLE + osthread->set_state(RUNNABLE); + + thread->set_osthread(osthread); + + // initialize signal mask for this thread + // and save the caller's signal mask + os::Bsd::hotspot_sigmask(thread); + + log_info(os, thread)("Thread attached (tid: " UINTX_FORMAT ", pthread id: " UINTX_FORMAT ").", + os::current_thread_id(), (uintx) pthread_self()); + + return true; +} + +void os::pd_start_thread(Thread* thread) { + OSThread * osthread = thread->osthread(); + assert(osthread->get_state() != INITIALIZED, "just checking"); + Monitor* sync_with_child = osthread->startThread_lock(); + MutexLockerEx ml(sync_with_child, Mutex::_no_safepoint_check_flag); + sync_with_child->notify(); +} + +// Free Bsd resources related to the OSThread +void os::free_thread(OSThread* osthread) { + assert(osthread != NULL, "osthread not set"); + + // We are told to free resources of the argument thread, + // but we can only really operate on the current thread. + assert(Thread::current()->osthread() == osthread, + "os::free_thread but not current thread"); + + // Restore caller's signal mask + sigset_t sigmask = osthread->caller_sigmask(); + pthread_sigmask(SIG_SETMASK, &sigmask, NULL); + + delete osthread; +} + +//////////////////////////////////////////////////////////////////////////////// +// time support + +// Time since start-up in seconds to a fine granularity. +// Used by VMSelfDestructTimer and the MemProfiler. +double os::elapsedTime() { + + return ((double)os::elapsed_counter()) / os::elapsed_frequency(); +} + +jlong os::elapsed_counter() { + return javaTimeNanos() - initial_time_count; +} + +jlong os::elapsed_frequency() { + return NANOSECS_PER_SEC; // nanosecond resolution +} + +bool os::supports_vtime() { return true; } +bool os::enable_vtime() { return false; } +bool os::vtime_enabled() { return false; } + +double os::elapsedVTime() { + // better than nothing, but not much + return elapsedTime(); +} + +jlong os::javaTimeMillis() { + timeval time; + int status = gettimeofday(&time, NULL); + assert(status != -1, "bsd error"); + return jlong(time.tv_sec) * 1000 + jlong(time.tv_usec / 1000); +} + +void os::javaTimeSystemUTC(jlong &seconds, jlong &nanos) { + timeval time; + int status = gettimeofday(&time, NULL); + assert(status != -1, "bsd error"); + seconds = jlong(time.tv_sec); + nanos = jlong(time.tv_usec) * 1000; +} + +#ifndef __APPLE__ + #ifndef CLOCK_MONOTONIC + #define CLOCK_MONOTONIC (1) + #endif +#endif + +#ifdef __APPLE__ +void os::Bsd::clock_init() { + mach_timebase_info(&_timebase_info); +} +#else +void os::Bsd::clock_init() { + struct timespec res; + struct timespec tp; + if (::clock_getres(CLOCK_MONOTONIC, &res) == 0 && + ::clock_gettime(CLOCK_MONOTONIC, &tp) == 0) { + // yes, monotonic clock is supported + _clock_gettime = ::clock_gettime; + } +} +#endif + + + +#ifdef __APPLE__ + +jlong os::javaTimeNanos() { + const uint64_t tm = mach_absolute_time(); + const uint64_t now = (tm * Bsd::_timebase_info.numer) / Bsd::_timebase_info.denom; + const uint64_t prev = Bsd::_max_abstime; + if (now <= prev) { + return prev; // same or retrograde time; + } + const uint64_t obsv = Atomic::cmpxchg(now, (volatile jlong*)&Bsd::_max_abstime, prev); + assert(obsv >= prev, "invariant"); // Monotonicity + // If the CAS succeeded then we're done and return "now". + // If the CAS failed and the observed value "obsv" is >= now then + // we should return "obsv". If the CAS failed and now > obsv > prv then + // some other thread raced this thread and installed a new value, in which case + // we could either (a) retry the entire operation, (b) retry trying to install now + // or (c) just return obsv. We use (c). No loop is required although in some cases + // we might discard a higher "now" value in deference to a slightly lower but freshly + // installed obsv value. That's entirely benign -- it admits no new orderings compared + // to (a) or (b) -- and greatly reduces coherence traffic. + // We might also condition (c) on the magnitude of the delta between obsv and now. + // Avoiding excessive CAS operations to hot RW locations is critical. + // See https://blogs.oracle.com/dave/entry/cas_and_cache_trivia_invalidate + return (prev == obsv) ? now : obsv; +} + +#else // __APPLE__ + +jlong os::javaTimeNanos() { + if (os::supports_monotonic_clock()) { + struct timespec tp; + int status = Bsd::_clock_gettime(CLOCK_MONOTONIC, &tp); + assert(status == 0, "gettime error"); + jlong result = jlong(tp.tv_sec) * (1000 * 1000 * 1000) + jlong(tp.tv_nsec); + return result; + } else { + timeval time; + int status = gettimeofday(&time, NULL); + assert(status != -1, "bsd error"); + jlong usecs = jlong(time.tv_sec) * (1000 * 1000) + jlong(time.tv_usec); + return 1000 * usecs; + } +} + +#endif // __APPLE__ + +void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) { + if (os::supports_monotonic_clock()) { + info_ptr->max_value = ALL_64_BITS; + + // CLOCK_MONOTONIC - amount of time since some arbitrary point in the past + info_ptr->may_skip_backward = false; // not subject to resetting or drifting + info_ptr->may_skip_forward = false; // not subject to resetting or drifting + } else { + // gettimeofday - based on time in seconds since the Epoch thus does not wrap + info_ptr->max_value = ALL_64_BITS; + + // gettimeofday is a real time clock so it skips + info_ptr->may_skip_backward = true; + info_ptr->may_skip_forward = true; + } + + info_ptr->kind = JVMTI_TIMER_ELAPSED; // elapsed not CPU time +} + +// Return the real, user, and system times in seconds from an +// arbitrary fixed point in the past. +bool os::getTimesSecs(double* process_real_time, + double* process_user_time, + double* process_system_time) { + struct tms ticks; + clock_t real_ticks = times(&ticks); + + if (real_ticks == (clock_t) (-1)) { + return false; + } else { + double ticks_per_second = (double) clock_tics_per_sec; + *process_user_time = ((double) ticks.tms_utime) / ticks_per_second; + *process_system_time = ((double) ticks.tms_stime) / ticks_per_second; + *process_real_time = ((double) real_ticks) / ticks_per_second; + + return true; + } +} + + +char * os::local_time_string(char *buf, size_t buflen) { + struct tm t; + time_t long_time; + time(&long_time); + localtime_r(&long_time, &t); + jio_snprintf(buf, buflen, "%d-%02d-%02d %02d:%02d:%02d", + t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, + t.tm_hour, t.tm_min, t.tm_sec); + return buf; +} + +struct tm* os::localtime_pd(const time_t* clock, struct tm* res) { + return localtime_r(clock, res); +} + +//////////////////////////////////////////////////////////////////////////////// +// runtime exit support + +// Note: os::shutdown() might be called very early during initialization, or +// called from signal handler. Before adding something to os::shutdown(), make +// sure it is async-safe and can handle partially initialized VM. +void os::shutdown() { + + // allow PerfMemory to attempt cleanup of any persistent resources + perfMemory_exit(); + + // needs to remove object in file system + AttachListener::abort(); + + // flush buffered output, finish log files + ostream_abort(); + + // Check for abort hook + abort_hook_t abort_hook = Arguments::abort_hook(); + if (abort_hook != NULL) { + abort_hook(); + } + +} + +// Note: os::abort() might be called very early during initialization, or +// called from signal handler. Before adding something to os::abort(), make +// sure it is async-safe and can handle partially initialized VM. +void os::abort(bool dump_core, void* siginfo, const void* context) { + os::shutdown(); + if (dump_core) { +#ifndef PRODUCT + fdStream out(defaultStream::output_fd()); + out.print_raw("Current thread is "); + char buf[16]; + jio_snprintf(buf, sizeof(buf), UINTX_FORMAT, os::current_thread_id()); + out.print_raw_cr(buf); + out.print_raw_cr("Dumping core ..."); +#endif + ::abort(); // dump core + } + + ::exit(1); +} + +// Die immediately, no exit hook, no abort hook, no cleanup. +void os::die() { + // _exit() on BsdThreads only kills current thread + ::abort(); +} + +// This method is a copy of JDK's sysGetLastErrorString +// from src/solaris/hpi/src/system_md.c + +size_t os::lasterror(char *buf, size_t len) { + if (errno == 0) return 0; + + const char *s = os::strerror(errno); + size_t n = ::strlen(s); + if (n >= len) { + n = len - 1; + } + ::strncpy(buf, s, n); + buf[n] = '\0'; + return n; +} + +//XXX: if needed make avaiable +extern "C" pid_t pthread_tid(pthread_t thread); + +// Information of current thread in variety of formats +pid_t os::Bsd::gettid() { + int retval = -1; + +#ifdef __APPLE__ //XNU kernel + // despite the fact mach port is actually not a thread id use it + // instead of syscall(SYS_thread_selfid) as it certainly fits to u4 + retval = ::pthread_mach_thread_np(::pthread_self()); + guarantee(retval != 0, "just checking"); + return retval; + +#else + #ifdef __FreeBSD__ + retval = syscall(SYS_thr_self); + #else + #ifdef __OpenBSD__ + retval = syscall(SYS_getthrid); + #else + #ifdef __NetBSD__ + retval = (pid_t) syscall(SYS__lwp_self); + #endif + #endif + #endif +#endif + + if (retval == -1) { + return getpid(); + } +} + +intx os::current_thread_id() { + return (intx)::pthread_self(); +} + +int os::current_process_id() { + + // Under the old bsd thread library, bsd gives each thread + // its own process id. Because of this each thread will return + // a different pid if this method were to return the result + // of getpid(2). Bsd provides no api that returns the pid + // of the launcher thread for the vm. This implementation + // returns a unique pid, the pid of the launcher thread + // that starts the vm 'process'. + + // Under the NPTL, getpid() returns the same pid as the + // launcher thread rather than a unique pid per thread. + // Use gettid() if you want the old pre NPTL behaviour. + + // if you are looking for the result of a call to getpid() that + // returns a unique pid for the calling thread, then look at the + // OSThread::thread_id() method in osThread_bsd.hpp file + + return (int)(_initial_pid ? _initial_pid : getpid()); +} + +// DLL functions + +#define JNI_LIB_PREFIX "" +#ifdef __APPLE__ + #define JNI_LIB_SUFFIX ".dylib" +#elif (defined __GENODE__) + #undef JNI_LIB_SUFFIX + #define JNI_LIB_SUFFIX ".lib.so" +#endif + +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. +#ifdef __APPLE__ +// macosx has a secure per-user temporary directory +char temp_path_storage[PATH_MAX]; +const char* os::get_temp_directory() { + static char *temp_path = NULL; + if (temp_path == NULL) { + int pathSize = confstr(_CS_DARWIN_USER_TEMP_DIR, temp_path_storage, PATH_MAX); + if (pathSize == 0 || pathSize > PATH_MAX) { + strlcpy(temp_path_storage, "/tmp/", sizeof(temp_path_storage)); + } + temp_path = temp_path_storage; + } + return temp_path; +} +#else // __APPLE__ +const char* os::get_temp_directory() { return "/tmp"; } +#endif // __APPLE__ + +static bool file_exists(const char* filename) { + struct stat statbuf; + if (filename == NULL || strlen(filename) == 0) { + return false; + } + return os::stat(filename, &statbuf) == 0; +} + +bool os::dll_build_name(char* buffer, size_t buflen, + const char* pname, const char* fname) { + bool retval = false; + // Copied from libhpi + const size_t pnamelen = pname ? strlen(pname) : 0; + + // Return error on buffer overflow. + if (pnamelen + strlen(fname) + strlen(JNI_LIB_PREFIX) + strlen(JNI_LIB_SUFFIX) + 2 > buflen) { + return retval; + } + + if (pnamelen == 0) { + snprintf(buffer, buflen, JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, fname); + retval = true; + } else if (strchr(pname, *os::path_separator()) != NULL) { + int n; + char** pelements = split_path(pname, &n); + if (pelements == NULL) { + return false; + } + for (int i = 0; i < n; i++) { + // Really shouldn't be NULL, but check can't hurt + if (pelements[i] == NULL || strlen(pelements[i]) == 0) { + continue; // skip the empty path values + } + snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, + pelements[i], fname); + if (file_exists(buffer)) { + retval = true; + break; + } + } + // release the storage + for (int i = 0; i < n; i++) { + if (pelements[i] != NULL) { + FREE_C_HEAP_ARRAY(char, pelements[i]); + } + } + if (pelements != NULL) { + FREE_C_HEAP_ARRAY(char*, pelements); + } + } else { + snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, pname, fname); + retval = true; + } + return retval; +} + +// check if addr is inside libjvm.so +bool os::address_is_in_vm(address addr) { + static address libjvm_base_addr; + Dl_info dlinfo; + + if (libjvm_base_addr == NULL) { + if (dladdr(CAST_FROM_FN_PTR(void *, os::address_is_in_vm), &dlinfo) != 0) { + libjvm_base_addr = (address)dlinfo.dli_fbase; + } + assert(libjvm_base_addr !=NULL, "Cannot obtain base address for libjvm"); + } + + if (dladdr((void *)addr, &dlinfo) != 0) { + if (libjvm_base_addr == (address)dlinfo.dli_fbase) return true; + } + + return false; +} + + +#define MACH_MAXSYMLEN 256 + +bool os::dll_address_to_function_name(address addr, char *buf, + int buflen, int *offset, + bool demangle) { + // buf is not optional, but offset is optional + assert(buf != NULL, "sanity check"); + + Dl_info dlinfo; + char localbuf[MACH_MAXSYMLEN]; + + if (dladdr((void*)addr, &dlinfo) != 0) { + // see if we have a matching symbol + if (dlinfo.dli_saddr != NULL && dlinfo.dli_sname != NULL) { + if (!(demangle && Decoder::demangle(dlinfo.dli_sname, buf, buflen))) { + jio_snprintf(buf, buflen, "%s", dlinfo.dli_sname); + } + if (offset != NULL) *offset = addr - (address)dlinfo.dli_saddr; + return true; + } + // no matching symbol so try for just file info + if (dlinfo.dli_fname != NULL && dlinfo.dli_fbase != NULL) { + if (Decoder::decode((address)(addr - (address)dlinfo.dli_fbase), + buf, buflen, offset, dlinfo.dli_fname, demangle)) { + return true; + } + } + + // Handle non-dynamic manually: + if (dlinfo.dli_fbase != NULL && + Decoder::decode(addr, localbuf, MACH_MAXSYMLEN, offset, + dlinfo.dli_fbase)) { + if (!(demangle && Decoder::demangle(localbuf, buf, buflen))) { + jio_snprintf(buf, buflen, "%s", localbuf); + } + return true; + } + } + buf[0] = '\0'; + if (offset != NULL) *offset = -1; + return false; +} + +// ported from solaris version +bool os::dll_address_to_library_name(address addr, char* buf, + int buflen, int* offset) { + // buf is not optional, but offset is optional + assert(buf != NULL, "sanity check"); + + Dl_info dlinfo; + + if (dladdr((void*)addr, &dlinfo) != 0) { + if (dlinfo.dli_fname != NULL) { + jio_snprintf(buf, buflen, "%s", dlinfo.dli_fname); + } + if (dlinfo.dli_fbase != NULL && offset != NULL) { + *offset = addr - (address)dlinfo.dli_fbase; + } + return true; + } + + buf[0] = '\0'; + if (offset) *offset = -1; + return false; +} + +// Loads .dll/.so and +// in case of error it checks if .dll/.so was built for the +// same architecture as Hotspot is running on + +#ifdef __APPLE__ +void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { +#ifdef STATIC_BUILD + return os::get_default_process_handle(); +#else + void * result= ::dlopen(filename, RTLD_LAZY); + if (result != NULL) { + // Successful loading + return result; + } + + // Read system error message into ebuf + ::strncpy(ebuf, ::dlerror(), ebuflen-1); + ebuf[ebuflen-1]='\0'; + + return NULL; +#endif // STATIC_BUILD +} +#else +void * os::dll_load(const char *filename, char *ebuf, int ebuflen) { +#ifdef STATIC_BUILD + return os::get_default_process_handle(); +#else + void * result= ::dlopen(filename, RTLD_LAZY); + if (result != NULL) { + // Successful loading + return result; + } + + Elf32_Ehdr elf_head; + + // Read system error message into ebuf + // It may or may not be overwritten below + ::strncpy(ebuf, ::dlerror(), ebuflen-1); + ebuf[ebuflen-1]='\0'; + int diag_msg_max_length=ebuflen-strlen(ebuf); + char* diag_msg_buf=ebuf+strlen(ebuf); + + if (diag_msg_max_length==0) { + // No more space in ebuf for additional diagnostics message + return NULL; + } + + + int file_descriptor= ::open(filename, O_RDONLY | O_NONBLOCK); + + if (file_descriptor < 0) { + // Can't open library, report dlerror() message + return NULL; + } + + bool failed_to_read_elf_head= + (sizeof(elf_head)!= + (::read(file_descriptor, &elf_head,sizeof(elf_head)))); + + ::close(file_descriptor); + if (failed_to_read_elf_head) { + // file i/o error - report dlerror() msg + return NULL; + } + + typedef struct { + Elf32_Half code; // Actual value as defined in elf.h + Elf32_Half compat_class; // Compatibility of archs at VM's sense + char elf_class; // 32 or 64 bit + char endianess; // MSB or LSB + char* name; // String representation + } arch_t; + + #ifndef EM_486 + #define EM_486 6 /* Intel 80486 */ + #endif + + #ifndef EM_MIPS_RS3_LE + #define EM_MIPS_RS3_LE 10 /* MIPS */ + #endif + + #ifndef EM_PPC64 + #define EM_PPC64 21 /* PowerPC64 */ + #endif + + #ifndef EM_S390 + #define EM_S390 22 /* IBM System/390 */ + #endif + + #ifndef EM_IA_64 + #define EM_IA_64 50 /* HP/Intel IA-64 */ + #endif + + #ifndef EM_X86_64 + #define EM_X86_64 62 /* AMD x86-64 */ + #endif + + static const arch_t arch_array[]={ + {EM_386, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"}, + {EM_486, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"}, + {EM_IA_64, EM_IA_64, ELFCLASS64, ELFDATA2LSB, (char*)"IA 64"}, + {EM_X86_64, EM_X86_64, ELFCLASS64, ELFDATA2LSB, (char*)"AMD 64"}, + {EM_SPARC, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"}, + {EM_SPARC32PLUS, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"}, + {EM_SPARCV9, EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"}, + {EM_PPC, EM_PPC, ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"}, + {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2MSB, (char*)"Power PC 64"}, + {EM_ARM, EM_ARM, ELFCLASS32, ELFDATA2LSB, (char*)"ARM"}, + {EM_S390, EM_S390, ELFCLASSNONE, ELFDATA2MSB, (char*)"IBM System/390"}, + {EM_ALPHA, EM_ALPHA, ELFCLASS64, ELFDATA2LSB, (char*)"Alpha"}, + {EM_MIPS_RS3_LE, EM_MIPS_RS3_LE, ELFCLASS32, ELFDATA2LSB, (char*)"MIPSel"}, + {EM_MIPS, EM_MIPS, ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"}, + {EM_PARISC, EM_PARISC, ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"}, + {EM_68K, EM_68K, ELFCLASS32, ELFDATA2MSB, (char*)"M68k"} + }; + + #if (defined IA32) + static Elf32_Half running_arch_code=EM_386; + #elif (defined AMD64) + static Elf32_Half running_arch_code=EM_X86_64; + #elif (defined IA64) + static Elf32_Half running_arch_code=EM_IA_64; + #elif (defined __sparc) && (defined _LP64) + static Elf32_Half running_arch_code=EM_SPARCV9; + #elif (defined __sparc) && (!defined _LP64) + static Elf32_Half running_arch_code=EM_SPARC; + #elif (defined __powerpc64__) + static Elf32_Half running_arch_code=EM_PPC64; + #elif (defined __powerpc__) + static Elf32_Half running_arch_code=EM_PPC; + #elif (defined ARM) + static Elf32_Half running_arch_code=EM_ARM; + #elif (defined S390) + static Elf32_Half running_arch_code=EM_S390; + #elif (defined ALPHA) + static Elf32_Half running_arch_code=EM_ALPHA; + #elif (defined MIPSEL) + static Elf32_Half running_arch_code=EM_MIPS_RS3_LE; + #elif (defined PARISC) + static Elf32_Half running_arch_code=EM_PARISC; + #elif (defined MIPS) + static Elf32_Half running_arch_code=EM_MIPS; + #elif (defined M68K) + static Elf32_Half running_arch_code=EM_68K; + #else + #error Method os::dll_load requires that one of following is defined:\ + IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K + #endif + + // Identify compatability class for VM's architecture and library's architecture + // Obtain string descriptions for architectures + + arch_t lib_arch={elf_head.e_machine,0,elf_head.e_ident[EI_CLASS], elf_head.e_ident[EI_DATA], NULL}; + int running_arch_index=-1; + + for (unsigned int i=0; i < ARRAY_SIZE(arch_array); i++) { + if (running_arch_code == arch_array[i].code) { + running_arch_index = i; + } + if (lib_arch.code == arch_array[i].code) { + lib_arch.compat_class = arch_array[i].compat_class; + lib_arch.name = arch_array[i].name; + } + } + + assert(running_arch_index != -1, + "Didn't find running architecture code (running_arch_code) in arch_array"); + if (running_arch_index == -1) { + // Even though running architecture detection failed + // we may still continue with reporting dlerror() message + return NULL; + } + + if (lib_arch.endianess != arch_array[running_arch_index].endianess) { + ::snprintf(diag_msg_buf, diag_msg_max_length-1," (Possible cause: endianness mismatch)"); + return NULL; + } + +#ifndef S390 + if (lib_arch.elf_class != arch_array[running_arch_index].elf_class) { + ::snprintf(diag_msg_buf, diag_msg_max_length-1," (Possible cause: architecture word width mismatch)"); + return NULL; + } +#endif // !S390 + + if (lib_arch.compat_class != arch_array[running_arch_index].compat_class) { + if (lib_arch.name!=NULL) { + ::snprintf(diag_msg_buf, diag_msg_max_length-1, + " (Possible cause: can't load %s-bit .so on a %s-bit platform)", + lib_arch.name, arch_array[running_arch_index].name); + } else { + ::snprintf(diag_msg_buf, diag_msg_max_length-1, + " (Possible cause: can't load this .so (machine code=0x%x) on a %s-bit platform)", + lib_arch.code, + arch_array[running_arch_index].name); + } + } + + return NULL; +#endif // STATIC_BUILD +} +#endif // !__APPLE__ + +void* os::get_default_process_handle() { +#ifdef __APPLE__ + // MacOS X needs to use RTLD_FIRST instead of RTLD_LAZY + // to avoid finding unexpected symbols on second (or later) + // loads of a library. + return (void*)::dlopen(NULL, RTLD_FIRST); +#else + return (void*)::dlopen(NULL, RTLD_LAZY); +#endif +} + +// XXX: Do we need a lock around this as per Linux? +void* os::dll_lookup(void* handle, const char* name) { + return dlsym(handle, name); +} + +int _print_dll_info_cb(const char * name, address base_address, address top_address, void * param) { + outputStream * out = (outputStream *) param; + out->print_cr(PTR_FORMAT " \t%s", base_address, name); + return 0; +} + +void os::print_dll_info(outputStream *st) { + st->print_cr("Dynamic libraries:"); + if (get_loaded_modules_info(_print_dll_info_cb, (void *)st)) { + st->print_cr("Error: Cannot print dynamic libraries."); + } +} + +int os::get_loaded_modules_info(os::LoadedModulesCallbackFunc callback, void *param) { +#ifdef RTLD_DI_LINKMAP + Dl_info dli; + void *handle; + Link_map *map; + Link_map *p; + + if (dladdr(CAST_FROM_FN_PTR(void *, os::print_dll_info), &dli) == 0 || + dli.dli_fname == NULL) { + return 1; + } + handle = dlopen(dli.dli_fname, RTLD_LAZY); + if (handle == NULL) { + return 1; + } + dlinfo(handle, RTLD_DI_LINKMAP, &map); + if (map == NULL) { + dlclose(handle); + return 1; + } + + while (map->l_prev != NULL) + map = map->l_prev; + + while (map != NULL) { + // Value for top_address is returned as 0 since we don't have any information about module size + if (callback(map->l_name, (address)map->l_addr, (address)0, param)) { + dlclose(handle); + return 1; + } + map = map->l_next; + } + + dlclose(handle); +#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 + if (callback(_dyld_get_image_name(i), (address)_dyld_get_image_header(i), (address)0, param)) { + return 1; + } + } + return 0; +#else + return 1; +#endif +} + +void os::get_summary_os_info(char* buf, size_t buflen) { + // These buffers are small because we want this to be brief + // and not use a lot of stack while generating the hs_err file. + char os[100]; + size_t size = sizeof(os); + int mib_kern[] = { CTL_KERN, KERN_OSTYPE }; + if (sysctl(mib_kern, 2, os, &size, NULL, 0) < 0) { +#ifdef __APPLE__ + strncpy(os, "Darwin", sizeof(os)); +#elif __OpenBSD__ + strncpy(os, "OpenBSD", sizeof(os)); +#else + strncpy(os, "BSD", sizeof(os)); +#endif + } + + char release[100]; + size = sizeof(release); + int mib_release[] = { CTL_KERN, KERN_OSRELEASE }; + if (sysctl(mib_release, 2, release, &size, NULL, 0) < 0) { + // if error, leave blank + strncpy(release, "", sizeof(release)); + } + snprintf(buf, buflen, "%s %s", os, release); +} + +void os::print_os_info_brief(outputStream* st) { + os::Posix::print_uname_info(st); +} + +void os::print_os_info(outputStream* st) { + st->print("OS:"); + + os::Posix::print_uname_info(st); + + os::Posix::print_rlimit_info(st); + + os::Posix::print_load_average(st); +} + +void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) { + // Nothing to do for now. +} + +void os::get_summary_cpu_info(char* buf, size_t buflen) { + NOT_IMPL; +} + +void os::print_memory_info(outputStream* st) { + + st->print("Memory:"); + st->print(" %dk page", os::vm_page_size()>>10); + + st->print(", physical " UINT64_FORMAT "k", + os::physical_memory() >> 10); + st->print("(" UINT64_FORMAT "k free)", + os::available_memory() >> 10); + st->cr(); +} + +static void print_signal_handler(outputStream* st, int sig, + char* buf, size_t buflen); + +void os::print_signal_handlers(outputStream* st, char* buf, size_t buflen) { + st->print_cr("Signal Handlers:"); + print_signal_handler(st, SIGSEGV, buf, buflen); + print_signal_handler(st, SIGBUS , buf, buflen); + print_signal_handler(st, SIGFPE , buf, buflen); + print_signal_handler(st, SIGPIPE, buf, buflen); + print_signal_handler(st, SIGXFSZ, buf, buflen); + print_signal_handler(st, SIGILL , buf, buflen); + print_signal_handler(st, SR_signum, buf, buflen); + print_signal_handler(st, SHUTDOWN1_SIGNAL, buf, buflen); + print_signal_handler(st, SHUTDOWN2_SIGNAL , buf, buflen); + print_signal_handler(st, SHUTDOWN3_SIGNAL , buf, buflen); + print_signal_handler(st, BREAK_SIGNAL, buf, buflen); +} + +static char saved_jvm_path[MAXPATHLEN] = {0}; + +// Find the full path to the current module, libjvm +void os::jvm_path(char *buf, jint buflen) { + // Error checking. + if (buflen < MAXPATHLEN) { + assert(false, "must use a large-enough buffer"); + buf[0] = '\0'; + return; + } + // Lazy resolve the path to current module. + if (saved_jvm_path[0] != 0) { + strcpy(buf, saved_jvm_path); + return; + } + + char dli_fname[MAXPATHLEN]; + bool ret = dll_address_to_library_name( + CAST_FROM_FN_PTR(address, os::jvm_path), + dli_fname, sizeof(dli_fname), NULL); + assert(ret, "cannot locate libjvm"); + char *rp = NULL; + if (ret && dli_fname[0] != '\0') { + rp = realpath(dli_fname, buf); + } + if (rp == NULL) { + return; + } + + if (Arguments::sun_java_launcher_is_altjvm()) { + // Support for the java launcher's '-XXaltjvm=' option. Typical + // value for buf is "/jre/lib///libjvm.so" + // or "/jre/lib//libjvm.dylib". If "/jre/lib/" + // appears at the right place in the string, then assume we are + // installed in a JDK and we're done. Otherwise, check for a + // JAVA_HOME environment variable and construct a path to the JVM + // being overridden. + + const char *p = buf + strlen(buf) - 1; + for (int count = 0; p > buf && count < 5; ++count) { + for (--p; p > buf && *p != '/'; --p) + /* empty */ ; + } + + if (strncmp(p, "/jre/lib/", 9) != 0) { + // Look for JAVA_HOME in the environment. + char* java_home_var = ::getenv("JAVA_HOME"); + if (java_home_var != NULL && java_home_var[0] != 0) { + char* jrelib_p; + int len; + + // Check the current module name "libjvm" + p = strrchr(buf, '/'); + assert(strstr(p, "/libjvm") == p, "invalid library name"); + + rp = realpath(java_home_var, buf); + if (rp == NULL) { + return; + } + + // determine if this is a legacy image or modules image + // modules image doesn't have "jre" subdirectory + len = strlen(buf); + assert(len < buflen, "Ran out of buffer space"); + jrelib_p = buf + len; + + // Add the appropriate library subdir + snprintf(jrelib_p, buflen-len, "/jre/lib"); + if (0 != access(buf, F_OK)) { + snprintf(jrelib_p, buflen-len, "/lib"); + } + + // Add the appropriate client or server subdir + len = strlen(buf); + jrelib_p = buf + len; + snprintf(jrelib_p, buflen-len, "/%s", COMPILER_VARIANT); + if (0 != access(buf, F_OK)) { + snprintf(jrelib_p, buflen-len, "%s", ""); + } + + // If the path exists within JAVA_HOME, add the JVM library name + // to complete the path to JVM being overridden. Otherwise fallback + // to the path to the current library. + if (0 == access(buf, F_OK)) { + // Use current module name "libjvm" + len = strlen(buf); + snprintf(buf + len, buflen-len, "/libjvm%s", JNI_LIB_SUFFIX); + } else { + // Fall back to path of current library + rp = realpath(dli_fname, buf); + if (rp == NULL) { + return; + } + } + } + } + } + + strncpy(saved_jvm_path, buf, MAXPATHLEN); + saved_jvm_path[MAXPATHLEN - 1] = '\0'; +} + +void os::print_jni_name_prefix_on(outputStream* st, int args_size) { + // no prefix required, not even "_" +} + +void os::print_jni_name_suffix_on(outputStream* st, int args_size) { + // no suffix required +} + +//////////////////////////////////////////////////////////////////////////////// +// sun.misc.Signal support + +static volatile jint sigint_count = 0; + +static void UserHandler(int sig, void *siginfo, void *context) { + // 4511530 - sem_post is serialized and handled by the manager thread. When + // the program is interrupted by Ctrl-C, SIGINT is sent to every thread. We + // don't want to flood the manager thread with sem_post requests. + if (sig == SIGINT && Atomic::add(1, &sigint_count) > 1) { + return; + } + + // Ctrl-C is pressed during error reporting, likely because the error + // handler fails to abort. Let VM die immediately. + if (sig == SIGINT && is_error_reported()) { + os::die(); + } + + os::signal_notify(sig); +} + +void* os::user_handler() { + return CAST_FROM_FN_PTR(void*, UserHandler); +} + +extern "C" { + typedef void (*sa_handler_t)(int); + typedef void (*sa_sigaction_t)(int, siginfo_t *, void *); +} + +void* os::signal(int signal_number, void* handler) { + struct sigaction sigAct, oldSigAct; + + sigfillset(&(sigAct.sa_mask)); + sigAct.sa_flags = SA_RESTART|SA_SIGINFO; + sigAct.sa_handler = CAST_TO_FN_PTR(sa_handler_t, handler); + + if (sigaction(signal_number, &sigAct, &oldSigAct)) { + // -1 means registration failed + return (void *)-1; + } + + return CAST_FROM_FN_PTR(void*, oldSigAct.sa_handler); +} + +void os::signal_raise(int signal_number) { + printf("%s called from", __func__); + backtrace(); + ::raise(signal_number); +} + +// The following code is moved from os.cpp for making this +// code platform specific, which it is by its very nature. + +// Will be modified when max signal is changed to be dynamic +int os::sigexitnum_pd() { + return NSIG; +} + +// a counter for each possible signal value +static volatile jint pending_signals[NSIG+1] = { 0 }; + +// Bsd(POSIX) specific hand shaking semaphore. +#ifdef __APPLE__ +typedef semaphore_t os_semaphore_t; + + #define SEM_INIT(sem, value) semaphore_create(mach_task_self(), &sem, SYNC_POLICY_FIFO, value) + #define SEM_WAIT(sem) semaphore_wait(sem) + #define SEM_POST(sem) semaphore_signal(sem) + #define SEM_DESTROY(sem) semaphore_destroy(mach_task_self(), sem) +#else +typedef sem_t os_semaphore_t; + + #define SEM_INIT(sem, value) sem_init(&sem, 0, value) + #define SEM_WAIT(sem) sem_wait(&sem) + #define SEM_POST(sem) sem_post(&sem) + #define SEM_DESTROY(sem) sem_destroy(&sem) +#endif + +#ifdef __APPLE__ +// OS X doesn't support unamed POSIX semaphores, so the implementation in os_posix.cpp can't be used. + +static const char* sem_init_strerror(kern_return_t value) { + switch (value) { + case KERN_INVALID_ARGUMENT: return "Invalid argument"; + case KERN_RESOURCE_SHORTAGE: return "Resource shortage"; + default: return "Unknown"; + } +} + +OSXSemaphore::OSXSemaphore(uint value) { + kern_return_t ret = SEM_INIT(_semaphore, value); + + guarantee(ret == KERN_SUCCESS, "Failed to create semaphore: %s", sem_init_strerror(ret)); +} + +OSXSemaphore::~OSXSemaphore() { + SEM_DESTROY(_semaphore); +} + +void OSXSemaphore::signal(uint count) { + for (uint i = 0; i < count; i++) { + kern_return_t ret = SEM_POST(_semaphore); + + assert(ret == KERN_SUCCESS, "Failed to signal semaphore"); + } +} + +void OSXSemaphore::wait() { + kern_return_t ret; + while ((ret = SEM_WAIT(_semaphore)) == KERN_ABORTED) { + // Semaphore was interrupted. Retry. + } + assert(ret == KERN_SUCCESS, "Failed to wait on semaphore"); +} + +jlong OSXSemaphore::currenttime() { + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec * NANOSECS_PER_SEC) + (tv.tv_usec * 1000); +} + +bool OSXSemaphore::trywait() { + return timedwait(0, 0); +} + +bool OSXSemaphore::timedwait(unsigned int sec, int nsec) { + kern_return_t kr = KERN_ABORTED; + mach_timespec_t waitspec; + waitspec.tv_sec = sec; + waitspec.tv_nsec = nsec; + + jlong starttime = currenttime(); + + kr = semaphore_timedwait(_semaphore, waitspec); + while (kr == KERN_ABORTED) { + jlong totalwait = (sec * NANOSECS_PER_SEC) + nsec; + + jlong current = currenttime(); + jlong passedtime = current - starttime; + + if (passedtime >= totalwait) { + waitspec.tv_sec = 0; + waitspec.tv_nsec = 0; + } else { + jlong waittime = totalwait - (current - starttime); + waitspec.tv_sec = waittime / NANOSECS_PER_SEC; + waitspec.tv_nsec = waittime % NANOSECS_PER_SEC; + } + + kr = semaphore_timedwait(_semaphore, waitspec); + } + + return kr == KERN_SUCCESS; +} + +#else +// Use POSIX implementation of semaphores. + +struct timespec PosixSemaphore::create_timespec(unsigned int sec, int nsec) { + struct timespec ts; + unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec); + + return ts; +} + +#endif // __APPLE__ + +static os_semaphore_t sig_sem; + +#ifdef __APPLE__ +static OSXSemaphore sr_semaphore; +#else +static PosixSemaphore sr_semaphore; +#endif + +void os::signal_init_pd() { + // Initialize signal structures + ::memset((void*)pending_signals, 0, sizeof(pending_signals)); + + // Initialize signal semaphore + ::SEM_INIT(sig_sem, 0); +} + +void os::signal_notify(int sig) { + Atomic::inc(&pending_signals[sig]); + ::SEM_POST(sig_sem); +} + +static int check_pending_signals(bool wait) { + Atomic::store(0, &sigint_count); + for (;;) { + for (int i = 0; i < NSIG + 1; i++) { + jint n = pending_signals[i]; + if (n > 0 && n == Atomic::cmpxchg(n - 1, &pending_signals[i], n)) { + return i; + } + } + if (!wait) { + return -1; + } + JavaThread *thread = JavaThread::current(); + ThreadBlockInVM tbivm(thread); + + bool threadIsSuspended; + do { + thread->set_suspend_equivalent(); + // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self() + ::SEM_WAIT(sig_sem); + + // were we externally suspended while we were waiting? + threadIsSuspended = thread->handle_special_suspend_equivalent_condition(); + if (threadIsSuspended) { + // The semaphore has been incremented, but while we were waiting + // another thread suspended us. We don't want to continue running + // while suspended because that would surprise the thread that + // suspended us. + ::SEM_POST(sig_sem); + + thread->java_suspend_self(); + } + } while (threadIsSuspended); + } +} + +int os::signal_lookup() { + return check_pending_signals(false); +} + +int os::signal_wait() { + return check_pending_signals(true); +} + +//////////////////////////////////////////////////////////////////////////////// +// Virtual Memory + +int os::vm_page_size() { + // Seems redundant as all get out + assert(os::Bsd::page_size() != -1, "must call os::init"); + return os::Bsd::page_size(); +} + +// Solaris allocates memory by pages. +int os::vm_allocation_granularity() { + assert(os::Bsd::page_size() != -1, "must call os::init"); + return os::Bsd::page_size(); +} + +// Rationale behind this function: +// current (Mon Apr 25 20:12:18 MSD 2005) oprofile drops samples without executable +// mapping for address (see lookup_dcookie() in the kernel module), thus we cannot get +// samples for JITted code. Here we create private executable mapping over the code cache +// and then we can use standard (well, almost, as mapping can change) way to provide +// info for the reporting script by storing timestamp and location of symbol +void bsd_wrap_code(char* base, size_t size) { + static volatile jint cnt = 0; + + if (!UseOprofile) { + return; + } + + char buf[PATH_MAX + 1]; + int num = Atomic::add(1, &cnt); + + snprintf(buf, PATH_MAX + 1, "%s/hs-vm-%d-%d", + os::get_temp_directory(), os::current_process_id(), num); + unlink(buf); + + int fd = ::open(buf, O_CREAT | O_RDWR, S_IRWXU); + + if (fd != -1) { + off_t rv = ::lseek(fd, size-2, SEEK_SET); + if (rv != (off_t)-1) { + if (::write(fd, "", 1) == 1) { + mmap(base, size, + PROT_READ|PROT_WRITE|PROT_EXEC, + MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE, fd, 0); + } + } + ::close(fd); + unlink(buf); + } +} + +static void warn_fail_commit_memory(char* addr, size_t size, bool exec, + int err) { + warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT + ", %d) failed; error='%s' (errno=%d)", addr, size, exec, + os::errno_name(err), err); +} + +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { + ::madvise(addr, bytes, MADV_DONTNEED); +} + +void os::numa_make_global(char *addr, size_t bytes) { +} + +void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { +} + +bool os::numa_topology_changed() { return false; } + +size_t os::numa_get_groups_num() { + return 1; +} + +int os::numa_get_group_id() { + return 0; +} + +size_t os::numa_get_leaf_groups(int *ids, size_t size) { + if (size > 0) { + ids[0] = 0; + return 1; + } + return 0; +} + +bool os::get_page_info(char *start, page_info* info) { + return false; +} + +char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found) { + return end; +} + + +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { + NOT_IMPL; + return true; +} + +// If this is a growable mapping, remove the guard pages entirely by +// munmap()ping them. If not, just call uncommit_memory(). +bool os::remove_stack_guard_pages(char* addr, size_t size) { + return os::uncommit_memory(addr, size); +} + +// If 'fixed' is true, anon_mmap() will attempt to reserve anonymous memory +// at 'requested_addr'. If there are existing memory mappings at the same +// location, however, they will be overwritten. If 'fixed' is false, +// 'requested_addr' is only treated as a hint, the return value may or +// may not start from the requested address. Unlike Bsd mmap(), this +// function returns NULL to indicate failure. +static char* anon_mmap(char* requested_addr, size_t bytes, bool fixed) { + char * addr; + int flags; + + flags = MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS; + if (fixed) { + assert((uintptr_t)requested_addr % os::Bsd::page_size() == 0, "unaligned address"); + flags |= MAP_FIXED; + } + + // Map reserved/uncommitted pages PROT_NONE so we fail early if we + // touch an uncommitted page. Otherwise, the read/write might + // succeed if we have enough swap space to back the physical page. + addr = (char*)::mmap(requested_addr, bytes, PROT_NONE, + flags, -1, 0); + + return addr == MAP_FAILED ? NULL : addr; +} + +static int anon_munmap(char * addr, size_t size) { + return ::munmap(addr, size) == 0; +} + +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()); + + // According to SUSv3, mprotect() should only be used with mappings + // established by mmap(), and mmap() always maps whole pages. Unaligned + // 'addr' likely indicates problem in the VM (e.g. trying to change + // protection of malloc'ed or statically allocated memory). Check the + // caller if you hit this assert. + assert(addr == bottom, "sanity check"); + + size = align_size_up(pointer_delta(addr, bottom, 1) + size, os::Bsd::page_size()); + return ::mprotect(bottom, size, prot) == 0; +} + +// Set protections specified +bool os::protect_memory(char* addr, size_t bytes, ProtType prot, + bool is_committed) { + NOT_IMPL; + return true; +} + +bool os::guard_memory(char* addr, size_t size) { + return bsd_mprotect(addr, size, PROT_NONE); +} + +bool os::unguard_memory(char* addr, size_t size) { + return bsd_mprotect(addr, size, PROT_READ|PROT_WRITE); +} + +bool os::Bsd::hugetlbfs_sanity_check(bool warn, size_t page_size) { + return false; +} + +// Large page support + +static size_t _large_page_size = 0; + +void os::large_page_init() { +} + + +char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr, bool exec) { + NOT_IMPL; + return nullptr; +} + +bool os::release_memory_special(char* base, size_t bytes) { + NOT_IMPL; + return false; +} + +size_t os::large_page_size() { + return _large_page_size; +} + +// HugeTLBFS allows application to commit large page memory on demand; +// with SysV SHM the entire memory region must be allocated as shared +// memory. +bool os::can_commit_large_page_memory() { + return UseHugeTLBFS; +} + +bool os::can_execute_large_page_memory() { + return UseHugeTLBFS; +} + + +size_t os::read(int fd, void *buf, unsigned int nBytes) { + RESTARTABLE_RETURN_INT(::read(fd, buf, nBytes)); +} + +size_t os::read_at(int fd, void *buf, unsigned int nBytes, jlong offset) { + RESTARTABLE_RETURN_INT(::pread(fd, buf, nBytes, offset)); +} + +void os::naked_short_sleep(jlong ms) { + struct timespec req; + + assert(ms < 1000, "Un-interruptable sleep, short time use only"); + req.tv_sec = 0; + if (ms > 0) { + req.tv_nsec = (ms % 1000) * 1000000; + } else { + req.tv_nsec = 1; + } + + nanosleep(&req, NULL); + + return; +} + +// Sleep forever; naked call to OS-specific sleep; use with CAUTION +void os::infinite_sleep() { + while (true) { // sleep forever ... + ::sleep(100); // ... 100 seconds at a time + } +} + +// Used to convert frequent JVM_Yield() to nops +bool os::dont_yield() { + return DontYieldALot; +} + +void os::naked_yield() { + sched_yield(); +} + +//////////////////////////////////////////////////////////////////////////////// +// thread priority support + +// Note: Normal Bsd applications are run with SCHED_OTHER policy. SCHED_OTHER +// only supports dynamic priority, static priority must be zero. For real-time +// applications, Bsd supports SCHED_RR which allows static priority (1-99). +// However, for large multi-threaded applications, SCHED_RR is not only slower +// than SCHED_OTHER, but also very unstable (my volano tests hang hard 4 out +// of 5 runs - Sep 2005). +// +// The following code actually changes the niceness of kernel-thread/LWP. It +// has an assumption that setpriority() only modifies one kernel-thread/LWP, +// not the entire user process, and user level threads are 1:1 mapped to kernel +// threads. It has always been the case, but could change in the future. For +// this reason, the code should not be used as default (ThreadPriorityPolicy=0). +// It is only used when ThreadPriorityPolicy=1 and requires root privilege. + +#if !defined(__APPLE__) +int os::java_to_os_priority[CriticalPriority + 1] = { + 19, // 0 Entry should never be used + + 0, // 1 MinPriority + 3, // 2 + 6, // 3 + + 10, // 4 + 15, // 5 NormPriority + 18, // 6 + + 21, // 7 + 25, // 8 + 28, // 9 NearMaxPriority + + 31, // 10 MaxPriority + + 31 // 11 CriticalPriority +}; +#else +// Using Mach high-level priority assignments +int os::java_to_os_priority[CriticalPriority + 1] = { + 0, // 0 Entry should never be used (MINPRI_USER) + + 27, // 1 MinPriority + 28, // 2 + 29, // 3 + + 30, // 4 + 31, // 5 NormPriority (BASEPRI_DEFAULT) + 32, // 6 + + 33, // 7 + 34, // 8 + 35, // 9 NearMaxPriority + + 36, // 10 MaxPriority + + 36 // 11 CriticalPriority +}; +#endif + +static int prio_init() { + if (ThreadPriorityPolicy == 1) { + // Only root can raise thread priority. Don't allow ThreadPriorityPolicy=1 + // if effective uid is not root. Perhaps, a more elegant way of doing + // this is to test CAP_SYS_NICE capability, but that will require libcap.so + if (geteuid() != 0) { + if (!FLAG_IS_DEFAULT(ThreadPriorityPolicy)) { + warning("-XX:ThreadPriorityPolicy requires root privilege on Bsd"); + } + ThreadPriorityPolicy = 0; + } + } + if (UseCriticalJavaThreadPriority) { + os::java_to_os_priority[MaxPriority] = os::java_to_os_priority[CriticalPriority]; + } + return 0; +} + +OSReturn os::set_native_priority(Thread* thread, int newpri) { + NOT_IMPL; + return OS_OK; +} + +OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) { + NOT_IMPL; + return OS_OK; +} + +// Hint to the underlying OS that a task switch would not be good. +// Void return because it's a hint and can fail. +void os::hint_no_preempt() {} + +//////////////////////////////////////////////////////////////////////////////// +// suspend/resume support + +// the low-level signal-based suspend/resume support is a remnant from the +// old VM-suspension that used to be for java-suspension, safepoints etc, +// within hotspot. Now there is a single use-case for this: +// - calling get_thread_pc() on the VMThread by the flat-profiler task +// that runs in the watcher thread. +// The remaining code is greatly simplified from the more general suspension +// code that used to be used. +// +// The protocol is quite simple: +// - suspend: +// - sends a signal to the target thread +// - polls the suspend state of the osthread using a yield loop +// - target thread signal handler (SR_handler) sets suspend state +// and blocks in sigsuspend until continued +// - resume: +// - sets target osthread state to continue +// - sends signal to end the sigsuspend loop in the SR_handler +// +// Note that the SR_lock plays no role in this suspend/resume protocol, +// but is checked for NULL in SR_handler as a thread termination indicator. + +static void resume_clear_context(OSThread *osthread) { + osthread->set_ucontext(NULL); + osthread->set_siginfo(NULL); +} + +static void suspend_save_context(OSThread *osthread, siginfo_t* siginfo, ucontext_t* context) { + osthread->set_ucontext(context); + osthread->set_siginfo(siginfo); +} + +// Handler function invoked when a thread's execution is suspended or +// resumed. We have to be careful that only async-safe functions are +// called here (Note: most pthread functions are not async safe and +// should be avoided.) +// +// Note: sigwait() is a more natural fit than sigsuspend() from an +// interface point of view, but sigwait() prevents the signal hander +// from being run. libpthread would get very confused by not having +// its signal handlers run and prevents sigwait()'s use with the +// mutex granting granting signal. +// +// Currently only ever called on the VMThread or JavaThread +// +static void SR_handler(int sig, siginfo_t* siginfo, ucontext_t* context) { + // Save and restore errno to avoid confusing native code with EINTR + // after sigsuspend. + int old_errno = errno; + + Thread* thread = Thread::current_or_null_safe(); + assert(thread != NULL, "Missing current thread in SR_handler"); + + // On some systems we have seen signal delivery get "stuck" until the signal + // mask is changed as part of thread termination. Check that the current thread + // has not already terminated (via SR_lock()) - else the following assertion + // will fail because the thread is no longer a JavaThread as the ~JavaThread + // destructor has completed. + + if (thread->SR_lock() == NULL) { + return; + } + + assert(thread->is_VM_thread() || thread->is_Java_thread(), "Must be VMThread or JavaThread"); + + OSThread* osthread = thread->osthread(); + + os::SuspendResume::State current = osthread->sr.state(); + if (current == os::SuspendResume::SR_SUSPEND_REQUEST) { + suspend_save_context(osthread, siginfo, context); + + // attempt to switch the state, we assume we had a SUSPEND_REQUEST + os::SuspendResume::State state = osthread->sr.suspended(); + if (state == os::SuspendResume::SR_SUSPENDED) { + sigset_t suspend_set; // signals for sigsuspend() + + // get current set of blocked signals and unblock resume signal + pthread_sigmask(SIG_BLOCK, NULL, &suspend_set); + sigdelset(&suspend_set, SR_signum); + + sr_semaphore.signal(); + // wait here until we are resumed + while (1) { + sigsuspend(&suspend_set); + + os::SuspendResume::State result = osthread->sr.running(); + if (result == os::SuspendResume::SR_RUNNING) { + sr_semaphore.signal(); + break; + } else if (result != os::SuspendResume::SR_SUSPENDED) { + ShouldNotReachHere(); + } + } + + } else if (state == os::SuspendResume::SR_RUNNING) { + // request was cancelled, continue + } else { + ShouldNotReachHere(); + } + + resume_clear_context(osthread); + } else if (current == os::SuspendResume::SR_RUNNING) { + // request was cancelled, continue + } else if (current == os::SuspendResume::SR_WAKEUP_REQUEST) { + // ignore + } else { + // ignore + } + + errno = old_errno; +} + +#if 0 +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; +} +#endif + + +static int sr_notify(OSThread* osthread) { + int status = pthread_kill(osthread->pthread_id(), SR_signum); + assert_status(status == 0, status, "pthread_kill"); + return status; +} + +// "Randomly" selected value for how long we want to spin +// before bailing out on suspending a thread, also how often +// we send a signal to a thread we want to resume +static const int RANDOMLY_LARGE_INTEGER = 1000000; +static const int RANDOMLY_LARGE_INTEGER2 = 100; + +// returns true on success and false on error - really an error is fatal +// but this seems the normal response to library errors +static bool do_suspend(OSThread* osthread) { + assert(osthread->sr.is_running(), "thread should be running"); + assert(!sr_semaphore.trywait(), "semaphore has invalid state"); + + // mark as suspended and send signal + if (osthread->sr.request_suspend() != os::SuspendResume::SR_SUSPEND_REQUEST) { + // failed to switch, state wasn't running? + ShouldNotReachHere(); + return false; + } + + if (sr_notify(osthread) != 0) { + ShouldNotReachHere(); + } + + // managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED + while (true) { + if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) { + break; + } else { + // timeout + os::SuspendResume::State cancelled = osthread->sr.cancel_suspend(); + if (cancelled == os::SuspendResume::SR_RUNNING) { + return false; + } else if (cancelled == os::SuspendResume::SR_SUSPENDED) { + // make sure that we consume the signal on the semaphore as well + sr_semaphore.wait(); + break; + } else { + ShouldNotReachHere(); + return false; + } + } + } + + guarantee(osthread->sr.is_suspended(), "Must be suspended"); + return true; +} + +static void do_resume(OSThread* osthread) { + assert(osthread->sr.is_suspended(), "thread should be suspended"); + assert(!sr_semaphore.trywait(), "invalid semaphore state"); + + if (osthread->sr.request_wakeup() != os::SuspendResume::SR_WAKEUP_REQUEST) { + // failed to switch to WAKEUP_REQUEST + ShouldNotReachHere(); + return; + } + + while (true) { + if (sr_notify(osthread) == 0) { + if (sr_semaphore.timedwait(0, 2 * NANOSECS_PER_MILLISEC)) { + if (osthread->sr.is_running()) { + return; + } + } + } else { + ShouldNotReachHere(); + } + } + + guarantee(osthread->sr.is_running(), "Must be running!"); +} + +/////////////////////////////////////////////////////////////////////////////////// +// signal handling (except suspend/resume) + +// This routine may be used by user applications as a "hook" to catch signals. +// The user-defined signal handler must pass unrecognized signals to this +// routine, and if it returns true (non-zero), then the signal handler must +// return immediately. If the flag "abort_if_unrecognized" is true, then this +// routine will never retun false (zero), but instead will execute a VM panic +// routine kill the process. +// +// If this routine returns false, it is OK to call it again. This allows +// the user-defined signal handler to perform checks either before or after +// the VM performs its own checks. Naturally, the user code would be making +// a serious error if it tried to handle an exception (such as a null check +// or breakpoint) that the VM was generating for its own correct operation. +// +// This routine may recognize any of the following kinds of signals: +// SIGBUS, SIGSEGV, SIGILL, SIGFPE, SIGQUIT, SIGPIPE, SIGXFSZ, SIGUSR1. +// It should be consulted by handlers for any of those signals. +// +// The caller of this routine must pass in the three arguments supplied +// to the function referred to in the "sa_sigaction" (not the "sa_handler") +// field of the structure passed to sigaction(). This routine assumes that +// the sa_flags field passed to sigaction() includes SA_SIGINFO and SA_RESTART. +// +// Note that the VM will print warnings if it detects conflicting signal +// handlers, unless invoked with the option "-XX:+AllowUserSignalHandlers". +// +extern "C" JNIEXPORT int JVM_handle_bsd_signal(int signo, siginfo_t* siginfo, + void* ucontext, + int abort_if_unrecognized); + +void signalHandler(int sig, siginfo_t* info, void* uc) { + assert(info != NULL && uc != NULL, "it must be old kernel"); + int orig_errno = errno; // Preserve errno value over signal handler. + JVM_handle_bsd_signal(sig, info, uc, true); + errno = orig_errno; +} + + +// This boolean allows users to forward their own non-matching signals +// to JVM_handle_bsd_signal, harmlessly. +bool os::Bsd::signal_handlers_are_installed = false; + +// For signal-chaining +struct sigaction sigact[NSIG]; +uint32_t sigs = 0; +#if (32 < NSIG-1) +#error "Not all signals can be encoded in sigs. Adapt its type!" +#endif +bool os::Bsd::libjsig_is_loaded = false; +typedef struct sigaction *(*get_signal_t)(int); +get_signal_t os::Bsd::get_signal_action = NULL; + +struct sigaction* os::Bsd::get_chained_signal_action(int sig) { + struct sigaction *actp = NULL; + + if (libjsig_is_loaded) { + // Retrieve the old signal handler from libjsig + actp = (*get_signal_action)(sig); + } + if (actp == NULL) { + // Retrieve the preinstalled signal handler from jvm + actp = get_preinstalled_handler(sig); + } + + return actp; +} + +static bool call_chained_handler(struct sigaction *actp, int sig, + siginfo_t *siginfo, void *context) { + // Call the old signal handler + if (actp->sa_handler == SIG_DFL) { + // It's more reasonable to let jvm treat it as an unexpected exception + // instead of taking the default action. + return false; + } else if (actp->sa_handler != SIG_IGN) { + if ((actp->sa_flags & SA_NODEFER) == 0) { + // automaticlly block the signal + sigaddset(&(actp->sa_mask), sig); + } + + sa_handler_t hand; + sa_sigaction_t sa; + bool siginfo_flag_set = (actp->sa_flags & SA_SIGINFO) != 0; + // retrieve the chained handler + if (siginfo_flag_set) { + sa = actp->sa_sigaction; + } else { + hand = actp->sa_handler; + } + + if ((actp->sa_flags & SA_RESETHAND) != 0) { + actp->sa_handler = SIG_DFL; + } + + // try to honor the signal mask + sigset_t oset; + pthread_sigmask(SIG_SETMASK, &(actp->sa_mask), &oset); + + // call into the chained handler + if (siginfo_flag_set) { + (*sa)(sig, siginfo, context); + } else { + (*hand)(sig); + } + + // restore the signal mask + pthread_sigmask(SIG_SETMASK, &oset, 0); + } + // Tell jvm's signal handler the signal is taken care of. + return true; +} + +bool os::Bsd::chained_handler(int sig, siginfo_t* siginfo, void* context) { + bool chained = false; + // signal-chaining + if (UseSignalChaining) { + struct sigaction *actp = get_chained_signal_action(sig); + if (actp != NULL) { + chained = call_chained_handler(actp, sig, siginfo, context); + } + } + return chained; +} + +struct sigaction* os::Bsd::get_preinstalled_handler(int sig) { + if ((((uint32_t)1 << (sig-1)) & sigs) != 0) { + return &sigact[sig]; + } + return NULL; +} + +void os::Bsd::save_preinstalled_handler(int sig, struct sigaction& oldAct) { + assert(sig > 0 && sig < NSIG, "vm signal out of expected range"); + sigact[sig] = oldAct; + sigs |= (uint32_t)1 << (sig-1); +} + +// for diagnostic +int sigflags[NSIG]; + +int os::Bsd::get_our_sigflags(int sig) { + assert(sig > 0 && sig < NSIG, "vm signal out of expected range"); + return sigflags[sig]; +} + +void os::Bsd::set_our_sigflags(int sig, int flags) { + assert(sig > 0 && sig < NSIG, "vm signal out of expected range"); + if (sig > 0 && sig < NSIG) { + sigflags[sig] = flags; + } +} + +void os::Bsd::set_signal_handler(int sig, bool set_installed) { + // Check for overwrite. + struct sigaction oldAct; + sigaction(sig, (struct sigaction*)NULL, &oldAct); + + void* oldhand = oldAct.sa_sigaction + ? CAST_FROM_FN_PTR(void*, oldAct.sa_sigaction) + : CAST_FROM_FN_PTR(void*, oldAct.sa_handler); + if (oldhand != CAST_FROM_FN_PTR(void*, SIG_DFL) && + oldhand != CAST_FROM_FN_PTR(void*, SIG_IGN) && + oldhand != CAST_FROM_FN_PTR(void*, (sa_sigaction_t)signalHandler)) { + if (AllowUserSignalHandlers || !set_installed) { + // Do not overwrite; user takes responsibility to forward to us. + return; + } else if (UseSignalChaining) { + // save the old handler in jvm + save_preinstalled_handler(sig, oldAct); + // libjsig also interposes the sigaction() call below and saves the + // old sigaction on it own. + } else { + fatal("Encountered unexpected pre-existing sigaction handler " + "%#lx for signal %d.", (long)oldhand, sig); + } + } + + struct sigaction sigAct; + sigfillset(&(sigAct.sa_mask)); + sigAct.sa_handler = SIG_DFL; + if (!set_installed) { + sigAct.sa_flags = SA_SIGINFO|SA_RESTART; + } else { + sigAct.sa_sigaction = signalHandler; + sigAct.sa_flags = SA_SIGINFO|SA_RESTART; + } +#ifdef __APPLE__ + // Needed for main thread as XNU (Mac OS X kernel) will only deliver SIGSEGV + // (which starts as SIGBUS) on main thread with faulting address inside "stack+guard pages" + // if the signal handler declares it will handle it on alternate stack. + // Notice we only declare we will handle it on alt stack, but we are not + // actually going to use real alt stack - this is just a workaround. + // Please see ux_exception.c, method catch_mach_exception_raise for details + // link http://www.opensource.apple.com/source/xnu/xnu-2050.18.24/bsd/uxkern/ux_exception.c + if (sig == SIGSEGV) { + sigAct.sa_flags |= SA_ONSTACK; + } +#endif + + // Save flags, which are set by ours + assert(sig > 0 && sig < NSIG, "vm signal out of expected range"); + sigflags[sig] = sigAct.sa_flags; + + int ret = sigaction(sig, &sigAct, &oldAct); + assert(ret == 0, "check"); + + void* oldhand2 = oldAct.sa_sigaction + ? CAST_FROM_FN_PTR(void*, oldAct.sa_sigaction) + : CAST_FROM_FN_PTR(void*, oldAct.sa_handler); + 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. + +#if 0 +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; + } + } + } +} +#endif + + +///// +// glibc on Bsd platform uses non-documented flag +// to indicate, that some special sort of signal +// trampoline is used. +// We will never set this flag, and we should +// ignore this flag in our diagnostic +#ifdef SIGNIFICANT_SIGNAL_MASK + #undef SIGNIFICANT_SIGNAL_MASK +#endif +#define SIGNIFICANT_SIGNAL_MASK (~0x04000000) + +static const char* get_signal_handler_name(address handler, + char* buf, int buflen) { + int offset; + bool found = os::dll_address_to_library_name(handler, buf, buflen, &offset); + if (found) { + // skip directory names + const char *p1, *p2; + p1 = buf; + size_t len = strlen(os::file_separator()); + while ((p2 = strstr(p1, os::file_separator())) != NULL) p1 = p2 + len; + jio_snprintf(buf, buflen, "%s+0x%x", p1, offset); + } else { + jio_snprintf(buf, buflen, PTR_FORMAT, handler); + } + return buf; +} + +static void print_signal_handler(outputStream* st, int sig, + char* buf, size_t buflen) { + struct sigaction sa; + + sigaction(sig, NULL, &sa); + + // See comment for SIGNIFICANT_SIGNAL_MASK define + sa.sa_flags &= SIGNIFICANT_SIGNAL_MASK; + + st->print("%s: ", os::exception_name(sig, buf, buflen)); + + address handler = (sa.sa_flags & SA_SIGINFO) + ? CAST_FROM_FN_PTR(address, sa.sa_sigaction) + : CAST_FROM_FN_PTR(address, sa.sa_handler); + + if (handler == CAST_FROM_FN_PTR(address, SIG_DFL)) { + st->print("SIG_DFL"); + } else if (handler == CAST_FROM_FN_PTR(address, SIG_IGN)) { + st->print("SIG_IGN"); + } else { + st->print("[%s]", get_signal_handler_name(handler, buf, buflen)); + } + + st->print(", sa_mask[0]="); + os::Posix::print_signal_set_short(st, &sa.sa_mask); + + address rh = VMError::get_resetted_sighandler(sig); + // May be, handler was resetted by VMError? + if (rh != NULL) { + handler = rh; + sa.sa_flags = VMError::get_resetted_sigflags(sig) & SIGNIFICANT_SIGNAL_MASK; + } + + st->print(", sa_flags="); + os::Posix::print_sa_flags(st, sa.sa_flags); + + // Check: is it our handler? + if (handler == CAST_FROM_FN_PTR(address, (sa_sigaction_t)signalHandler) || + handler == CAST_FROM_FN_PTR(address, (sa_sigaction_t)SR_handler)) { + // It is our signal handler + // check for flags, reset system-used one! + if ((int)sa.sa_flags != os::Bsd::get_our_sigflags(sig)) { + st->print( + ", flags was changed from " PTR32_FORMAT ", consider using jsig library", + os::Bsd::get_our_sigflags(sig)); + } + } + st->cr(); +} + + +#define DO_SIGNAL_CHECK(sig) \ + do { \ + if (!sigismember(&check_signal_done, sig)) { \ + os::Bsd::check_signal_handler(sig); \ + } \ + } while (0) + +// This method is a periodic task to check for misbehaving JNI applications +// under CheckJNI, we can add any periodic checks here + +void os::run_periodic_checks() { + + if (check_signals == false) return; + + // SEGV and BUS if overridden could potentially prevent + // generation of hs*.log in the event of a crash, debugging + // such a case can be very challenging, so we absolutely + // check the following for a good measure: + DO_SIGNAL_CHECK(SIGSEGV); + DO_SIGNAL_CHECK(SIGILL); + DO_SIGNAL_CHECK(SIGFPE); + DO_SIGNAL_CHECK(SIGBUS); + DO_SIGNAL_CHECK(SIGPIPE); + DO_SIGNAL_CHECK(SIGXFSZ); + + + // ReduceSignalUsage allows the user to override these handlers + // see comments at the very top and jvm_solaris.h + if (!ReduceSignalUsage) { + DO_SIGNAL_CHECK(SHUTDOWN1_SIGNAL); + DO_SIGNAL_CHECK(SHUTDOWN2_SIGNAL); + DO_SIGNAL_CHECK(SHUTDOWN3_SIGNAL); + DO_SIGNAL_CHECK(BREAK_SIGNAL); + } + + DO_SIGNAL_CHECK(SR_signum); +} + +typedef int (*os_sigaction_t)(int, const struct sigaction *, struct sigaction *); + +static os_sigaction_t os_sigaction = NULL; + +void os::Bsd::check_signal_handler(int sig) { + char buf[O_BUFLEN]; + address jvmHandler = NULL; + + + struct sigaction act; + if (os_sigaction == NULL) { + // only trust the default sigaction, in case it has been interposed + os_sigaction = (os_sigaction_t)dlsym(RTLD_DEFAULT, "sigaction"); + if (os_sigaction == NULL) return; + } + + os_sigaction(sig, (struct sigaction*)NULL, &act); + + + act.sa_flags &= SIGNIFICANT_SIGNAL_MASK; + + address thisHandler = (act.sa_flags & SA_SIGINFO) + ? CAST_FROM_FN_PTR(address, act.sa_sigaction) + : CAST_FROM_FN_PTR(address, act.sa_handler); + + + switch (sig) { + case SIGSEGV: + case SIGBUS: + case SIGFPE: + case SIGPIPE: + case SIGILL: + case SIGXFSZ: + jvmHandler = CAST_FROM_FN_PTR(address, (sa_sigaction_t)signalHandler); + break; + + case SHUTDOWN1_SIGNAL: + case SHUTDOWN2_SIGNAL: + case SHUTDOWN3_SIGNAL: + case BREAK_SIGNAL: + jvmHandler = (address)user_handler(); + break; + + default: + if (sig == SR_signum) { + jvmHandler = CAST_FROM_FN_PTR(address, (sa_sigaction_t)SR_handler); + } else { + return; + } + break; + } + + if (thisHandler != jvmHandler) { + tty->print("Warning: %s handler ", exception_name(sig, buf, O_BUFLEN)); + tty->print("expected:%s", get_signal_handler_name(jvmHandler, buf, O_BUFLEN)); + tty->print_cr(" found:%s", get_signal_handler_name(thisHandler, buf, O_BUFLEN)); + // No need to check this sig any longer + sigaddset(&check_signal_done, sig); + // Running under non-interactive shell, SHUTDOWN2_SIGNAL will be reassigned SIG_IGN + if (sig == SHUTDOWN2_SIGNAL && !isatty(fileno(stdin))) { + tty->print_cr("Running in non-interactive shell, %s handler is replaced by shell", + exception_name(sig, buf, O_BUFLEN)); + } + } else if(os::Bsd::get_our_sigflags(sig) != 0 && (int)act.sa_flags != os::Bsd::get_our_sigflags(sig)) { + tty->print("Warning: %s handler flags ", exception_name(sig, buf, O_BUFLEN)); + tty->print("expected:"); + os::Posix::print_sa_flags(tty, os::Bsd::get_our_sigflags(sig)); + tty->cr(); + tty->print(" found:"); + os::Posix::print_sa_flags(tty, act.sa_flags); + tty->cr(); + // No need to check this sig any longer + sigaddset(&check_signal_done, sig); + } + + // Dump all the signal + if (sigismember(&check_signal_done, sig)) { + print_signal_handlers(tty, buf, O_BUFLEN); + } +} + +extern void report_error(char* file_name, int line_no, char* title, + char* format, ...); + +// this is called _before_ the most of global arguments have been parsed +void os::init(void) { + char dummy; // used to get a guess on initial stack address +// first_hrtime = gethrtime(); + + // With BsdThreads the JavaMain thread pid (primordial thread) + // is different than the pid of the java launcher thread. + // So, on Bsd, the launcher thread pid is passed to the VM + // via the sun.java.launcher.pid property. + // Use this property instead of getpid() if it was correctly passed. + // See bug 6351349. + pid_t java_launcher_pid = (pid_t) Arguments::sun_java_launcher_pid(); + + _initial_pid = (java_launcher_pid > 0) ? java_launcher_pid : getpid(); + + clock_tics_per_sec = CLK_TCK; + + init_random(1234567); + + ThreadCritical::initialize(); + + Bsd::set_page_size(getpagesize()); + if (Bsd::page_size() == -1) { + fatal("os_bsd.cpp: os::init: sysconf failed (%s)", os::strerror(errno)); + } + init_page_sizes((size_t) Bsd::page_size()); + + Bsd::initialize_system_info(); + + // main_thread points to the aboriginal thread + Bsd::_main_thread = pthread_self(); + + Bsd::clock_init(); + initial_time_count = javaTimeNanos(); + +#ifdef __APPLE__ + // XXXDARWIN + // Work around the unaligned VM callbacks in hotspot's + // sharedRuntime. The callbacks don't use SSE2 instructions, and work on + // Linux, Solaris, and FreeBSD. On Mac OS X, dyld (rightly so) enforces + // alignment when doing symbol lookup. To work around this, we force early + // binding of all symbols now, thus binding when alignment is known-good. + _dyld_bind_fully_image_containing_address((const void *) &os::init); +#endif +} + +// To install functions for atexit system call +extern "C" { + static void perfMemory_exit_helper() { + perfMemory_exit(); + } +} + +// this is called _after_ the global arguments have been parsed +jint os::init_2(void) { + // Allocate a single page and mark it as readable for safepoint polling + address polling_page = (address) ::mmap(NULL, Bsd::page_size(), PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + guarantee(polling_page != MAP_FAILED, "os::init_2: failed to allocate polling page"); + + os::set_polling_page(polling_page); + log_info(os)("SafePoint Polling address: " INTPTR_FORMAT, p2i(polling_page)); + + if (!UseMembar) { + address mem_serialize_page = (address) ::mmap(NULL, Bsd::page_size(), PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + guarantee(mem_serialize_page != MAP_FAILED, "mmap Failed for memory serialize page"); + os::set_memory_serialize_page(mem_serialize_page); + 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 0 + if (SR_initialize() != 0) { + perror("SR_initialize failed"); + return JNI_ERR; + } +#endif + //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) { + return JNI_ERR; + } + + if (MaxFDLimit) { + // set the number of file descriptors to max. print out error + // if getrlimit/setrlimit fails but continue regardless. + struct rlimit nbr_files; + int status = getrlimit(RLIMIT_NOFILE, &nbr_files); + if (status != 0) { + log_info(os)("os::init_2 getrlimit failed: %s", os::strerror(errno)); + } else { + nbr_files.rlim_cur = nbr_files.rlim_max; + +#ifdef __APPLE__ + // Darwin returns RLIM_INFINITY for rlim_max, but fails with EINVAL if + // you attempt to use RLIM_INFINITY. As per setrlimit(2), OPEN_MAX must + // be used instead + nbr_files.rlim_cur = MIN(OPEN_MAX, nbr_files.rlim_cur); +#endif + + status = setrlimit(RLIMIT_NOFILE, &nbr_files); + if (status != 0) { + log_info(os)("os::init_2 setrlimit failed: %s", os::strerror(errno)); + } + } + } + + // at-exit methods are called in the reverse order of their registration. + // atexit functions are called on return from main or as a result of a + // call to exit(3C). There can be only 32 of these functions registered + // and atexit() does not set errno. + + if (PerfAllowAtExitRegistration) { + // only register atexit functions if PerfAllowAtExitRegistration is set. + // atexit functions can be delayed until process exit time, which + // can be problematic for embedded VM situations. Embedded VMs should + // call DestroyJavaVM() to assure that VM resources are released. + + // note: perfMemory_exit_helper atexit function may be removed in + // the future if the appropriate cleanup code can be added to the + // VM_Exit VMOperation's doit method. + if (atexit(perfMemory_exit_helper) != 0) { + warning("os::init2 atexit(perfMemory_exit_helper) failed"); + } + } + + // initialize thread priority policy + prio_init(); + +#ifdef __APPLE__ + // dynamically link to objective c gc registration + void *handleLibObjc = dlopen(OBJC_LIB, RTLD_LAZY); + if (handleLibObjc != NULL) { + objc_registerThreadWithCollectorFunction = (objc_registerThreadWithCollector_t) dlsym(handleLibObjc, OBJC_GCREGISTER); + } +#endif + + return JNI_OK; +} + +// 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"); + //} + 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"); + //} + NOT_IMPL; +} + +int os::active_processor_count() { + return _processor_count; +} + +void os::set_native_thread_name(const char *name) { +#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 + // This is only supported in Snow Leopard and beyond + if (name != NULL) { + // Add a "Java: " prefix to the name + char buf[MAXTHREADNAMESIZE]; + snprintf(buf, sizeof(buf), "Java: %s", name); + pthread_setname_np(buf); + } +#endif +} + +bool os::distribute_processes(uint length, uint* distribution) { + // Not yet implemented. + return false; +} + +bool os::bind_to_processor(uint processor_id) { + // Not yet implemented. + return false; +} + +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); + do_resume(_thread->osthread()); + } +} + +/// +class PcFetcher : public os::SuspendedThreadTask { + public: + PcFetcher(Thread* thread) : os::SuspendedThreadTask(thread) {} + ExtendedPC result(); + protected: + void do_task(const os::SuspendedThreadTaskContext& context); + private: + ExtendedPC _epc; +}; + +ExtendedPC PcFetcher::result() { + guarantee(is_done(), "task is not done yet."); + return _epc; +} + +void PcFetcher::do_task(const os::SuspendedThreadTaskContext& context) { + Thread* thread = context.thread(); + OSThread* osthread = thread->osthread(); + if (osthread->ucontext() != NULL) { + _epc = os::Bsd::ucontext_get_pc((const ucontext_t *) context.ucontext()); + } else { + // NULL context is unexpected, double-check this is the VMThread + guarantee(thread->is_VM_thread(), "can only be called for VMThread"); + } +} + +// Suspends the target using the signal mechanism and then grabs the PC before +// resuming the target. Used by the flat-profiler only +ExtendedPC os::get_thread_pc(Thread* thread) { + // Make sure that it is called by the watcher for the VMThread + assert(Thread::current()->is_Watcher_thread(), "Must be watcher"); + assert(thread->is_VM_thread(), "Can only be called for VMThread"); + + PcFetcher fetcher(thread); + fetcher.run(); + return fetcher.result(); +} + +//////////////////////////////////////////////////////////////////////////////// +// debug support + +bool os::find(address addr, outputStream* st) { + Dl_info dlinfo; + memset(&dlinfo, 0, sizeof(dlinfo)); + if (dladdr(addr, &dlinfo) != 0) { + st->print(PTR_FORMAT ": ", addr); + if (dlinfo.dli_sname != NULL && dlinfo.dli_saddr != NULL) { + st->print("%s+%#x", dlinfo.dli_sname, + addr - (intptr_t)dlinfo.dli_saddr); + } else if (dlinfo.dli_fbase != NULL) { + st->print("", addr - (intptr_t)dlinfo.dli_fbase); + } else { + st->print(""); + } + if (dlinfo.dli_fname != NULL) { + st->print(" in %s", dlinfo.dli_fname); + } + if (dlinfo.dli_fbase != NULL) { + st->print(" at " PTR_FORMAT, dlinfo.dli_fbase); + } + st->cr(); + + if (Verbose) { + // decode some bytes around the PC + address begin = clamp_address_in_page(addr-40, addr, os::vm_page_size()); + address end = clamp_address_in_page(addr+40, addr, os::vm_page_size()); + address lowest = (address) dlinfo.dli_sname; + if (!lowest) lowest = (address) dlinfo.dli_fbase; + if (begin < lowest) begin = lowest; + Dl_info dlinfo2; + if (dladdr(end, &dlinfo2) != 0 && dlinfo2.dli_saddr != dlinfo.dli_saddr + && end > dlinfo2.dli_saddr && dlinfo2.dli_saddr > begin) { + end = (address) dlinfo2.dli_saddr; + } + Disassembler::decode(begin, end, st); + } + return true; + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +// misc + +// This does not do anything on Bsd. This is basically a hook for being +// able to use structured exception handling (thread-local exception filters) +// on, e.g., Win32. +void os::os_exception_wrapper(java_call_t f, JavaValue* value, + const methodHandle& method, JavaCallArguments* args, + Thread* thread) { + f(value, method, args, thread); +} + +void os::print_statistics() { +} + +bool os::message_box(const char* title, const char* message) { + int i; + fdStream err(defaultStream::error_fd()); + for (i = 0; i < 78; i++) err.print_raw("="); + err.cr(); + err.print_raw_cr(title); + for (i = 0; i < 78; i++) err.print_raw("-"); + err.cr(); + err.print_raw_cr(message); + for (i = 0; i < 78; i++) err.print_raw("="); + err.cr(); + + char buf[16]; + // Prevent process from exiting upon "read error" without consuming all CPU + while (::read(0, buf, sizeof(buf)) <= 0) { ::sleep(100); } + + return buf[0] == 'y' || buf[0] == 'Y'; +} + +int os::stat(const char *path, struct stat *sbuf) { + char pathbuf[MAX_PATH]; + if (strlen(path) > MAX_PATH - 1) { + errno = ENAMETOOLONG; + return -1; + } + os::native_path(strcpy(pathbuf, path)); + return ::stat(pathbuf, sbuf); +} + +static inline struct timespec get_mtime(const char* filename) { + struct stat st; + int ret = os::stat(filename, &st); + assert(ret == 0, "failed to stat() file '%s': %s", filename, strerror(errno)); +#ifdef __APPLE__ + return st.st_mtimespec; +#else + return st.st_mtimespec; +#endif +} + +int os::compare_file_modified_times(const char* file1, const char* file2) { + struct timespec filetime1 = get_mtime(file1); + struct timespec filetime2 = get_mtime(file2); + int diff = filetime1.tv_sec - filetime2.tv_sec; + if (diff == 0) { + return filetime1.tv_nsec - filetime2.tv_nsec; + } + return diff; +} + +// Is a (classpath) directory empty? +bool os::dir_is_empty(const char* path) { + DIR *dir = NULL; + struct dirent *ptr; + + dir = opendir(path); + if (dir == NULL) return true; + + // Scan the directory + bool result = true; + char buf[sizeof(struct dirent) + MAX_PATH]; + while (result && (ptr = ::readdir(dir)) != NULL) { + if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { + result = false; + } + } + closedir(dir); + return result; +} + +// This code originates from JDK's sysOpen and open64_w +// from src/solaris/hpi/src/system_md.c + +int os::open(const char *path, int oflag, int mode) { + if (strlen(path) > MAX_PATH - 1) { + errno = ENAMETOOLONG; + return -1; + } + int fd; + + fd = ::open(path, oflag, mode); + if (fd == -1) return -1; + + // If the open succeeded, the file might still be a directory + { + struct stat buf; + int ret = ::fstat(fd, &buf); + int st_mode = buf.st_mode; + + if (ret != -1) { + if ((st_mode & S_IFMT) == S_IFDIR) { + errno = EISDIR; + ::close(fd); + return -1; + } + } else { + ::close(fd); + return -1; + } + } + + // All file descriptors that are opened in the JVM and not + // specifically destined for a subprocess should have the + // close-on-exec flag set. If we don't set it, then careless 3rd + // party native code might fork and exec without closing all + // appropriate file descriptors (e.g. as we do in closeDescriptors in + // UNIXProcess.c), and this in turn might: + // + // - cause end-of-file to fail to be detected on some file + // descriptors, resulting in mysterious hangs, or + // + // - might cause an fopen in the subprocess to fail on a system + // suffering from bug 1085341. + // + // (Yes, the default setting of the close-on-exec flag is a Unix + // design flaw) + // + // See: + // 1085341: 32-bit stdio routines should support file descriptors >255 + // 4843136: (process) pipe file descriptor from Runtime.exec not being closed + // 6339493: (process) Runtime.exec does not close all file descriptors on Solaris 9 + // +#ifdef FD_CLOEXEC + { + int flags = ::fcntl(fd, F_GETFD); + if (flags != -1) { + ::fcntl(fd, F_SETFD, flags | FD_CLOEXEC); + } + } +#endif + + return fd; +} + + +// create binary file, rewriting existing file if required +int os::create_binary_file(const char* path, bool rewrite_existing) { + int oflags = O_WRONLY | O_CREAT; + if (!rewrite_existing) { + oflags |= O_EXCL; + } + return ::open(path, oflags, S_IREAD | S_IWRITE); +} + +// return current position of file pointer +jlong os::current_file_offset(int fd) { + return (jlong)::lseek(fd, (off_t)0, SEEK_CUR); +} + +// move file pointer to the specified offset +jlong os::seek_to_file_offset(int fd, jlong offset) { + return (jlong)::lseek(fd, (off_t)offset, SEEK_SET); +} + +// This code originates from JDK's sysAvailable +// from src/solaris/hpi/src/native_threads/src/sys_api_td.c + +int os::available(int fd, jlong *bytes) { + jlong cur, end; + int mode; + struct stat buf; + + if (::fstat(fd, &buf) >= 0) { + mode = buf.st_mode; + if (S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) { + int n; + if (::ioctl(fd, FIONREAD, &n) >= 0) { + *bytes = n; + return 1; + } + } + } + if ((cur = ::lseek(fd, 0L, SEEK_CUR)) == -1) { + return 0; + } else if ((end = ::lseek(fd, 0L, SEEK_END)) == -1) { + return 0; + } else if (::lseek(fd, cur, SEEK_SET) == -1) { + return 0; + } + *bytes = end - cur; + return 1; +} + +// Map a block of memory. +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + int prot; + int flags; + + if (read_only) { + prot = PROT_READ; + flags = MAP_SHARED; + } else { + prot = PROT_READ | PROT_WRITE; + flags = MAP_PRIVATE; + } + + if (allow_exec) { + prot |= PROT_EXEC; + } + + if (addr != NULL) { + flags |= MAP_FIXED; + } + + char* mapped_address = (char*)mmap(addr, (size_t)bytes, prot, flags, + fd, file_offset); + if (mapped_address == MAP_FAILED) { + return NULL; + } + return mapped_address; +} + + +// Remap a block of memory. +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + // same as map_memory() on this OS + return os::map_memory(fd, file_name, file_offset, addr, bytes, read_only, + allow_exec); +} + + +// 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. +// +// current_thread_cpu_time() and thread_cpu_time(Thread*) returns +// the fast estimate available on the platform. + +jlong os::current_thread_cpu_time() { +#ifdef __APPLE__ + return os::thread_cpu_time(Thread::current(), true /* user + sys */); +#else + Unimplemented(); + return 0; +#endif +} + +jlong os::thread_cpu_time(Thread* thread) { +#ifdef __APPLE__ + return os::thread_cpu_time(thread, true /* user + sys */); +#else + Unimplemented(); + return 0; +#endif +} + +jlong os::current_thread_cpu_time(bool user_sys_cpu_time) { +#ifdef __APPLE__ + return os::thread_cpu_time(Thread::current(), user_sys_cpu_time); +#else + Unimplemented(); + return 0; +#endif +} + +jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) { +#ifdef __APPLE__ + struct thread_basic_info tinfo; + mach_msg_type_number_t tcount = THREAD_INFO_MAX; + kern_return_t kr; + thread_t mach_thread; + + mach_thread = thread->osthread()->thread_id(); + kr = thread_info(mach_thread, THREAD_BASIC_INFO, (thread_info_t)&tinfo, &tcount); + if (kr != KERN_SUCCESS) { + return -1; + } + + if (user_sys_cpu_time) { + jlong nanos; + nanos = ((jlong) tinfo.system_time.seconds + tinfo.user_time.seconds) * (jlong)1000000000; + nanos += ((jlong) tinfo.system_time.microseconds + (jlong) tinfo.user_time.microseconds) * (jlong)1000; + return nanos; + } else { + return ((jlong)tinfo.user_time.seconds * 1000000000) + ((jlong)tinfo.user_time.microseconds * (jlong)1000); + } +#else + Unimplemented(); + return 0; +#endif +} + + +void os::current_thread_cpu_time_info(jvmtiTimerInfo *info_ptr) { + info_ptr->max_value = ALL_64_BITS; // will not wrap in less than 64 bits + info_ptr->may_skip_backward = false; // elapsed time not wall time + info_ptr->may_skip_forward = false; // elapsed time not wall time + info_ptr->kind = JVMTI_TIMER_TOTAL_CPU; // user+system time is returned +} + +void os::thread_cpu_time_info(jvmtiTimerInfo *info_ptr) { + info_ptr->max_value = ALL_64_BITS; // will not wrap in less than 64 bits + info_ptr->may_skip_backward = false; // elapsed time not wall time + info_ptr->may_skip_forward = false; // elapsed time not wall time + info_ptr->kind = JVMTI_TIMER_TOTAL_CPU; // user+system time is returned +} + +bool os::is_thread_cpu_time_supported() { +#ifdef __APPLE__ + return true; +#else + return false; +#endif +} + +// System loadavg support. Returns -1 if load average cannot be obtained. +// Bsd doesn't yet have a (official) notion of processor sets, +// so just return the system wide load average. +int os::loadavg(double loadavg[], int nelem) { + return ::getloadavg(loadavg, nelem); +} + +void os::pause() { + char filename[MAX_PATH]; + if (PauseAtStartupFile && PauseAtStartupFile[0]) { + jio_snprintf(filename, MAX_PATH, PauseAtStartupFile); + } else { + jio_snprintf(filename, MAX_PATH, "./vm.paused.%d", current_process_id()); + } + + int fd = ::open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); + if (fd != -1) { + struct stat buf; + ::close(fd); + while (::stat(filename, &buf) == 0) { + (void)::poll(NULL, 0, 100); + } + } else { + jio_fprintf(stderr, + "Could not open pause file '%s', continuing immediately.\n", filename); + } +} + + +// Refer to the comments in os_solaris.cpp park-unpark. The next two +// comment paragraphs are worth repeating here: +// +// Assumption: +// Only one parker can exist on an event, which is why we allocate +// them per-thread. Multiple unparkers can coexist. +// +// _Event serves as a restricted-range semaphore. +// -1 : thread is blocked, i.e. there is a waiter +// 0 : neutral: thread is running or ready, +// could have been signaled after a wait started +// 1 : signaled - thread is running or ready +// + +// utility to compute the abstime argument to timedwait: +// millis is the relative timeout time +// abstime will be the absolute timeout time +// TODO: replace compute_abstime() with unpackTime() + +static struct timespec* compute_abstime(struct timespec* abstime, + jlong millis) { + if (millis < 0) millis = 0; + struct timeval now; + int status = gettimeofday(&now, NULL); + assert(status == 0, "gettimeofday"); + jlong seconds = millis / 1000; + millis %= 1000; + if (seconds > 50000000) { // see man cond_timedwait(3T) + seconds = 50000000; + } + abstime->tv_sec = now.tv_sec + seconds; + long usec = now.tv_usec + millis * 1000; + if (usec >= 1000000) { + abstime->tv_sec += 1; + usec -= 1000000; + } + abstime->tv_nsec = usec * 1000; + return abstime; +} + +void os::PlatformEvent::park() { // AKA "down()" + // Transitions for _Event: + // -1 => -1 : illegal + // 1 => 0 : pass - return immediately + // 0 => -1 : block; then set _Event to 0 before returning + + // Invariant: Only the thread associated with the Event/PlatformEvent + // may call park(). + // TODO: assert that _Assoc != NULL or _Assoc == Self + assert(_nParked == 0, "invariant"); + + int v; + for (;;) { + v = _Event; + if (Atomic::cmpxchg(v-1, &_Event, v) == v) break; + } + guarantee(v >= 0, "invariant"); + if (v == 0) { + // Do this the hard way by blocking ... + int status = pthread_mutex_lock(_mutex); + assert_status(status == 0, status, "mutex_lock"); + guarantee(_nParked == 0, "invariant"); + ++_nParked; + while (_Event < 0) { + status = pthread_cond_wait(_cond, _mutex); + // for some reason, under 2.7 lwp_cond_wait() may return ETIME ... + // Treat this the same as if the wait was interrupted + if (status == ETIMEDOUT) { status = EINTR; } + assert_status(status == 0 || status == EINTR, status, "cond_wait"); + } + --_nParked; + + _Event = 0; + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "mutex_unlock"); + // Paranoia to ensure our locked and lock-free paths interact + // correctly with each other. + OrderAccess::fence(); + } + guarantee(_Event >= 0, "invariant"); +} + +int os::PlatformEvent::park(jlong millis) { + // Transitions for _Event: + // -1 => -1 : illegal + // 1 => 0 : pass - return immediately + // 0 => -1 : block; then set _Event to 0 before returning + + guarantee(_nParked == 0, "invariant"); + + int v; + for (;;) { + v = _Event; + if (Atomic::cmpxchg(v-1, &_Event, v) == v) break; + } + guarantee(v >= 0, "invariant"); + if (v != 0) return OS_OK; + + // We do this the hard way, by blocking the thread. + // Consider enforcing a minimum timeout value. + struct timespec abst; + compute_abstime(&abst, millis); + + int ret = OS_TIMEOUT; + int status = pthread_mutex_lock(_mutex); + assert_status(status == 0, status, "mutex_lock"); + guarantee(_nParked == 0, "invariant"); + ++_nParked; + + // Object.wait(timo) will return because of + // (a) notification + // (b) timeout + // (c) thread.interrupt + // + // Thread.interrupt and object.notify{All} both call Event::set. + // That is, we treat thread.interrupt as a special case of notification. + // We ignore spurious OS wakeups unless FilterSpuriousWakeups is false. + // We assume all ETIME returns are valid. + // + // TODO: properly differentiate simultaneous notify+interrupt. + // In that case, we should propagate the notify to another waiter. + + while (_Event < 0) { + status = pthread_cond_timedwait(_cond, _mutex, &abst); + assert_status(status == 0 || status == EINTR || + status == ETIMEDOUT, + status, "cond_timedwait"); + if (!FilterSpuriousWakeups) break; // previous semantics + if (status == ETIMEDOUT) break; + // We consume and ignore EINTR and spurious wakeups. + } + --_nParked; + if (_Event >= 0) { + ret = OS_OK; + } + _Event = 0; + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "mutex_unlock"); + assert(_nParked == 0, "invariant"); + // Paranoia to ensure our locked and lock-free paths interact + // correctly with each other. + OrderAccess::fence(); + return ret; +} + +void os::PlatformEvent::unpark() { + // Transitions for _Event: + // 0 => 1 : just return + // 1 => 1 : just return + // -1 => either 0 or 1; must signal target thread + // That is, we can safely transition _Event from -1 to either + // 0 or 1. + // See also: "Semaphores in Plan 9" by Mullender & Cox + // + // Note: Forcing a transition from "-1" to "1" on an unpark() means + // that it will take two back-to-back park() calls for the owning + // thread to block. This has the benefit of forcing a spurious return + // from the first park() call after an unpark() call which will help + // shake out uses of park() and unpark() without condition variables. + + if (Atomic::xchg(1, &_Event) >= 0) return; + + // Wait for the thread associated with the event to vacate + int status = pthread_mutex_lock(_mutex); + assert_status(status == 0, status, "mutex_lock"); + int AnyWaiters = _nParked; + assert(AnyWaiters == 0 || AnyWaiters == 1, "invariant"); + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "mutex_unlock"); + if (AnyWaiters != 0) { + // Note that we signal() *after* dropping the lock for "immortal" Events. + // This is safe and avoids a common class of futile wakeups. In rare + // circumstances this can cause a thread to return prematurely from + // cond_{timed}wait() but the spurious wakeup is benign and the victim + // will simply re-test the condition and re-park itself. + // This provides particular benefit if the underlying platform does not + // provide wait morphing. + status = pthread_cond_signal(_cond); + assert_status(status == 0, status, "cond_signal"); + } +} + + +// JSR166 +// ------------------------------------------------------- + +// The solaris and bsd implementations of park/unpark are fairly +// conservative for now, but can be improved. They currently use a +// mutex/condvar pair, plus a a count. +// Park decrements count if > 0, else does a condvar wait. Unpark +// sets count to 1 and signals condvar. Only one thread ever waits +// on the condvar. Contention seen when trying to park implies that someone +// is unparking you, so don't wait. And spurious returns are fine, so there +// is no need to track notifications. + +#define MAX_SECS 100000000 + +// This code is common to bsd and solaris and will be moved to a +// common place in dolphin. +// +// The passed in time value is either a relative time in nanoseconds +// or an absolute time in milliseconds. Either way it has to be unpacked +// into suitable seconds and nanoseconds components and stored in the +// given timespec structure. +// Given time is a 64-bit value and the time_t used in the timespec is only +// a signed-32-bit value (except on 64-bit Bsd) we have to watch for +// overflow if times way in the future are given. Further on Solaris versions +// prior to 10 there is a restriction (see cond_timedwait) that the specified +// number of seconds, in abstime, is less than current_time + 100,000,000. +// As it will be 28 years before "now + 100000000" will overflow we can +// ignore overflow and just impose a hard-limit on seconds using the value +// of "now + 100,000,000". This places a limit on the timeout of about 3.17 +// years from "now". + +static void unpackTime(struct timespec* absTime, bool isAbsolute, jlong time) { + assert(time > 0, "convertTime"); + + struct timeval now; + int status = gettimeofday(&now, NULL); + assert(status == 0, "gettimeofday"); + + time_t max_secs = now.tv_sec + MAX_SECS; + + if (isAbsolute) { + jlong secs = time / 1000; + if (secs > max_secs) { + absTime->tv_sec = max_secs; + } else { + absTime->tv_sec = secs; + } + absTime->tv_nsec = (time % 1000) * NANOSECS_PER_MILLISEC; + } else { + jlong secs = time / NANOSECS_PER_SEC; + if (secs >= MAX_SECS) { + absTime->tv_sec = max_secs; + absTime->tv_nsec = 0; + } else { + absTime->tv_sec = now.tv_sec + secs; + absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_usec*1000; + if (absTime->tv_nsec >= NANOSECS_PER_SEC) { + absTime->tv_nsec -= NANOSECS_PER_SEC; + ++absTime->tv_sec; // note: this must be <= max_secs + } + } + } + assert(absTime->tv_sec >= 0, "tv_sec < 0"); + assert(absTime->tv_sec <= max_secs, "tv_sec > max_secs"); + assert(absTime->tv_nsec >= 0, "tv_nsec < 0"); + assert(absTime->tv_nsec < NANOSECS_PER_SEC, "tv_nsec >= nanos_per_sec"); +} + +void Parker::park(bool isAbsolute, jlong time) { + // Ideally we'd do something useful while spinning, such + // as calling unpackTime(). + + // Optional fast-path check: + // Return immediately if a permit is available. + // We depend on Atomic::xchg() having full barrier semantics + // since we are doing a lock-free update to _counter. + if (Atomic::xchg(0, &_counter) > 0) return; + + Thread* thread = Thread::current(); + assert(thread->is_Java_thread(), "Must be JavaThread"); + JavaThread *jt = (JavaThread *)thread; + + // Optional optimization -- avoid state transitions if there's an interrupt pending. + // Check interrupt before trying to wait + if (Thread::is_interrupted(thread, false)) { + return; + } + + // Next, demultiplex/decode time arguments + struct timespec absTime; + if (time < 0 || (isAbsolute && time == 0)) { // don't wait at all + return; + } + if (time > 0) { + unpackTime(&absTime, isAbsolute, time); + } + + + // Enter safepoint region + // Beware of deadlocks such as 6317397. + // The per-thread Parker:: mutex is a classic leaf-lock. + // In particular a thread must never block on the Threads_lock while + // holding the Parker:: mutex. If safepoints are pending both the + // the ThreadBlockInVM() CTOR and DTOR may grab Threads_lock. + ThreadBlockInVM tbivm(jt); + + // Don't wait if cannot get lock since interference arises from + // unblocking. Also. check interrupt before trying wait + if (Thread::is_interrupted(thread, false) || pthread_mutex_trylock(_mutex) != 0) { + return; + } + + int status; + if (_counter > 0) { // no wait needed + _counter = 0; + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "invariant"); + // Paranoia to ensure our locked and lock-free paths interact + // correctly with each other and Java-level accesses. + OrderAccess::fence(); + return; + } + +#ifdef ASSERT + // Don't catch signals while blocked; let the running threads have the signals. + // (This allows a debugger to break into the running thread.) + sigset_t oldsigs; + sigset_t* allowdebug_blocked = os::Bsd::allowdebug_blocked_signals(); + pthread_sigmask(SIG_BLOCK, allowdebug_blocked, &oldsigs); +#endif + + OSThreadWaitState osts(thread->osthread(), false /* not Object.wait() */); + jt->set_suspend_equivalent(); + // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self() + + if (time == 0) { + status = pthread_cond_wait(_cond, _mutex); + } else { + status = pthread_cond_timedwait(_cond, _mutex, &absTime); + } + assert_status(status == 0 || status == EINTR || + status == ETIMEDOUT, + status, "cond_timedwait"); + +#ifdef ASSERT + pthread_sigmask(SIG_SETMASK, &oldsigs, NULL); +#endif + + _counter = 0; + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "invariant"); + // Paranoia to ensure our locked and lock-free paths interact + // correctly with each other and Java-level accesses. + OrderAccess::fence(); + + // If externally suspended while waiting, re-suspend + if (jt->handle_special_suspend_equivalent_condition()) { + jt->java_suspend_self(); + } +} + +void Parker::unpark() { + int status = pthread_mutex_lock(_mutex); + assert_status(status == 0, status, "invariant"); + const int s = _counter; + _counter = 1; + status = pthread_mutex_unlock(_mutex); + assert_status(status == 0, status, "invariant"); + if (s < 1) { + status = pthread_cond_signal(_cond); + assert_status(status == 0, status, "invariant"); + } +} + + +// Darwin has no "environ" in a dynamic library. +#ifdef __APPLE__ + #include + #define environ (*_NSGetEnviron()) +#else +extern char** environ; +#endif + +// Run the specified command in a separate process. Return its exit value, +// or -1 on failure (e.g. can't fork a new process). +// Unlike system(), this function can be called from signal handler. It +// doesn't block SIGINT et al. +int os::fork_and_exec(char* cmd) { + const char * argv[4] = {"sh", "-c", cmd, NULL}; + + // fork() in BsdThreads/NPTL is not async-safe. It needs to run + // pthread_atfork handlers and reset pthread library. All we need is a + // separate process to execve. Make a direct syscall to fork process. + // On IA64 there's no fork syscall, we have to use fork() and hope for + // the best... + pid_t pid = fork(); + + if (pid < 0) { + // fork failed + return -1; + + } else if (pid == 0) { + // child process + + // execve() in BsdThreads will call pthread_kill_other_threads_np() + // first to kill every thread on the thread list. Because this list is + // not reset by fork() (see notes above), execve() will instead kill + // every thread in the parent process. We know this is the only thread + // in the new process, so make a system call directly. + // IA64 should use normal execve() from glibc to match the glibc fork() + // above. + execve("/bin/sh", (char* const*)argv, environ); + + // execve failed + _exit(-1); + + } else { + // copied from J2SE ..._waitForProcessExit() in UNIXProcess_md.c; we don't + // care about the actual exit code, for now. + + int status; + + // Wait for the child process to exit. This returns immediately if + // the child has already exited. */ + while (waitpid(pid, &status, 0) < 0) { + switch (errno) { + case ECHILD: return 0; + case EINTR: break; + default: return -1; + } + } + + if (WIFEXITED(status)) { + // The child exited normally; get its exit code. + return WEXITSTATUS(status); + } else if (WIFSIGNALED(status)) { + // The child exited because of a signal + // The best value to return is 0x80 + signal number, + // because that is what all Unix shells do, and because + // it allows callers to distinguish between process exit and + // process death by signal. + return 0x80 + WTERMSIG(status); + } else { + // Unknown exit code; pass it through + return status; + } + } +} + +// is_headless_jre() +// +// Test for the existence of xawt/libmawt.so or libawt_xawt.so +// in order to report if we are running in a headless jre +// +// Since JDK8 xawt/libmawt.so was moved into the same directory +// as libawt.so, and renamed libawt_xawt.so +// +bool os::is_headless_jre() { +#ifdef __APPLE__ + // We no longer build headless-only on Mac OS X + return false; +#else + struct stat statbuf; + char buf[MAXPATHLEN]; + char libmawtpath[MAXPATHLEN]; + const char *xawtstr = "/xawt/libmawt" JNI_LIB_SUFFIX; + const char *new_xawtstr = "/libawt_xawt" JNI_LIB_SUFFIX; + char *p; + + // Get path to libjvm.so + os::jvm_path(buf, sizeof(buf)); + + // Get rid of libjvm.so + p = strrchr(buf, '/'); + if (p == NULL) { + return false; + } else { + *p = '\0'; + } + + // Get rid of client or server + p = strrchr(buf, '/'); + if (p == NULL) { + return false; + } else { + *p = '\0'; + } + + // check xawt/libmawt.so + strcpy(libmawtpath, buf); + strcat(libmawtpath, xawtstr); + if (::stat(libmawtpath, &statbuf) == 0) return false; + + // check libawt_xawt.so + strcpy(libmawtpath, buf); + strcat(libmawtpath, new_xawtstr); + if (::stat(libmawtpath, &statbuf) == 0) return false; + + return true; +#endif +} + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + int n = jio_snprintf(buffer, bufferSize, "/cores/core.%d", current_process_id()); + + // Truncate if theoretical string was longer than bufferSize + n = MIN2(n, (int)bufferSize); + + return n; +} + +#ifndef PRODUCT +void TestReserveMemorySpecial_test() { + // No tests available for this platform +} +#endif + +bool os::start_debugging(char *buf, int buflen) { + int len = (int)strlen(buf); + char *p = &buf[len]; + + jio_snprintf(p, buflen-len, + "\n\n" + "Do you want to debug the problem?\n\n" + "To debug, run 'gdb /proc/%d/exe %d'; then switch to thread " INTX_FORMAT " (" INTPTR_FORMAT ")\n" + "Enter 'yes' to launch gdb automatically (PATH must include gdb)\n" + "Otherwise, press RETURN to abort...", + os::current_process_id(), os::current_process_id(), + os::current_thread_id(), os::current_thread_id()); + + bool yes = os::message_box("Unexpected Error", buf); + + if (yes) { + // yes, user asked VM to launch debugger + jio_snprintf(buf, sizeof(buf), "gdb /proc/%d/exe %d", + os::current_process_id(), os::current_process_id()); + + os::fork_and_exec(buf); + yes = false; + } + 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 = (sizeof(long) == 8 ? 1512ul : 512ul) * 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::warning("vm_start set"); + return 0; + } + 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!"); + backtrace(); + } + 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 +} + + +/****************** + ** 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; + }); + + /* + * From hotspot/src/share/vm/runtime/globals.hpp: + * We assume SMP because of Genode Linux and the necessary cmpxchg prefixes + */ + AssumeMP = true; + + 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/src/app/jdk/lib/jvm/spec/arm/os_genode_arm.cpp b/src/app/jdk/lib/jvm/spec/arm/os_genode_arm.cpp new file mode 100644 index 0000000..b369803 --- /dev/null +++ b/src/app/jdk/lib/jvm/spec/arm/os_genode_arm.cpp @@ -0,0 +1,281 @@ +#include + +extern "C" { +#include +#include +#include +#include +} + +#include +#include + +#include + +#if 0 +#define WARN_NOT_IMPL Genode::warning(__func__, " not implemented (jvm_arm) from ", __builtin_return_address(0)); +#else +#define WARN_NOT_IMPL +#endif + +size_t os::Posix::_vm_internal_thread_min_stack_allowed = 64 * K; +size_t os::Posix::_compiler_thread_min_stack_allowed = 64 * K; +size_t os::Posix::_java_thread_min_stack_allowed = 64 * K; + + +/********************** + ** Atomic functions ** + **********************/ + +typedef jlong load_long_func_t(volatile jlong*); +load_long_func_t* os::atomic_load_long_func = os::atomic_load_long_bootstrap; + +typedef void store_long_func_t(jlong, volatile jlong*); +store_long_func_t* os::atomic_store_long_func = os::atomic_store_long_bootstrap; + +typedef jint cmpxchg_func_t(jint, jint, volatile jint*); +cmpxchg_func_t* os::atomic_cmpxchg_func = os::atomic_cmpxchg_bootstrap; + +typedef jint atomic_xchg_func_t(jint exchange_value, volatile jint *dest); +atomic_xchg_func_t *os::atomic_xchg_func = os::atomic_xchg_bootstrap; + +typedef jlong cmpxchg_long_func_t(jlong, jlong, volatile jlong*); +cmpxchg_long_func_t* os::atomic_cmpxchg_long_func = os::atomic_cmpxchg_long_bootstrap; + +typedef jint atomic_add_func_t(jint add_value, volatile jint *dest); +atomic_add_func_t * os::atomic_add_func = os::atomic_add_bootstrap; + + +jlong os::atomic_load_long_bootstrap(volatile jlong *src) +{ + return __atomic_load_n(src, __ATOMIC_ACQUIRE); +} + + +void os::atomic_store_long_bootstrap(jlong val, volatile jlong *dest) +{ + __atomic_store_n(dest, val, __ATOMIC_RELEASE); +} + + +jint os::atomic_xchg_bootstrap(jint exchange_value, volatile jint *dest) +{ + return __atomic_exchange_n(dest, exchange_value, __ATOMIC_ACQUIRE); +} + + +jint os::atomic_cmpxchg_bootstrap(jint compare_value, + jint exchange_value, + volatile jint *dest) +{ + __atomic_compare_exchange_n(dest, &compare_value, + exchange_value, false, + __ATOMIC_ACQUIRE, + __ATOMIC_ACQUIRE); + return compare_value; +} + + +jlong os::atomic_cmpxchg_long_bootstrap(jlong compare_value, + jlong exchange_value, + volatile jlong *dest) +{ + __atomic_compare_exchange_n(dest, &compare_value, + exchange_value, false, + __ATOMIC_ACQUIRE, + __ATOMIC_ACQUIRE); + return compare_value; +} + + +jint os::atomic_add_bootstrap(jint add_value, volatile jint *dest) +{ + return __atomic_add_fetch(dest, add_value, __ATOMIC_ACQUIRE); +} + + +void os::print_context(outputStream* st, const void* context) +{ + WARN_NOT_IMPL; +} + + +void os::print_register_info(outputStream *st, const void *context) +{ + WARN_NOT_IMPL; +} + + +void os::initialize_thread(Thread* thr) +{ + WARN_NOT_IMPL; +} + + +void os::Bsd::init_thread_fpu_state() +{ + WARN_NOT_IMPL; +} + + +void os::setup_fpu() +{ + WARN_NOT_IMPL; +} + + +char* os::non_memory_address_word() +{ + WARN_NOT_IMPL; + return (char*)-1; +} + + +bool os::is_allocatable(size_t bytes) +{ + return true; +} + + +int os::extra_bang_size_in_bytes() +{ + WARN_NOT_IMPL; + return 0; +} + + +frame os::current_frame() +{ + WARN_NOT_IMPL; + return frame(); +} + + +frame os::get_sender_for_C_frame(frame* fr) +{ + WARN_NOT_IMPL; + return frame(); +} + + +frame os::fetch_frame_from_context(const void* ucVoid) +{ + WARN_NOT_IMPL; + return frame(); +} + + +void os::verify_stack_alignment() +{ +} + + +address os::current_stack_pointer() +{ + address dummy = (address)&dummy; + return dummy; +} + + +size_t os::current_stack_size() +{ + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_get_np(pthread_self(), &attr); + + size_t size; void *addr; + pthread_attr_getstack(&attr, &addr, &size); + + pthread_attr_destroy(&attr); + + return size; +} + + +address os::current_stack_base() +{ + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_get_np(pthread_self(), &attr); + + size_t size; void *addr; + pthread_attr_getstack(&attr, &addr, &size); + + pthread_attr_destroy(&attr); + + return (address)addr + size; +} + + +/** + * POSIX + */ + +size_t os::Posix::default_stack_size(os::ThreadType thr_type) +{ + WARN_NOT_IMPL; + return 64*1024; +} + + +/** + * BSD + */ + +void os::Bsd::ucontext_set_pc(ucontext_t * uc, address pc) +{ + WARN_NOT_IMPL; +} + + +address os::Bsd::ucontext_get_pc(const ucontext_t* uc) +{ + WARN_NOT_IMPL; + return 0; +} + + +void VM_Version::get_os_cpu_info() +{ + static bool done = false; + if (done) return; + + _arm_arch = 7; +} + +void VM_Version::early_initialize() +{ + get_os_cpu_info(); +} + + +extern "C" JNIEXPORT int +JVM_handle_bsd_signal(int sig, + siginfo_t* info, + void* ucVoid, + int abort_if_unrecognized) +{ + WARN_NOT_IMPL; + return -1; +} + + +/** + * JavaThread + */ +bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr, + void* ucontext, bool isInJava) +{ + WARN_NOT_IMPL; + return false; +} + + +void JavaThread::cache_global_variables() +{ + WARN_NOT_IMPL; +} + + diff --git a/src/app/jdk/lib/jvm/target.mk b/src/app/jdk/lib/jvm/target.mk new file mode 100644 index 0000000..af67ffa --- /dev/null +++ b/src/app/jdk/lib/jvm/target.mk @@ -0,0 +1 @@ +LIBS = jvm diff --git a/src/app/jdk/patches/arm.patch b/src/app/jdk/patches/arm.patch new file mode 100644 index 0000000..764c096 --- /dev/null +++ b/src/app/jdk/patches/arm.patch @@ -0,0 +1,44 @@ +commit 375d5368e19718d37c8d131690e00b495a704af2 +Author: Sebastian Sumpf +Date: Mon Sep 10 19:11:29 2018 +0200 + + patch: no support for khelper + +diff --git a/hotspot/src/cpu/arm/vm/vm_version_arm_32.cpp b/hotspot/src/cpu/arm/vm/vm_version_arm_32.cpp +index 10a2408..b35d68f 100644 +--- a/hotspot/src/cpu/arm/vm/vm_version_arm_32.cpp ++++ b/hotspot/src/cpu/arm/vm/vm_version_arm_32.cpp +@@ -217,7 +217,11 @@ void VM_Version::initialize() { + + get_os_cpu_info(); + ++#ifdef __GENODE__ ++ _kuser_helper_version = 0; ++#else + _kuser_helper_version = *(int*)KUSER_HELPER_VERSION_ADDR; ++#endif + + #ifdef COMPILER2 + // C2 is only supported on v7+ VFP at this time + +diff --git a/hotspot/src/cpu/arm/vm/assembler_arm_32.hpp b/hotspot/src/cpu/arm/vm/assembler_arm_32.hpp +index e32f6a9..2f1411e 100644 +--- a/hotspot/src/cpu/arm/vm/assembler_arm_32.hpp ++++ b/hotspot/src/cpu/arm/vm/assembler_arm_32.hpp +@@ -1234,10 +1234,17 @@ extern int __aeabi_dcmpgt(double, double); + + // Imported code from glibc soft-fp bundle for + // calculation accuracy improvement. See CR 6757269. ++ ++/* + extern double __aeabi_fadd_glibc(float, float); + extern double __aeabi_fsub_glibc(float, float); + extern double __aeabi_dadd_glibc(double, double); + extern double __aeabi_dsub_glibc(double, double); ++*/ ++#define __aeabi_dadd_glibc __aeabi_dadd ++#define __aeabi_dsub_glibc __aeabi_dsub ++#define __aeabi_fadd_glibc __aeabi_fadd ++#define __aeabi_fsub_glibc __aeabi_fsub + }; + #endif // __SOFTFP__ diff --git a/src/app/jdk/patches/icache.patch b/src/app/jdk/patches/icache.patch new file mode 100644 index 0000000..1c866c9 --- /dev/null +++ b/src/app/jdk/patches/icache.patch @@ -0,0 +1,30 @@ +diff --git a/hotspot/src/cpu/arm/vm/icache_arm.cpp b/hotspot/src/cpu/arm/vm/icache_arm.cpp +index ae16361..734ba32 100644 +--- a/hotspot/src/cpu/arm/vm/icache_arm.cpp ++++ b/hotspot/src/cpu/arm/vm/icache_arm.cpp +@@ -66,11 +66,25 @@ static int icache_flush(address addr, int lines, int magic) { + + #else + ++#ifndef __GENODE__ ++ + static int icache_flush(address addr, int lines, int magic) { + __builtin___clear_cache(addr, addr + (lines << ICache::log2_line_size)); + return magic; + } + ++#else ++ ++#include ++ ++static int icache_flush(address addr, int lines, int magic) { ++ Genode::cache_coherent((Genode::addr_t)addr, lines << ICache::log2_line_size); ++ ++ return magic; ++} ++ ++#endif // __GENODE__ ++ + #endif // AARCH64 + + void ICacheStubGenerator::generate_icache_flush(ICache::flush_icache_stub_t* flush_icache_stub) { diff --git a/src/app/jdk/patches/jdk.patch b/src/app/jdk/patches/jdk.patch new file mode 100644 index 0000000..0737da4 --- /dev/null +++ b/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/src/app/jdk/patches/os_bsd.patch b/src/app/jdk/patches/os_bsd.patch new file mode 100644 index 0000000..9b7a5f8 --- /dev/null +++ b/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/src/app/jdk/patches/pollselectorprovider.patch b/src/app/jdk/patches/pollselectorprovider.patch new file mode 100644 index 0000000..b3afb34 --- /dev/null +++ b/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/src/app/jdk/patches/size.patch b/src/app/jdk/patches/size.patch new file mode 100644 index 0000000..8d65c14 --- /dev/null +++ b/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