9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "jvm.h" 27 #include "code/codeCache.hpp" 28 #include "code/compiledIC.hpp" 29 #include "code/dependencies.hpp" 30 #include "code/nativeInst.hpp" 31 #include "code/nmethod.hpp" 32 #include "code/scopeDesc.hpp" 33 #include "compiler/abstractCompiler.hpp" 34 #include "compiler/compileBroker.hpp" 35 #include "compiler/compileLog.hpp" 36 #include "compiler/compilerDirectives.hpp" 37 #include "compiler/directivesParser.hpp" 38 #include "compiler/disassembler.hpp" 39 #include "gc/shared/gcLocker.hpp" 40 #include "interpreter/bytecode.hpp" 41 #include "logging/log.hpp" 42 #include "logging/logStream.hpp" 43 #include "memory/resourceArea.hpp" 44 #include "oops/method.inline.hpp" 45 #include "oops/methodData.hpp" 46 #include "oops/oop.inline.hpp" 47 #include "prims/jvmtiImpl.hpp" 48 #include "runtime/atomic.hpp" 49 #include "runtime/jniHandles.inline.hpp" 50 #include "runtime/orderAccess.inline.hpp" 51 #include "runtime/os.hpp" 52 #include "runtime/sharedRuntime.hpp" 53 #include "runtime/sweeper.hpp" 54 #include "utilities/align.hpp" 55 #include "utilities/dtrace.hpp" 56 #include "utilities/events.hpp" 57 #include "utilities/resourceHash.hpp" 58 #include "utilities/xmlstream.hpp" 59 #if INCLUDE_JVMCI 60 #include "jvmci/jvmciJavaClasses.hpp" 61 #endif 62 63 #ifdef DTRACE_ENABLED 64 65 // Only bother with this argument setup if dtrace is available 66 67 #define DTRACE_METHOD_UNLOAD_PROBE(method) \ 68 { \ 69 Method* m = (method); \ 70 if (m != NULL) { \ 71 Symbol* klass_name = m->klass_name(); \ 72 Symbol* name = m->name(); \ 73 Symbol* signature = m->signature(); \ 362 // of oopSize, then 2*sizeof(PcDesc) is) 363 static int adjust_pcs_size(int pcs_size) { 364 int nsize = align_up(pcs_size, oopSize); 365 if ((nsize % sizeof(PcDesc)) != 0) { 366 nsize = pcs_size + sizeof(PcDesc); 367 } 368 assert((nsize % oopSize) == 0, "correct alignment"); 369 return nsize; 370 } 371 372 373 int nmethod::total_size() const { 374 return 375 consts_size() + 376 insts_size() + 377 stub_size() + 378 scopes_data_size() + 379 scopes_pcs_size() + 380 handler_table_size() + 381 nul_chk_table_size(); 382 } 383 384 const char* nmethod::compile_kind() const { 385 if (is_osr_method()) return "osr"; 386 if (method() != NULL && is_native_method()) return "c2n"; 387 return NULL; 388 } 389 390 // Fill in default values for various flag fields 391 void nmethod::init_defaults() { 392 _state = not_installed; 393 _has_flushed_dependencies = 0; 394 _lock_count = 0; 395 _stack_traversal_mark = 0; 396 _unload_reported = false; // jvmti state 397 _is_far_code = false; // nmethods are located in CodeCache 398 399 #ifdef ASSERT 400 _oops_are_stale = false; 401 #endif | 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "jvm.h" 27 #include "code/codeCache.hpp" 28 #include "code/compiledIC.hpp" 29 #include "code/compiledMethod.inline.hpp" 30 #include "code/dependencies.hpp" 31 #include "code/nativeInst.hpp" 32 #include "code/nmethod.hpp" 33 #include "code/scopeDesc.hpp" 34 #include "compiler/abstractCompiler.hpp" 35 #include "compiler/compileBroker.hpp" 36 #include "compiler/compileLog.hpp" 37 #include "compiler/compilerDirectives.hpp" 38 #include "compiler/directivesParser.hpp" 39 #include "compiler/disassembler.hpp" 40 #include "gc/shared/gcLocker.hpp" 41 #include "interpreter/bytecode.hpp" 42 #include "logging/log.hpp" 43 #include "logging/logStream.hpp" 44 #include "memory/allocation.inline.hpp" 45 #include "memory/resourceArea.hpp" 46 #include "oops/method.inline.hpp" 47 #include "oops/methodData.hpp" 48 #include "oops/oop.inline.hpp" 49 #include "prims/jvmtiImpl.hpp" 50 #include "runtime/atomic.hpp" 51 #include "runtime/frame.inline.hpp" 52 #include "runtime/handles.inline.hpp" 53 #include "runtime/jniHandles.inline.hpp" 54 #include "runtime/orderAccess.inline.hpp" 55 #include "runtime/os.hpp" 56 #include "runtime/sharedRuntime.hpp" 57 #include "runtime/sweeper.hpp" 58 #include "runtime/vmThread.hpp" 59 #include "utilities/align.hpp" 60 #include "utilities/dtrace.hpp" 61 #include "utilities/events.hpp" 62 #include "utilities/resourceHash.hpp" 63 #include "utilities/xmlstream.hpp" 64 #if INCLUDE_JVMCI 65 #include "jvmci/jvmciJavaClasses.hpp" 66 #endif 67 68 #ifdef DTRACE_ENABLED 69 70 // Only bother with this argument setup if dtrace is available 71 72 #define DTRACE_METHOD_UNLOAD_PROBE(method) \ 73 { \ 74 Method* m = (method); \ 75 if (m != NULL) { \ 76 Symbol* klass_name = m->klass_name(); \ 77 Symbol* name = m->name(); \ 78 Symbol* signature = m->signature(); \ 367 // of oopSize, then 2*sizeof(PcDesc) is) 368 static int adjust_pcs_size(int pcs_size) { 369 int nsize = align_up(pcs_size, oopSize); 370 if ((nsize % sizeof(PcDesc)) != 0) { 371 nsize = pcs_size + sizeof(PcDesc); 372 } 373 assert((nsize % oopSize) == 0, "correct alignment"); 374 return nsize; 375 } 376 377 378 int nmethod::total_size() const { 379 return 380 consts_size() + 381 insts_size() + 382 stub_size() + 383 scopes_data_size() + 384 scopes_pcs_size() + 385 handler_table_size() + 386 nul_chk_table_size(); 387 } 388 389 address* nmethod::orig_pc_addr(const frame* fr) { 390 return (address*) ((address)fr->unextended_sp() + _orig_pc_offset); 391 } 392 393 const char* nmethod::compile_kind() const { 394 if (is_osr_method()) return "osr"; 395 if (method() != NULL && is_native_method()) return "c2n"; 396 return NULL; 397 } 398 399 // Fill in default values for various flag fields 400 void nmethod::init_defaults() { 401 _state = not_installed; 402 _has_flushed_dependencies = 0; 403 _lock_count = 0; 404 _stack_traversal_mark = 0; 405 _unload_reported = false; // jvmti state 406 _is_far_code = false; // nmethods are located in CodeCache 407 408 #ifdef ASSERT 409 _oops_are_stale = false; 410 #endif |