• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
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
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 #ifndef JDWP_STEPCONTROL_H
27 #define JDWP_STEPCONTROL_H
28 
29 #include "eventFilter.h"
30 #include "eventHandler.h"
31 
32 typedef struct {
33     /* Parameters */
34     jint granularity;
35     jint depth;
36 
37     /* State */
38     jboolean pending;
39     jboolean frameExited;    /* for depth == STEP_OVER or STEP_OUT */
40     jboolean fromNative;
41     jint fromStackDepth;     /* for all but STEP_INTO STEP_INSTRUCTION */
42     jint fromLine;           /* for granularity == STEP_LINE */
43     jmethodID method;   /* Where line table came from. */
44     jvmtiLineNumberEntry *lineEntries;       /* STEP_LINE */
45     jint lineEntryCount;     /* for granularity == STEP_LINE */
46 
47     HandlerNode *stepHandlerNode;
48     HandlerNode *catchHandlerNode;
49     HandlerNode *framePopHandlerNode;
50     HandlerNode *methodEnterHandlerNode;
51 } StepRequest;
52 
53 
54 void stepControl_initialize(void);
55 void stepControl_reset(void);
56 
57 jboolean stepControl_handleStep(JNIEnv *env, jthread thread,
58                                 jclass clazz, jmethodID method);
59 
60 jvmtiError stepControl_beginStep(JNIEnv *env, jthread thread,
61                                 jint size, jint depth, HandlerNode *node);
62 jvmtiError stepControl_endStep(jthread thread);
63 
64 void stepControl_clearRequest(jthread thread, StepRequest *step);
65 void stepControl_resetRequest(jthread thread);
66 
67 void stepControl_lock(void);
68 void stepControl_unlock(void);
69 
70 #endif
71