- Enhanced internal variables framework (including read/save to
registry and typing)
- Finalized use of Windows' Console I/O interface (instead of Unix std
streams)
- Now handling registers as internal variables (they are no longer
seen as a specific type)
diff --git a/debugger/debugger.h b/debugger/debugger.h
index 1c7b9ed..9190b37 100644
--- a/debugger/debugger.h
+++ b/debugger/debugger.h
@@ -41,6 +41,7 @@
/*
* For constants generated by the parser, we use this datatype
*/
+extern struct datatype * DEBUG_TypeShortUInt;
extern struct datatype * DEBUG_TypeInt;
extern struct datatype * DEBUG_TypeIntConst;
extern struct datatype * DEBUG_TypeUSInt;
@@ -135,7 +136,7 @@
} w;
} u;
struct expr * condition;
-} BREAKPOINT;
+} DBG_BREAKPOINT;
typedef struct tagDBG_THREAD {
struct tagDBG_PROCESS* process;
@@ -147,7 +148,7 @@
int dbg_mode;
enum exec_mode dbg_exec_mode;
int dbg_exec_count;
- BREAKPOINT stepOverBP;
+ DBG_BREAKPOINT stepOverBP;
struct tagDBG_THREAD* next;
struct tagDBG_THREAD* prev;
} DBG_THREAD;
@@ -207,20 +208,12 @@
#define DM_TYPE_NE 2
#define DM_TYPE_PE 3
-#ifdef __i386__
-#ifdef REG_SP /* Some Sun includes define this */
-#undef REG_SP
-#endif
-
-enum debug_regs
-{
- REG_EAX, REG_EBX, REG_ECX, REG_EDX, REG_ESI,
- REG_EDI, REG_EBP, REG_EFL, REG_EIP, REG_ESP,
- REG_AX, REG_BX, REG_CX, REG_DX, REG_SI,
- REG_DI, REG_BP, REG_FL, REG_IP, REG_SP,
- REG_CS, REG_DS, REG_ES, REG_SS, REG_FS, REG_GS
-};
-#endif
+typedef struct {
+ DWORD val;
+ const char* name;
+ LPDWORD pval;
+ struct datatype* type;
+} DBG_INTVAR;
#define OFFSET_OF(__c,__f) ((int)(((char*)&(((__c*)0)->__f))-((char*)0)))
@@ -241,9 +234,27 @@
/* debugger/db_disasm.c */
extern void DEBUG_Disasm( DBG_ADDR *addr, int display );
+ /* debugger/dbg.y */
+extern BOOL DEBUG_Main( BOOL is_debug, BOOL force, DWORD code );
+extern void DEBUG_Exit( DWORD );
+
+ /* debugger/debug.l */
+extern void flush_symbols(void);
+
+ /* debugger/display.c */
+extern int DEBUG_DoDisplay(void);
+extern int DEBUG_AddDisplay(struct expr * exp, int count, char format);
+extern int DEBUG_DoDisplay(void);
+extern int DEBUG_DelDisplay(int displaynum);
+extern int DEBUG_InfoDisplay(void);
+
+ /* debugger/editline.c */
+extern char * readline(const char *);
+extern void add_history(char *);
+
/* debugger/expr.c */
extern void DEBUG_FreeExprMem(void);
-struct expr * DEBUG_RegisterExpr(enum debug_regs);
+struct expr * DEBUG_IntVarExpr(const char* name);
struct expr * DEBUG_SymbolExpr(const char * name);
struct expr * DEBUG_ConstExpr(int val);
struct expr * DEBUG_StringExpr(const char * str);
@@ -262,12 +273,8 @@
extern int DEBUG_FreeExpr(struct expr * exp);
extern int DEBUG_DisplayExpr(const struct expr * exp);
- /* debugger/display.c */
-extern int DEBUG_DoDisplay(void);
-extern int DEBUG_AddDisplay(struct expr * exp, int count, char format);
-extern int DEBUG_DoDisplay(void);
-extern int DEBUG_DelDisplay(int displaynum);
-extern int DEBUG_InfoDisplay(void);
+ /* debugger/external.c */
+extern void DEBUG_ExternalDebugger(void);
/* debugger/hash.c */
extern struct name_hash * DEBUG_AddSymbol( const char *name,
@@ -329,8 +336,8 @@
extern void DEBUG_WalkWindows(HWND hWnd, int indent);
/* debugger/memory.c */
-extern int DEBUG_ReadMemory( const DBG_ADDR *address );
-extern void DEBUG_WriteMemory( const DBG_ADDR *address, int value );
+extern int DEBUG_ReadMemory( const DBG_VALUE* value );
+extern void DEBUG_WriteMemory( const DBG_VALUE* val, int value );
extern void DEBUG_ExamineMemory( const DBG_VALUE *addr, int count, char format);
extern void DEBUG_InvalAddr( const DBG_ADDR* addr );
extern void DEBUG_InvalLinAddr( void* addr );
@@ -360,11 +367,8 @@
extern void DEBUG_InitCVDataTypes(void);
/* debugger/registers.c */
-extern void DEBUG_SetRegister( enum debug_regs reg, int val );
-extern int DEBUG_GetRegister( enum debug_regs reg );
extern void DEBUG_InfoRegisters(void);
extern BOOL DEBUG_ValidateRegisters(void);
-extern int DEBUG_PrintRegister(enum debug_regs reg);
/* debugger/stack.c */
extern void DEBUG_InfoStack(void);
@@ -418,20 +422,15 @@
extern void DEBUG_NukePath(void);
extern void DEBUG_Disassemble( const DBG_VALUE *, const DBG_VALUE*, int offset );
- /* debugger/external.c */
-extern void DEBUG_ExternalDebugger(void);
-
- /* debugger/dbg.y */
-extern BOOL DEBUG_Main( BOOL is_debug, BOOL force, DWORD code );
-extern void DEBUG_Exit( DWORD );
-
/* debugger/winedbg.c */
#define DBG_CHN_MESG 1
#define DBG_CHN_ERR 2
#define DBG_CHN_WARN 4
#define DBG_CHN_FIXME 8
#define DBG_CHN_TRACE 16
-extern int DEBUG_Printf(int chn, const char* format, ...);
+extern void DEBUG_Output(int chn, const char* buffer, int len);
+extern int DEBUG_Printf(int chn, const char* format, ...);
+extern DBG_INTVAR* DEBUG_GetIntVar(const char*);
/* Choose your allocator! */
#if 1
@@ -465,9 +464,16 @@
#define DEBUG_STATUS_DIV_BY_ZERO (DEBUG_STATUS_OFFSET+2)
#define DEBUG_STATUS_BAD_TYPE (DEBUG_STATUS_OFFSET+3)
-#define DBG_IVAR(_var) DEBUG_IV_##_var
-#define INTERNAL_VAR(_var,_val) extern int DBG_IVAR(_var);
+extern DBG_INTVAR DEBUG_IntVars[];
+
+#define DBG_IVARNAME(_var) DEBUG_IV_##_var
+#define DBG_IVARSTRUCT(_var) DEBUG_IntVars[DBG_IVARNAME(_var)]
+#define DBG_IVAR(_var) (*(DBG_IVARSTRUCT(_var).pval))
+#define INTERNAL_VAR(_var,_val,_ref,_typ) DBG_IVARNAME(_var),
+enum debug_int_var {
#include "intvar.h"
+ DBG_IV_LAST
+};
#undef INTERNAL_VAR
#endif /* __WINE_DEBUGGER_H */