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