4 * Copyright 1995 Alexandre Julliard
7 #ifndef __WINE_DEBUGGER_H
8 #define __WINE_DEBUGGER_H
11 #include "registers.h"
15 #define STEP_FLAG 0x100 /* single step flag */
19 DWORD seg
; /* 0xffffffff means current default segment (cs or ds) */
24 unsigned long line_number
;
28 typedef struct wine_lines WineLineNo
;
31 * This structure holds information about stack variables, function
32 * parameters, and register variables, which are all local to this
36 unsigned int regno
:8; /* For register symbols */
37 unsigned int offset
:24; /* offset from esp/ebp to symbol */
38 unsigned int pc_start
; /* For RBRAC/LBRAC */
39 unsigned int pc_end
; /* For RBRAC/LBRAC */
40 char * name
; /* Name of symbol */
43 typedef struct wine_locals WineLocals
;
47 struct name_hash
* next
;
53 WineLocals
* local_vars
;
62 #define DBG_FIX_ADDR_SEG(addr,default) \
63 { if ((addr)->seg == 0xffffffff) (addr)->seg = (default); \
64 if (((addr)->seg == WINE_CODE_SELECTOR) || \
65 (addr)->seg == WINE_DATA_SELECTOR) (addr)->seg = 0; }
67 #define DBG_ADDR_TO_LIN(addr) \
68 ((addr)->seg ? (char *)PTR_SEG_OFF_TO_LIN((addr)->seg,(addr)->off) \
69 : (char *)(addr)->off)
71 #define DBG_CHECK_READ_PTR(addr,len) \
72 (!DEBUG_IsBadReadPtr((addr),(len)) || \
73 (fprintf(stderr,"*** Invalid address "), \
74 DEBUG_PrintAddress((addr),dbg_mode, FALSE), \
75 fprintf(stderr,"\n"),0))
77 #define DBG_CHECK_WRITE_PTR(addr,len) \
78 (!DEBUG_IsBadWritePtr((addr),(len)) || \
79 (fprintf(stderr,"*** Invalid address "), \
80 DEBUG_PrintAddress(addr,dbg_mode, FALSE), \
81 fprintf(stderr,"\n"),0))
83 #ifdef REG_SP /* Some Sun includes define this */
89 REG_EAX
, REG_EBX
, REG_ECX
, REG_EDX
, REG_ESI
,
90 REG_EDI
, REG_EBP
, REG_EFL
, REG_EIP
, REG_ESP
,
91 REG_AX
, REG_BX
, REG_CX
, REG_DX
, REG_SI
,
92 REG_DI
, REG_BP
, REG_FL
, REG_IP
, REG_SP
,
93 REG_CS
, REG_DS
, REG_ES
, REG_SS
, REG_FS
, REG_GS
99 EXEC_CONT
, /* Continuous execution */
100 EXEC_STEP_OVER
, /* Stepping over a call */
101 EXEC_STEP_INSTR
/* Single-stepping an instruction */
104 extern SIGCONTEXT
*DEBUG_context
; /* debugger/registers.c */
105 extern unsigned int dbg_mode
;
107 /* debugger/break.c */
108 extern void DEBUG_SetBreakpoints( BOOL32 set
);
109 extern int DEBUG_FindBreakpoint( const DBG_ADDR
*addr
);
110 extern void DEBUG_AddBreakpoint( const DBG_ADDR
*addr
);
111 extern void DEBUG_DelBreakpoint( int num
);
112 extern void DEBUG_EnableBreakpoint( int num
, BOOL32 enable
);
113 extern void DEBUG_InfoBreakpoints(void);
114 extern BOOL32
DEBUG_HandleTrap( SIGCONTEXT
*context
);
115 extern BOOL32
DEBUG_ShouldContinue( SIGCONTEXT
*context
, enum exec_mode mode
);
116 extern void DEBUG_RestartExecution( SIGCONTEXT
*context
, enum exec_mode mode
,
119 /* debugger/db_disasm.c */
120 extern void DEBUG_Disasm( DBG_ADDR
*addr
);
122 /* debugger/hash.c */
123 extern struct name_hash
* DEBUG_AddSymbol( const char *name
,
124 const DBG_ADDR
*addr
,
125 const char * sourcefile
);
126 extern BOOL32
DEBUG_GetSymbolValue( const char * name
, const int lineno
,
128 extern BOOL32
DEBUG_SetSymbolValue( const char * name
, const DBG_ADDR
*addr
);
129 extern const char * DEBUG_FindNearestSymbol( const DBG_ADDR
*addr
, int flag
,
130 struct name_hash
** rtn
,
132 extern void DEBUG_ReadSymbolTable( const char * filename
);
133 extern void DEBUG_LoadEntryPoints(void);
134 extern void DEBUG_AddLineNumber( struct name_hash
* func
, int line_num
,
135 unsigned long offset
);
136 extern void DEBUG_AddLocal( struct name_hash
* func
, int regno
,
143 /* debugger/info.c */
144 extern void DEBUG_Print( const DBG_ADDR
*addr
, int count
, char format
);
145 extern struct name_hash
* DEBUG_PrintAddress( const DBG_ADDR
*addr
,
146 int addrlen
, int flag
);
147 extern void DEBUG_Help(void);
148 extern void DEBUG_List( DBG_ADDR
*addr
, int count
);
149 extern struct name_hash
* DEBUG_PrintAddressAndArgs( const DBG_ADDR
*addr
,
154 /* debugger/memory.c */
155 extern BOOL32
DEBUG_IsBadReadPtr( const DBG_ADDR
*address
, int size
);
156 extern BOOL32
DEBUG_IsBadWritePtr( const DBG_ADDR
*address
, int size
);
157 extern int DEBUG_ReadMemory( const DBG_ADDR
*address
);
158 extern void DEBUG_WriteMemory( const DBG_ADDR
*address
, int value
);
159 extern void DEBUG_ExamineMemory( const DBG_ADDR
*addr
, int count
, char format
);
161 /* debugger/registers.c */
162 extern void DEBUG_SetRegister( enum debug_regs reg
, int val
);
163 extern int DEBUG_GetRegister( enum debug_regs reg
);
164 extern void DEBUG_InfoRegisters(void);
165 extern BOOL32
DEBUG_ValidateRegisters(void);
167 /* debugger/stack.c */
168 extern void DEBUG_InfoStack(void);
169 extern void DEBUG_BackTrace(void);
170 extern BOOL32
DEBUG_GetStackSymbolValue( const char * name
, DBG_ADDR
*addr
);
171 extern int DEBUG_InfoLocals(void);
172 extern int DEBUG_SetFrame(int newframe
);
174 /* debugger/stabs.c */
175 extern int DEBUG_ReadExecutableDbgInfo(void);
178 extern int DEBUG_RegisterDebugInfo(int, struct pe_data
*pe
,
179 int, unsigned long, unsigned long);
180 extern int DEBUG_ProcessDeferredDebug(void);
183 extern void DEBUG_EnterDebugger(void);
184 extern void wine_debug( int signal
, SIGCONTEXT
*regs
);
186 #endif /* __WINE_DEBUGGER_H */