1 /* |
1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2013, 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. |
235 assert(result == NULL || result->is_oop(), "must be oop"); |
235 assert(result == NULL || result->is_oop(), "must be oop"); |
236 return_value = Handle(thread, result); |
236 return_value = Handle(thread, result); |
237 assert(Universe::heap()->is_in_or_null(result), "must be heap pointer"); |
237 assert(Universe::heap()->is_in_or_null(result), "must be heap pointer"); |
238 if (TraceDeoptimization) { |
238 if (TraceDeoptimization) { |
239 ttyLocker ttyl; |
239 ttyLocker ttyl; |
240 tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, result, thread); |
240 tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, (void *)result, thread); |
241 } |
241 } |
242 } |
242 } |
243 bool reallocated = false; |
243 bool reallocated = false; |
244 if (objects != NULL) { |
244 if (objects != NULL) { |
245 JRT_BLOCK |
245 JRT_BLOCK |
978 for (int i = 0; i < objects->length(); i++) { |
978 for (int i = 0; i < objects->length(); i++) { |
979 ObjectValue* sv = (ObjectValue*) objects->at(i); |
979 ObjectValue* sv = (ObjectValue*) objects->at(i); |
980 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); |
980 KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); |
981 Handle obj = sv->value(); |
981 Handle obj = sv->value(); |
982 |
982 |
983 tty->print(" object <" INTPTR_FORMAT "> of type ", sv->value()()); |
983 tty->print(" object <" INTPTR_FORMAT "> of type ", (void *)sv->value()()); |
984 k->print_value(); |
984 k->print_value(); |
985 tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize); |
985 tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize); |
986 tty->cr(); |
986 tty->cr(); |
987 |
987 |
988 if (Verbose) { |
988 if (Verbose) { |
1752 int Deoptimization::trap_state_set_recompiled(int trap_state, bool z) { |
1752 int Deoptimization::trap_state_set_recompiled(int trap_state, bool z) { |
1753 if (z) return trap_state | DS_RECOMPILE_BIT; |
1753 if (z) return trap_state | DS_RECOMPILE_BIT; |
1754 else return trap_state & ~DS_RECOMPILE_BIT; |
1754 else return trap_state & ~DS_RECOMPILE_BIT; |
1755 } |
1755 } |
1756 //---------------------------format_trap_state--------------------------------- |
1756 //---------------------------format_trap_state--------------------------------- |
1757 // This is used for debugging and diagnostics, including hotspot.log output. |
1757 // This is used for debugging and diagnostics, including LogFile output. |
1758 const char* Deoptimization::format_trap_state(char* buf, size_t buflen, |
1758 const char* Deoptimization::format_trap_state(char* buf, size_t buflen, |
1759 int trap_state) { |
1759 int trap_state) { |
1760 DeoptReason reason = trap_state_reason(trap_state); |
1760 DeoptReason reason = trap_state_reason(trap_state); |
1761 bool recomp_flag = trap_state_is_recompiled(trap_state); |
1761 bool recomp_flag = trap_state_is_recompiled(trap_state); |
1762 // Re-encode the state from its decoded components. |
1762 // Re-encode the state from its decoded components. |
1829 static char buf[20]; |
1829 static char buf[20]; |
1830 sprintf(buf, "action%d", action); |
1830 sprintf(buf, "action%d", action); |
1831 return buf; |
1831 return buf; |
1832 } |
1832 } |
1833 |
1833 |
1834 // This is used for debugging and diagnostics, including hotspot.log output. |
1834 // This is used for debugging and diagnostics, including LogFile output. |
1835 const char* Deoptimization::format_trap_request(char* buf, size_t buflen, |
1835 const char* Deoptimization::format_trap_request(char* buf, size_t buflen, |
1836 int trap_request) { |
1836 int trap_request) { |
1837 jint unloaded_class_index = trap_request_index(trap_request); |
1837 jint unloaded_class_index = trap_request_index(trap_request); |
1838 const char* reason = trap_reason_name(trap_request_reason(trap_request)); |
1838 const char* reason = trap_reason_name(trap_request_reason(trap_request)); |
1839 const char* action = trap_action_name(trap_request_action(trap_request)); |
1839 const char* action = trap_action_name(trap_request_action(trap_request)); |