Mercurial > hg > truffle
comparison src/share/vm/runtime/sharedRuntime.cpp @ 2405:3d58a4983660
7022998: JSR 292 recursive method handle calls inline themselves infinitely
Reviewed-by: never, kvn
author | twisti |
---|---|
date | Mon, 28 Mar 2011 03:58:07 -0700 |
parents | 1b4e6a5d98e0 |
children | 38fea01eb669 |
comparison
equal
deleted
inserted
replaced
2404:b40d4fa697bf | 2405:3d58a4983660 |
---|---|
2477 | 2477 |
2478 // Create a native wrapper for this native method. The wrapper converts the | 2478 // Create a native wrapper for this native method. The wrapper converts the |
2479 // java compiled calling convention to the native convention, handlizes | 2479 // java compiled calling convention to the native convention, handlizes |
2480 // arguments, and transitions to native. On return from the native we transition | 2480 // arguments, and transitions to native. On return from the native we transition |
2481 // back to java blocking if a safepoint is in progress. | 2481 // back to java blocking if a safepoint is in progress. |
2482 nmethod *AdapterHandlerLibrary::create_native_wrapper(methodHandle method) { | 2482 nmethod *AdapterHandlerLibrary::create_native_wrapper(methodHandle method, int compile_id) { |
2483 ResourceMark rm; | 2483 ResourceMark rm; |
2484 nmethod* nm = NULL; | 2484 nmethod* nm = NULL; |
2485 | |
2486 if (PrintCompilation) { | |
2487 ttyLocker ttyl; | |
2488 tty->print("--- n%s ", (method->is_synchronized() ? "s" : " ")); | |
2489 method->print_short_name(tty); | |
2490 if (method->is_static()) { | |
2491 tty->print(" (static)"); | |
2492 } | |
2493 tty->cr(); | |
2494 } | |
2495 | 2485 |
2496 assert(method->has_native_function(), "must have something valid to call!"); | 2486 assert(method->has_native_function(), "must have something valid to call!"); |
2497 | 2487 |
2498 { | 2488 { |
2499 // perform the work while holding the lock, but perform any printing outside the lock | 2489 // perform the work while holding the lock, but perform any printing outside the lock |
2535 comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false); | 2525 comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false); |
2536 | 2526 |
2537 // Generate the compiled-to-native wrapper code | 2527 // Generate the compiled-to-native wrapper code |
2538 nm = SharedRuntime::generate_native_wrapper(&_masm, | 2528 nm = SharedRuntime::generate_native_wrapper(&_masm, |
2539 method, | 2529 method, |
2530 compile_id, | |
2540 total_args_passed, | 2531 total_args_passed, |
2541 comp_args_on_stack, | 2532 comp_args_on_stack, |
2542 sig_bt,regs, | 2533 sig_bt,regs, |
2543 ret_type); | 2534 ret_type); |
2544 } | 2535 } |
2546 | 2537 |
2547 // Must unlock before calling set_code | 2538 // Must unlock before calling set_code |
2548 | 2539 |
2549 // Install the generated code. | 2540 // Install the generated code. |
2550 if (nm != NULL) { | 2541 if (nm != NULL) { |
2542 if (PrintCompilation) { | |
2543 ttyLocker ttyl; | |
2544 CompileTask::print_compilation(tty, nm, method->is_static() ? "(static)" : ""); | |
2545 } | |
2551 method->set_code(method, nm); | 2546 method->set_code(method, nm); |
2552 nm->post_compiled_method_load_event(); | 2547 nm->post_compiled_method_load_event(); |
2553 } else { | 2548 } else { |
2554 // CodeCache is full, disable compilation | 2549 // CodeCache is full, disable compilation |
2555 CompileBroker::handle_full_code_cache(); | 2550 CompileBroker::handle_full_code_cache(); |