Interp.h revision 96516932f1557d8f48a8b2dbbb885af01a11ef6e
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1696516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Dalvik interpreter public definitions. 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#ifndef _DALVIK_INTERP_INTERP 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#define _DALVIK_INTERP_INTERP 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interpreter entry point. Call here after setting up the interpreted 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stack (most code will want to get here via dvmCallMethod().) 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmInterpret(Thread* thread, const Method* method, JValue* pResult); 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 303a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden * Throw an exception for a problem detected by the verifier. 31b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * 32b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * This is called from the handler for the throw-verification-error 33b51ea11c70602918c42764bfafe92a997d3b1803Andy McFadden * instruction. "method" is the method currently being executed. 343a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden */ 35b51ea11c70602918c42764bfafe92a997d3b1803Andy McFaddenvoid dvmThrowVerificationError(const Method* method, int kind, int ref); 363a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden 373a1aedbc9777eab6275a360b93b81b079464238eAndy McFadden/* 3896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * One-time initialization and shutdown. 3996516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden */ 4096516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenbool dvmBreakpointStartup(void); 4196516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenvoid dvmBreakpointShutdown(void); 4296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden 4396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* 4496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * Breakpoint implementation. 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmInitBreakpoints(); 4796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenvoid dvmAddBreakAddr(Method* method, unsigned int instrOffset); 4896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenvoid dvmClearBreakAddr(Method* method, unsigned int instrOffset); 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmAddSingleStep(Thread* thread, int size, int depth); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmClearSingleStep(Thread* thread); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden#ifdef WITH_DEBUGGER 5396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* 5496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * Recover the opcode that was replaced by a breakpoint. 5596516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden */ 5696516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenu1 dvmGetOriginalOpCode(const u2* addr); 5796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden 5896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* 5996516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * Temporarily "undo" any breakpoints set in a specific method. Used 6096516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * during verification. 6196516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * 6296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * Locks the breakpoint set, and leaves it locked. 6396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden */ 6496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenvoid dvmUndoBreakpoints(Method* method); 6596516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden 6696516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden/* 6796516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * "Redo" the breakpoints cleared by a previous "undo", re-inserting the 6896516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * breakpoint opcodes and updating the "original opcode" values. 6996516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * 7096516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden * Unlocks the breakpoint set, which must be held by a previous "undo". 7196516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden */ 7296516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFaddenvoid dvmRedoBreakpoints(Method* method); 7396516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden#endif 7496516932f1557d8f48a8b2dbbb885af01a11ef6eAndy McFadden 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif /*_DALVIK_INTERP_INTERP*/ 76