debugInfoRec.hpp revision 1879
1879N/A * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1472N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A//** The DebugInformationRecorder collects debugging information 0N/A// for a compiled method. 0N/A// Debugging information is used for: 0N/A// - garbage collecting compiled frames 0N/A// - stack tracing across compiled frames 0N/A// - deoptimizating compiled frames 0N/A// The implementation requires the compiler to use the recorder 0N/A// in the following order: 0N/A// 1) Describe debug information for safepoints at increasing addresses. 0N/A// a) Add safepoint entry (use add_safepoint or add_non_safepoint) 0N/A// b) Describe scopes for that safepoint 0N/A// - create locals if needed (use create_scope_values) 0N/A// - create expressions if needed (use create_scope_values) 0N/A// - create monitor stack if needed (use create_monitor_values) 0N/A// - describe scope (use describe_scope) 0N/A// "repeat last four steps for all scopes" 0N/A// "outer most scope first and inner most scope last" 0N/A// NB: nodes from create_scope_values and create_locations 0N/A// can be reused for simple sharing. 0N/A// - mark the end of the scopes (end_safepoint or end_non_safepoint) 0N/A// 2) Use oop_size, data_size, pcs_size to create the nmethod and 0N/A// finally migrate the debugging information into the nmethod 0N/A// by calling copy_to. 0N/A // - GrowableArray<ScopeValue*> 0N/A // - GrowableArray<MonitorValue*> 0N/A// Alias for InvocationEntryBci. 0N/A// Both constants are used for a pseudo-BCI which refers 0N/A// to the state just _before_ a method is entered. 0N/A// SynchronizationEntryBCI is used where the emphasis 0N/A// is on the implicit monitorenter of a synchronized method. 0N/Aclass DIR_Chunk;
// private class, a nugget of collected information 0N/A // adds an oopmap at a specific offset 0N/A // adds a jvm mapping at pc-offset, for a safepoint only 0N/A // adds a jvm mapping at pc-offset, for a non-safepoint (profile point) 0N/A // Describes debugging information for a scope at the given pc_offset. 0N/A // Calls must be in non-decreasing order of pc_offset. 0N/A // If there are several calls at a single pc_offset, 0N/A // then they occur in the same order as they were performed by the JVM, 0N/A // with the most recent (innermost) call being described last. 0N/A // For a safepoint, the pc_offset must have been mentioned 0N/A // previously by add_safepoint. 0N/A // Otherwise, the pc_offset must have been mentioned previously 0N/A // by add_non_safepoint, and the locals, expressions, and monitors 0N/A // must all be null. 0N/A // This call must follow every add_safepoint, 0N/A // after any intervening describe_scope calls. 0N/A // helper fuctions for describe_scope to enable sharing 0N/A // returns the size of the generated scopeDescs. 0N/A // copy the generated debugging information to nmethod 0N/A // verifies the debug information 0N/A // Method for setting oopmaps to temporarily preserve old handling of oopmaps 0N/A // True if we are recording non-safepoint scopes. 0N/A // This flag is set if DebugNonSafepoints is true, or if 0N/A // JVMTI post_compiled_method_load events are enabled. 0N/A // Scopes that have been described so far. 0N/A // Note: Would use GrowableArray<PcDesc>, but structs are not supported. 0N/A // PC of most recent real safepoint before the current one, 0N/A // updated after end_scopes. 1879N/A#
endif // SHARE_VM_CODE_DEBUGINFOREC_HPP