4 * Copyright 1995 Alexandre Julliard
7 #ifndef __WINE_DEBUGGER_H
8 #define __WINE_DEBUGGER_H
11 #include "registers.h"
13 #define STEP_FLAG 0x100 /* single step flag */
17 DWORD seg
; /* 0xffffffff means current default segment (cs or ds) */
21 #define DBG_FIX_ADDR_SEG(addr,default) \
22 { if ((addr)->seg == 0xffffffff) (addr)->seg = (default); \
23 if (((addr)->seg == WINE_CODE_SELECTOR) || \
24 (addr)->seg == WINE_DATA_SELECTOR) (addr)->seg = 0; }
26 #define DBG_ADDR_TO_LIN(addr) \
27 ((addr)->seg ? (char *)PTR_SEG_OFF_TO_LIN((addr)->seg,(addr)->off) \
28 : (char *)(addr)->off)
30 #define DBG_CHECK_READ_PTR(addr,len) \
31 (!DEBUG_IsBadReadPtr((addr),(len)) || \
32 (fprintf(stderr,"*** Invalid address "), \
33 DEBUG_PrintAddress((addr),dbg_mode), \
34 fprintf(stderr,"\n"),0))
36 #define DBG_CHECK_WRITE_PTR(addr,len) \
37 (!DEBUG_IsBadWritePtr((addr),(len)) || \
38 (fprintf(stderr,"*** Invalid address "), \
39 DEBUG_PrintAddress(addr,dbg_mode), \
40 fprintf(stderr,"\n"),0))
42 #ifdef REG_SP /* Some Sun includes define this */
48 REG_EAX
, REG_EBX
, REG_ECX
, REG_EDX
, REG_ESI
,
49 REG_EDI
, REG_EBP
, REG_EFL
, REG_EIP
, REG_ESP
,
50 REG_AX
, REG_BX
, REG_CX
, REG_DX
, REG_SI
,
51 REG_DI
, REG_BP
, REG_FL
, REG_IP
, REG_SP
,
52 REG_CS
, REG_DS
, REG_ES
, REG_SS
, REG_FS
, REG_GS
58 EXEC_CONT
, /* Continuous execution */
59 EXEC_STEP_OVER
, /* Stepping over a call */
60 EXEC_STEP_INSTR
/* Single-stepping an instruction */
63 extern SIGCONTEXT
*DEBUG_context
; /* debugger/registers.c */
64 extern unsigned int dbg_mode
;
66 /* debugger/break.c */
67 extern void DEBUG_SetBreakpoints( BOOL32 set
);
68 extern int DEBUG_FindBreakpoint( const DBG_ADDR
*addr
);
69 extern void DEBUG_AddBreakpoint( const DBG_ADDR
*addr
);
70 extern void DEBUG_DelBreakpoint( int num
);
71 extern void DEBUG_EnableBreakpoint( int num
, BOOL32 enable
);
72 extern void DEBUG_InfoBreakpoints(void);
73 extern BOOL32
DEBUG_HandleTrap( SIGCONTEXT
*context
);
74 extern BOOL32
DEBUG_ShouldContinue( SIGCONTEXT
*context
, enum exec_mode mode
);
75 extern void DEBUG_RestartExecution( SIGCONTEXT
*context
, enum exec_mode mode
,
78 /* debugger/db_disasm.c */
79 extern void DEBUG_Disasm( DBG_ADDR
*addr
);
82 extern void DEBUG_AddSymbol( const char *name
, const DBG_ADDR
*addr
);
83 extern BOOL32
DEBUG_GetSymbolValue( const char * name
, DBG_ADDR
*addr
);
84 extern BOOL32
DEBUG_SetSymbolValue( const char * name
, const DBG_ADDR
*addr
);
85 extern const char * DEBUG_FindNearestSymbol( const DBG_ADDR
*addr
);
86 extern void DEBUG_ReadSymbolTable( const char * filename
);
87 extern void DEBUG_LoadEntryPoints(void);
90 extern void DEBUG_Print( const DBG_ADDR
*addr
, int count
, char format
);
91 extern void DEBUG_PrintAddress( const DBG_ADDR
*addr
, int addrlen
);
92 extern void DEBUG_Help(void);
93 extern void DEBUG_List( DBG_ADDR
*addr
, int count
);
95 /* debugger/memory.c */
96 extern BOOL32
DEBUG_IsBadReadPtr( const DBG_ADDR
*address
, int size
);
97 extern BOOL32
DEBUG_IsBadWritePtr( const DBG_ADDR
*address
, int size
);
98 extern int DEBUG_ReadMemory( const DBG_ADDR
*address
);
99 extern void DEBUG_WriteMemory( const DBG_ADDR
*address
, int value
);
100 extern void DEBUG_ExamineMemory( const DBG_ADDR
*addr
, int count
, char format
);
102 /* debugger/registers.c */
103 extern void DEBUG_SetRegister( enum debug_regs reg
, int val
);
104 extern int DEBUG_GetRegister( enum debug_regs reg
);
105 extern void DEBUG_InfoRegisters(void);
106 extern BOOL32
DEBUG_ValidateRegisters(void);
108 /* debugger/stack.c */
109 extern void DEBUG_InfoStack(void);
110 extern void DEBUG_BackTrace(void);
113 extern void DEBUG_EnterDebugger(void);
114 extern void wine_debug( int signal
, SIGCONTEXT
*regs
);
116 #endif /* __WINE_DEBUGGER_H */