• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /*
17  * Handle registration of events, and debugger event notification.
18  */
19 #ifndef DALVIK_JDWP_JDWPEVENT_H_
20 #define DALVIK_JDWP_JDWPEVENT_H_
21 
22 #include "JdwpConstants.h"
23 #include "ExpandBuf.h"
24 
25 /*
26  * Event modifiers.  A JdwpEvent may have zero or more of these.
27  */
28 union JdwpEventMod {
29     u1      modKind;                /* JdwpModKind */
30     struct {
31         u1          modKind;
32         int         count;
33     } count;
34     struct {
35         u1          modKind;
36         u4          exprId;
37     } conditional;
38     struct {
39         u1          modKind;
40         ObjectId    threadId;
41     } threadOnly;
42     struct {
43         u1          modKind;
44         RefTypeId   refTypeId;
45     } classOnly;
46     struct {
47         u1          modKind;
48         char*       classPattern;
49     } classMatch;
50     struct {
51         u1          modKind;
52         char*       classPattern;
53     } classExclude;
54     struct {
55         u1          modKind;
56         JdwpLocation loc;
57     } locationOnly;
58     struct {
59         u1          modKind;
60         u1          caught;
61         u1          uncaught;
62         RefTypeId   refTypeId;
63     } exceptionOnly;
64     struct {
65         u1          modKind;
66         RefTypeId   refTypeId;
67         FieldId     fieldId;
68     } fieldOnly;
69     struct {
70         u1          modKind;
71         ObjectId    threadId;
72         int         size;           /* JdwpStepSize */
73         int         depth;          /* JdwpStepDepth */
74     } step;
75     struct {
76         u1          modKind;
77         ObjectId    objectId;
78     } instanceOnly;
79 };
80 
81 /*
82  * One of these for every registered event.
83  *
84  * We over-allocate the struct to hold the modifiers.
85  */
86 struct JdwpEvent {
87     JdwpEvent* prev;           /* linked list */
88     JdwpEvent* next;
89 
90     JdwpEventKind eventKind;      /* what kind of event is this? */
91     JdwpSuspendPolicy suspendPolicy;  /* suspend all, none, or self? */
92     int modCount;       /* #of entries in mods[] */
93     u4 requestId;      /* serial#, reported to debugger */
94 
95     JdwpEventMod mods[1];        /* MUST be last field in struct */
96 };
97 
98 /*
99  * Allocate an event structure with enough space.
100  */
101 JdwpEvent* dvmJdwpEventAlloc(int numMods);
102 void dvmJdwpEventFree(JdwpEvent* pEvent);
103 
104 /*
105  * Register an event by adding it to the event list.
106  *
107  * "*pEvent" must be storage allocated with jdwpEventAlloc().  The caller
108  * may discard its pointer after calling this.
109  */
110 JdwpError dvmJdwpRegisterEvent(JdwpState* state, JdwpEvent* pEvent);
111 
112 /*
113  * Unregister an event, given the requestId.
114  */
115 void dvmJdwpUnregisterEventById(JdwpState* state, u4 requestId);
116 
117 /*
118  * Unregister all events.
119  */
120 void dvmJdwpUnregisterAll(JdwpState* state);
121 
122 /*
123  * Send an event, formatted into "pReq", to the debugger.
124  *
125  * (Messages are sent asynchronously, and do not receive a reply.)
126  */
127 bool dvmJdwpSendRequest(JdwpState* state, ExpandBuf* pReq);
128 
129 #endif  // DALVIK_JDWP_JDWPEVENT_H_
130