1 /* |
1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
882 methodDataOop mdo = method->method_data(); |
882 methodDataOop mdo = method->method_data(); |
883 if (mdo == NULL) return 0; |
883 if (mdo == NULL) return 0; |
884 return mdo->bci_to_di(bci); |
884 return mdo->bci_to_di(bci); |
885 IRT_END |
885 IRT_END |
886 |
886 |
887 IRT_ENTRY(jint, InterpreterRuntime::profile_method(JavaThread* thread, address cur_bcp)) |
887 IRT_ENTRY(void, InterpreterRuntime::profile_method(JavaThread* thread)) |
888 // use UnlockFlagSaver to clear and restore the _do_not_unlock_if_synchronized |
888 // use UnlockFlagSaver to clear and restore the _do_not_unlock_if_synchronized |
889 // flag, in case this method triggers classloading which will call into Java. |
889 // flag, in case this method triggers classloading which will call into Java. |
890 UnlockFlagSaver fs(thread); |
890 UnlockFlagSaver fs(thread); |
891 |
891 |
892 assert(ProfileInterpreter, "must be profiling interpreter"); |
892 assert(ProfileInterpreter, "must be profiling interpreter"); |
893 frame fr = thread->last_frame(); |
893 frame fr = thread->last_frame(); |
894 assert(fr.is_interpreted_frame(), "must come from interpreter"); |
894 assert(fr.is_interpreted_frame(), "must come from interpreter"); |
895 methodHandle method(thread, fr.interpreter_frame_method()); |
895 methodHandle method(thread, fr.interpreter_frame_method()); |
896 int bci = method->bci_from(cur_bcp); |
|
897 methodOopDesc::build_interpreter_method_data(method, THREAD); |
896 methodOopDesc::build_interpreter_method_data(method, THREAD); |
898 if (HAS_PENDING_EXCEPTION) { |
897 if (HAS_PENDING_EXCEPTION) { |
899 assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here"); |
898 assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here"); |
900 CLEAR_PENDING_EXCEPTION; |
899 CLEAR_PENDING_EXCEPTION; |
901 // and fall through... |
900 // and fall through... |
902 } |
901 } |
903 methodDataOop mdo = method->method_data(); |
|
904 if (mdo == NULL) return 0; |
|
905 return mdo->bci_to_di(bci); |
|
906 IRT_END |
902 IRT_END |
907 |
903 |
908 |
904 |
909 #ifdef ASSERT |
905 #ifdef ASSERT |
910 IRT_LEAF(void, InterpreterRuntime::verify_mdp(methodOopDesc* method, address bcp, address mdp)) |
906 IRT_LEAF(void, InterpreterRuntime::verify_mdp(methodOopDesc* method, address bcp, address mdp)) |