# HG changeset patch # User johnc # Date 1354216995 28800 # Node ID c24f778e94014483d1df3ec9ecf6577d4febd278 # Parent 59c7900749938c5ba985467efbb15ff81e83ff7e# Parent 2fc0334f613aef43d1b3e7101df43473dcd3fcc1 Merge diff -r 59c790074993 -r c24f778e9401 src/cpu/sparc/vm/interp_masm_sparc.cpp --- a/src/cpu/sparc/vm/interp_masm_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/sparc/vm/interp_masm_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -36,12 +36,7 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/sharedRuntime.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" #ifndef CC_INTERP #ifndef FAST_DISPATCH diff -r 59c790074993 -r c24f778e9401 src/cpu/sparc/vm/stubGenerator_sparc.cpp --- a/src/cpu/sparc/vm/stubGenerator_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/sparc/vm/stubGenerator_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -37,13 +37,8 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif #ifdef COMPILER2 #include "opto/runtime.hpp" #endif diff -r 59c790074993 -r c24f778e9401 src/cpu/sparc/vm/stubRoutines_sparc.cpp --- a/src/cpu/sparc/vm/stubRoutines_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/sparc/vm/stubRoutines_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,12 +26,7 @@ #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/stubRoutines.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // Implementation of the platform-specific part of StubRoutines - for // a description of how to extend it, see the stubRoutines.hpp file. diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/interp_masm_x86_32.cpp --- a/src/cpu/x86/vm/interp_masm_x86_32.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -36,18 +36,7 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/sharedRuntime.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // Implementation of InterpreterMacroAssembler diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/interp_masm_x86_64.cpp --- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -36,18 +36,7 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/sharedRuntime.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // Implementation of InterpreterMacroAssembler diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/stubGenerator_x86_32.cpp --- a/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/stubGenerator_x86_32.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -37,19 +37,8 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef COMPILER2 #include "opto/runtime.hpp" #endif diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/stubGenerator_x86_64.cpp --- a/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/stubGenerator_x86_64.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -37,19 +37,8 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef COMPILER2 #include "opto/runtime.hpp" #endif diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/stubRoutines_x86_32.cpp --- a/src/cpu/x86/vm/stubRoutines_x86_32.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/stubRoutines_x86_32.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/stubRoutines.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // Implementation of the platform-specific part of StubRoutines - for // a description of how to extend it, see the stubRoutines.hpp file. diff -r 59c790074993 -r c24f778e9401 src/cpu/x86/vm/stubRoutines_x86_64.cpp --- a/src/cpu/x86/vm/stubRoutines_x86_64.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/x86/vm/stubRoutines_x86_64.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/stubRoutines.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // Implementation of the platform-specific part of StubRoutines - for // a description of how to extend it, see the stubRoutines.hpp file. diff -r 59c790074993 -r c24f778e9401 src/cpu/zero/vm/interp_masm_zero.cpp --- a/src/cpu/zero/vm/interp_masm_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/zero/vm/interp_masm_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -37,11 +37,6 @@ #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/sharedRuntime.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // This file is intentionally empty diff -r 59c790074993 -r c24f778e9401 src/cpu/zero/vm/stubGenerator_zero.cpp --- a/src/cpu/zero/vm/stubGenerator_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/zero/vm/stubGenerator_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -38,14 +38,9 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "stack_zero.inline.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef COMPILER2 #include "opto/runtime.hpp" #endif diff -r 59c790074993 -r c24f778e9401 src/cpu/zero/vm/stubRoutines_zero.cpp --- a/src/cpu/zero/vm/stubRoutines_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/cpu/zero/vm/stubRoutines_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,9 +27,4 @@ #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/stubRoutines.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/bsd/vm/mutex_bsd.cpp --- a/src/os/bsd/vm/mutex_bsd.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/bsd/vm/mutex_bsd.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,7 +26,7 @@ #include "mutex_bsd.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutex.hpp" -#include "thread_bsd.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/events.hpp" // put OS-includes here diff -r 59c790074993 -r c24f778e9401 src/os/bsd/vm/mutex_bsd.inline.hpp --- a/src/os/bsd/vm/mutex_bsd.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/bsd/vm/mutex_bsd.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,7 +27,7 @@ #include "os_bsd.inline.hpp" #include "runtime/interfaceSupport.hpp" -#include "thread_bsd.inline.hpp" +#include "runtime/thread.inline.hpp" // Reconciliation History diff -r 59c790074993 -r c24f778e9401 src/os/bsd/vm/os_bsd.cpp --- a/src/os/bsd/vm/os_bsd.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/bsd/vm/os_bsd.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -52,11 +52,11 @@ #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 "services/attachListener.hpp" #include "services/runtimeService.hpp" -#include "thread_bsd.inline.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/bsd/vm/threadCritical_bsd.cpp --- a/src/os/bsd/vm/threadCritical_bsd.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/bsd/vm/threadCritical_bsd.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" -#include "thread_bsd.inline.hpp" // put OS-includes here # include diff -r 59c790074993 -r c24f778e9401 src/os/bsd/vm/thread_bsd.inline.hpp --- a/src/os/bsd/vm/thread_bsd.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/bsd/vm/thread_bsd.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,6 +25,10 @@ #ifndef OS_BSD_VM_THREAD_BSD_INLINE_HPP #define OS_BSD_VM_THREAD_BSD_INLINE_HPP +#ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +#error "This file should only be included from thread.inline.hpp" +#endif + #include "runtime/atomic.hpp" #include "runtime/prefetch.hpp" #include "runtime/thread.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/linux/vm/mutex_linux.cpp --- a/src/os/linux/vm/mutex_linux.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/linux/vm/mutex_linux.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,7 +26,7 @@ #include "mutex_linux.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutex.hpp" -#include "thread_linux.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/events.hpp" // put OS-includes here diff -r 59c790074993 -r c24f778e9401 src/os/linux/vm/mutex_linux.inline.hpp --- a/src/os/linux/vm/mutex_linux.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/linux/vm/mutex_linux.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,7 +27,7 @@ #include "os_linux.inline.hpp" #include "runtime/interfaceSupport.hpp" -#include "thread_linux.inline.hpp" +#include "runtime/thread.inline.hpp" // Reconciliation History diff -r 59c790074993 -r c24f778e9401 src/os/linux/vm/os_linux.cpp --- a/src/os/linux/vm/os_linux.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/linux/vm/os_linux.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -52,11 +52,11 @@ #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 "services/attachListener.hpp" #include "services/runtimeService.hpp" -#include "thread_linux.inline.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/linux/vm/threadCritical_linux.cpp --- a/src/os/linux/vm/threadCritical_linux.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/linux/vm/threadCritical_linux.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" -#include "thread_linux.inline.hpp" // put OS-includes here # include diff -r 59c790074993 -r c24f778e9401 src/os/linux/vm/thread_linux.inline.hpp --- a/src/os/linux/vm/thread_linux.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/linux/vm/thread_linux.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,6 +25,10 @@ #ifndef OS_LINUX_VM_THREAD_LINUX_INLINE_HPP #define OS_LINUX_VM_THREAD_LINUX_INLINE_HPP +#ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +#error "This file should only be included from thread.inline.hpp" +#endif + #include "runtime/atomic.hpp" #include "runtime/prefetch.hpp" #include "runtime/thread.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/solaris/vm/mutex_solaris.cpp --- a/src/os/solaris/vm/mutex_solaris.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/solaris/vm/mutex_solaris.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,7 +26,7 @@ #include "mutex_solaris.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutex.hpp" -#include "thread_solaris.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/events.hpp" // Solaris-specific include, therefore not in includeDB_* diff -r 59c790074993 -r c24f778e9401 src/os/solaris/vm/mutex_solaris.inline.hpp --- a/src/os/solaris/vm/mutex_solaris.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/solaris/vm/mutex_solaris.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,6 +27,6 @@ #include "os_solaris.inline.hpp" #include "runtime/interfaceSupport.hpp" -#include "thread_solaris.inline.hpp" +#include "runtime/thread.inline.hpp" #endif // OS_SOLARIS_VM_MUTEX_SOLARIS_INLINE_HPP diff -r 59c790074993 -r c24f778e9401 src/os/solaris/vm/os_solaris.cpp --- a/src/os/solaris/vm/os_solaris.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/solaris/vm/os_solaris.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -52,12 +52,12 @@ #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 "services/attachListener.hpp" #include "services/memTracker.hpp" #include "services/runtimeService.hpp" -#include "thread_solaris.inline.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/solaris/vm/threadCritical_solaris.cpp --- a/src/os/solaris/vm/threadCritical_solaris.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/solaris/vm/threadCritical_solaris.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" -#include "thread_solaris.inline.hpp" // OS-includes here #include diff -r 59c790074993 -r c24f778e9401 src/os/solaris/vm/thread_solaris.inline.hpp --- a/src/os/solaris/vm/thread_solaris.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/solaris/vm/thread_solaris.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,6 +25,10 @@ #ifndef OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP #define OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP +#ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +#error "This file should only be included from thread.inline.hpp" +#endif + #include "runtime/atomic.hpp" #include "runtime/prefetch.hpp" #include "runtime/thread.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/windows/vm/mutex_windows.cpp --- a/src/os/windows/vm/mutex_windows.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/windows/vm/mutex_windows.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,7 +26,7 @@ #include "mutex_windows.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutex.hpp" -#include "thread_windows.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/events.hpp" // put OS-includes here diff -r 59c790074993 -r c24f778e9401 src/os/windows/vm/mutex_windows.inline.hpp --- a/src/os/windows/vm/mutex_windows.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/windows/vm/mutex_windows.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,6 +27,6 @@ #include "os_windows.inline.hpp" #include "runtime/interfaceSupport.hpp" -#include "thread_windows.inline.hpp" +#include "runtime/thread.inline.hpp" #endif // OS_WINDOWS_VM_MUTEX_WINDOWS_INLINE_HPP diff -r 59c790074993 -r c24f778e9401 src/os/windows/vm/os_windows.cpp --- a/src/os/windows/vm/os_windows.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/windows/vm/os_windows.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -55,11 +55,11 @@ #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 "services/attachListener.hpp" #include "services/runtimeService.hpp" -#include "thread_windows.inline.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" diff -r 59c790074993 -r c24f778e9401 src/os/windows/vm/threadCritical_windows.cpp --- a/src/os/windows/vm/threadCritical_windows.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/windows/vm/threadCritical_windows.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" -#include "thread_windows.inline.hpp" // OS-includes here # include diff -r 59c790074993 -r c24f778e9401 src/os/windows/vm/thread_windows.inline.hpp --- a/src/os/windows/vm/thread_windows.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os/windows/vm/thread_windows.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,6 +25,10 @@ #ifndef OS_WINDOWS_VM_THREAD_WINDOWS_INLINE_HPP #define OS_WINDOWS_VM_THREAD_WINDOWS_INLINE_HPP +#ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE +#error "This file should only be included from thread.inline.hpp" +#endif + #include "runtime/atomic.hpp" #include "runtime/prefetch.hpp" #include "runtime/thread.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp --- a/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_bsd.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_x86/vm/threadLS_bsd_x86.cpp --- a/src/os_cpu/bsd_x86/vm/threadLS_bsd_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_x86/vm/threadLS_bsd_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_bsd.inline.hpp" // Map stack pointer (%esp) to thread pointer for faster TLS access // diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp --- a/src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_bsd.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp --- a/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -54,8 +54,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_bsd.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_zero/vm/threadLS_bsd_zero.cpp --- a/src/os_cpu/bsd_zero/vm/threadLS_bsd_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_zero/vm/threadLS_bsd_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,8 +24,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_bsd.inline.hpp" void ThreadLocalStorage::generate_code_for_get_thread() { // nothing to do diff -r 59c790074993 -r c24f778e9401 src/os_cpu/bsd_zero/vm/thread_bsd_zero.cpp --- a/src/os_cpu/bsd_zero/vm/thread_bsd_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/bsd_zero/vm/thread_bsd_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_bsd.inline.hpp" +#include "runtime/thread.inline.hpp" void JavaThread::cache_global_variables() { // nothing to do diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp --- a/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_linux.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_sparc/vm/threadLS_linux_sparc.cpp --- a/src/os_cpu/linux_sparc/vm/threadLS_linux_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_sparc/vm/threadLS_linux_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_linux.inline.hpp" void ThreadLocalStorage::generate_code_for_get_thread() { } diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_sparc/vm/thread_linux_sparc.cpp --- a/src/os_cpu/linux_sparc/vm/thread_linux_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_sparc/vm/thread_linux_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_linux.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_x86/vm/os_linux_x86.cpp --- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_linux.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_x86/vm/threadLS_linux_x86.cpp --- a/src/os_cpu/linux_x86/vm/threadLS_linux_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_x86/vm/threadLS_linux_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_linux.inline.hpp" // Map stack pointer (%esp) to thread pointer for faster TLS access // diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_x86/vm/thread_linux_x86.cpp --- a/src/os_cpu/linux_x86/vm/thread_linux_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_x86/vm/thread_linux_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_linux.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_zero/vm/os_linux_zero.cpp --- a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -49,8 +49,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_linux.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_zero/vm/threadLS_linux_zero.cpp --- a/src/os_cpu/linux_zero/vm/threadLS_linux_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_zero/vm/threadLS_linux_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,8 +24,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_linux.inline.hpp" void ThreadLocalStorage::generate_code_for_get_thread() { // nothing to do diff -r 59c790074993 -r c24f778e9401 src/os_cpu/linux_zero/vm/thread_linux_zero.cpp --- a/src/os_cpu/linux_zero/vm/thread_linux_zero.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/linux_zero/vm/thread_linux_zero.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_linux.inline.hpp" +#include "runtime/thread.inline.hpp" void JavaThread::cache_global_variables() { // nothing to do diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp --- a/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_solaris.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_sparc/vm/threadLS_solaris_sparc.cpp --- a/src/os_cpu/solaris_sparc/vm/threadLS_solaris_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_sparc/vm/threadLS_solaris_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_solaris.inline.hpp" // Provides an entry point we can link against and // a buffer we can emit code into. The buffer is diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_sparc/vm/thread_solaris_sparc.cpp --- a/src/os_cpu/solaris_sparc/vm/thread_solaris_sparc.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_sparc/vm/thread_solaris_sparc.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_solaris.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp --- a/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_solaris.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_x86/vm/threadLS_solaris_x86.cpp --- a/src/os_cpu/solaris_x86/vm/threadLS_solaris_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_x86/vm/threadLS_solaris_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_solaris.inline.hpp" #ifdef AMD64 extern "C" Thread* fs_load(ptrdiff_t tlsOffset); diff -r 59c790074993 -r c24f778e9401 src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp --- a/src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_solaris.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/os_cpu/windows_x86/vm/os_windows_x86.cpp --- a/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,8 +48,8 @@ #include "runtime/osThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" -#include "thread_windows.inline.hpp" #include "utilities/events.hpp" #include "utilities/vmError.hpp" diff -r 59c790074993 -r c24f778e9401 src/os_cpu/windows_x86/vm/threadLS_windows_x86.cpp --- a/src/os_cpu/windows_x86/vm/threadLS_windows_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/windows_x86/vm/threadLS_windows_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,8 +23,8 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" -#include "thread_windows.inline.hpp" // Provides an entry point we can link against and // a buffer we can emit code into. The buffer is diff -r 59c790074993 -r c24f778e9401 src/os_cpu/windows_x86/vm/thread_windows_x86.cpp --- a/src/os_cpu/windows_x86/vm/thread_windows_x86.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/os_cpu/windows_x86/vm/thread_windows_x86.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "runtime/frame.inline.hpp" -#include "thread_windows.inline.hpp" +#include "runtime/thread.inline.hpp" // For Forte Analyzer AsyncGetCallTrace profiling support - thread is // currently interrupted by SIGPROF diff -r 59c790074993 -r c24f778e9401 src/share/vm/classfile/javaClasses.cpp --- a/src/share/vm/classfile/javaClasses.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/classfile/javaClasses.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -47,20 +47,9 @@ #include "runtime/java.hpp" #include "runtime/javaCalls.hpp" #include "runtime/safepoint.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vframe.hpp" #include "utilities/preserveException.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \ klass::_##name##_offset = JavaClasses::compute_injected_offset(JavaClasses::klass##_##name##_enum); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -40,19 +40,8 @@ #include "runtime/globals_extension.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // // ConcurrentMarkSweepPolicy methods diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,18 +27,7 @@ #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" #include "gc_implementation/shared/concurrentGCThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" class ConcurrentMarkSweepGeneration; class CMSCollector; diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp --- a/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -28,20 +28,8 @@ #include "runtime/atomic.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/safepoint.hpp" -#include "runtime/thread.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/workgroup.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif bool DirtyCardQueue::apply_closure(CardTableEntryClosure* cl, bool consume, diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp --- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -302,16 +302,28 @@ for (size_t c = start_card + 1; c <= end_card; c++ /* yeah! */) { u_char entry = _array->offset_array(c); if (c - start_card > BlockOffsetArray::power_to_cards_back(1)) { - guarantee(entry > N_words, "Should be in logarithmic region"); + guarantee(entry > N_words, + err_msg("Should be in logarithmic region - " + "entry: " UINT32_FORMAT ", " + "_array->offset_array(c): " UINT32_FORMAT ", " + "N_words: " UINT32_FORMAT, + entry, _array->offset_array(c), N_words)); } size_t backskip = BlockOffsetArray::entry_to_cards_back(entry); size_t landing_card = c - backskip; guarantee(landing_card >= (start_card - 1), "Inv"); if (landing_card >= start_card) { - guarantee(_array->offset_array(landing_card) <= entry, "monotonicity"); + guarantee(_array->offset_array(landing_card) <= entry, + err_msg("Monotonicity - landing_card offset: " UINT32_FORMAT ", " + "entry: " UINT32_FORMAT, + _array->offset_array(landing_card), entry)); } else { guarantee(landing_card == start_card - 1, "Tautology"); - guarantee(_array->offset_array(landing_card) <= N_words, "Offset value"); + // Note that N_words is the maximum offset value + guarantee(_array->offset_array(landing_card) <= N_words, + err_msg("landing card offset: " UINT32_FORMAT ", " + "N_words: " UINT32_FORMAT, + _array->offset_array(landing_card), N_words)); } } } @@ -536,17 +548,27 @@ // The offset can be 0 if the block starts on a boundary. That // is checked by an assertion above. size_t start_index = _array->index_for(blk_start); - HeapWord* boundary = _array->address_for_index(start_index); + HeapWord* boundary = _array->address_for_index(start_index); assert((_array->offset_array(orig_index) == 0 && blk_start == boundary) || (_array->offset_array(orig_index) > 0 && _array->offset_array(orig_index) <= N_words), - "offset array should have been set"); + err_msg("offset array should have been set - " + "orig_index offset: " UINT32_FORMAT ", " + "blk_start: " PTR_FORMAT ", " + "boundary: " PTR_FORMAT, + _array->offset_array(orig_index), + blk_start, boundary)); for (size_t j = orig_index + 1; j <= end_index; j++) { assert(_array->offset_array(j) > 0 && _array->offset_array(j) <= (u_char) (N_words+BlockOffsetArray::N_powers-1), - "offset array should have been set"); + err_msg("offset array should have been set - " + UINT32_FORMAT " not > 0 OR " + UINT32_FORMAT " not <= " UINT32_FORMAT, + _array->offset_array(j), + _array->offset_array(j), + (u_char) (N_words+BlockOffsetArray::N_powers-1))); } #endif } diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp --- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -78,7 +78,9 @@ virtual void resize(size_t new_word_size) = 0; virtual void set_bottom(HeapWord* new_bottom) { - assert(new_bottom <= _end, "new_bottom > _end"); + assert(new_bottom <= _end, + err_msg("new_bottom (" PTR_FORMAT ") > _end (" PTR_FORMAT ")", + new_bottom, _end)); _bottom = new_bottom; resize(pointer_delta(_end, _bottom)); } @@ -134,29 +136,42 @@ VirtualSpace _vs; u_char* _offset_array; // byte array keeping backwards offsets + void check_index(size_t index, const char* msg) const { + assert(index < _vs.committed_size(), + err_msg("%s - " + "index: " SIZE_FORMAT ", _vs.committed_size: " SIZE_FORMAT, + msg, index, _vs.committed_size())); + } + + void check_offset(size_t offset, const char* msg) const { + assert(offset <= N_words, + err_msg("%s - " + "offset: " UINT32_FORMAT", N_words: " UINT32_FORMAT, + msg, offset, N_words)); + } + // Bounds checking accessors: // For performance these have to devolve to array accesses in product builds. u_char offset_array(size_t index) const { - assert(index < _vs.committed_size(), "index out of range"); + check_index(index, "index out of range"); return _offset_array[index]; } void set_offset_array(size_t index, u_char offset) { - assert(index < _vs.committed_size(), "index out of range"); - assert(offset <= N_words, "offset too large"); + check_index(index, "index out of range"); + check_offset(offset, "offset too large"); _offset_array[index] = offset; } void set_offset_array(size_t index, HeapWord* high, HeapWord* low) { - assert(index < _vs.committed_size(), "index out of range"); + check_index(index, "index out of range"); assert(high >= low, "addresses out of order"); - assert(pointer_delta(high, low) <= N_words, "offset too large"); + check_offset(pointer_delta(high, low), "offset too large"); _offset_array[index] = (u_char) pointer_delta(high, low); } void set_offset_array(HeapWord* left, HeapWord* right, u_char offset) { - assert(index_for(right - 1) < _vs.committed_size(), - "right address out of range"); + check_index(index_for(right - 1), "right address out of range"); assert(left < right, "Heap addresses out of order"); size_t num_cards = pointer_delta(right, left) >> LogN_words; if (UseMemSetInBOT) { @@ -171,7 +186,7 @@ } void set_offset_array(size_t left, size_t right, u_char offset) { - assert(right < _vs.committed_size(), "right address out of range"); + check_index(right, "right index out of range"); assert(left <= right, "indexes out of order"); size_t num_cards = right - left + 1; if (UseMemSetInBOT) { @@ -186,11 +201,10 @@ } void check_offset_array(size_t index, HeapWord* high, HeapWord* low) const { - assert(index < _vs.committed_size(), "index out of range"); + check_index(index, "index out of range"); assert(high >= low, "addresses out of order"); - assert(pointer_delta(high, low) <= N_words, "offset too large"); - assert(_offset_array[index] == pointer_delta(high, low), - "Wrong offset"); + check_offset(pointer_delta(high, low), "offset too large"); + assert(_offset_array[index] == pointer_delta(high, low), "Wrong offset"); } bool is_card_boundary(HeapWord* p) const; @@ -481,7 +495,6 @@ blk_start, blk_end); } - public: G1BlockOffsetArrayContigSpace(G1BlockOffsetSharedArray* array, MemRegion mr); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp --- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -49,16 +49,17 @@ char* pc = (char*)p; assert(pc >= (char*)_reserved.start() && pc < (char*)_reserved.end(), - "p not in range."); + err_msg("p (" PTR_FORMAT ") not in reserved [" PTR_FORMAT ", " PTR_FORMAT ")", + p, (char*)_reserved.start(), (char*)_reserved.end())); size_t delta = pointer_delta(pc, _reserved.start(), sizeof(char)); size_t result = delta >> LogN; - assert(result < _vs.committed_size(), "bad index from address"); + check_index(result, "bad index from address"); return result; } inline HeapWord* G1BlockOffsetSharedArray::address_for_index(size_t index) const { - assert(index < _vs.committed_size(), "bad index"); + check_index(index, "index out of range"); HeapWord* result = _reserved.start() + (index << LogN_words); assert(result >= _reserved.start() && result < _reserved.end(), err_msg("bad address from index result " PTR_FORMAT diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp --- a/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,19 +27,7 @@ #include "gc_implementation/g1/heapRegion.hpp" #include "gc_implementation/g1/satbQueue.hpp" #include "runtime/mutexLocker.hpp" -#include "runtime/thread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" G1SATBCardTableModRefBS::G1SATBCardTableModRefBS(MemRegion whole_heap, int max_covered_regions) : diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/g1/ptrQueue.cpp --- a/src/share/vm/gc_implementation/g1/ptrQueue.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/g1/ptrQueue.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -28,18 +28,7 @@ #include "memory/allocation.inline.hpp" #include "runtime/mutex.hpp" #include "runtime/mutexLocker.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" PtrQueue::PtrQueue(PtrQueueSet* qset, bool perm, bool active) : _qset(qset), _buf(NULL), _index(0), _active(active), diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -52,14 +52,22 @@ PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); + PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); + CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true); CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true); if (_java_thread != NULL) - _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); + _java_thread->oops_do( + &mark_and_push_closure, + &mark_and_push_from_clds, + &mark_and_push_in_blobs); if (_vm_thread != NULL) - _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); + _vm_thread->oops_do( + &mark_and_push_closure, + &mark_and_push_from_clds, + &mark_and_push_in_blobs); // Do the real work cm->follow_marking_stacks(); @@ -89,7 +97,8 @@ { ResourceMark rm; CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true); - Threads::oops_do(&mark_and_push_closure, &each_active_code_blob); + CLDToOopClosure mark_and_push_from_cld(&mark_and_push_closure); + Threads::oops_do(&mark_and_push_closure, &mark_and_push_from_cld, &each_active_code_blob); } break; diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -495,8 +495,9 @@ ParallelScavengeHeap::ParStrongRootsScope psrs; Universe::oops_do(mark_and_push_closure()); JNIHandles::oops_do(mark_and_push_closure()); // Global (strong) JNI handles + CLDToOopClosure mark_and_push_from_cld(mark_and_push_closure()); CodeBlobToOopClosure each_active_code_blob(mark_and_push_closure(), /*do_marking=*/ true); - Threads::oops_do(mark_and_push_closure(), &each_active_code_blob); + Threads::oops_do(mark_and_push_closure(), &mark_and_push_from_cld, &each_active_code_blob); ObjectSynchronizer::oops_do(mark_and_push_closure()); FlatProfiler::oops_do(mark_and_push_closure()); Management::oops_do(mark_and_push_closure()); @@ -584,7 +585,8 @@ // General strong roots. Universe::oops_do(adjust_root_pointer_closure()); JNIHandles::oops_do(adjust_root_pointer_closure()); // Global (strong) JNI handles - Threads::oops_do(adjust_root_pointer_closure(), NULL); + CLDToOopClosure adjust_from_cld(adjust_root_pointer_closure()); + Threads::oops_do(adjust_root_pointer_closure(), &adjust_from_cld, NULL); ObjectSynchronizer::oops_do(adjust_root_pointer_closure()); FlatProfiler::oops_do(adjust_root_pointer_closure()); Management::oops_do(adjust_root_pointer_closure()); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -2436,7 +2436,8 @@ // General strong roots. Universe::oops_do(adjust_root_pointer_closure()); JNIHandles::oops_do(adjust_root_pointer_closure()); // Global (strong) JNI handles - Threads::oops_do(adjust_root_pointer_closure(), NULL); + CLDToOopClosure adjust_from_cld(adjust_root_pointer_closure()); + Threads::oops_do(adjust_root_pointer_closure(), &adjust_from_cld, NULL); ObjectSynchronizer::oops_do(adjust_root_pointer_closure()); FlatProfiler::oops_do(adjust_root_pointer_closure()); Management::oops_do(adjust_root_pointer_closure()); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -65,7 +65,8 @@ case threads: { ResourceMark rm; - Threads::oops_do(&roots_closure, NULL); + CLDToOopClosure* cld_closure = NULL; // Not needed. All CLDs are already visited. + Threads::oops_do(&roots_closure, cld_closure, NULL); } break; @@ -120,13 +121,14 @@ PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which); PSScavengeRootsClosure roots_closure(pm); + CLDToOopClosure* roots_from_clds = NULL; // Not needed. All CLDs are already visited. CodeBlobToOopClosure roots_in_blobs(&roots_closure, /*do_marking=*/ true); if (_java_thread != NULL) - _java_thread->oops_do(&roots_closure, &roots_in_blobs); + _java_thread->oops_do(&roots_closure, roots_from_clds, &roots_in_blobs); if (_vm_thread != NULL) - _vm_thread->oops_do(&roots_closure, &roots_in_blobs); + _vm_thread->oops_do(&roots_closure, roots_from_clds, &roots_in_blobs); // Do the real work pm->drain_stacks(false); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp --- a/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -28,19 +28,7 @@ #include "gc_implementation/shared/spaceDecorator.hpp" #include "memory/sharedHeap.hpp" #include "oops/oop.inline.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif - +#include "runtime/thread.inline.hpp" MutableNUMASpace::MutableNUMASpace(size_t alignment) : MutableSpace(alignment) { _lgrp_spaces = new (ResourceObj::C_HEAP, mtGC) GrowableArray(0, true); diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_interface/collectedHeap.cpp --- a/src/share/vm/gc_interface/collectedHeap.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_interface/collectedHeap.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -30,19 +30,8 @@ #include "oops/oop.inline.hpp" #include "oops/instanceMirrorKlass.hpp" #include "runtime/init.hpp" +#include "runtime/thread.inline.hpp" #include "services/heapDumper.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef ASSERT diff -r 59c790074993 -r c24f778e9401 src/share/vm/gc_interface/collectedHeap.inline.hpp --- a/src/share/vm/gc_interface/collectedHeap.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/gc_interface/collectedHeap.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -31,21 +31,9 @@ #include "oops/arrayOop.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/sharedRuntime.hpp" -#include "runtime/thread.hpp" +#include "runtime/thread.inline.hpp" #include "services/lowMemoryDetector.hpp" #include "utilities/copy.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Inline allocation implementations. diff -r 59c790074993 -r c24f778e9401 src/share/vm/interpreter/abstractInterpreter.hpp --- a/src/share/vm/interpreter/abstractInterpreter.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/interpreter/abstractInterpreter.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,6 +27,7 @@ #include "code/stubs.hpp" #include "interpreter/bytecodes.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" #include "utilities/top.hpp" #ifdef TARGET_ARCH_MODEL_x86_32 @@ -47,18 +48,6 @@ #ifdef TARGET_ARCH_MODEL_ppc # include "interp_masm_ppc.hpp" #endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // This file contains the platform-independent parts // of the abstract interpreter and the abstract interpreter generator. diff -r 59c790074993 -r c24f778e9401 src/share/vm/interpreter/interpreterRuntime.hpp --- a/src/share/vm/interpreter/interpreterRuntime.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/interpreter/interpreterRuntime.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -31,19 +31,8 @@ #include "oops/method.hpp" #include "runtime/frame.inline.hpp" #include "runtime/signature.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // The InterpreterRuntime is called by the interpreter for everything // that cannot/should not be dealt with in assembly and needs C support. diff -r 59c790074993 -r c24f778e9401 src/share/vm/interpreter/linkResolver.cpp --- a/src/share/vm/interpreter/linkResolver.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/interpreter/linkResolver.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -43,19 +43,8 @@ #include "runtime/handles.inline.hpp" #include "runtime/reflection.hpp" #include "runtime/signature.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif //------------------------------------------------------------------------------------------------------------------------ // Implementation of FieldAccessInfo diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/binaryTreeDictionary.cpp --- a/src/share/vm/memory/binaryTreeDictionary.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/binaryTreeDictionary.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -290,7 +290,7 @@ assert(chunk->list() == this, "list should be set for chunk"); assert(tail() != NULL, "The tree list is embedded in the first chunk"); // which means that the list can never be empty. - assert(!verify_chunk_in_free_list(chunk), "Double entry"); + assert(!this->verify_chunk_in_free_list(chunk), "Double entry"); assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -300,7 +300,7 @@ assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list"); FreeList_t::increment_count(); - debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) + debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); } @@ -314,7 +314,7 @@ assert(chunk->list() == this, "list should be set for chunk"); assert(head() != NULL, "The tree list is embedded in the first chunk"); assert(chunk != NULL, "returning NULL chunk"); - assert(!verify_chunk_in_free_list(chunk), "Double entry"); + assert(!this->verify_chunk_in_free_list(chunk), "Double entry"); assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -328,7 +328,7 @@ head()->link_after(chunk); assert(!head() || size() == head()->size(), "Wrong sized chunk in list"); FreeList_t::increment_count(); - debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) + debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); } diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/collectorPolicy.cpp --- a/src/share/vm/memory/collectorPolicy.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/collectorPolicy.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -37,19 +37,8 @@ #include "runtime/globals_extension.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp" #include "gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp" diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/defNewGeneration.cpp --- a/src/share/vm/memory/defNewGeneration.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/defNewGeneration.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -38,20 +38,9 @@ #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/copy.hpp" #include "utilities/stack.inline.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // // DefNewGeneration functions. diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/freeBlockDictionary.cpp --- a/src/share/vm/memory/freeBlockDictionary.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/freeBlockDictionary.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -29,18 +29,7 @@ #include "memory/freeBlockDictionary.hpp" #include "memory/metablock.hpp" #include "memory/metachunk.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" #ifndef PRODUCT template Mutex* FreeBlockDictionary::par_lock() const { diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/gcLocker.hpp --- a/src/share/vm/memory/gcLocker.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/gcLocker.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -29,21 +29,18 @@ #include "memory/genCollectedHeap.hpp" #include "memory/universe.hpp" #include "oops/oop.hpp" +#include "runtime/thread.inline.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif // The direct lock/unlock calls do not force a collection if an unlock diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/genMarkSweep.cpp --- a/src/share/vm/memory/genMarkSweep.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/genMarkSweep.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -43,21 +43,10 @@ #include "runtime/fprofiler.hpp" #include "runtime/handles.inline.hpp" #include "runtime/synchronizer.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" #include "utilities/copy.hpp" #include "utilities/events.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, bool clear_all_softrefs) { diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/iterator.cpp --- a/src/share/vm/memory/iterator.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/iterator.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -30,6 +30,10 @@ k->oops_do(_oop_closure); } +void CLDToOopClosure::do_cld(ClassLoaderData* cld) { + cld->oops_do(_oop_closure, &_klass_closure, _must_claim_cld); +} + void ObjectToOopClosure::do_object(oop obj) { obj->oop_iterate(_cl); } diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/iterator.hpp --- a/src/share/vm/memory/iterator.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/iterator.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -135,6 +135,20 @@ virtual void do_klass(Klass* k); }; +class CLDToOopClosure { + OopClosure* _oop_closure; + KlassToOopClosure _klass_closure; + bool _must_claim_cld; + + public: + CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) : + _oop_closure(oop_closure), + _klass_closure(oop_closure), + _must_claim_cld(must_claim_cld) {} + + void do_cld(ClassLoaderData* cld); +}; + // ObjectClosure is used for iterating through an object space class ObjectClosure : public Closure { diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/resourceArea.cpp --- a/src/share/vm/memory/resourceArea.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/resourceArea.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "runtime/mutexLocker.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" //------------------------------ResourceMark----------------------------------- debug_only(int ResourceArea::_warned;) // to suppress multiple warnings diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/resourceArea.hpp --- a/src/share/vm/memory/resourceArea.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/resourceArea.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #define SHARE_VM_MEMORY_RESOURCEAREA_HPP #include "memory/allocation.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // The resource area holds temporary data structures in the VM. // The actual allocation areas are thread local. Typical usage: diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/sharedHeap.cpp --- a/src/share/vm/memory/sharedHeap.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/sharedHeap.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -154,10 +154,12 @@ if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) JNIHandles::oops_do(roots); // All threads execute this; the individual threads are task groups. + CLDToOopClosure roots_from_clds(roots); + CLDToOopClosure* roots_from_clds_p = (is_scavenging ? NULL : &roots_from_clds); if (ParallelGCThreads > 0) { - Threads::possibly_parallel_oops_do(roots, code_roots); + Threads::possibly_parallel_oops_do(roots, roots_from_clds_p ,code_roots); } else { - Threads::oops_do(roots, code_roots); + Threads::oops_do(roots, roots_from_clds_p, code_roots); } if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) ObjectSynchronizer::oops_do(roots); diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/space.cpp --- a/src/share/vm/memory/space.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/space.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -790,7 +790,9 @@ // Very general, slow implementation. HeapWord* ContiguousSpace::block_start_const(const void* p) const { - assert(MemRegion(bottom(), end()).contains(p), "p not in space"); + assert(MemRegion(bottom(), end()).contains(p), + err_msg("p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")", + p, bottom(), end())); if (p >= top()) { return top(); } else { @@ -800,19 +802,27 @@ last = cur; cur += oop(cur)->size(); } - assert(oop(last)->is_oop(), "Should be an object start"); + assert(oop(last)->is_oop(), + err_msg(PTR_FORMAT " should be an object start", last)); return last; } } size_t ContiguousSpace::block_size(const HeapWord* p) const { - assert(MemRegion(bottom(), end()).contains(p), "p not in space"); + assert(MemRegion(bottom(), end()).contains(p), + err_msg("p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")", + p, bottom(), end())); HeapWord* current_top = top(); - assert(p <= current_top, "p is not a block start"); - assert(p == current_top || oop(p)->is_oop(), "p is not a block start"); - if (p < current_top) + assert(p <= current_top, + err_msg("p > current top - p: " PTR_FORMAT ", current top: " PTR_FORMAT, + p, current_top)); + assert(p == current_top || oop(p)->is_oop(), + err_msg("p (" PTR_FORMAT ") is not a block start - " + "current_top: " PTR_FORMAT ", is_oop: %s", + p, current_top, BOOL_TO_STR(oop(p)->is_oop()))); + if (p < current_top) { return oop(p)->size(); - else { + } else { assert(p == current_top, "just checking"); return pointer_delta(end(), (HeapWord*) p); } diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/threadLocalAllocBuffer.cpp --- a/src/share/vm/memory/threadLocalAllocBuffer.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/threadLocalAllocBuffer.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -28,19 +28,8 @@ #include "memory/threadLocalAllocBuffer.inline.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/copy.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Thread-Local Edens support diff -r 59c790074993 -r c24f778e9401 src/share/vm/memory/universe.cpp --- a/src/share/vm/memory/universe.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/memory/universe.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -62,6 +62,7 @@ #include "runtime/javaCalls.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/synchronizer.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" #include "runtime/vm_operations.hpp" #include "services/memoryService.hpp" @@ -69,18 +70,6 @@ #include "utilities/events.hpp" #include "utilities/hashtable.inline.hpp" #include "utilities/preserveException.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp" #include "gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp" diff -r 59c790074993 -r c24f778e9401 src/share/vm/oops/instanceKlass.cpp --- a/src/share/vm/oops/instanceKlass.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/oops/instanceKlass.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -51,20 +51,9 @@ #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" #include "runtime/mutexLocker.hpp" +#include "runtime/thread.inline.hpp" #include "services/threadService.hpp" #include "utilities/dtrace.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" diff -r 59c790074993 -r c24f778e9401 src/share/vm/oops/markOop.cpp --- a/src/share/vm/oops/markOop.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/oops/markOop.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,19 +24,7 @@ #include "precompiled.hpp" #include "oops/markOop.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif - +#include "runtime/thread.inline.hpp" void markOopDesc::print_on(outputStream* st) const { if (is_locked()) { diff -r 59c790074993 -r c24f778e9401 src/share/vm/oops/oop.cpp --- a/src/share/vm/oops/oop.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/oops/oop.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,19 +27,8 @@ #include "classfile/javaClasses.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/copy.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif bool always_do_update_barrier = false; diff -r 59c790074993 -r c24f778e9401 src/share/vm/oops/oopsHierarchy.cpp --- a/src/share/vm/oops/oopsHierarchy.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/oops/oopsHierarchy.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,20 +26,8 @@ #include "gc_interface/collectedHeap.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "oops/oopsHierarchy.hpp" -#include "runtime/thread.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/globalDefinitions.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef CHECK_UNHANDLED_OOPS diff -r 59c790074993 -r c24f778e9401 src/share/vm/prims/jni.cpp --- a/src/share/vm/prims/jni.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/prims/jni.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -69,6 +69,7 @@ #include "runtime/reflection.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/signature.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vm_operations.hpp" #include "services/runtimeService.hpp" #include "trace/tracing.hpp" @@ -79,19 +80,15 @@ #include "utilities/histogram.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif static jint CurrentVersion = JNI_VERSION_1_6; diff -r 59c790074993 -r c24f778e9401 src/share/vm/prims/jvmtiEnv.cpp --- a/src/share/vm/prims/jvmtiEnv.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/prims/jvmtiEnv.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -53,24 +53,12 @@ #include "runtime/osThread.hpp" #include "runtime/reflectionUtils.hpp" #include "runtime/signature.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vframe.hpp" #include "runtime/vmThread.hpp" #include "services/threadService.hpp" #include "utilities/exceptions.hpp" #include "utilities/preserveException.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif - #define FIXLATER 0 // REMOVE this when completed. diff -r 59c790074993 -r c24f778e9401 src/share/vm/prims/jvmtiImpl.cpp --- a/src/share/vm/prims/jvmtiImpl.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/prims/jvmtiImpl.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -41,22 +41,11 @@ #include "runtime/os.hpp" #include "runtime/serviceThread.hpp" #include "runtime/signature.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vframe.hpp" #include "runtime/vframe_hp.hpp" #include "runtime/vm_operations.hpp" #include "utilities/exceptions.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // // class JvmtiAgentThread diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/arguments.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -1485,14 +1485,6 @@ } } } - if (UseNUMA) { - if (FLAG_IS_DEFAULT(MinHeapDeltaBytes)) { - FLAG_SET_DEFAULT(MinHeapDeltaBytes, 64*M); - } - // For those collectors or operating systems (eg, Windows) that do - // not support full UseNUMA, we will map to UseNUMAInterleaving for now - UseNUMAInterleaving = true; - } } void Arguments::set_g1_gc_flags() { @@ -3332,6 +3324,22 @@ return JNI_OK; } +jint Arguments::adjust_after_os() { +#if INCLUDE_ALTERNATE_GCS + if (UseParallelGC || UseParallelOldGC) { + if (UseNUMA) { + if (FLAG_IS_DEFAULT(MinHeapDeltaBytes)) { + FLAG_SET_DEFAULT(MinHeapDeltaBytes, 64*M); + } + // For those collectors or operating systems (eg, Windows) that do + // not support full UseNUMA, we will map to UseNUMAInterleaving for now + UseNUMAInterleaving = true; + } + } +#endif + return JNI_OK; +} + int Arguments::PropertyList_count(SystemProperty* pl) { int count = 0; while(pl != NULL) { diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/arguments.hpp --- a/src/share/vm/runtime/arguments.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/arguments.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -409,6 +409,8 @@ public: // Parses the arguments static jint parse(const JavaVMInitArgs* args); + // Adjusts the arguments after the OS have adjusted the arguments + static jint adjust_after_os(); // Check for consistency in the selection of the garbage collector. static bool check_gc_consistency(); // Check consistecy or otherwise of VM argument settings diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/deoptimization.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -721,7 +721,7 @@ guarantee(false, "wrong number of expression stack elements during deopt"); } VerifyOopClosure verify; - iframe->oops_interpreted_do(&verify, &rm, false); + iframe->oops_interpreted_do(&verify, NULL, &rm, false); callee_size_of_parameters = mh->size_of_parameters(); callee_max_locals = mh->max_locals(); is_top_frame = false; diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/fprofiler.hpp --- a/src/share/vm/runtime/fprofiler.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/fprofiler.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,6 @@ #define SHARE_VM_RUNTIME_FPROFILER_HPP #include "runtime/timer.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // a simple flat profiler for Java diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/frame.cpp --- a/src/share/vm/runtime/frame.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/frame.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -879,7 +879,8 @@ } -void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache) { +void frame::oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, + const RegisterMap* map, bool query_oop_map_cache) { assert(is_interpreted_frame(), "Not an interpreted frame"); assert(map != NULL, "map must be set"); Thread *thread = Thread::current(); @@ -906,6 +907,16 @@ } // process fixed part + if (cld_f != NULL) { + // The method pointer in the frame might be the only path to the method's + // klass, and the klass needs to be kept alive while executing. The GCs + // don't trace through method pointers, so typically in similar situations + // the mirror or the class loader of the klass are installed as a GC root. + // To minimze the overhead of doing that here, we ask the GC to pass down a + // closure that knows how to keep klasses alive given a ClassLoaderData. + cld_f->do_cld(m->method_holder()->class_loader_data()); + } + #if !defined(PPC) || defined(ZERO) if (m->is_native()) { #ifdef CC_INTERP @@ -1108,7 +1119,7 @@ } -void frame::oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) { +void frame::oops_do_internal(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) { #ifndef PRODUCT // simulate GC crash here to dump java thread in error report if (CrashGCForDumpingJavaThread) { @@ -1117,7 +1128,7 @@ } #endif if (is_interpreted_frame()) { - oops_interpreted_do(f, map, use_interpreter_oop_map_cache); + oops_interpreted_do(f, cld_f, map, use_interpreter_oop_map_cache); } else if (is_entry_frame()) { oops_entry_do(f, map); } else if (CodeCache::contains(pc())) { @@ -1278,7 +1289,7 @@ } } COMPILER2_PRESENT(assert(DerivedPointerTable::is_empty(), "must be empty before verify");) - oops_do_internal(&VerifyOopClosure::verify_oop, NULL, (RegisterMap*)map, false); + oops_do_internal(&VerifyOopClosure::verify_oop, NULL, NULL, (RegisterMap*)map, false); } diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/frame.hpp --- a/src/share/vm/runtime/frame.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/frame.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -413,19 +413,19 @@ // Oops-do's void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f); - void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true); + void oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, const RegisterMap* map, bool query_oop_map_cache = true); private: void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f); // Iteration of oops - void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); + void oops_do_internal(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); void oops_entry_do(OopClosure* f, const RegisterMap* map); void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map); int adjust_offset(Method* method, int index); // helper for above fn public: // Memory management - void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); } + void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cld_f, cf, map, true); } void nmethods_do(CodeBlobClosure* cf); // RedefineClasses support for finding live interpreted methods on the stack diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/handles.cpp --- a/src/share/vm/runtime/handles.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/handles.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -27,21 +27,18 @@ #include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" +#include "runtime/thread.inline.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif #ifdef ASSERT diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/handles.inline.hpp --- a/src/share/vm/runtime/handles.inline.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/handles.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #define SHARE_VM_RUNTIME_HANDLES_INLINE_HPP #include "runtime/handles.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // these inline functions are in a separate file to break an include cycle // between Thread and Handle diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/interfaceSupport.hpp --- a/src/share/vm/runtime/interfaceSupport.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/interfaceSupport.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -31,22 +31,11 @@ #include "runtime/orderAccess.hpp" #include "runtime/os.hpp" #include "runtime/safepoint.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/preserveException.hpp" #include "utilities/top.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Wrapper for all entry points to the virtual machine. // The HandleMarkCleaner is a faster version of HandleMark. diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/java.cpp --- a/src/share/vm/runtime/java.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/java.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -54,6 +54,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/statSampler.hpp" #include "runtime/task.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" #include "runtime/vm_operations.hpp" #include "services/memReporter.hpp" @@ -79,18 +80,6 @@ #ifdef TARGET_ARCH_ppc # include "vm_version_ppc.hpp" #endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" #include "gc_implementation/parallelScavenge/psScavenge.hpp" diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/javaCalls.cpp --- a/src/share/vm/runtime/javaCalls.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/javaCalls.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -39,18 +39,7 @@ #include "runtime/mutexLocker.hpp" #include "runtime/signature.hpp" #include "runtime/stubRoutines.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // ----------------------------------------------------- // Implementation of JavaCallWrapper diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/javaCalls.hpp --- a/src/share/vm/runtime/javaCalls.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/javaCalls.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -29,6 +29,7 @@ #include "oops/method.hpp" #include "runtime/handles.hpp" #include "runtime/javaFrameAnchor.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" #ifdef TARGET_ARCH_x86 # include "jniTypes_x86.hpp" @@ -45,18 +46,6 @@ #ifdef TARGET_ARCH_ppc # include "jniTypes_ppc.hpp" #endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // A JavaCallWrapper is constructed before each JavaCall and destructed after the call. // Its purpose is to allocate/deallocate a new handle block and to save/restore the last diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/jniHandles.cpp --- a/src/share/vm/runtime/jniHandles.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/jniHandles.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -28,18 +28,7 @@ #include "prims/jvmtiExport.hpp" #include "runtime/jniHandles.hpp" #include "runtime/mutexLocker.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" JNIHandleBlock* JNIHandles::_global_handles = NULL; diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/memprofiler.cpp --- a/src/share/vm/runtime/memprofiler.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/memprofiler.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -35,19 +35,8 @@ #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef PRODUCT diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/mutex.cpp --- a/src/share/vm/runtime/mutex.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/mutex.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,22 +26,19 @@ #include "precompiled.hpp" #include "runtime/mutex.hpp" #include "runtime/osThread.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/events.hpp" #ifdef TARGET_OS_FAMILY_linux # include "mutex_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "mutex_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "mutex_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "mutex_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif // o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/mutexLocker.cpp --- a/src/share/vm/runtime/mutexLocker.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/mutexLocker.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,20 +25,9 @@ #include "precompiled.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/safepoint.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/vmThread.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Mutexes used in the VM (see comment in mutexLocker.hpp): // diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/objectMonitor.cpp --- a/src/share/vm/runtime/objectMonitor.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/objectMonitor.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -34,25 +34,21 @@ #include "runtime/objectMonitor.inline.hpp" #include "runtime/osThread.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/thread.hpp" +#include "runtime/thread.inline.hpp" #include "services/threadService.hpp" #include "utilities/dtrace.hpp" #include "utilities/preserveException.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif #if defined(__GNUC__) && !defined(IA64) diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/os.cpp --- a/src/share/vm/runtime/os.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/os.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -44,6 +44,7 @@ #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "services/attachListener.hpp" #include "services/memTracker.hpp" #include "services/threadService.hpp" @@ -51,19 +52,15 @@ #include "utilities/events.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif # include diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/safepoint.cpp --- a/src/share/vm/runtime/safepoint.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/safepoint.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -48,6 +48,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/sweeper.hpp" #include "runtime/synchronizer.hpp" +#include "runtime/thread.inline.hpp" #include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "utilities/events.hpp" @@ -71,18 +72,6 @@ # include "nativeInst_ppc.hpp" # include "vmreg_ppc.inline.hpp" #endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" #include "gc_implementation/shared/concurrentGCThread.hpp" diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/synchronizer.cpp --- a/src/share/vm/runtime/synchronizer.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/synchronizer.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -36,24 +36,21 @@ #include "runtime/osThread.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/synchronizer.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/preserveException.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif #if defined(__GNUC__) && !defined(IA64) diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/task.cpp --- a/src/share/vm/runtime/task.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/task.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,22 +26,19 @@ #include "memory/allocation.hpp" #include "runtime/init.hpp" #include "runtime/task.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/timer.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif int PeriodicTask::_num_tasks = 0; diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/thread.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -65,6 +65,7 @@ #include "runtime/statSampler.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/task.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/vframe.hpp" @@ -83,19 +84,15 @@ #include "utilities/preserveException.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif #ifndef SERIALGC #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" @@ -826,7 +823,7 @@ return false; } -void Thread::oops_do(OopClosure* f, CodeBlobClosure* cf) { +void Thread::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { active_handles()->oops_do(f); // Do oop for ThreadShadow f->do_oop((oop*)&_pending_exception); @@ -2705,7 +2702,7 @@ } }; -void JavaThread::oops_do(OopClosure* f, CodeBlobClosure* cf) { +void JavaThread::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { // Verify that the deferred card marks have been flushed. assert(deferred_card_mark().is_empty(), "Should be empty during GC"); @@ -2713,7 +2710,7 @@ // since there may be more than one thread using each ThreadProfiler. // Traverse the GCHandles - Thread::oops_do(f, cf); + Thread::oops_do(f, cld_f, cf); assert( (!has_last_Java_frame() && java_call_counter() == 0) || (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!"); @@ -2741,7 +2738,7 @@ // Traverse the execution stack for(StackFrameStream fst(this); !fst.is_done(); fst.next()) { - fst.current()->oops_do(f, cf, fst.register_map()); + fst.current()->oops_do(f, cld_f, cf, fst.register_map()); } } @@ -2875,7 +2872,7 @@ void JavaThread::verify() { // Verify oops in the thread. - oops_do(&VerifyOopClosure::verify_oop, NULL); + oops_do(&VerifyOopClosure::verify_oop, NULL, NULL); // Verify the stack frames. frames_do(frame_verify); @@ -3125,7 +3122,7 @@ static void oops_print(frame* f, const RegisterMap *map) { PrintAndVerifyOopClosure print; f->print_value(); - f->oops_do(&print, NULL, (RegisterMap*)map); + f->oops_do(&print, NULL, NULL, (RegisterMap*)map); } // Print our all the locations that contain oops and whether they are @@ -3227,8 +3224,8 @@ #endif } -void CompilerThread::oops_do(OopClosure* f, CodeBlobClosure* cf) { - JavaThread::oops_do(f, cf); +void CompilerThread::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { + JavaThread::oops_do(f, cld_f, cf); if (_scanned_nmethod != NULL && cf != NULL) { // Safepoints can occur when the sweeper is scanning an nmethod so // process it here to make sure it isn't unloaded in the middle of @@ -3334,6 +3331,9 @@ jint os_init_2_result = os::init_2(); if (os_init_2_result != JNI_OK) return os_init_2_result; + jint adjust_after_os_result = Arguments::adjust_after_os(); + if (adjust_after_os_result != JNI_OK) return adjust_after_os_result; + // intialize TLS ThreadLocalStorage::init(); @@ -4198,14 +4198,14 @@ // uses the Threads_lock to gurantee this property. It also makes sure that // all threads gets blocked when exiting or starting). -void Threads::oops_do(OopClosure* f, CodeBlobClosure* cf) { +void Threads::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { ALL_JAVA_THREADS(p) { - p->oops_do(f, cf); + p->oops_do(f, cld_f, cf); } - VMThread::vm_thread()->oops_do(f, cf); + VMThread::vm_thread()->oops_do(f, cld_f, cf); } -void Threads::possibly_parallel_oops_do(OopClosure* f, CodeBlobClosure* cf) { +void Threads::possibly_parallel_oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { // Introduce a mechanism allowing parallel threads to claim threads as // root groups. Overhead should be small enough to use all the time, // even in sequential code. @@ -4222,12 +4222,12 @@ int cp = SharedHeap::heap()->strong_roots_parity(); ALL_JAVA_THREADS(p) { if (p->claim_oops_do(is_par, cp)) { - p->oops_do(f, cf); + p->oops_do(f, cld_f, cf); } } VMThread* vmt = VMThread::vm_thread(); if (vmt->claim_oops_do(is_par, cp)) { - vmt->oops_do(f, cf); + vmt->oops_do(f, cld_f, cf); } } diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/thread.hpp --- a/src/share/vm/runtime/thread.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/thread.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -480,8 +480,10 @@ // GC support // Apply "f->do_oop" to all root oops in "this". + // Apply "cld_f->do_cld" to CLDs that are otherwise not kept alive. + // Used by JavaThread::oops_do. // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames - virtual void oops_do(OopClosure* f, CodeBlobClosure* cf); + virtual void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); // Handles the parallel case for the method below. private: @@ -1405,7 +1407,7 @@ void frames_do(void f(frame*, const RegisterMap*)); // Memory operations - void oops_do(OopClosure* f, CodeBlobClosure* cf); + void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); // Sweeper operations void nmethods_do(CodeBlobClosure* cf); @@ -1825,7 +1827,7 @@ // GC support // Apply "f->do_oop" to all root oops in "this". // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames - void oops_do(OopClosure* f, CodeBlobClosure* cf); + void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); #ifndef PRODUCT private: @@ -1892,9 +1894,9 @@ // Apply "f->do_oop" to all root oops in all threads. // This version may only be called by sequential code. - static void oops_do(OopClosure* f, CodeBlobClosure* cf); + static void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); // This version may be called by sequential or parallel code. - static void possibly_parallel_oops_do(OopClosure* f, CodeBlobClosure* cf); + static void possibly_parallel_oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); // This creates a list of GCTasks, one per thread. static void create_thread_roots_tasks(GCTaskQueue* q); // This creates a list of GCTasks, one per thread, for marking objects. diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/thread.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/runtime/thread.inline.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP +#define SHARE_VM_RUNTIME_THREAD_INLINE_HPP + +#define SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE + +#include "runtime/thread.hpp" +#ifdef TARGET_OS_FAMILY_linux +# include "thread_linux.inline.hpp" +#endif +#ifdef TARGET_OS_FAMILY_solaris +# include "thread_solaris.inline.hpp" +#endif +#ifdef TARGET_OS_FAMILY_windows +# include "thread_windows.inline.hpp" +#endif +#ifdef TARGET_OS_FAMILY_bsd +# include "thread_bsd.inline.hpp" +#endif + +#undef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE + +#endif // SHARE_VM_RUNTIME_THREAD_INLINE_HPP diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/threadLocalStorage.cpp --- a/src/share/vm/runtime/threadLocalStorage.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/threadLocalStorage.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -23,22 +23,19 @@ */ #include "precompiled.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadLocalStorage.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif // static member initialization diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/vmStructs.cpp --- a/src/share/vm/runtime/vmStructs.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/vmStructs.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -95,6 +95,7 @@ #include "runtime/serviceThread.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/virtualspace.hpp" #include "runtime/vmStructs.hpp" #include "utilities/array.hpp" @@ -115,18 +116,6 @@ #ifdef TARGET_ARCH_ppc # include "vmStructs_ppc.hpp" #endif -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef TARGET_OS_ARCH_linux_x86 # include "vmStructs_linux_x86.hpp" #endif diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/vmThread.cpp --- a/src/share/vm/runtime/vmThread.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/vmThread.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -31,24 +31,13 @@ #include "runtime/interfaceSupport.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vmThread.hpp" #include "runtime/vm_operations.hpp" #include "services/runtimeService.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/xmlstream.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifndef USDT2 HS_DTRACE_PROBE_DECL3(hotspot, vmops__request, char *, uintptr_t, int); @@ -668,8 +657,8 @@ } -void VMThread::oops_do(OopClosure* f, CodeBlobClosure* cf) { - Thread::oops_do(f, cf); +void VMThread::oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf) { + Thread::oops_do(f, cld_f, cf); _vm_queue->oops_do(f); } @@ -701,5 +690,5 @@ #endif void VMThread::verify() { - oops_do(&VerifyOopClosure::verify_oop, NULL); + oops_do(&VerifyOopClosure::verify_oop, NULL, NULL); } diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/vmThread.hpp --- a/src/share/vm/runtime/vmThread.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/vmThread.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,19 +26,8 @@ #define SHARE_VM_RUNTIME_VMTHREAD_HPP #include "runtime/perfData.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vm_operations.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // // Prioritized queue of VM operations. @@ -137,7 +126,7 @@ static VMThread* vm_thread() { return _vm_thread; } // GC support - void oops_do(OopClosure* f, CodeBlobClosure* cf); + void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); // Debugging void print_on(outputStream* st) const; diff -r 59c790074993 -r c24f778e9401 src/share/vm/runtime/vm_operations.cpp --- a/src/share/vm/runtime/vm_operations.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/runtime/vm_operations.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -34,20 +34,9 @@ #include "runtime/deoptimization.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/sweeper.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vm_operations.hpp" #include "services/threadService.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #define VM_OP_NAME_INITIALIZE(name) #name, diff -r 59c790074993 -r c24f778e9401 src/share/vm/services/memTracker.hpp --- a/src/share/vm/services/memTracker.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/services/memTracker.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -109,10 +109,6 @@ #include "services/memSnapshot.hpp" #include "services/memTrackWorker.hpp" -#ifdef SOLARIS -#include "thread_solaris.inline.hpp" -#endif - extern bool NMT_track_callsite; #ifdef ASSERT diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/array.cpp --- a/src/share/vm/utilities/array.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/array.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,19 +24,8 @@ #include "precompiled.hpp" #include "memory/resourceArea.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/array.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef ASSERT diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/debug.cpp --- a/src/share/vm/utilities/debug.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/debug.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -44,6 +44,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stubCodeGenerator.hpp" #include "runtime/stubRoutines.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/vframe.hpp" #include "services/heapDumper.hpp" #include "utilities/defaultStream.hpp" @@ -52,19 +53,15 @@ #include "utilities/vmError.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" -# include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.inline.hpp" -# include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.inline.hpp" -# include "thread_windows.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd # include "os_bsd.inline.hpp" -# include "thread_bsd.inline.hpp" #endif #ifndef ASSERT diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/events.cpp --- a/src/share/vm/utilities/events.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/events.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,22 +26,11 @@ #include "memory/allocation.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/osThread.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/timer.hpp" #include "utilities/events.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif EventLog* Events::_logs = NULL; diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/exceptions.cpp --- a/src/share/vm/utilities/exceptions.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/exceptions.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -30,21 +30,10 @@ #include "runtime/init.hpp" #include "runtime/java.hpp" #include "runtime/javaCalls.hpp" +#include "runtime/thread.inline.hpp" #include "runtime/threadCritical.hpp" #include "utilities/events.hpp" #include "utilities/exceptions.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Implementation of ThreadShadow diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/growableArray.cpp --- a/src/share/vm/utilities/growableArray.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/growableArray.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -24,19 +24,9 @@ #include "precompiled.hpp" #include "memory/resourceArea.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/growableArray.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif + #ifdef ASSERT void GenericGrowableArray::set_nesting() { if (on_stack()) { diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/preserveException.hpp --- a/src/share/vm/utilities/preserveException.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/preserveException.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -26,18 +26,7 @@ #define SHARE_VM_UTILITIES_PRESERVEEXCEPTION_HPP #include "runtime/handles.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif +#include "runtime/thread.inline.hpp" // This file provides more support for exception handling; see also exceptions.hpp class PreserveExceptionMark { diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/taskqueue.cpp --- a/src/share/vm/utilities/taskqueue.cpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/taskqueue.cpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,21 +25,10 @@ #include "precompiled.hpp" #include "oops/oop.inline.hpp" #include "runtime/os.hpp" +#include "runtime/thread.inline.hpp" #include "utilities/debug.hpp" #include "utilities/stack.inline.hpp" #include "utilities/taskqueue.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif #ifdef TRACESPINNING uint ParallelTaskTerminator::_total_yields = 0; diff -r 59c790074993 -r c24f778e9401 src/share/vm/utilities/workgroup.hpp --- a/src/share/vm/utilities/workgroup.hpp Wed Nov 28 17:50:21 2012 -0500 +++ b/src/share/vm/utilities/workgroup.hpp Thu Nov 29 11:23:15 2012 -0800 @@ -25,19 +25,8 @@ #ifndef SHARE_VM_UTILITIES_WORKGROUP_HPP #define SHARE_VM_UTILITIES_WORKGROUP_HPP +#include "runtime/thread.inline.hpp" #include "utilities/taskqueue.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif // Task class hierarchy: // AbstractGangTask diff -r 59c790074993 -r c24f778e9401 test/runtime/8003720/Asmator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/runtime/8003720/Asmator.java Thu Nov 29 11:23:15 2012 -0800 @@ -0,0 +1,31 @@ +import com.sun.xml.internal.ws.org.objectweb.asm.*; + +class Asmator { + static byte[] fixup(byte[] buf) throws java.io.IOException { + ClassReader cr = new ClassReader(buf); + ClassWriter cw = new ClassWriter(0) { + public MethodVisitor visitMethod( + final int access, + final String name, + final String desc, + final String signature, + final String[] exceptions) + { + MethodVisitor mv = super.visitMethod(access, + name, + desc, + signature, + exceptions); + if (mv == null) return null; + if (name.equals("callme")) { + // make receiver go dead! + mv.visitInsn(Opcodes.ACONST_NULL); + mv.visitVarInsn(Opcodes.ASTORE, 0); + } + return mv; + } + }; + cr.accept(cw, 0); + return cw.toByteArray(); + } +} diff -r 59c790074993 -r c24f778e9401 test/runtime/8003720/Test8003720.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/runtime/8003720/Test8003720.java Thu Nov 29 11:23:15 2012 -0800 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2012, 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 8003720 + * @summary Method in interpreter stack frame can be deallocated + * @compile -XDignore.symbol.file Victim.java + * @run main/othervm -Xverify:all -Xint Test8003720 + */ + +// Attempts to make the JVM unload a class while still executing one of its methods. +public class Test8003720 { + final static String VICTIM_CLASS_NAME = "Victim"; + final static boolean QUIET = true; + final static long DURATION = 30000; + + public interface CallMe { void callme(); } + + public static void main(String... av) throws Throwable { + newVictimClassLoader(); + System.gc(); + + newVictimClass(); + System.gc(); + + newVictimInstance(); + System.gc(); + + ((CallMe)newVictimInstance()).callme(); + } + + public static Object newVictimInstance() throws Throwable { + return newVictimClass().newInstance(); + } + + public static Class newVictimClass() throws Throwable { + return Class.forName(VICTIM_CLASS_NAME, true, new VictimClassLoader()); + } + + public static ClassLoader newVictimClassLoader() throws Throwable { + return new VictimClassLoader(); + } + + public static void println(String line) { + if (!QUIET) { + System.out.println(line); + } + } +} diff -r 59c790074993 -r c24f778e9401 test/runtime/8003720/Victim.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/runtime/8003720/Victim.java Thu Nov 29 11:23:15 2012 -0800 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +public class Victim implements Test8003720.CallMe { + public void callme() { + // note: Victim.this is dead here + Test8003720.println("executing in loader=" + Victim.class.getClassLoader()); + + long now = System.currentTimeMillis(); + + while ((System.currentTimeMillis() - now) < Test8003720.DURATION) { + long count = VictimClassLoader.counter++; + if (count % 1000000 == 0) System.gc(); + if (count % 16180000 == 0) blurb(); + new Object[1].clone(); + } + } + static void blurb() { + Test8003720.println("count=" + VictimClassLoader.counter); + } + static { + blather(); + } + static void blather() { + new java.util.ArrayList(1000000); + Class c = Victim.class; + Test8003720.println("initializing " + c + "#" + System.identityHashCode(c) + " in " + c.getClassLoader()); + } +} diff -r 59c790074993 -r c24f778e9401 test/runtime/8003720/VictimClassLoader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/runtime/8003720/VictimClassLoader.java Thu Nov 29 11:23:15 2012 -0800 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +public class VictimClassLoader extends ClassLoader { + public static long counter = 0; + + private int which = (int) ++counter; + + protected VictimClassLoader() { + super(VictimClassLoader.class.getClassLoader()); + } + + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + Class c; + if (!name.endsWith("Victim")) { + c = super.loadClass(name, resolve); + return c; + } + + c = findLoadedClass(name); + if (c != null) { + return c; + } + + byte[] buf = readClassFile(name); + c = defineClass(name, buf, 0, buf.length); + resolveClass(c); + + if (c.getClassLoader() != this) { + throw new AssertionError(); + } + + Test8003720.println("loaded " + c + "#" + System.identityHashCode(c) + " in " + c.getClassLoader()); + return c; + } + + static byte[] readClassFile(String name) { + try { + String rname = name.substring(name.lastIndexOf('.') + 1) + ".class"; + java.net.URL url = VictimClassLoader.class.getResource(rname); + Test8003720.println("found " + rname + " = " + url); + + java.net.URLConnection connection = url.openConnection(); + int contentLength = connection.getContentLength(); + byte[] buf = readFully(connection.getInputStream(), contentLength); + + return Asmator.fixup(buf); + } catch (java.io.IOException ex) { + throw new Error(ex); + } + } + + static byte[] readFully(java.io.InputStream in, int len) throws java.io.IOException { + // Warning here: + return sun.misc.IOUtils.readFully(in, len, true); + } + + public void finalize() { + Test8003720.println("Goodbye from " + this); + } + + public String toString() { + return "VictimClassLoader#" + which; + } +}