VirtualBox

source: vbox/trunk/src/VBox/Debugger/DBGCInternal.h@ 84175

Last change on this file since 84175 was 83088, checked in by vboxsync, 5 years ago

DBGC: Added multistep command.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.7 KB
Line 
1/* $Id: DBGCInternal.h 83088 2020-02-16 20:12:37Z vboxsync $ */
2/** @file
3 * DBGC - Debugger Console, Internal Header File.
4 */
5
6/*
7 * Copyright (C) 2006-2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef DEBUGGER_INCLUDED_SRC_DBGCInternal_h
19#define DEBUGGER_INCLUDED_SRC_DBGCInternal_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24
25/*******************************************************************************
26* Header Files *
27*******************************************************************************/
28#include <VBox/dbg.h>
29#include <VBox/err.h>
30
31
32/*******************************************************************************
33* Structures and Typedefs *
34*******************************************************************************/
35
36/**
37 * Debugger console per breakpoint data.
38 */
39typedef struct DBGCBP
40{
41 /** Pointer to the next breakpoint in the list. */
42 struct DBGCBP *pNext;
43 /** The breakpoint identifier. */
44 uint32_t iBp;
45 /** The size of the command. */
46 size_t cchCmd;
47 /** The command to execute when the breakpoint is hit. */
48 char szCmd[1];
49} DBGCBP;
50/** Pointer to a breakpoint. */
51typedef DBGCBP *PDBGCBP;
52
53
54typedef enum DBGCEVTSTATE
55{
56 kDbgcEvtState_Invalid = 0,
57 kDbgcEvtState_Disabled,
58 kDbgcEvtState_Enabled,
59 kDbgcEvtState_Notify
60} DBGCEVTSTATE;
61
62/**
63 * Debugger console per event configuration.
64 */
65typedef struct DBGCEVTCFG
66{
67 /** The event state. */
68 DBGCEVTSTATE enmState;
69 /** The size of the command. */
70 size_t cchCmd;
71 /** The command to execute when the event occurs. */
72 char szCmd[1];
73} DBGCEVTCFG;
74/** Pointer to a event configuration. */
75typedef DBGCEVTCFG *PDBGCEVTCFG;
76/** Pointer to a const event configuration. */
77typedef DBGCEVTCFG const *PCDBGCEVTCFG;
78
79
80/**
81 * Named variable.
82 *
83 * Always allocated from heap in one single block.
84 */
85typedef struct DBGCNAMEDVAR
86{
87 /** The variable. */
88 DBGCVAR Var;
89 /** Its name. */
90 char szName[1];
91} DBGCNAMEDVAR;
92/** Pointer to named variable. */
93typedef DBGCNAMEDVAR *PDBGCNAMEDVAR;
94
95
96/**
97 * Debugger console status
98 */
99typedef enum DBGCSTATUS
100{
101 /** Normal status, .*/
102 DBGC_HALTED
103
104} DBGCSTATUS;
105
106
107/**
108 * Debugger console instance data.
109 */
110typedef struct DBGC
111{
112 /** Command helpers. */
113 DBGCCMDHLP CmdHlp;
114 /** Wrappers for DBGF output. */
115 DBGFINFOHLP DbgfOutputHlp;
116 /** Pointer to backend callback structure. */
117 PDBGCBACK pBack;
118
119 /** Pointer to the current VM. */
120 PVM pVM;
121 /** The user mode handle of the current VM. */
122 PUVM pUVM;
123 /** The ID of current virtual CPU. */
124 VMCPUID idCpu;
125 /** The current address space handle. */
126 RTDBGAS hDbgAs;
127 /** The current debugger emulation. */
128 const char *pszEmulation;
129 /** Pointer to the commands for the current debugger emulation. */
130 PCDBGCCMD paEmulationCmds;
131 /** The number of commands paEmulationCmds points to. */
132 uint32_t cEmulationCmds;
133 /** Pointer to the functions for the current debugger emulation. */
134 PCDBGCFUNC paEmulationFuncs;
135 /** The number of functions paEmulationFuncs points to. */
136 uint32_t cEmulationFuncs;
137 /** Log indicator. (If set we're writing the log to the console.) */
138 bool fLog;
139
140 /** Counter use to suppress the printing of the headers. */
141 uint8_t cPagingHierarchyDumps;
142 /** Indicates whether the register are terse or sparse. */
143 bool fRegTerse;
144
145 /** @name Stepping
146 * @{ */
147 /** Whether to display registers when tracing. */
148 bool fStepTraceRegs;
149 /** Number of multi-steps left, zero if not multi-stepping. */
150 uint32_t cMultiStepsLeft;
151 /** The multi-step stride length. */
152 uint32_t uMultiStepStrideLength;
153 /** The active multi-step command. */
154 PCDBGCCMD pMultiStepCmd;
155 /** @} */
156
157 /** Current disassembler position. */
158 DBGCVAR DisasmPos;
159 /** The flags that goes with DisasmPos. */
160 uint32_t fDisasm;
161 /** Current source position. (flat GC) */
162 DBGCVAR SourcePos;
163 /** Current memory dump position. */
164 DBGCVAR DumpPos;
165 /** Size of the previous dump element. */
166 unsigned cbDumpElement;
167 /** Points to DisasmPos, SourcePos or DumpPos depending on which was
168 * used last. */
169 PCDBGCVAR pLastPos;
170
171 /** Number of variables in papVars. */
172 unsigned cVars;
173 /** Array of global variables.
174 * Global variables can be referenced using the $ operator and set
175 * and unset using command with those names. */
176 PDBGCNAMEDVAR *papVars;
177
178 /** The list of breakpoints. (singly linked) */
179 PDBGCBP pFirstBp;
180
181 /** Software interrupt events. */
182 PDBGCEVTCFG apSoftInts[256];
183 /** Hardware interrupt events. */
184 PDBGCEVTCFG apHardInts[256];
185 /** Selectable events (first few entries are unused). */
186 PDBGCEVTCFG apEventCfgs[DBGFEVENT_END];
187
188 /** Save search pattern. */
189 uint8_t abSearch[256];
190 /** The length of the search pattern. */
191 uint32_t cbSearch;
192 /** The search unit */
193 uint32_t cbSearchUnit;
194 /** The max hits. */
195 uint64_t cMaxSearchHits;
196 /** The address to resume searching from. */
197 DBGFADDRESS SearchAddr;
198 /** What's left of the original search range. */
199 RTGCUINTPTR cbSearchRange;
200
201 /** @name Parsing and Execution
202 * @{ */
203
204 /** Input buffer. */
205 char achInput[2048];
206 /** To ease debugging. */
207 unsigned uInputZero;
208 /** Write index in the input buffer. */
209 unsigned iWrite;
210 /** Read index in the input buffer. */
211 unsigned iRead;
212 /** The number of lines in the buffer. */
213 unsigned cInputLines;
214 /** Indicates that we have a buffer overflow condition.
215 * This means that input is ignored up to the next newline. */
216 bool fInputOverflow;
217 /** Indicates whether or we're ready for input. */
218 bool fReady;
219 /** Scratch buffer position. */
220 char *pszScratch;
221 /** Scratch buffer. */
222 char achScratch[16384];
223 /** Argument array position. */
224 unsigned iArg;
225 /** Array of argument variables. */
226 DBGCVAR aArgs[100];
227
228 /** rc from the last dbgcHlpPrintfV(). */
229 int rcOutput;
230 /** The last character we wrote. */
231 char chLastOutput;
232
233 /** rc from the last command. */
234 int rcCmd;
235 /** @} */
236
237 /** The command history file (not yet implemented). */
238 char *pszHistoryFile;
239 /** The global debugger init script. */
240 char *pszGlobalInitScript;
241 /** The per VM debugger init script. */
242 char *pszLocalInitScript;
243} DBGC;
244/** Pointer to debugger console instance data. */
245typedef DBGC *PDBGC;
246
247/** Converts a Command Helper pointer to a pointer to DBGC instance data. */
248#define DBGC_CMDHLP2DBGC(pCmdHlp) ( (PDBGC)((uintptr_t)(pCmdHlp) - RT_UOFFSETOF(DBGC, CmdHlp)) )
249
250
251/**
252 * Chunk of external commands.
253 */
254typedef struct DBGCEXTCMDS
255{
256 /** Number of commands descriptors. */
257 unsigned cCmds;
258 /** Pointer to array of command descriptors. */
259 PCDBGCCMD paCmds;
260 /** Pointer to the next chunk. */
261 struct DBGCEXTCMDS *pNext;
262} DBGCEXTCMDS;
263/** Pointer to chunk of external commands. */
264typedef DBGCEXTCMDS *PDBGCEXTCMDS;
265
266
267/**
268 * Chunk of external functions.
269 */
270typedef struct DBGCEXTFUNCS
271{
272 /** Number of functions descriptors. */
273 uint32_t cFuncs;
274 /** Pointer to array of functions descriptors. */
275 PCDBGCFUNC paFuncs;
276 /** Pointer to the next chunk. */
277 struct DBGCEXTFUNCS *pNext;
278} DBGCEXTFUNCS;
279/** Pointer to chunk of external functions. */
280typedef DBGCEXTFUNCS *PDBGCEXTFUNCS;
281
282
283
284/**
285 * Unary operator handler function.
286 *
287 * @returns 0 on success.
288 * @returns VBox evaluation / parsing error code on failure.
289 * The caller does the bitching.
290 * @param pDbgc Debugger console instance data.
291 * @param pArg The argument.
292 * @param enmCat The desired result category. Can be ignored.
293 * @param pResult Where to store the result.
294 */
295typedef DECLCALLBACK(int) FNDBGCOPUNARY(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
296/** Pointer to a unary operator handler function. */
297typedef FNDBGCOPUNARY *PFNDBGCOPUNARY;
298
299
300/**
301 * Binary operator handler function.
302 *
303 * @returns 0 on success.
304 * @returns VBox evaluation / parsing error code on failure.
305 * The caller does the bitching.
306 * @param pDbgc Debugger console instance data.
307 * @param pArg1 The first argument.
308 * @param pArg2 The 2nd argument.
309 * @param pResult Where to store the result.
310 */
311typedef DECLCALLBACK(int) FNDBGCOPBINARY(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult);
312/** Pointer to a binary operator handler function. */
313typedef FNDBGCOPBINARY *PFNDBGCOPBINARY;
314
315
316/**
317 * Operator descriptor.
318 */
319typedef struct DBGCOP
320{
321 /** Operator mnemonic. */
322 char szName[4];
323 /** Length of name. */
324 const unsigned cchName;
325 /** Whether or not this is a binary operator.
326 * Unary operators are evaluated right-to-left while binary are left-to-right. */
327 bool fBinary;
328 /** Precedence level. */
329 unsigned iPrecedence;
330 /** Unary operator handler. */
331 PFNDBGCOPUNARY pfnHandlerUnary;
332 /** Binary operator handler. */
333 PFNDBGCOPBINARY pfnHandlerBinary;
334 /** The category of the 1st argument.
335 * Set to DBGCVAR_CAT_ANY if anything goes. */
336 DBGCVARCAT enmCatArg1;
337 /** The category of the 2nd argument.
338 * Set to DBGCVAR_CAT_ANY if anything goes. */
339 DBGCVARCAT enmCatArg2;
340 /** Operator description. */
341 const char *pszDescription;
342} DBGCOP;
343/** Pointer to an operator descriptor. */
344typedef DBGCOP *PDBGCOP;
345/** Pointer to a const operator descriptor. */
346typedef const DBGCOP *PCDBGCOP;
347
348
349
350/** Pointer to symbol descriptor. */
351typedef struct DBGCSYM *PDBGCSYM;
352/** Pointer to const symbol descriptor. */
353typedef const struct DBGCSYM *PCDBGCSYM;
354
355/**
356 * Get builtin symbol.
357 *
358 * @returns 0 on success.
359 * @returns VBox evaluation / parsing error code on failure.
360 * The caller does the bitching.
361 * @param pSymDesc Pointer to the symbol descriptor.
362 * @param pCmdHlp Pointer to the command callback structure.
363 * @param enmType The result type.
364 * @param pResult Where to store the result.
365 */
366typedef DECLCALLBACK(int) FNDBGCSYMGET(PCDBGCSYM pSymDesc, PDBGCCMDHLP pCmdHlp, DBGCVARTYPE enmType, PDBGCVAR pResult);
367/** Pointer to get function for a builtin symbol. */
368typedef FNDBGCSYMGET *PFNDBGCSYMGET;
369
370/**
371 * Set builtin symbol.
372 *
373 * @returns 0 on success.
374 * @returns VBox evaluation / parsing error code on failure.
375 * The caller does the bitching.
376 * @param pSymDesc Pointer to the symbol descriptor.
377 * @param pCmdHlp Pointer to the command callback structure.
378 * @param pValue The value to assign the symbol.
379 */
380typedef DECLCALLBACK(int) FNDBGCSYMSET(PCDBGCSYM pSymDesc, PDBGCCMDHLP pCmdHlp, PCDBGCVAR pValue);
381/** Pointer to set function for a builtin symbol. */
382typedef FNDBGCSYMSET *PFNDBGCSYMSET;
383
384
385/**
386 * Symbol description (for builtin symbols).
387 */
388typedef struct DBGCSYM
389{
390 /** Symbol name. */
391 const char *pszName;
392 /** Get function. */
393 PFNDBGCSYMGET pfnGet;
394 /** Set function. (NULL if readonly) */
395 PFNDBGCSYMSET pfnSet;
396 /** User data. */
397 unsigned uUser;
398} DBGCSYM;
399
400
401/** Selectable debug event kind. */
402typedef enum
403{
404 kDbgcSxEventKind_Plain,
405 kDbgcSxEventKind_Interrupt
406} DBGCSXEVENTKIND;
407
408/**
409 * Selectable debug event name / type lookup table entry.
410 *
411 * This also contains the default setting and an alternative name.
412 */
413typedef struct DBGCSXEVT
414{
415 /** The event type. */
416 DBGFEVENTTYPE enmType;
417 /** The event name. */
418 const char *pszName;
419 /** Alternative event name (optional). */
420 const char *pszAltNm;
421 /** The kind of event. */
422 DBGCSXEVENTKIND enmKind;
423 /** The default state. */
424 DBGCEVTSTATE enmDefault;
425 /** Flags, DBGCSXEVT_F_XXX. */
426 uint32_t fFlags;
427 /** Description for use when reporting the event, optional. */
428 const char *pszDesc;
429} DBGCSXEVT;
430/** Pointer to a constant selectable debug event descriptor. */
431typedef DBGCSXEVT const *PCDBGCSXEVT;
432
433/** @name DBGCSXEVT_F_XXX
434 * @{ */
435#define DBGCSXEVT_F_TAKE_ARG RT_BIT_32(0)
436/** Windows bugcheck, should take 5 arguments. */
437#define DBGCSXEVT_F_BUGCHECK RT_BIT_32(1)
438/** @} */
439
440
441/**
442 * Control flow graph basic block dumper state
443 */
444typedef struct DBGCFLOWBBDUMP
445{
446 /** The basic block referenced. */
447 DBGFFLOWBB hFlowBb;
448 /** Cached start address. */
449 DBGFADDRESS AddrStart;
450 /** Target address. */
451 DBGFADDRESS AddrTarget;
452 /** Width of the basic block in chars. */
453 uint32_t cchWidth;
454 /** Height of the basic block in chars. */
455 uint32_t cchHeight;
456 /** X coordinate of the start. */
457 uint32_t uStartX;
458 /** Y coordinate of the start. */
459 uint32_t uStartY;
460} DBGCFLOWBBDUMP;
461/** Pointer to the control flow graph basic block dump state. */
462typedef DBGCFLOWBBDUMP *PDBGCFLOWBBDUMP;
463
464
465/**
466 * Control flow graph branch table dumper state.
467 */
468typedef struct DBGCFLOWBRANCHTBLDUMP
469{
470 /** The branch table referenced. */
471 DBGFFLOWBRANCHTBL hFlowBranchTbl;
472 /** Cached start address. */
473 DBGFADDRESS AddrStart;
474 /** Width of the branch table in chars. */
475 uint32_t cchWidth;
476 /** Height of the branch table in chars. */
477 uint32_t cchHeight;
478 /** X coordinate of the start. */
479 uint32_t uStartX;
480 /** Y coordinate of the start. */
481 uint32_t uStartY;
482} DBGCFLOWBRANCHTBLDUMP;
483/** Pointer to control flow graph branch table state. */
484typedef DBGCFLOWBRANCHTBLDUMP *PDBGCFLOWBRANCHTBLDUMP;
485
486/*******************************************************************************
487* Internal Functions *
488*******************************************************************************/
489int dbgcBpAdd(PDBGC pDbgc, RTUINT iBp, const char *pszCmd);
490int dbgcBpUpdate(PDBGC pDbgc, RTUINT iBp, const char *pszCmd);
491int dbgcBpDelete(PDBGC pDbgc, RTUINT iBp);
492PDBGCBP dbgcBpGet(PDBGC pDbgc, RTUINT iBp);
493int dbgcBpExec(PDBGC pDbgc, RTUINT iBp);
494
495void dbgcEvalInit(void);
496int dbgcEvalSub(PDBGC pDbgc, char *pszExpr, size_t cchExpr, DBGCVARCAT enmCategory, PDBGCVAR pResult);
497int dbgcEvalCommand(PDBGC pDbgc, char *pszCmd, size_t cchCmd, bool fNoExecute);
498int dbgcEvalScript(PDBGC pDbgc, const char *pszFilename, bool fAnnounce);
499
500int dbgcSymbolGet(PDBGC pDbgc, const char *pszSymbol, DBGCVARTYPE enmType, PDBGCVAR pResult);
501PCDBGCSYM dbgcLookupRegisterSymbol(PDBGC pDbgc, const char *pszSymbol);
502PCDBGCOP dbgcOperatorLookup(PDBGC pDbgc, const char *pszExpr, bool fPreferBinary, char chPrev);
503PCDBGCCMD dbgcCommandLookup(PDBGC pDbgc, const char *pachName, size_t cchName, bool fExternal);
504PCDBGCFUNC dbgcFunctionLookup(PDBGC pDbgc, const char *pachName, size_t cchName, bool fExternal);
505
506DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
507DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
508DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
509DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
510DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult);
511
512void dbgcInitCmdHlp(PDBGC pDbgc);
513
514void dbgcEventInit(PDBGC pDbgc);
515void dbgcEventTerm(PDBGC pDbgc);
516
517/** Console ASCII screen handle. */
518typedef struct DBGCSCREENINT *DBGCSCREEN;
519/** Pointer to ASCII screen handle. */
520typedef DBGCSCREEN *PDBGCSCREEN;
521
522/**
523 * ASCII screen blit callback.
524 *
525 * @returns VBox status code. Any non VINF_SUCCESS status code will abort the dumping.
526 *
527 * @param psz The string to dump
528 * @param pvUser Opaque user data.
529 */
530typedef DECLCALLBACK(int) FNDGCSCREENBLIT(const char *psz, void *pvUser);
531/** Pointer to a FNDGCSCREENBLIT. */
532typedef FNDGCSCREENBLIT *PFNDGCSCREENBLIT;
533
534/**
535 * ASCII screen supported colors.
536 */
537typedef enum DBGCSCREENCOLOR
538{
539 /** Invalid color. */
540 DBGCSCREENCOLOR_INVALID = 0,
541 /** Default color of the terminal. */
542 DBGCSCREENCOLOR_DEFAULT,
543 /** Black. */
544 DBGCSCREENCOLOR_BLACK,
545 DBGCSCREENCOLOR_BLACK_BRIGHT,
546 /** Red. */
547 DBGCSCREENCOLOR_RED,
548 DBGCSCREENCOLOR_RED_BRIGHT,
549 /** Green. */
550 DBGCSCREENCOLOR_GREEN,
551 DBGCSCREENCOLOR_GREEN_BRIGHT,
552 /** Yellow. */
553 DBGCSCREENCOLOR_YELLOW,
554 DBGCSCREENCOLOR_YELLOW_BRIGHT,
555 /** Blue. */
556 DBGCSCREENCOLOR_BLUE,
557 DBGCSCREENCOLOR_BLUE_BRIGHT,
558 /** Magenta. */
559 DBGCSCREENCOLOR_MAGENTA,
560 DBGCSCREENCOLOR_MAGENTA_BRIGHT,
561 /** Cyan. */
562 DBGCSCREENCOLOR_CYAN,
563 DBGCSCREENCOLOR_CYAN_BRIGHT,
564 /** White. */
565 DBGCSCREENCOLOR_WHITE,
566 DBGCSCREENCOLOR_WHITE_BRIGHT
567} DBGCSCREENCOLOR;
568/** Pointer to a screen color. */
569typedef DBGCSCREENCOLOR *PDBGCSCREENCOLOR;
570
571DECLHIDDEN(int) dbgcScreenAsciiCreate(PDBGCSCREEN phScreen, uint32_t cchWidth, uint32_t cchHeight);
572DECLHIDDEN(void) dbgcScreenAsciiDestroy(DBGCSCREEN hScreen);
573DECLHIDDEN(int) dbgcScreenAsciiBlit(DBGCSCREEN hScreen, PFNDGCSCREENBLIT pfnBlit, void *pvUser, bool fAddColors);
574DECLHIDDEN(int) dbgcScreenAsciiDrawLineVertical(DBGCSCREEN hScreen, uint32_t uX, uint32_t uStartY,
575 uint32_t uEndY, char ch, DBGCSCREENCOLOR enmColor);
576DECLHIDDEN(int) dbgcScreenAsciiDrawLineHorizontal(DBGCSCREEN hScreen, uint32_t uStartX, uint32_t uEndX,
577 uint32_t uY, char ch, DBGCSCREENCOLOR enmColor);
578DECLHIDDEN(int) dbgcScreenAsciiDrawCharacter(DBGCSCREEN hScreen, uint32_t uX, uint32_t uY, char ch,
579 DBGCSCREENCOLOR enmColor);
580DECLHIDDEN(int) dbgcScreenAsciiDrawString(DBGCSCREEN hScreen, uint32_t uX, uint32_t uY, const char *pszText,
581 DBGCSCREENCOLOR enmColor);
582
583/* For tstDBGCParser: */
584int dbgcCreate(PDBGC *ppDbgc, PDBGCBACK pBack, unsigned fFlags);
585int dbgcRun(PDBGC pDbgc);
586int dbgcProcessInput(PDBGC pDbgc, bool fNoExecute);
587void dbgcDestroy(PDBGC pDbgc);
588
589
590/*******************************************************************************
591* Global Variables *
592*******************************************************************************/
593extern const DBGCCMD g_aDbgcCmds[];
594extern const uint32_t g_cDbgcCmds;
595extern const DBGCFUNC g_aDbgcFuncs[];
596extern const uint32_t g_cDbgcFuncs;
597extern const DBGCCMD g_aCmdsCodeView[];
598extern const uint32_t g_cCmdsCodeView;
599extern const DBGCFUNC g_aFuncsCodeView[];
600extern const uint32_t g_cFuncsCodeView;
601extern const DBGCOP g_aDbgcOps[];
602extern const uint32_t g_cDbgcOps;
603extern const DBGCSXEVT g_aDbgcSxEvents[];
604extern const uint32_t g_cDbgcSxEvents;
605
606
607/*******************************************************************************
608* Defined Constants And Macros *
609*******************************************************************************/
610/** Locks the g_pExtCmdsHead and g_pExtFuncsHead lists for reading. */
611#define DBGCEXTLISTS_LOCK_RD() do { } while (0)
612/** Locks the g_pExtCmdsHead and g_pExtFuncsHead lists for writing. */
613#define DBGCEXTLISTS_LOCK_WR() do { } while (0)
614/** UnLocks the g_pExtCmdsHead and g_pExtFuncsHead lists after reading. */
615#define DBGCEXTLISTS_UNLOCK_RD() do { } while (0)
616/** UnLocks the g_pExtCmdsHead and g_pExtFuncsHead lists after writing. */
617#define DBGCEXTLISTS_UNLOCK_WR() do { } while (0)
618
619
620
621#endif /* !DEBUGGER_INCLUDED_SRC_DBGCInternal_h */
622
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette