Merge
This commit is contained in:
commit
1f205eb4dc
@ -135,6 +135,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetEnclosingMethodInfo;
|
||||
JVM_GetFieldAnnotations;
|
||||
JVM_GetFieldIxModifiers;
|
||||
JVM_GetFieldTypeAnnotations;
|
||||
JVM_GetHostName;
|
||||
JVM_GetInheritedAccessControlContext;
|
||||
JVM_GetInterfaceVersion;
|
||||
@ -156,6 +157,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetMethodIxSignatureUTF;
|
||||
JVM_GetMethodParameterAnnotations;
|
||||
JVM_GetMethodParameters;
|
||||
JVM_GetMethodTypeAnnotations;
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetSockName;
|
||||
|
@ -135,6 +135,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetEnclosingMethodInfo;
|
||||
JVM_GetFieldAnnotations;
|
||||
JVM_GetFieldIxModifiers;
|
||||
JVM_GetFieldTypeAnnotations;
|
||||
JVM_GetHostName;
|
||||
JVM_GetInheritedAccessControlContext;
|
||||
JVM_GetInterfaceVersion;
|
||||
@ -156,6 +157,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetMethodIxSignatureUTF;
|
||||
JVM_GetMethodParameterAnnotations;
|
||||
JVM_GetMethodParameters;
|
||||
JVM_GetMethodTypeAnnotations;
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetSockName;
|
||||
|
@ -28,7 +28,8 @@ ifeq ($(INCLUDE_JVMTI), false)
|
||||
Src_Files_EXCLUDE += jvmtiGetLoadedClasses.cpp forte.cpp jvmtiThreadState.cpp jvmtiExtensions.cpp \
|
||||
jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp jvmtiUtil.cpp jvmtiTrace.cpp \
|
||||
jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \
|
||||
jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp
|
||||
jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp \
|
||||
jvmtiClassFileReconstituter.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(INCLUDE_FPROF), false)
|
||||
|
@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
|
||||
|
||||
HS_MAJOR_VER=25
|
||||
HS_MINOR_VER=0
|
||||
HS_BUILD_NUMBER=24
|
||||
HS_BUILD_NUMBER=25
|
||||
|
||||
JDK_MAJOR_VER=1
|
||||
JDK_MINOR_VER=8
|
||||
|
@ -131,6 +131,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetEnclosingMethodInfo;
|
||||
JVM_GetFieldAnnotations;
|
||||
JVM_GetFieldIxModifiers;
|
||||
JVM_GetFieldTypeAnnotations;
|
||||
JVM_GetHostName;
|
||||
JVM_GetInheritedAccessControlContext;
|
||||
JVM_GetInterfaceVersion;
|
||||
@ -152,6 +153,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetMethodIxSignatureUTF;
|
||||
JVM_GetMethodParameterAnnotations;
|
||||
JVM_GetMethodParameters;
|
||||
JVM_GetMethodTypeAnnotations;
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetSockName;
|
||||
|
@ -131,6 +131,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetEnclosingMethodInfo;
|
||||
JVM_GetFieldAnnotations;
|
||||
JVM_GetFieldIxModifiers;
|
||||
JVM_GetFieldTypeAnnotations;
|
||||
JVM_GetHostName;
|
||||
JVM_GetInheritedAccessControlContext;
|
||||
JVM_GetInterfaceVersion;
|
||||
@ -152,6 +153,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetMethodIxSignatureUTF;
|
||||
JVM_GetMethodParameterAnnotations;
|
||||
JVM_GetMethodParameters;
|
||||
JVM_GetMethodTypeAnnotations;
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetSockName;
|
||||
|
@ -131,6 +131,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetEnclosingMethodInfo;
|
||||
JVM_GetFieldAnnotations;
|
||||
JVM_GetFieldIxModifiers;
|
||||
JVM_GetFieldTypeAnnotations;
|
||||
JVM_GetHostName;
|
||||
JVM_GetInheritedAccessControlContext;
|
||||
JVM_GetInterfaceVersion;
|
||||
@ -152,6 +153,7 @@ SUNWprivate_1.1 {
|
||||
JVM_GetMethodIxSignatureUTF;
|
||||
JVM_GetMethodParameterAnnotations;
|
||||
JVM_GetMethodParameters;
|
||||
JVM_GetMethodTypeAnnotations;
|
||||
JVM_GetPrimitiveArrayElement;
|
||||
JVM_GetProtectionDomain;
|
||||
JVM_GetSockName;
|
||||
|
@ -110,8 +110,6 @@ VARIANT_TEXT=Server
|
||||
!endif
|
||||
!elseif "$(Variant)" == "tiered"
|
||||
VARIANT_TEXT=Tiered
|
||||
!elseif "$(Variant)" == "kernel"
|
||||
VARIANT_TEXT=Kernel
|
||||
!endif
|
||||
|
||||
#########################################################################
|
||||
@ -305,9 +303,9 @@ $(variantDir)\local.make: checks
|
||||
checks: checkVariant checkWorkSpace checkSA
|
||||
|
||||
checkVariant:
|
||||
@ if "$(Variant)"=="" echo Need to specify "Variant=[tiered|compiler2|compiler1|kernel|core]" && false
|
||||
@ if "$(Variant)" NEQ "tiered" if "$(Variant)" NEQ "compiler2" if "$(Variant)" NEQ "compiler1" if "$(Variant)" NEQ "kernel" if "$(Variant)" NEQ "core" \
|
||||
echo Need to specify "Variant=[tiered|compiler2|compiler1|kernel|core]" && false
|
||||
@ if "$(Variant)"=="" echo Need to specify "Variant=[tiered|compiler2|compiler1|core]" && false
|
||||
@ if "$(Variant)" NEQ "tiered" if "$(Variant)" NEQ "compiler2" if "$(Variant)" NEQ "compiler1" if "$(Variant)" NEQ "core" \
|
||||
echo Need to specify "Variant=[tiered|compiler2|compiler1|core]" && false
|
||||
|
||||
checkWorkSpace:
|
||||
@ if "$(WorkSpace)"=="" echo Need to specify "WorkSpace=..." && false
|
||||
|
@ -148,7 +148,7 @@ echo HotSpotJDKDist=%HotSpotJDKDist%
|
||||
|
||||
REM This is now safe to do.
|
||||
:copyfiles
|
||||
for /D %%i in (compiler1, compiler2, tiered, core, kernel) do (
|
||||
for /D %%i in (compiler1, compiler2, tiered, core) do (
|
||||
if NOT EXIST %HotSpotBuildSpace%\%%i\generated mkdir %HotSpotBuildSpace%\%%i\generated
|
||||
copy %HotSpotWorkSpace%\make\windows\projectfiles\%%i\* %HotSpotBuildSpace%\%%i\generated > NUL
|
||||
)
|
||||
@ -156,7 +156,7 @@ copy %HotSpotWorkSpace%\make\windows\projectfiles\%%i\* %HotSpotBuildSpace%\%%i\
|
||||
REM force regneration of ProjectFile
|
||||
if exist %ProjectFile% del %ProjectFile%
|
||||
|
||||
for /D %%i in (compiler1, compiler2, tiered, core, kernel) do (
|
||||
for /D %%i in (compiler1, compiler2, tiered, core) do (
|
||||
echo -- %%i --
|
||||
echo # Generated file! > %HotSpotBuildSpace%\%%i\local.make
|
||||
echo # Changing a variable below and then deleting %ProjectFile% will cause >> %HotSpotBuildSpace%\%%i\local.make
|
||||
|
@ -221,13 +221,6 @@ LD_FLAGS = /SAFESEH $(LD_FLAGS)
|
||||
!endif
|
||||
!endif
|
||||
|
||||
# Compile for space above time.
|
||||
!if "$(Variant)" == "kernel"
|
||||
PRODUCT_OPT_OPTION = /O1 /Oy-
|
||||
FASTDEBUG_OPT_OPTION = /O1 /Oy-
|
||||
DEBUG_OPT_OPTION = /Od
|
||||
!endif
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn everything off
|
||||
!ifdef NO_OPTIMIZATIONS
|
||||
PRODUCT_OPT_OPTION = $(DEBUG_OPT_OPTION)
|
||||
|
@ -51,13 +51,6 @@ HS_BUILD_ID=$(HS_BUILD_VER)
|
||||
# Force resources to be rebuilt every time
|
||||
$(Res_Files): FORCE
|
||||
|
||||
# Kernel doesn't need exported vtbl symbols.
|
||||
!if "$(Variant)" == "kernel"
|
||||
$(AOUT): $(Res_Files) $(Obj_Files)
|
||||
$(LD) @<<
|
||||
$(LD_FLAGS) /out:$@ /implib:$*.lib $(Obj_Files) $(Res_Files)
|
||||
<<
|
||||
!else
|
||||
vm.def: $(Obj_Files)
|
||||
sh $(WorkSpace)/make/windows/build_vm_def.sh
|
||||
|
||||
@ -65,7 +58,6 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
|
||||
$(LD) @<<
|
||||
$(LD_FLAGS) /out:$@ /implib:$*.lib /def:vm.def $(Obj_Files) $(Res_Files)
|
||||
<<
|
||||
!endif
|
||||
!if "$(MT)" != ""
|
||||
# The previous link command created a .manifest file that we want to
|
||||
# insert into the linked artifact so we do not need to track it
|
||||
|
@ -89,12 +89,8 @@ STACK_SIZE=
|
||||
# AsyncGetCallTrace is not supported on IA64 yet
|
||||
AGCT_EXPORT=
|
||||
!else
|
||||
!if "$(Variant)" == "kernel"
|
||||
AGCT_EXPORT=
|
||||
!else
|
||||
AGCT_EXPORT=/export:AsyncGetCallTrace
|
||||
!endif
|
||||
!endif
|
||||
|
||||
# If you modify exports below please do the corresponding changes in
|
||||
# src/share/tools/ProjectCreator/WinGammaPlatformVC7.java
|
||||
|
@ -1,27 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2007, 2010, 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 ../local.make
|
||||
|
||||
!include $(HOTSPOTWORKSPACE)/make/windows/projectfiles/common/Makefile
|
@ -1,7 +0,0 @@
|
||||
;
|
||||
; This .DEF file is a placeholder for one which is automatically
|
||||
; generated during the build process. See
|
||||
; make\windows\build_vm_def.sh and
|
||||
; make\windows\makefiles\projectcreator.make (esp. the "-prelink"
|
||||
; options).
|
||||
;
|
@ -1,29 +0,0 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "vm"=.\vm.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
@ -1811,13 +1811,15 @@ bool os::Linux::_stack_is_executable = false;
|
||||
class VM_LinuxDllLoad: public VM_Operation {
|
||||
private:
|
||||
const char *_filename;
|
||||
char *_ebuf;
|
||||
int _ebuflen;
|
||||
void *_lib;
|
||||
public:
|
||||
VM_LinuxDllLoad(const char *fn) :
|
||||
_filename(fn), _lib(NULL) {}
|
||||
VM_LinuxDllLoad(const char *fn, char *ebuf, int ebuflen) :
|
||||
_filename(fn), _ebuf(ebuf), _ebuflen(ebuflen), _lib(NULL) {}
|
||||
VMOp_Type type() const { return VMOp_LinuxDllLoad; }
|
||||
void doit() {
|
||||
_lib = os::Linux::dll_load_inner(_filename);
|
||||
_lib = os::Linux::dll_load_in_vmthread(_filename, _ebuf, _ebuflen);
|
||||
os::Linux::_stack_is_executable = true;
|
||||
}
|
||||
void* loaded_library() { return _lib; }
|
||||
@ -1865,13 +1867,13 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
|
||||
// This is for the case where the DLL has an static
|
||||
// constructor function that executes JNI code. We cannot
|
||||
// load such DLLs in the VMThread.
|
||||
result = ::dlopen(filename, RTLD_LAZY);
|
||||
result = os::Linux::dlopen_helper(filename, ebuf, ebuflen);
|
||||
}
|
||||
|
||||
ThreadInVMfromNative tiv(jt);
|
||||
debug_only(VMNativeEntryWrapper vew;)
|
||||
|
||||
VM_LinuxDllLoad op(filename);
|
||||
VM_LinuxDllLoad op(filename, ebuf, ebuflen);
|
||||
VMThread::execute(&op);
|
||||
if (LoadExecStackDllInVMThread) {
|
||||
result = op.loaded_library();
|
||||
@ -1883,7 +1885,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
|
||||
}
|
||||
|
||||
if (!load_attempted) {
|
||||
result = ::dlopen(filename, RTLD_LAZY);
|
||||
result = os::Linux::dlopen_helper(filename, ebuf, ebuflen);
|
||||
}
|
||||
|
||||
if (result != NULL) {
|
||||
@ -1892,11 +1894,6 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@ -2039,10 +2036,19 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void * os::Linux::dll_load_inner(const char *filename) {
|
||||
void * os::Linux::dlopen_helper(const char *filename, char *ebuf, int ebuflen) {
|
||||
void * result = ::dlopen(filename, RTLD_LAZY);
|
||||
if (result == NULL) {
|
||||
::strncpy(ebuf, ::dlerror(), ebuflen - 1);
|
||||
ebuf[ebuflen-1] = '\0';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void * os::Linux::dll_load_in_vmthread(const char *filename, char *ebuf, int ebuflen) {
|
||||
void * result = NULL;
|
||||
if (LoadExecStackDllInVMThread) {
|
||||
result = ::dlopen(filename, RTLD_LAZY);
|
||||
result = dlopen_helper(filename, ebuf, ebuflen);
|
||||
}
|
||||
|
||||
// Since 7019808, libjvm.so is linked with -noexecstack. If the VM loads a
|
||||
|
@ -95,7 +95,8 @@ class Linux {
|
||||
|
||||
public:
|
||||
static bool _stack_is_executable;
|
||||
static void *dll_load_inner(const char *name);
|
||||
static void *dlopen_helper(const char *name, char *ebuf, int ebuflen);
|
||||
static void *dll_load_in_vmthread(const char *name, char *ebuf, int ebuflen);
|
||||
|
||||
static void init_thread_fpu_state();
|
||||
static int get_fpu_control_word();
|
||||
|
@ -46,7 +46,7 @@ define_pd_global(uintx, SurvivorRatio, 8);
|
||||
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||
|
||||
#endif // OS_CPU_BSD_X86_VM_GLOBALS_BSD_X86_HPP
|
||||
|
@ -41,7 +41,7 @@ define_pd_global(intx, VMThreadStackSize, 512);
|
||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||
|
||||
#endif // OS_CPU_BSD_ZERO_VM_GLOBALS_BSD_ZERO_HPP
|
||||
|
@ -33,7 +33,7 @@
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
||||
|
||||
#endif // OS_CPU_LINUX_SPARC_VM_GLOBALS_LINUX_SPARC_HPP
|
||||
|
@ -44,7 +44,7 @@ define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
|
||||
define_pd_global(uintx,JVMInvokeMethodSlack, 8192);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx,HeapBaseMinAddress, 2*G);
|
||||
|
||||
#endif // OS_CPU_LINUX_X86_VM_GLOBALS_LINUX_X86_HPP
|
||||
|
@ -41,7 +41,7 @@ define_pd_global(intx, VMThreadStackSize, 512);
|
||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||
|
||||
#endif // OS_CPU_LINUX_ZERO_VM_GLOBALS_LINUX_ZERO_HPP
|
||||
|
@ -33,7 +33,7 @@
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
#ifdef _LP64
|
||||
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
||||
#else
|
||||
|
@ -43,7 +43,7 @@ define_pd_global(uintx,JVMInvokeMethodSlack, 10*K);
|
||||
|
||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx,HeapBaseMinAddress, 256*M);
|
||||
|
||||
#endif // OS_CPU_SOLARIS_X86_VM_GLOBALS_SOLARIS_X86_HPP
|
||||
|
@ -45,7 +45,7 @@ define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||
|
||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||
|
||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
||||
// Used on 64 bit platforms for UseCompressedOops base address
|
||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||
|
||||
#endif // OS_CPU_WINDOWS_X86_VM_GLOBALS_WINDOWS_X86_HPP
|
||||
|
@ -568,36 +568,6 @@ class CoreProductConfig extends ProductConfig {
|
||||
}
|
||||
}
|
||||
|
||||
class KernelDebugConfig extends GenericDebugConfig {
|
||||
String getOptFlag() {
|
||||
return getCI().getNoOptFlag();
|
||||
}
|
||||
|
||||
KernelDebugConfig() {
|
||||
initNames("kernel", "debug", "jvm.dll");
|
||||
init(getIncludes(), getDefines());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class KernelFastDebugConfig extends GenericDebugConfig {
|
||||
String getOptFlag() {
|
||||
return getCI().getOptFlag();
|
||||
}
|
||||
|
||||
KernelFastDebugConfig() {
|
||||
initNames("kernel", "fastdebug", "jvm.dll");
|
||||
init(getIncludes(), getDefines());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class KernelProductConfig extends ProductConfig {
|
||||
KernelProductConfig() {
|
||||
initNames("kernel", "product", "jvm.dll");
|
||||
init(getIncludes(), getDefines());
|
||||
}
|
||||
}
|
||||
|
||||
abstract class CompilerInterface {
|
||||
abstract Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir);
|
||||
|
@ -564,12 +564,6 @@ public abstract class WinGammaPlatform {
|
||||
allConfigs.add(new CoreFastDebugConfig());
|
||||
allConfigs.add(new CoreProductConfig());
|
||||
|
||||
if (platform.equals("Win32")) {
|
||||
allConfigs.add(new KernelDebugConfig());
|
||||
allConfigs.add(new KernelFastDebugConfig());
|
||||
allConfigs.add(new KernelProductConfig());
|
||||
}
|
||||
|
||||
return allConfigs;
|
||||
}
|
||||
|
||||
|
@ -2196,8 +2196,7 @@ methodHandle ClassFileParser::parse_method(bool is_interface,
|
||||
true, // is LVTT
|
||||
CHECK_(nullHandle));
|
||||
lvtt_cnt++;
|
||||
} else if (UseSplitVerifier &&
|
||||
_major_version >= Verifier::STACKMAP_ATTRIBUTE_MAJOR_VERSION &&
|
||||
} else if (_major_version >= Verifier::STACKMAP_ATTRIBUTE_MAJOR_VERSION &&
|
||||
_cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_stack_map_table()) {
|
||||
// Stack map is only needed by the new verifier in JDK1.5.
|
||||
if (parsed_stackmap_attribute) {
|
||||
|
@ -62,7 +62,7 @@
|
||||
#endif
|
||||
|
||||
#define NOFAILOVER_MAJOR_VERSION 51
|
||||
#define STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION 52
|
||||
#define NONZERO_PADDING_BYTES_IN_SWITCH_MAJOR_VERSION 51
|
||||
|
||||
// Access to external entry for VerifyClassCodes - old byte code verifier
|
||||
|
||||
@ -127,8 +127,7 @@ bool Verifier::verify(instanceKlassHandle klass, Verifier::Mode mode, bool shoul
|
||||
if (TraceClassInitialization) {
|
||||
tty->print_cr("Start class verification for: %s", klassName);
|
||||
}
|
||||
if (UseSplitVerifier &&
|
||||
klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) {
|
||||
if (klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) {
|
||||
ClassVerifier split_verifier(klass, THREAD);
|
||||
split_verifier.verify_class(THREAD);
|
||||
exception_name = split_verifier.result();
|
||||
@ -2027,6 +2026,7 @@ void ClassVerifier::verify_switch(
|
||||
address bcp = bcs->bcp();
|
||||
address aligned_bcp = (address) round_to((intptr_t)(bcp + 1), jintSize);
|
||||
|
||||
if (_klass->major_version() < NONZERO_PADDING_BYTES_IN_SWITCH_MAJOR_VERSION) {
|
||||
// 4639449 & 4647081: padding bytes must be 0
|
||||
u2 padding_offset = 1;
|
||||
while ((bcp + padding_offset) < aligned_bcp) {
|
||||
@ -2037,6 +2037,8 @@ void ClassVerifier::verify_switch(
|
||||
}
|
||||
padding_offset++;
|
||||
}
|
||||
}
|
||||
|
||||
int default_offset = (int) Bytes::get_Java_u4(aligned_bcp);
|
||||
int keys, delta;
|
||||
current_frame->pop_stack(
|
||||
@ -2318,11 +2320,6 @@ void ClassVerifier::verify_invoke_instructions(
|
||||
types = (1 << JVM_CONSTANT_InterfaceMethodref) |
|
||||
(1 << JVM_CONSTANT_Methodref);
|
||||
break;
|
||||
case Bytecodes::_invokestatic:
|
||||
types = (_klass->major_version() < STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION) ?
|
||||
(1 << JVM_CONSTANT_Methodref) :
|
||||
((1 << JVM_CONSTANT_InterfaceMethodref) | (1 << JVM_CONSTANT_Methodref));
|
||||
break;
|
||||
default:
|
||||
types = 1 << JVM_CONSTANT_Methodref;
|
||||
}
|
||||
|
@ -372,7 +372,7 @@ ReservedSpace FileMapInfo::reserve_shared_memory() {
|
||||
// other reserved memory (like the code cache).
|
||||
ReservedSpace rs(size, alignment, false, requested_addr);
|
||||
if (!rs.is_reserved()) {
|
||||
fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr));
|
||||
fail_continue(err_msg("Unable to reserve shared space at required address " INTPTR_FORMAT, requested_addr));
|
||||
return rs;
|
||||
}
|
||||
// the reserved virtual memory is for mapping class data sharing archive
|
||||
|
@ -337,27 +337,16 @@ VirtualSpaceNode::VirtualSpaceNode(size_t byte_size) : _top(NULL), _next(NULL),
|
||||
// align up to vm allocation granularity
|
||||
byte_size = align_size_up(byte_size, os::vm_allocation_granularity());
|
||||
|
||||
// This allocates memory with mmap. For DumpSharedspaces, allocate the
|
||||
// space at low memory so that other shared images don't conflict.
|
||||
// This is the same address as memory needed for UseCompressedOops but
|
||||
// compressed oops don't work with CDS (offsets in metadata are wrong), so
|
||||
// borrow the same address.
|
||||
// This allocates memory with mmap. For DumpSharedspaces, try to reserve
|
||||
// configurable address, generally at the top of the Java heap so other
|
||||
// memory addresses don't conflict.
|
||||
if (DumpSharedSpaces) {
|
||||
char* shared_base = (char*)HeapBaseMinAddress;
|
||||
char* shared_base = (char*)SharedBaseAddress;
|
||||
_rs = ReservedSpace(byte_size, 0, false, shared_base, 0);
|
||||
if (_rs.is_reserved()) {
|
||||
assert(_rs.base() == shared_base, "should match");
|
||||
assert(shared_base == 0 || _rs.base() == shared_base, "should match");
|
||||
} else {
|
||||
// If we are dumping the heap, then allocate a wasted block of address
|
||||
// space in order to push the heap to a lower address. This extra
|
||||
// address range allows for other (or larger) libraries to be loaded
|
||||
// without them occupying the space required for the shared spaces.
|
||||
uintx reserved = 0;
|
||||
uintx block_size = 64*1024*1024;
|
||||
while (reserved < SharedDummyBlockSize) {
|
||||
char* dummy = os::reserve_memory(block_size);
|
||||
reserved += block_size;
|
||||
}
|
||||
// Get a mmap region anywhere if the SharedBaseAddress fails.
|
||||
_rs = ReservedSpace(byte_size);
|
||||
}
|
||||
MetaspaceShared::set_shared_rs(&_rs);
|
||||
|
@ -1457,7 +1457,7 @@ JVM_END
|
||||
JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls))
|
||||
assert (cls != NULL, "illegal class");
|
||||
JVMWrapper("JVM_GetClassAnnotations");
|
||||
ResourceMark rm(THREAD);
|
||||
|
||||
// Return null for arrays and primitives
|
||||
if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
|
||||
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
|
||||
@ -1470,20 +1470,15 @@ JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls))
|
||||
JVM_END
|
||||
|
||||
|
||||
JVM_ENTRY(jbyteArray, JVM_GetFieldAnnotations(JNIEnv *env, jobject field))
|
||||
assert(field != NULL, "illegal field");
|
||||
JVMWrapper("JVM_GetFieldAnnotations");
|
||||
|
||||
static bool jvm_get_field_common(jobject field, fieldDescriptor& fd, TRAPS) {
|
||||
// some of this code was adapted from from jni_FromReflectedField
|
||||
|
||||
// field is a handle to a java.lang.reflect.Field object
|
||||
oop reflected = JNIHandles::resolve_non_null(field);
|
||||
oop mirror = java_lang_reflect_Field::clazz(reflected);
|
||||
Klass* k = java_lang_Class::as_Klass(mirror);
|
||||
int slot = java_lang_reflect_Field::slot(reflected);
|
||||
int modifiers = java_lang_reflect_Field::modifiers(reflected);
|
||||
|
||||
fieldDescriptor fd;
|
||||
KlassHandle kh(THREAD, k);
|
||||
intptr_t offset = InstanceKlass::cast(kh())->field_offset(slot);
|
||||
|
||||
@ -1491,16 +1486,29 @@ JVM_ENTRY(jbyteArray, JVM_GetFieldAnnotations(JNIEnv *env, jobject field))
|
||||
// for static fields we only look in the current class
|
||||
if (!InstanceKlass::cast(kh())->find_local_field_from_offset(offset, true, &fd)) {
|
||||
assert(false, "cannot find static field");
|
||||
return NULL; // robustness
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// for instance fields we start with the current class and work
|
||||
// our way up through the superclass chain
|
||||
if (!InstanceKlass::cast(kh())->find_field_from_offset(offset, false, &fd)) {
|
||||
assert(false, "cannot find instance field");
|
||||
return NULL; // robustness
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
JVM_ENTRY(jbyteArray, JVM_GetFieldAnnotations(JNIEnv *env, jobject field))
|
||||
// field is a handle to a java.lang.reflect.Field object
|
||||
assert(field != NULL, "illegal field");
|
||||
JVMWrapper("JVM_GetFieldAnnotations");
|
||||
|
||||
fieldDescriptor fd;
|
||||
bool gotFd = jvm_get_field_common(field, fd, CHECK_NULL);
|
||||
if (!gotFd) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.annotations(), THREAD));
|
||||
JVM_END
|
||||
@ -1525,12 +1533,8 @@ static Method* jvm_get_method_common(jobject method) {
|
||||
Klass* k = java_lang_Class::as_Klass(mirror);
|
||||
|
||||
Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
|
||||
if (m == NULL) {
|
||||
assert(false, "cannot find method");
|
||||
return NULL; // robustness
|
||||
}
|
||||
|
||||
return m;
|
||||
assert(m != NULL, "cannot find method");
|
||||
return m; // caller has to deal with NULL in product mode
|
||||
}
|
||||
|
||||
|
||||
@ -1539,6 +1543,10 @@ JVM_ENTRY(jbyteArray, JVM_GetMethodAnnotations(JNIEnv *env, jobject method))
|
||||
|
||||
// method is a handle to a java.lang.reflect.Method object
|
||||
Method* m = jvm_get_method_common(method);
|
||||
if (m == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (jbyteArray) JNIHandles::make_local(env,
|
||||
Annotations::make_java_array(m->annotations(), THREAD));
|
||||
JVM_END
|
||||
@ -1549,6 +1557,10 @@ JVM_ENTRY(jbyteArray, JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject m
|
||||
|
||||
// method is a handle to a java.lang.reflect.Method object
|
||||
Method* m = jvm_get_method_common(method);
|
||||
if (m == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (jbyteArray) JNIHandles::make_local(env,
|
||||
Annotations::make_java_array(m->annotation_default(), THREAD));
|
||||
JVM_END
|
||||
@ -1559,6 +1571,10 @@ JVM_ENTRY(jbyteArray, JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject met
|
||||
|
||||
// method is a handle to a java.lang.reflect.Method object
|
||||
Method* m = jvm_get_method_common(method);
|
||||
if (m == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (jbyteArray) JNIHandles::make_local(env,
|
||||
Annotations::make_java_array(m->parameter_annotations(), THREAD));
|
||||
JVM_END
|
||||
@ -1583,6 +1599,38 @@ JVM_ENTRY(jbyteArray, JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls))
|
||||
return NULL;
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY(jbyteArray, JVM_GetMethodTypeAnnotations(JNIEnv *env, jobject method))
|
||||
assert (method != NULL, "illegal method");
|
||||
JVMWrapper("JVM_GetMethodTypeAnnotations");
|
||||
|
||||
// method is a handle to a java.lang.reflect.Method object
|
||||
Method* m = jvm_get_method_common(method);
|
||||
if (m == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AnnotationArray* type_annotations = m->type_annotations();
|
||||
if (type_annotations != NULL) {
|
||||
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
|
||||
return (jbyteArray) JNIHandles::make_local(env, a);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY(jbyteArray, JVM_GetFieldTypeAnnotations(JNIEnv *env, jobject field))
|
||||
assert (field != NULL, "illegal field");
|
||||
JVMWrapper("JVM_GetFieldTypeAnnotations");
|
||||
|
||||
fieldDescriptor fd;
|
||||
bool gotFd = jvm_get_field_common(field, fd, CHECK_NULL);
|
||||
if (!gotFd) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.type_annotations(), THREAD));
|
||||
JVM_END
|
||||
|
||||
static void bounds_check(constantPoolHandle cp, jint index, TRAPS) {
|
||||
if (!cp->is_within_bounds(index)) {
|
||||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Constant pool index out of bounds");
|
||||
@ -1722,7 +1770,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass,
|
||||
int i;
|
||||
for (i = 0; i < methods_length; i++) {
|
||||
methodHandle method(THREAD, methods->at(i));
|
||||
if (!method->is_initializer()) {
|
||||
if (!method->is_initializer() && !method->is_overpass()) {
|
||||
if (!publicOnly || method->is_public()) {
|
||||
++num_methods;
|
||||
}
|
||||
@ -1736,7 +1784,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass,
|
||||
int out_idx = 0;
|
||||
for (i = 0; i < methods_length; i++) {
|
||||
methodHandle method(THREAD, methods->at(i));
|
||||
if (!method->is_initializer()) {
|
||||
if (!method->is_initializer() && !method->is_overpass()) {
|
||||
if (!publicOnly || method->is_public()) {
|
||||
oop m = Reflection::new_method(method, UseNewReflection, false, CHECK_NULL);
|
||||
result->obj_at_put(out_idx, m);
|
||||
|
@ -523,6 +523,14 @@ JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method);
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls);
|
||||
|
||||
// field is a handle to a java.lang.reflect.Field object
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
JVM_GetFieldTypeAnnotations(JNIEnv *env, jobject field);
|
||||
|
||||
// method is a handle to a java.lang.reflect.Method object
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
JVM_GetMethodTypeAnnotations(JNIEnv *env, jobject method);
|
||||
|
||||
/*
|
||||
* New (JDK 1.4) reflection implementation
|
||||
*/
|
||||
|
@ -260,6 +260,7 @@ static ObsoleteFlag obsolete_jvm_flags[] = {
|
||||
{ "CMSRevisitStackSize", JDK_Version::jdk(8), JDK_Version::jdk(9) },
|
||||
{ "PrintRevisitStats", JDK_Version::jdk(8), JDK_Version::jdk(9) },
|
||||
{ "UseVectoredExceptions", JDK_Version::jdk(8), JDK_Version::jdk(9) },
|
||||
{ "UseSplitVerifier", JDK_Version::jdk(8), JDK_Version::jdk(9) },
|
||||
#ifdef PRODUCT
|
||||
{ "DesiredMethodLimit",
|
||||
JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) },
|
||||
@ -1169,7 +1170,6 @@ void Arguments::set_cms_and_parnew_gc_flags() {
|
||||
set_parnew_gc_flags();
|
||||
}
|
||||
|
||||
// MaxHeapSize is aligned down in collectorPolicy
|
||||
size_t max_heap = align_size_down(MaxHeapSize,
|
||||
CardTableRS::ct_max_alignment_constraint());
|
||||
|
||||
@ -1207,10 +1207,6 @@ void Arguments::set_cms_and_parnew_gc_flags() {
|
||||
}
|
||||
|
||||
// Code along this path potentially sets NewSize and OldSize
|
||||
|
||||
assert(max_heap >= InitialHeapSize, "Error");
|
||||
assert(max_heap >= NewSize, "Error");
|
||||
|
||||
if (PrintGCDetails && Verbose) {
|
||||
// Too early to use gclog_or_tty
|
||||
tty->print_cr("CMS set min_heap_size: " SIZE_FORMAT
|
||||
|
@ -679,9 +679,6 @@ class CommandLineFlags {
|
||||
product(bool, UseCompilerSafepoints, true, \
|
||||
"Stop at safepoints in compiled code") \
|
||||
\
|
||||
product(bool, UseSplitVerifier, true, \
|
||||
"use split verifier with StackMapTable attributes") \
|
||||
\
|
||||
product(bool, FailOverToOldVerifier, true, \
|
||||
"fail over to old verifier when split verifier fails") \
|
||||
\
|
||||
@ -869,6 +866,11 @@ class CommandLineFlags {
|
||||
diagnostic(bool, PrintNMTStatistics, false, \
|
||||
"Print native memory tracking summary data if it is on") \
|
||||
\
|
||||
diagnostic(bool, AutoShutdownNMT, true, \
|
||||
"Automatically shutdown native memory tracking under stress " \
|
||||
"situation. When set to false, native memory tracking tries to " \
|
||||
"stay alive at the expense of JVM performance") \
|
||||
\
|
||||
diagnostic(bool, LogCompilation, false, \
|
||||
"Log compilation activity in detail to hotspot.log or LogFile") \
|
||||
\
|
||||
@ -2905,6 +2907,10 @@ class CommandLineFlags {
|
||||
"if non-zero, start verifying C heap after Nth call to " \
|
||||
"malloc/realloc/free") \
|
||||
\
|
||||
diagnostic(uintx, MallocMaxTestWords, 0, \
|
||||
"if non-zero, max # of Words that malloc/realloc can allocate " \
|
||||
"(for testing only)") \
|
||||
\
|
||||
product(intx, TypeProfileWidth, 2, \
|
||||
"number of receiver types to record in call/cast profile") \
|
||||
\
|
||||
@ -3569,8 +3575,9 @@ class CommandLineFlags {
|
||||
product(uintx, SharedMiscCodeSize, 120*K, \
|
||||
"Size of the shared miscellaneous code area (in bytes)") \
|
||||
\
|
||||
product(uintx, SharedDummyBlockSize, 0, \
|
||||
"Size of dummy block used to shift heap addresses (in bytes)") \
|
||||
product(uintx, SharedBaseAddress, LP64_ONLY(32*G) \
|
||||
NOT_LP64(LINUX_ONLY(2*G) NOT_LINUX(0)), \
|
||||
"Address to allocate shared memory region for class data") \
|
||||
\
|
||||
diagnostic(bool, EnableInvokeDynamic, true, \
|
||||
"support JSR 292 (method handles, invokedynamic, " \
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, 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
|
||||
@ -80,6 +80,8 @@ julong os::num_frees = 0; // # of calls to free
|
||||
julong os::free_bytes = 0; // # of bytes freed
|
||||
#endif
|
||||
|
||||
static juint cur_malloc_words = 0; // current size for MallocMaxTestWords
|
||||
|
||||
void os_init_globals() {
|
||||
// Called from init_globals().
|
||||
// See Threads::create_vm() in thread.cpp, and init.cpp.
|
||||
@ -570,6 +572,26 @@ void verify_block(void* memblock) {
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// This function supports testing of the malloc out of memory
|
||||
// condition without really running the system out of memory.
|
||||
//
|
||||
static u_char* testMalloc(size_t alloc_size) {
|
||||
assert(MallocMaxTestWords > 0, "sanity check");
|
||||
|
||||
if ((cur_malloc_words + (alloc_size / BytesPerWord)) > MallocMaxTestWords) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u_char* ptr = (u_char*)::malloc(alloc_size);
|
||||
|
||||
if (ptr != NULL) {
|
||||
Atomic::add(((jint) (alloc_size / BytesPerWord)),
|
||||
(volatile jint *) &cur_malloc_words);
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void* os::malloc(size_t size, MEMFLAGS memflags, address caller) {
|
||||
NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1));
|
||||
NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size));
|
||||
@ -579,11 +601,22 @@ void* os::malloc(size_t size, MEMFLAGS memflags, address caller) {
|
||||
// if NULL is returned the calling functions assume out of memory.
|
||||
size = 1;
|
||||
}
|
||||
if (size > size + space_before + space_after) { // Check for rollover.
|
||||
|
||||
const size_t alloc_size = size + space_before + space_after;
|
||||
|
||||
if (size > alloc_size) { // Check for rollover.
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap());
|
||||
u_char* ptr = (u_char*)::malloc(size + space_before + space_after);
|
||||
|
||||
u_char* ptr;
|
||||
|
||||
if (MallocMaxTestWords > 0) {
|
||||
ptr = testMalloc(alloc_size);
|
||||
} else {
|
||||
ptr = (u_char*)::malloc(alloc_size);
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
if (ptr == NULL) return NULL;
|
||||
|
@ -68,6 +68,7 @@ int MemTracker::_thread_count = 255;
|
||||
volatile jint MemTracker::_pooled_recorder_count = 0;
|
||||
volatile unsigned long MemTracker::_processing_generation = 0;
|
||||
volatile bool MemTracker::_worker_thread_idle = false;
|
||||
volatile bool MemTracker::_slowdown_calling_thread = false;
|
||||
debug_only(intx MemTracker::_main_thread_tid = 0;)
|
||||
NOT_PRODUCT(volatile jint MemTracker::_pending_recorder_count = 0;)
|
||||
|
||||
@ -364,6 +365,12 @@ void MemTracker::create_memory_record(address addr, MEMFLAGS flags,
|
||||
}
|
||||
|
||||
if (thread != NULL) {
|
||||
// slow down all calling threads except NMT worker thread, so it
|
||||
// can catch up.
|
||||
if (_slowdown_calling_thread && thread != _worker_thread) {
|
||||
os::yield_all();
|
||||
}
|
||||
|
||||
if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) {
|
||||
JavaThread* java_thread = (JavaThread*)thread;
|
||||
JavaThreadState state = java_thread->thread_state();
|
||||
@ -442,6 +449,7 @@ void MemTracker::enqueue_pending_recorder(MemRecorder* rec) {
|
||||
#define MAX_SAFEPOINTS_TO_SKIP 128
|
||||
#define SAFE_SEQUENCE_THRESHOLD 30
|
||||
#define HIGH_GENERATION_THRESHOLD 60
|
||||
#define MAX_RECORDER_THREAD_RATIO 30
|
||||
|
||||
void MemTracker::sync() {
|
||||
assert(_tracking_level > NMT_off, "NMT is not enabled");
|
||||
@ -487,6 +495,13 @@ void MemTracker::sync() {
|
||||
pending_recorders = _global_recorder;
|
||||
_global_recorder = NULL;
|
||||
}
|
||||
|
||||
// see if NMT has too many outstanding recorder instances, it usually
|
||||
// means that worker thread is lagging behind in processing them.
|
||||
if (!AutoShutdownNMT) {
|
||||
_slowdown_calling_thread = (MemRecorder::_instance_count > MAX_RECORDER_THREAD_RATIO * _thread_count);
|
||||
}
|
||||
|
||||
// check _worker_thread with lock to avoid racing condition
|
||||
if (_worker_thread != NULL) {
|
||||
_worker_thread->at_sync_point(pending_recorders, InstanceKlass::number_of_instance_classes());
|
||||
|
@ -84,6 +84,7 @@ class MemTracker : AllStatic {
|
||||
static inline bool baseline() { return false; }
|
||||
static inline bool has_baseline() { return false; }
|
||||
|
||||
static inline void set_autoShutdown(bool value) { }
|
||||
static void shutdown(ShutdownReason reason) { }
|
||||
static inline bool shutdown_in_progress() { }
|
||||
static bool print_memory_usage(BaselineOutputer& out, size_t unit,
|
||||
@ -238,6 +239,16 @@ class MemTracker : AllStatic {
|
||||
// if native memory tracking tracks callsite
|
||||
static inline bool track_callsite() { return _tracking_level == NMT_detail; }
|
||||
|
||||
// NMT automatically shuts itself down under extreme situation by default.
|
||||
// When the value is set to false, NMT will try its best to stay alive,
|
||||
// even it has to slow down VM.
|
||||
static inline void set_autoShutdown(bool value) {
|
||||
AutoShutdownNMT = value;
|
||||
if (AutoShutdownNMT && _slowdown_calling_thread) {
|
||||
_slowdown_calling_thread = false;
|
||||
}
|
||||
}
|
||||
|
||||
// shutdown native memory tracking capability. Native memory tracking
|
||||
// can be shutdown by VM when it encounters low memory scenarios.
|
||||
// Memory tracker should gracefully shutdown itself, and preserve the
|
||||
@ -507,6 +518,10 @@ class MemTracker : AllStatic {
|
||||
// although NMT is still procesing current generation, but
|
||||
// there is not more recorder to process, set idle state
|
||||
static volatile bool _worker_thread_idle;
|
||||
|
||||
// if NMT should slow down calling thread to allow
|
||||
// worker thread to catch up
|
||||
static volatile bool _slowdown_calling_thread;
|
||||
};
|
||||
|
||||
#endif // !INCLUDE_NMT
|
||||
|
@ -49,6 +49,9 @@ NMTDCmd::NMTDCmd(outputStream* output,
|
||||
_shutdown("shutdown", "request runtime to shutdown itself and free the " \
|
||||
"memory used by runtime.",
|
||||
"BOOLEAN", false, "false"),
|
||||
_auto_shutdown("autoShutdown", "automatically shutdown itself under " \
|
||||
"stress situation",
|
||||
"BOOLEAN", true, "true"),
|
||||
#ifndef PRODUCT
|
||||
_debug("debug", "print tracker statistics. Debug only, not thread safe", \
|
||||
"BOOLEAN", false, "false"),
|
||||
@ -61,6 +64,7 @@ NMTDCmd::NMTDCmd(outputStream* output,
|
||||
_dcmdparser.add_dcmd_option(&_summary_diff);
|
||||
_dcmdparser.add_dcmd_option(&_detail_diff);
|
||||
_dcmdparser.add_dcmd_option(&_shutdown);
|
||||
_dcmdparser.add_dcmd_option(&_auto_shutdown);
|
||||
#ifndef PRODUCT
|
||||
_dcmdparser.add_dcmd_option(&_debug);
|
||||
#endif
|
||||
@ -90,6 +94,8 @@ void NMTDCmd::execute(TRAPS) {
|
||||
if (_summary_diff.is_set() && _summary_diff.value()) { ++nopt; }
|
||||
if (_detail_diff.is_set() && _detail_diff.value()) { ++nopt; }
|
||||
if (_shutdown.is_set() && _shutdown.value()) { ++nopt; }
|
||||
if (_auto_shutdown.is_set()) { ++nopt; }
|
||||
|
||||
#ifndef PRODUCT
|
||||
if (_debug.is_set() && _debug.value()) { ++nopt; }
|
||||
#endif
|
||||
@ -156,6 +162,8 @@ void NMTDCmd::execute(TRAPS) {
|
||||
MemTracker::shutdown(MemTracker::NMT_shutdown_user);
|
||||
output()->print_cr("Shutdown is in progress, it will take a few moments to " \
|
||||
"completely shutdown");
|
||||
} else if (_auto_shutdown.is_set()) {
|
||||
MemTracker::set_autoShutdown(_auto_shutdown.value());
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
output()->print_cr("Unknown command");
|
||||
|
@ -39,6 +39,7 @@ class NMTDCmd: public DCmdWithParser {
|
||||
DCmdArgument<bool> _summary_diff;
|
||||
DCmdArgument<bool> _detail_diff;
|
||||
DCmdArgument<bool> _shutdown;
|
||||
DCmdArgument<bool> _auto_shutdown;
|
||||
#ifndef PRODUCT
|
||||
DCmdArgument<bool> _debug;
|
||||
#endif
|
||||
|
@ -22,26 +22,16 @@
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
echo "CLASSPATH=${CLASSPATH}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
|
||||
set -x
|
||||
|
||||
@ -50,7 +40,7 @@ cp ${TESTSRC}/input6890943.txt .
|
||||
cp ${TESTSRC}/output6890943.txt .
|
||||
cp ${TESTSRC}/Test6890943.sh .
|
||||
|
||||
${TESTJAVA}/bin/javac -d . Test6890943.java
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test6890943.java
|
||||
|
||||
${TESTJAVA}/bin/java -XX:-PrintVMOptions -XX:+IgnoreUnrecognizedVMOptions ${TESTVMOPTS} Test6890943 < input6890943.txt > pretest.out 2>&1
|
||||
|
||||
|
@ -22,26 +22,15 @@
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
echo "CLASSPATH=${CLASSPATH}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
# Amount of physical memory in megabytes
|
||||
MEM=0
|
||||
@ -87,7 +76,7 @@ set -x
|
||||
cp ${TESTSRC}/Test7005594.java .
|
||||
cp ${TESTSRC}/Test7005594.sh .
|
||||
|
||||
${TESTJAVA}/bin/javac -d . Test7005594.java
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test7005594.java
|
||||
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xms1600m -XX:+IgnoreUnrecognizedVMOptions -XX:-ZapUnusedHeapArea -Xcomp -XX:CompileOnly=Test7005594.test Test7005594 > test.out 2>&1
|
||||
|
||||
|
@ -22,33 +22,22 @@
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
echo "CLASSPATH=${CLASSPATH}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
set -x
|
||||
|
||||
cp ${TESTSRC}/Test6857159.java .
|
||||
cp ${TESTSRC}/Test6857159.sh .
|
||||
|
||||
${TESTJAVA}/bin/javac -d . Test6857159.java
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test6857159.java
|
||||
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbatch -XX:+PrintCompilation -XX:CompileOnly=Test6857159\$ct.run Test6857159 > test.out 2>&1
|
||||
|
||||
|
@ -22,28 +22,24 @@
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
set -x
|
||||
|
||||
${TESTJAVA}/bin/jar xf ${TESTJAVA}/jre/lib/javaws.jar
|
||||
${TESTJAVA}/bin/jar cf foo.jar *
|
||||
${COMPILEJAVA}/bin/jar xf ${COMPILEJAVA}/jre/lib/javaws.jar
|
||||
${COMPILEJAVA}/bin/jar cf foo.jar *
|
||||
cp ${TESTSRC}/Test7068051.java ./
|
||||
${TESTJAVA}/bin/jar -uf0 foo.jar Test7068051.java
|
||||
${COMPILEJAVA}/bin/jar -uf0 foo.jar Test7068051.java
|
||||
|
||||
${TESTJAVA}/bin/javac -d . Test7068051.java
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test7068051.java
|
||||
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -showversion -Xbatch Test7068051 foo.jar
|
||||
|
||||
|
@ -22,33 +22,22 @@
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
echo "CLASSPATH=${CLASSPATH}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
set -x
|
||||
|
||||
cp ${TESTSRC}/Stemmer.java .
|
||||
cp ${TESTSRC}/words .
|
||||
|
||||
${TESTJAVA}/bin/javac -d . Stemmer.java
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Stemmer.java
|
||||
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xbatch Stemmer words > test.out 2>&1
|
||||
|
||||
|
@ -23,50 +23,15 @@
|
||||
#
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
echo "CLASSPATH=${CLASSPATH}"
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
;;
|
||||
CYGWIN_* )
|
||||
NULL=/dev/null
|
||||
PS=";"
|
||||
FS="/"
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -Xinternalversion | sed 's/amd64/x86/' | grep "x86" | grep "Server VM" | grep "debug"
|
||||
|
||||
@ -88,7 +53,7 @@ else
|
||||
fi
|
||||
|
||||
cp ${TESTSRC}${FS}TestIntVect.java .
|
||||
${TESTJAVA}${FS}bin${FS}javac -d . TestIntVect.java
|
||||
${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} -d . TestIntVect.java
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -Xbatch -XX:-TieredCompilation -XX:CICompilerCount=1 -XX:+PrintCompilation -XX:+TraceNewVectors TestIntVect > test.out 2>&1
|
||||
|
||||
|
@ -5,38 +5,25 @@
|
||||
## @author yqi
|
||||
## @run shell test6941923.sh
|
||||
##
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
## skip on windows
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
;;
|
||||
Windows_* | CYGWIN_* )
|
||||
echo "Test skipped for Windows"
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "${JAVA_HOME}" = "" ]
|
||||
then
|
||||
echo "JAVA_HOME not set"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
$JAVA_HOME/bin/java ${TESTVMOPTS} -version > $NULL 2>&1
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo "Wrong JAVA_HOME? JAVA_HOME: $JAVA_HOME"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# create a small test case
|
||||
testname="Test"
|
||||
if [ -e ${testname}.java ]; then
|
||||
@ -96,10 +83,10 @@ msgsuccess="succeeded"
|
||||
msgfail="failed"
|
||||
gclogsize="16K"
|
||||
filesize=$((16*1024))
|
||||
$JAVA_HOME/bin/javac ${testname}.java > $NULL 2>&1
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${testname}.java > $NULL 2>&1
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo "$JAVA_HOME/bin/javac ${testname}.java $fail"
|
||||
echo "${COMPILEJAVA}/bin/javac ${testname}.java $fail"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
@ -119,7 +106,7 @@ fi
|
||||
|
||||
options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=$gclogsize"
|
||||
echo "Test gc log rotation in same file, wait for $tts minutes ...."
|
||||
$JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts
|
||||
${TESTJAVA}/bin/java $options $testname $tts
|
||||
if [ $? != 0 ]; then
|
||||
echo "$msgfail"
|
||||
exit -1
|
||||
@ -148,7 +135,7 @@ fi
|
||||
numoffiles=3
|
||||
options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=$numoffiles -XX:GCLogFileSize=$gclogsize"
|
||||
echo "Test gc log rotation in $numoffiles files, wait for $tts minutes ...."
|
||||
$JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts
|
||||
${TESTJAVA}/bin/java $options $testname $tts
|
||||
if [ $? != 0 ]; then
|
||||
echo "$msgfail"
|
||||
exit -1
|
||||
|
@ -27,67 +27,18 @@
|
||||
# @summary Loader-constraint table allows arrays instead of only the base-classes
|
||||
# @run shell Test6626217.sh
|
||||
#
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
RM=/bin/rm
|
||||
CP=/bin/cp
|
||||
MV=/bin/mv
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
RM=rm
|
||||
CP=cp
|
||||
MV=mv
|
||||
;;
|
||||
CYGWIN_* )
|
||||
NULL=/dev/null
|
||||
PS=";"
|
||||
FS="/"
|
||||
RM=rm
|
||||
CP=cp
|
||||
MV=mv
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
JEMMYPATH=${CPAPPEND}
|
||||
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
|
||||
|
||||
THIS_DIR=`pwd`
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
JAVA=${TESTJAVA}${FS}bin${FS}java
|
||||
JAVAC=${TESTJAVA}${FS}bin${FS}javac
|
||||
|
||||
${JAVA} ${TESTVMOPTS} -version
|
||||
JAVAC=${COMPILEJAVA}${FS}bin${FS}javac
|
||||
|
||||
# Current directory is scratch directory, copy all the test source there
|
||||
# (for the subsequent moves to work).
|
||||
@ -98,7 +49,7 @@ ${RM} -f *.class *.impl many_loader.java
|
||||
|
||||
# Compile all the usual suspects, including the default 'many_loader'
|
||||
${CP} many_loader1.java.foo many_loader.java
|
||||
${JAVAC} -source 1.4 -target 1.4 -Xlint *.java
|
||||
${JAVAC} ${TESTJAVACOPTS} -source 1.4 -target 1.4 -Xlint *.java
|
||||
|
||||
# Rename the class files, so the custom loader (and not the system loader) will find it
|
||||
${MV} from_loader2.class from_loader2.impl2
|
||||
@ -106,7 +57,7 @@ ${MV} from_loader2.class from_loader2.impl2
|
||||
# Compile the next version of 'many_loader'
|
||||
${MV} many_loader.class many_loader.impl1
|
||||
${CP} many_loader2.java.foo many_loader.java
|
||||
${JAVAC} -source 1.4 -target 1.4 -Xlint many_loader.java
|
||||
${JAVAC} ${TESTJAVACOPTS} -source 1.4 -target 1.4 -Xlint many_loader.java
|
||||
|
||||
# Rename the class file, so the custom loader (and not the system loader) will find it
|
||||
${MV} many_loader.class many_loader.impl2
|
||||
|
@ -1,71 +1,137 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2011, 2013, 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.
|
||||
#
|
||||
|
||||
|
||||
|
||||
##
|
||||
## @test
|
||||
## @bug 6878713
|
||||
## @bug 7030610
|
||||
## @bug 7037122
|
||||
## @bug 7123945
|
||||
## @summary Verifier heap corruption, relating to backward jsrs
|
||||
## @run shell/timeout=120 Test6878713.sh
|
||||
## @run shell Test6878713.sh
|
||||
##
|
||||
|
||||
## some tests require path to find test source dir
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
TARGET_CLASS=OOMCrashClass1960_2
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
;;
|
||||
CYGWIN_* )
|
||||
NULL=/dev/null
|
||||
PS=";"
|
||||
FS="/"
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
echo "INFO: extracting the target class."
|
||||
${COMPILEJAVA}${FS}bin${FS}jar xvf \
|
||||
${TESTSRC}${FS}testcase.jar ${TARGET_CLASS}.class
|
||||
|
||||
JEMMYPATH=${CPAPPEND}
|
||||
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
|
||||
# remove any hs_err_pid that might exist here
|
||||
rm -f hs_err_pid*.log
|
||||
|
||||
THIS_DIR=`pwd`
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} OOMCrashClass1960_2 > test.out 2>&1
|
||||
|
||||
if [ -s core -o -s "hs_*.log" ]
|
||||
then
|
||||
cat hs*.log
|
||||
echo "Test Failed"
|
||||
exit 1
|
||||
echo "INFO: checking for 32-bit versus 64-bit VM."
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version 2>&1 \
|
||||
| grep "64-Bit [^ ][^ ]* VM" > /dev/null 2>&1
|
||||
status="$?"
|
||||
if [ "$status" = 0 ]; then
|
||||
echo "INFO: testing a 64-bit VM."
|
||||
is_64_bit=true
|
||||
else
|
||||
echo "Test Passed"
|
||||
exit 0
|
||||
echo "INFO: testing a 32-bit VM."
|
||||
fi
|
||||
|
||||
if [ "$is_64_bit" = true ]; then
|
||||
# limit is 768MB in 8-byte words (1024 * 1024 * 768 / 8) == 100663296
|
||||
MALLOC_MAX=100663296
|
||||
else
|
||||
# limit is 768MB in 4-byte words (1024 * 1024 * 768 / 4) == 201326592
|
||||
MALLOC_MAX=201326592
|
||||
fi
|
||||
echo "INFO: MALLOC_MAX=$MALLOC_MAX"
|
||||
|
||||
echo "INFO: executing the target class."
|
||||
# -XX:+PrintCommandLineFlags for debugging purposes
|
||||
# -XX:+IgnoreUnrecognizedVMOptions so test will run on a VM without
|
||||
# the new -XX:MallocMaxTestWords option
|
||||
# -XX:+UnlockDiagnosticVMOptions so we can use -XX:MallocMaxTestWords
|
||||
# -XX:MallocMaxTestWords limits malloc to $MALLOC_MAX
|
||||
${TESTJAVA}${FS}bin${FS}java \
|
||||
-XX:+PrintCommandLineFlags \
|
||||
-XX:+IgnoreUnrecognizedVMOptions \
|
||||
-XX:+UnlockDiagnosticVMOptions \
|
||||
-XX:MallocMaxTestWords=$MALLOC_MAX \
|
||||
${TESTVMOPTS} ${TARGET_CLASS} > test.out 2>&1
|
||||
|
||||
echo "INFO: begin contents of test.out:"
|
||||
cat test.out
|
||||
echo "INFO: end contents of test.out."
|
||||
|
||||
echo "INFO: checking for memory allocation error message."
|
||||
# We are looking for this specific memory allocation failure mesg so
|
||||
# we know we exercised the right allocation path with the test class:
|
||||
MESG1="Native memory allocation (malloc) failed to allocate 25696531[0-9][0-9] bytes"
|
||||
grep "$MESG1" test.out
|
||||
status="$?"
|
||||
if [ "$status" = 0 ]; then
|
||||
echo "INFO: found expected memory allocation error message."
|
||||
else
|
||||
echo "INFO: did not find expected memory allocation error message."
|
||||
|
||||
# If we didn't find MESG1 above, then there are several scenarios:
|
||||
# 1) -XX:MallocMaxTestWords is not supported by the current VM and we
|
||||
# didn't fail TARGET_CLASS's memory allocation attempt; instead
|
||||
# we failed to find TARGET_CLASS's main() method. The TARGET_CLASS
|
||||
# is designed to provoke a memory allocation failure during class
|
||||
# loading; we actually don't care about running the class which is
|
||||
# why it doesn't have a main() method.
|
||||
# 2) we failed a memory allocation, but not the one we were looking
|
||||
# so it might be that TARGET_CLASS no longer tickles the same
|
||||
# memory allocation code path
|
||||
# 3) TARGET_CLASS reproduces the failure mode (SIGSEGV) fixed by
|
||||
# 6878713 because the test is running on a pre-fix VM.
|
||||
echo "INFO: checking for no main() method message."
|
||||
MESG2="Error: Main method not found in class"
|
||||
grep "$MESG2" test.out
|
||||
status="$?"
|
||||
if [ "$status" = 0 ]; then
|
||||
echo "INFO: found no main() method message."
|
||||
else
|
||||
echo "FAIL: did not find no main() method message."
|
||||
# status is non-zero for exit below
|
||||
|
||||
if [ -s hs_err_pid*.log ]; then
|
||||
echo "INFO: begin contents of hs_err_pid file:"
|
||||
cat hs_err_pid*.log
|
||||
echo "INFO: end contents of hs_err_pid file."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$status" = 0 ]; then
|
||||
echo "PASS: test found one of the expected messages."
|
||||
fi
|
||||
exit "$status"
|
||||
|
@ -7,18 +7,15 @@
|
||||
## @compile T.java
|
||||
## @run shell Test6929067.sh
|
||||
##
|
||||
|
||||
set -x
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
@ -107,7 +104,7 @@ then
|
||||
fi
|
||||
|
||||
|
||||
LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${ARCH}/${VMTYPE}:/usr/lib:$LD_LIBRARY_PATH
|
||||
LD_LIBRARY_PATH=.:${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE}:/usr/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
cp ${TESTSRC}${FS}invoke.c .
|
||||
@ -115,15 +112,16 @@ cp ${TESTSRC}${FS}invoke.c .
|
||||
# Copy the result of our @compile action:
|
||||
cp ${TESTCLASSES}${FS}T.class .
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -fullversion
|
||||
|
||||
echo "Architecture: ${ARCH}"
|
||||
echo "Compilation flag: ${COMP_FLAG}"
|
||||
echo "VM type: ${VMTYPE}"
|
||||
# Note pthread may not be found thus invoke creation will fail to be created.
|
||||
# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
|
||||
# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
|
||||
|
||||
gcc -DLINUX ${COMP_FLAG} -o invoke \
|
||||
-I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
|
||||
-L${TESTJAVA}/jre/lib/${ARCH}/${VMTYPE} \
|
||||
-I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \
|
||||
-L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \
|
||||
-ljvm -lpthread invoke.c
|
||||
|
||||
./invoke
|
||||
|
@ -10,55 +10,15 @@
|
||||
##
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
;;
|
||||
CYGWIN_* )
|
||||
NULL=/dev/null
|
||||
PS=";"
|
||||
FS="/"
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
JEMMYPATH=${CPAPPEND}
|
||||
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
|
||||
|
||||
THIS_DIR=`pwd`
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar
|
||||
${COMPILEJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} OOMCrashClass4000_1 > test.out 2>&1
|
||||
|
||||
|
@ -29,34 +29,22 @@
|
||||
#
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
printf "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
printf " If this is incorrect, try setting the variable manually.\n"
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
FS="/"
|
||||
;;
|
||||
Windows_* | CYGWIN_* )
|
||||
printf "Not testing libjsig.so on Windows. PASSED.\n "
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
printf "Not testing libjsig.so on unrecognised system. PASSED.\n "
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
JAVA=${TESTJAVA}${FS}bin${FS}java
|
||||
|
||||
# LD_PRELOAD arch needs to match the binary we run, so run the java
|
||||
@ -97,7 +85,7 @@ case $ARCH in
|
||||
;;
|
||||
esac
|
||||
|
||||
LIBJSIG=${TESTJAVA}${FS}jre${FS}lib${FS}${ARCH}${FS}libjsig.so
|
||||
LIBJSIG=${COMPILEJAVA}${FS}jre${FS}lib${FS}${ARCH}${FS}libjsig.so
|
||||
|
||||
# If libjsig and binary do not match, skip test.
|
||||
|
||||
|
@ -32,26 +32,19 @@
|
||||
##
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
|
||||
BIT_FLAG=""
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
Linux)
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
echo "Testing on Linux"
|
||||
;;
|
||||
*)
|
||||
NULL=NUL
|
||||
@ -64,7 +57,7 @@ esac
|
||||
|
||||
ARCH=`uname -m`
|
||||
|
||||
THIS_DIR=`pwd`
|
||||
THIS_DIR=.
|
||||
|
||||
cp ${TESTSRC}${FS}*.java ${THIS_DIR}
|
||||
${TESTJAVA}${FS}bin${FS}javac *.java
|
||||
|
@ -12,22 +12,13 @@
|
||||
#
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
fi
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
# Jtreg sets TESTVMOPTS which may include -d64 which is
|
||||
# required to test a 64-bit JVM on some platforms.
|
||||
|
@ -10,13 +10,14 @@
|
||||
## @summary Improve config file parsing
|
||||
## @run shell Test7158804.sh
|
||||
##
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
rm -f .hotspotrc
|
||||
echo -XX:+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >.hotspotrc
|
||||
|
@ -29,27 +29,13 @@
|
||||
#
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
printf "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
printf " If this is incorrect, try setting the variable manually.\n"
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
Windows_* )
|
||||
FS="\\"
|
||||
;;
|
||||
* )
|
||||
FS="/"
|
||||
;;
|
||||
esac
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
JAVA=${TESTJAVA}${FS}bin${FS}java
|
||||
|
||||
|
@ -19,26 +19,26 @@
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8007736
|
||||
* @summary Test static interface method.
|
||||
* @run main/othervm -Xverify:all TestStaticIF
|
||||
* @key regression
|
||||
* @bug 8010389
|
||||
* @run main/othervm -Djava.library.path=. VMThreadDlopen
|
||||
*/
|
||||
|
||||
public class TestStaticIF implements StaticMethodInInterface {
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.printf("main: %s%n", StaticMethodInInterface.get());
|
||||
public class VMThreadDlopen {
|
||||
public static void main(String[] args) throws Exception {
|
||||
File file = new File("libbroken.so");
|
||||
file.createNewFile();
|
||||
try {
|
||||
System.loadLibrary("broken");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
e.printStackTrace();
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
interface StaticMethodInInterface {
|
||||
|
||||
public static String get() {
|
||||
return "Hello from StaticMethodInInterface.get()";
|
||||
}
|
||||
}
|
@ -33,17 +33,17 @@ import com.oracle.java.testlibrary.*;
|
||||
public class BooleanFlagWithInvalidValue {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UseLargePages=8", "-version");
|
||||
"-XX:+PrintWarnings=8", "-version");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Improperly specified VM option 'UseLargePages=8'");
|
||||
output.shouldContain("Improperly specified VM option 'PrintWarnings=8'");
|
||||
output.shouldHaveExitValue(1);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:-UseLargePages=8", "-version");
|
||||
"-XX:-PrintWarnings=8", "-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Improperly specified VM option 'UseLargePages=8'");
|
||||
output.shouldContain("Improperly specified VM option 'PrintWarnings=8'");
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
|
@ -33,10 +33,10 @@ import com.oracle.java.testlibrary.*;
|
||||
public class FlagWithInvalidValue {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:ObjectAlignmentInBytes=v", "-version");
|
||||
"-XX:MaxRAMFraction=v", "-version");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Improperly specified VM option 'ObjectAlignmentInBytes=v'");
|
||||
output.shouldContain("Improperly specified VM option 'MaxRAMFraction=v'");
|
||||
output.shouldHaveExitValue(1);
|
||||
}
|
||||
}
|
||||
|
@ -33,17 +33,17 @@ import com.oracle.java.testlibrary.*;
|
||||
public class NonBooleanFlagWithInvalidBooleanPrefix {
|
||||
public static void main(String[] args) throws Exception {
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:-ObjectAlignmentInBytes=16", "-version");
|
||||
"-XX:-MaxRAMFraction=16", "-version");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Unexpected +/- setting in VM option 'ObjectAlignmentInBytes=16'");
|
||||
output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMFraction=16'");
|
||||
output.shouldHaveExitValue(1);
|
||||
|
||||
pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+ObjectAlignmentInBytes=16", "-version");
|
||||
"-XX:+MaxRAMFraction=16", "-version");
|
||||
|
||||
output = new OutputAnalyzer(pb.start());
|
||||
output.shouldContain("Unexpected +/- setting in VM option 'ObjectAlignmentInBytes=16'");
|
||||
output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMFraction=16'");
|
||||
output.shouldHaveExitValue(1);
|
||||
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class BaselineWithParameter {
|
||||
|
||||
// Run 'jcmd <pid> VM.native_memory baseline=false'
|
||||
pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "baseline=false"});
|
||||
pb.start();
|
||||
pb.start().waitFor();
|
||||
|
||||
// Run 'jcmd <pid> VM.native_memory summary=false'
|
||||
pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary=false"});
|
||||
|
@ -27,7 +27,9 @@
|
||||
* @bug 8005936
|
||||
* @summary Make sure PrintNMTStatistics works on normal JVM exit
|
||||
* @library /testlibrary /testlibrary/whitebox
|
||||
* @run compile PrintNMTStatistics.java
|
||||
* @build PrintNMTStatistics
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* @run main PrintNMTStatistics
|
||||
*/
|
||||
|
||||
import com.oracle.java.testlibrary.*;
|
||||
@ -52,8 +54,10 @@ public class PrintNMTStatistics {
|
||||
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
"-XX:+UnlockDiagnosticVMOptions",
|
||||
"-Xbootclasspath/a:.",
|
||||
"-XX:+WhiteBoxAPI",
|
||||
"-XX:NativeMemoryTracking=summary",
|
||||
"+XX:+PrintNMTStatistics",
|
||||
"-XX:+PrintNMTStatistics",
|
||||
"PrintNMTStatistics",
|
||||
"test");
|
||||
|
||||
|
193
hotspot/test/test_env.sh
Normal file
193
hotspot/test/test_env.sh
Normal file
@ -0,0 +1,193 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2013, 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.
|
||||
#
|
||||
|
||||
#
|
||||
# This Environment script was written to capture typically used environment
|
||||
# setup for a given shell test.
|
||||
#
|
||||
|
||||
# TESTJAVA can be a JDK or JRE. If JRE you need to set COMPILEJAVA
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
echo "TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
echo "TESTJAVA=${TESTJAVA}"
|
||||
|
||||
# COMPILEJAVA requires a JDK, some shell test use javac,jar,etc
|
||||
if [ "${COMPILEJAVA}" = "" ]
|
||||
then
|
||||
echo "COMPILEJAVA not set. Using TESTJAVA as default"
|
||||
COMPILEJAVA=${TESTJAVA}
|
||||
fi
|
||||
echo "COMPILEJAVA=${COMPILEJAVA}"
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASES not set. Using "." as default"
|
||||
TESTCLASSES=.
|
||||
fi
|
||||
echo "TESTCLASSES=${TESTCLASSES}"
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux | Darwin )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
RM=/bin/rm
|
||||
CP=/bin/cp
|
||||
MV=/bin/mv
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
RM=rm
|
||||
CP=cp
|
||||
MV=mv
|
||||
;;
|
||||
CYGWIN_* )
|
||||
NULL=/dev/null
|
||||
PS=";"
|
||||
FS="/"
|
||||
RM=rm
|
||||
CP=cp
|
||||
MV=mv
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
export NULL PS FS RM CP MV
|
||||
echo "NULL =${NULL}"
|
||||
echo "PS =${PS}"
|
||||
echo "FS =${FS}"
|
||||
echo "RM =${RM}"
|
||||
echo "CP =${CP}"
|
||||
echo "MV =${MV}"
|
||||
|
||||
# jtreg -classpathappend:<path>
|
||||
JEMMYPATH=${CPAPPEND}
|
||||
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
|
||||
echo "CLASSPATH =${CLASSPATH}"
|
||||
|
||||
# Current directory is scratch directory
|
||||
THIS_DIR=.
|
||||
echo "THIS_DIR=${THIS_DIR}"
|
||||
|
||||
# Check to ensure the java defined actually works
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version
|
||||
if [ $? != 0 ]; then
|
||||
echo "Wrong TESTJAVA or TESTVMOPTS:"
|
||||
echo $TESTJAVA TESTVMOPTS
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -Xinternalversion > vm_version.out 2>&1
|
||||
|
||||
VM_TYPE="unknown"
|
||||
grep "Server" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_TYPE="server"
|
||||
fi
|
||||
grep "Client" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_TYPE="client"
|
||||
fi
|
||||
|
||||
VM_BITS="32"
|
||||
grep "64-Bit" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_BITS="64"
|
||||
fi
|
||||
|
||||
VM_OS="unknown"
|
||||
grep "solaris" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_OS="solaris"
|
||||
fi
|
||||
grep "linux" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_OS="linux"
|
||||
fi
|
||||
grep "windows" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_OS="windows"
|
||||
fi
|
||||
grep "bsd" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_OS="bsd"
|
||||
fi
|
||||
|
||||
VM_CPU="unknown"
|
||||
grep "sparc" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="sparc"
|
||||
if [ $VM_BITS = "64" ]
|
||||
then
|
||||
VM_CPU="sparcv9"
|
||||
fi
|
||||
fi
|
||||
grep "x86" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="i386"
|
||||
fi
|
||||
grep "amd64" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="amd64"
|
||||
fi
|
||||
grep "arm" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="arm"
|
||||
fi
|
||||
grep "ppc" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="ppc"
|
||||
fi
|
||||
grep "ia64" vm_version.out > ${NULL}
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
VM_CPU="ia64"
|
||||
fi
|
||||
export VM_TYPE VM_BITS VM_OS VM_CPU
|
||||
echo "VM_TYPE=${VM_TYPE}"
|
||||
echo "VM_BITS=${VM_BITS}"
|
||||
echo "VM_OS=${VM_OS}"
|
||||
echo "VM_CPU=${VM_CPU}"
|
Loading…
x
Reference in New Issue
Block a user