Release 960824
[wine/multimedia.git] / include / debugger.h
blobebdefc408673f70b359b87501200c52107f11703
1 /*
2 * Debugger definitions
4 * Copyright 1995 Alexandre Julliard
5 */
7 #ifndef __WINE_DEBUGGER_H
8 #define __WINE_DEBUGGER_H
10 #include "ldt.h"
11 #include "registers.h"
13 #define STEP_FLAG 0x100 /* single step flag */
15 typedef struct
17 DWORD seg; /* 0xffffffff means current default segment (cs or ds) */
18 DWORD off;
19 } DBG_ADDR;
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 */
43 #undef REG_SP
44 #endif
46 enum debug_regs
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
56 enum exec_mode
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,
76 int instr_len );
78 /* debugger/db_disasm.c */
79 extern void DEBUG_Disasm( DBG_ADDR *addr );
81 /* debugger/hash.c */
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);
89 /* debugger/info.c */
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);
112 /* debugger/dbg.y */
113 extern void DEBUG_EnterDebugger(void);
114 extern void wine_debug( int signal, SIGCONTEXT *regs );
116 #endif /* __WINE_DEBUGGER_H */