Win64 patch 2/2 (winedbg)

Ge van Geldorp ge at gse.nl
Wed Jul 19 02:18:37 CDT 2006


Changelog:
  Ge van Geldorp <ge at gse.nl>
  - Change ADDRESS variables to ADDRESS64 so we can handle 64-bit addresses

diff --git a/programs/winedbg/be_alpha.c b/programs/winedbg/be_alpha.c
index 8d2fb4d..6bc9cd8 100644
--- a/programs/winedbg/be_alpha.c
+++ b/programs/winedbg/be_alpha.c
@@ -23,7 +23,7 @@ #include "debugger.h"
 #if defined(__ALPHA__)
 
 static unsigned be_alpha_get_addr(HANDLE hThread, const CONTEXT* ctx, 
-                                 enum be_cpu_addr bca, ADDRESS* addr)
+                                 enum be_cpu_addr bca, ADDRESS64* addr)
 {
     dbg_printf("not done\n");
     return FALSE;
@@ -77,7 +77,7 @@ static unsigned be_alpha_is_func_call(vo
     return FALSE;
 }
 
-static void be_alpha_disasm_one_insn(ADDRESS* addr, int display)
+static void be_alpha_disasm_one_insn(ADDRESS64* addr, int display)
 {
     dbg_printf("Disasm NIY\n");
 }
diff --git a/programs/winedbg/be_cpu.h b/programs/winedbg/be_cpu.h
index 4471dda..4111dff 100644
--- a/programs/winedbg/be_cpu.h
+++ b/programs/winedbg/be_cpu.h
@@ -29,20 +29,20 @@ struct backend_cpu
     /* Linearizes an address. Only CPUs with segmented address model need this.
      * Otherwise, implementation is straigthforward (be_cpu_linearize will do)
      */
-    void*               (*linearize)(HANDLE hThread, const ADDRESS*);
-    /* Fills in an ADDRESS structure from a segment & an offset. CPUs without
+    void*               (*linearize)(HANDLE hThread, const ADDRESS64*);
+    /* Fills in an ADDRESS64 structure from a segment & an offset. CPUs without
      * segment address model should use 0 as seg. Required method to fill
-     * in an ADDRESS (except an linear one).
+     * in an ADDRESS64 (except an linear one).
      * Non segmented CPU shall use be_cpu_build_addr
      */
     unsigned            (*build_addr)(HANDLE hThread, const CONTEXT* ctx, 
-                                      ADDRESS* addr, unsigned seg,
+                                      ADDRESS64* addr, unsigned seg,
                                       unsigned long offset);
     /* Retrieves in addr an address related to the context (program counter, stack
      * pointer, frame pointer)
      */
     unsigned            (*get_addr)(HANDLE hThread, const CONTEXT* ctx, 
-                                    enum be_cpu_addr, ADDRESS* addr);
+                                    enum be_cpu_addr, ADDRESS64* addr);
     /* -------------------------------------------------------------------------------
      * context manipulation 
      * ------------------------------------------------------------------------------- */
@@ -73,11 +73,11 @@ struct backend_cpu
      */
     unsigned            (*is_break_insn)(const void*);
     /* Check whether instruciton at 'addr' is a function call */
-    unsigned            (*is_function_call)(const void* insn, ADDRESS* callee);
+    unsigned            (*is_function_call)(const void* insn, ADDRESS64* callee);
     /* Ask for dissasembling one instruction. If display is true, assembly code
      * will be printed. In all cases, 'addr' is advanced at next instruction
      */
-    void                (*disasm_one_insn)(ADDRESS* addr, int display);
+    void                (*disasm_one_insn)(ADDRESS64* addr, int display);
     /* -------------------------------------------------------------------------------
      * break points / watchpoints handling 
      * -------------------------------------------------------------------------------*/
@@ -111,6 +111,6 @@ struct backend_cpu
 extern struct backend_cpu*      be_cpu;
 
 /* some handy functions for non segmented CPUs */
-void*    be_cpu_linearize(HANDLE hThread, const ADDRESS*);
-unsigned be_cpu_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS* addr, 
+void*    be_cpu_linearize(HANDLE hThread, const ADDRESS64*);
+unsigned be_cpu_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS64* addr, 
                            unsigned seg, unsigned long offset);
diff --git a/programs/winedbg/be_i386.c b/programs/winedbg/be_i386.c
index e82216e..696e125 100644
--- a/programs/winedbg/be_i386.c
+++ b/programs/winedbg/be_i386.c
@@ -26,7 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(winedbg);
 #ifdef __i386__
 
   /* debugger/db_disasm.c */
-extern void             be_i386_disasm_one_insn(ADDRESS* addr, int display);
+extern void             be_i386_disasm_one_insn(ADDRESS64* addr, int display);
 
 #define STEP_FLAG 0x00000100 /* single step flag */
 #define V86_FLAG  0x00020000
@@ -46,30 +46,31 @@ static ADDRESS_MODE get_selector_type(HA
     return -1;
 }
 
-static void* be_i386_linearize(HANDLE hThread, const ADDRESS* addr)
+static void* be_i386_linearize(HANDLE hThread, const ADDRESS64* addr)
 {
     LDT_ENTRY	le;
 
     switch (addr->Mode)
     {
     case AddrModeReal:
-        return (void*)((DWORD)(LOWORD(addr->Segment) << 4) + addr->Offset);
+        return (void*)((DWORD)(LOWORD(addr->Segment) << 4) + (DWORD)addr->Offset);
     case AddrMode1632:
         if (!(addr->Segment & 4) || ((addr->Segment >> 3) < 17))
-            return (void*)addr->Offset;
+            return (void*)(DWORD)addr->Offset;
         /* fall through */
     case AddrMode1616:
         if (!GetThreadSelectorEntry(hThread, addr->Segment, &le)) return NULL;
         return (void*)((le.HighWord.Bits.BaseHi << 24) + 
-                       (le.HighWord.Bits.BaseMid << 16) + le.BaseLow + addr->Offset);
+                       (le.HighWord.Bits.BaseMid << 16) + le.BaseLow +
+                       (DWORD)addr->Offset);
         break;
     case AddrModeFlat:
-        return (void*)addr->Offset;
+        return (void*)(DWORD)addr->Offset;
     }
     return NULL;
 }
 
-static unsigned be_i386_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS* addr,
+static unsigned be_i386_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS64* addr,
                                    unsigned seg, unsigned long offset)
 {
     addr->Mode    = AddrModeFlat;
@@ -96,7 +97,7 @@ static unsigned be_i386_build_addr(HANDL
 }
 
 static unsigned be_i386_get_addr(HANDLE hThread, const CONTEXT* ctx, 
-                                 enum be_cpu_addr bca, ADDRESS* addr)
+                                 enum be_cpu_addr bca, ADDRESS64* addr)
 {
     switch (bca)
     {
@@ -378,7 +379,7 @@ static unsigned be_i386_is_break_insn(co
     return c == 0xCC;
 }
 
-static unsigned be_i386_is_func_call(const void* insn, ADDRESS* callee)
+static unsigned be_i386_is_func_call(const void* insn, ADDRESS64* callee)
 {
     BYTE        ch;
     int         delta;
diff --git a/programs/winedbg/be_ppc.c b/programs/winedbg/be_ppc.c
index fcd92a7..24e75e5 100644
--- a/programs/winedbg/be_ppc.c
+++ b/programs/winedbg/be_ppc.c
@@ -24,7 +24,7 @@ #include "debugger.h"
 #if defined(__powerpc__)
 
 static unsigned be_ppc_get_addr(HANDLE hThread, const CONTEXT* ctx, 
-                                enum be_cpu_addr bca, ADDRESS* addr)
+                                enum be_cpu_addr bca, ADDRESS64* addr)
 {
     switch (bca)
     {
@@ -90,7 +90,7 @@ static unsigned be_ppc_is_func_call(void
     return FALSE;
 }
 
-static void be_ppc_disasm_one_insn(ADDRESS* addr, int display)
+static void be_ppc_disasm_one_insn(ADDRESS64* addr, int display)
 {
     dbg_printf("Disasm NIY\n");
 }
diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index f816238..9a40a8c 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -23,7 +23,7 @@ #include "debugger.h"
 #if defined(__x86_64__)
 
 static unsigned be_x86_64_get_addr(HANDLE hThread, const CONTEXT* ctx, 
-                                 enum be_cpu_addr bca, ADDRESS* addr)
+                                 enum be_cpu_addr bca, ADDRESS64* addr)
 {
     addr->Mode = AddrModeFlat;
     switch (bca)
@@ -142,13 +142,13 @@ static unsigned be_x86_64_is_break_insn(
     return FALSE;
 }
 
-static unsigned be_x86_64_is_func_call(const void* insn, ADDRESS* callee)
+static unsigned be_x86_64_is_func_call(const void* insn, ADDRESS64* callee)
 {
     dbg_printf("not done is_func_call\n");
     return FALSE;
 }
 
-static void be_x86_64_disasm_one_insn(ADDRESS* addr, int display)
+static void be_x86_64_disasm_one_insn(ADDRESS64* addr, int display)
 {
     dbg_printf("Disasm NIY\n");
 }
diff --git a/programs/winedbg/break.c b/programs/winedbg/break.c
index e0f3f80..075cfef 100644
--- a/programs/winedbg/break.c
+++ b/programs/winedbg/break.c
@@ -88,7 +88,7 @@ void  break_set_xpoints(BOOL set)
  * Find the breakpoint for a given address. Return the breakpoint
  * number or -1 if none.
  */
-static int find_xpoint(const ADDRESS* addr, enum be_xpoint_type type)
+static int find_xpoint(const ADDRESS64* addr, enum be_xpoint_type type)
 {
     int                         i;
     void*                       lin = memory_to_linear_addr(addr);
@@ -108,7 +108,7 @@ static int find_xpoint(const ADDRESS* ad
  *
  * Find an empty slot in BP table to add a new break/watch point
  */
-static	int init_xpoint(int type, const ADDRESS* addr)
+static	int init_xpoint(int type, const ADDRESS64* addr)
 {
     int	                        num;
     struct dbg_breakpoint*      bp = dbg_curr_process->bp;
@@ -160,7 +160,7 @@ static	BOOL	get_watched_value(int num, L
  *
  * Add a breakpoint.
  */
-BOOL break_add_break(const ADDRESS* addr, BOOL verbose, BOOL swbp)
+BOOL break_add_break(const ADDRESS64* addr, BOOL verbose, BOOL swbp)
 {
     int                         num;
     BYTE                        ch;
@@ -204,7 +204,7 @@ BOOL break_add_break(const ADDRESS* addr
  */
 BOOL break_add_break_from_lvalue(const struct dbg_lvalue* lvalue, BOOL swbp)
 {
-    ADDRESS     addr;
+    ADDRESS64   addr;
 
     types_extract_as_address(lvalue, &addr);
 
@@ -270,7 +270,7 @@ void	break_add_break_from_id(const char 
 struct cb_break_lineno
 {
     int         lineno;
-    ADDRESS     addr;
+    ADDRESS64   addr;
 };
 
 static BOOL CALLBACK line_cb(SRCCODEINFO* sci, void* user)
@@ -350,7 +350,7 @@ void break_check_delayed_bp(void)
             lvalue.addr = dbp[i].u.addr;
         WINE_TRACE("trying to add delayed %s-bp\n", dbp[i].is_symbol ? "S" : "A");
         if (!dbp[i].is_symbol)
-            WINE_TRACE("\t%04x:%08lx\n", 
+            WINE_TRACE("\t%04x:%08llx\n", 
                        dbp[i].u.addr.Segment, dbp[i].u.addr.Offset);
         else
             WINE_TRACE("\t'%s' @ %d\n", 
@@ -721,7 +721,7 @@ static	BOOL should_stop(int bpnum)
  * Determine if we should continue execution after a SIGTRAP signal when
  * executing in the given mode.
  */
-BOOL break_should_continue(ADDRESS* addr, DWORD code, int* count, BOOL* is_break)
+BOOL break_should_continue(ADDRESS64* addr, DWORD code, int* count, BOOL* is_break)
 {
     DWORD	        oldval = 0;
     enum dbg_exec_mode  mode = dbg_curr_thread->exec_mode;
@@ -836,10 +836,10 @@ void	break_suspend_execution(void)
  */
 void break_restart_execution(int count)
 {
-    ADDRESS                     addr;
+    ADDRESS64                   addr;
     enum dbg_line_status        status;
     enum dbg_exec_mode          mode, ret_mode;
-    ADDRESS                     callee;
+    ADDRESS64                   callee;
     void*                       linear;
 
     memory_get_current_pc(&addr);
diff --git a/programs/winedbg/db_disasm.c b/programs/winedbg/db_disasm.c
index 9220e05..1677bc9 100644
--- a/programs/winedbg/db_disasm.c
+++ b/programs/winedbg/db_disasm.c
@@ -1063,7 +1063,7 @@ static const int db_lengths[] = {
 	10,	/* EXTR */
 };
 
-static unsigned int db_get_task_value( const ADDRESS* addr,
+static unsigned int db_get_task_value( const ADDRESS64* addr,
                                        int size, int is_signed )
 {
     unsigned int 	result = 0;
@@ -1104,7 +1104,7 @@ #define	get_value_inc(result, addr, size
 /*
  * Read address at location and return updated location.
  */
-static void db_read_address( ADDRESS* addr, int short_addr, int regmodrm,
+static void db_read_address( ADDRESS64* addr, int short_addr, int regmodrm,
                              struct i_addr *addrp )
 {
 	int mod, rm, sib, index, disp;
@@ -1186,7 +1186,7 @@ static void db_read_address( ADDRESS* ad
 
 static void db_task_printsym(unsigned int addr, int size)
 {
-    ADDRESS     a;
+    ADDRESS64   a;
     a.Mode   = AddrModeFlat;
     a.Offset = addr;
 
@@ -1238,7 +1238,7 @@ static void db_print_address(const char 
  * Disassemble floating-point ("escape") instruction
  * and return updated location.
  */
-static void db_disasm_esc( ADDRESS* addr, int inst, int short_addr,
+static void db_disasm_esc( ADDRESS64* addr, int inst, int short_addr,
                            int size, const char *seg )
 {
 	int		regmodrm;
@@ -1311,7 +1311,7 @@ static void db_disasm_esc( ADDRESS* addr
  * Disassemble instruction at 'addr'.  addr is changed to point to the
  * start of the next instruction.
  */
-void be_i386_disasm_one_insn(ADDRESS *addr, int display)
+void be_i386_disasm_one_insn(ADDRESS64 *addr, int display)
 {
 	int	inst;
 	int	size;
@@ -1791,7 +1791,7 @@ void be_i386_disasm_one_insn(ADDRESS *ad
 
 		case OS:
                     {
-                        ADDRESS address;
+                        ADDRESS64 address;
                         get_value_inc( address.Offset, addr,  /* offset */
                                        short_addr ? 2 : 4, FALSE );
                         get_value_inc( address.Segment, addr,  /* segment */
diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index e210e22..8c9fd9d 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -105,7 +105,7 @@ struct dbg_lvalue       /* structure to 
  */
 #	define	DLV_TARGET	0xF00D
 #	define	DLV_HOST	0x50DA
-    ADDRESS             addr;
+    ADDRESS64           addr;
     struct dbg_type     type;
 };
 
@@ -127,7 +127,7 @@ #endif
 
 struct dbg_breakpoint
 {
-    ADDRESS             addr;
+    ADDRESS64           addr;
     unsigned long       enabled : 1,
                         xpoint_type : 2,
                         refcount : 13,
@@ -174,8 +174,8 @@ struct dbg_thread
     EXCEPTION_RECORD            excpt_record;   /* only valid when in_exception is TRUE */
     struct
     {
-        ADDRESS                 addr_pc;
-        ADDRESS                 addr_frame;
+        ADDRESS64               addr_pc;
+        ADDRESS64               addr_frame;
     }*                          frames;
     int                         num_frames;
     int                         curr_frame;
@@ -192,7 +192,7 @@ struct dbg_delayed_bp
             int				lineno;
             char*			name;
         } symbol;
-        ADDRESS                 addr;
+        ADDRESS64               addr;
     } u;
 };
 
@@ -263,7 +263,7 @@ enum dbg_start {start_ok, start_error_pa
 
   /* break.c */
 extern void             break_set_xpoints(BOOL set);
-extern BOOL             break_add_break(const ADDRESS* addr, BOOL verbose, BOOL swbp);
+extern BOOL             break_add_break(const ADDRESS64* addr, BOOL verbose, BOOL swbp);
 extern BOOL             break_add_break_from_lvalue(const struct dbg_lvalue* value, BOOL swbp);
 extern void             break_add_break_from_id(const char* name, int lineno, BOOL swbp);
 extern void             break_add_break_from_lineno(int lineno, BOOL swbp);
@@ -274,7 +274,7 @@ extern void             break_delete_xpo
 extern void             break_delete_xpoints_from_module(unsigned long base);
 extern void             break_enable_xpoint(int num, BOOL enable);
 extern void             break_info(void);
-extern BOOL             break_should_continue(ADDRESS* addr, DWORD code, int* count, BOOL* is_break);
+extern BOOL             break_should_continue(ADDRESS64* addr, DWORD code, int* count, BOOL* is_break);
 extern void             break_suspend_execution(void);
 extern void             break_restart_execution(int count);
 extern int              break_add_condition(int bpnum, struct expr* exp);
@@ -333,22 +333,22 @@ extern void             info_wine_dbg_ch
 extern BOOL             memory_read_value(const struct dbg_lvalue* lvalue, DWORD size, void* result);
 extern BOOL             memory_write_value(const struct dbg_lvalue* val, DWORD size, void* value);
 extern void             memory_examine(const struct dbg_lvalue *lvalue, int count, char format);
-extern void*            memory_to_linear_addr(const ADDRESS* address);
-extern BOOL             memory_get_current_pc(ADDRESS* address);
-extern BOOL             memory_get_current_stack(ADDRESS* address);
-extern BOOL             memory_get_current_frame(ADDRESS* address);
+extern void*            memory_to_linear_addr(const ADDRESS64* address);
+extern BOOL             memory_get_current_pc(ADDRESS64* address);
+extern BOOL             memory_get_current_stack(ADDRESS64* address);
+extern BOOL             memory_get_current_frame(ADDRESS64* address);
 extern BOOL             memory_get_string(struct dbg_process* pcs, void* addr, BOOL in_debuggee, BOOL unicode, char* buffer, int size);
 extern BOOL             memory_get_string_indirect(struct dbg_process* pcs, void* addr, BOOL unicode, char* buffer, int size);
 extern BOOL             memory_get_register(DWORD regno, DWORD** value, char* buffer, int len);
 extern void             memory_disassemble(const struct dbg_lvalue*, const struct dbg_lvalue*, int instruction_count);
-extern BOOL             memory_disasm_one_insn(ADDRESS* addr);
-extern void             print_bare_address(const ADDRESS* addr);
-extern void             print_address(const ADDRESS* addr, BOOLEAN with_line);
+extern BOOL             memory_disasm_one_insn(ADDRESS64* addr);
+extern void             print_bare_address(const ADDRESS64* addr);
+extern void             print_address(const ADDRESS64* addr, BOOLEAN with_line);
 extern void             print_basic(const struct dbg_lvalue* value, int count, char format);
 
   /* source.c */
 extern void             source_list(IMAGEHLP_LINE* src1, IMAGEHLP_LINE* src2, int delta);
-extern void             source_list_from_addr(const ADDRESS* addr, int nlines);
+extern void             source_list_from_addr(const ADDRESS64* addr, int nlines);
 extern void             source_show_path(void);
 extern void             source_add_path(const char* path);
 extern void             source_nuke_path(void);
@@ -364,7 +364,7 @@ extern BOOL             stack_get_curren
   /* symbol.c */
 extern enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno, struct dbg_lvalue* addr, BOOL bp_disp);
 extern void             symbol_read_symtable(const char* filename, unsigned long offset);
-extern enum dbg_line_status symbol_get_function_line_status(const ADDRESS* addr);
+extern enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr);
 extern BOOL             symbol_get_line(const char* filename, const char* func, IMAGEHLP_LINE* ret);
 extern void             symbol_info(const char* str);
 extern int              symbol_info_locals(void);
@@ -387,7 +387,7 @@ extern void             print_value(cons
 extern int              types_print_type(const struct dbg_type*, BOOL details);
 extern int              print_types(void);
 extern long int         types_extract_as_integer(const struct dbg_lvalue*);
-extern void             types_extract_as_address(const struct dbg_lvalue*, ADDRESS*);
+extern void             types_extract_as_address(const struct dbg_lvalue*, ADDRESS64*);
 extern BOOL             types_deref(const struct dbg_lvalue* value, struct dbg_lvalue* result);
 extern BOOL             types_udt_find_element(struct dbg_lvalue* value, const char* name, long int* tmpbuf);
 extern BOOL             types_array_index(const struct dbg_lvalue* value, int index, struct dbg_lvalue* result);
diff --git a/programs/winedbg/memory.c b/programs/winedbg/memory.c
index da964a4..3c4e047 100644
--- a/programs/winedbg/memory.c
+++ b/programs/winedbg/memory.c
@@ -32,13 +32,13 @@ #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(winedbg);
 
-void* be_cpu_linearize(HANDLE hThread, const ADDRESS* addr)
+void* be_cpu_linearize(HANDLE hThread, const ADDRESS64* addr)
 {
     assert(addr->Mode == AddrModeFlat);
-    return (void*)addr->Offset;
+    return (void*)(DWORD_PTR)addr->Offset;
 }
 
-unsigned be_cpu_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS* addr, 
+unsigned be_cpu_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS64* addr, 
                            unsigned seg, unsigned long offset)
 {
     addr->Mode    = AddrModeFlat;
@@ -47,26 +47,26 @@ unsigned be_cpu_build_addr(HANDLE hThrea
     return TRUE;
 }
 
-void* memory_to_linear_addr(const ADDRESS* addr)
+void* memory_to_linear_addr(const ADDRESS64* addr)
 {
     return be_cpu->linearize(dbg_curr_thread->handle, addr);
 }
 
-BOOL memory_get_current_pc(ADDRESS* addr)
+BOOL memory_get_current_pc(ADDRESS64* addr)
 {
     assert(be_cpu->get_addr);
     return be_cpu->get_addr(dbg_curr_thread->handle, &dbg_context, 
                             be_cpu_addr_pc, addr);
 }
 
-BOOL memory_get_current_stack(ADDRESS* addr)
+BOOL memory_get_current_stack(ADDRESS64* addr)
 {
     assert(be_cpu->get_addr);
     return be_cpu->get_addr(dbg_curr_thread->handle, &dbg_context, 
                             be_cpu_addr_stack, addr);
 }
 
-BOOL memory_get_current_frame(ADDRESS* addr)
+BOOL memory_get_current_frame(ADDRESS64* addr)
 {
     assert(be_cpu->get_addr);
     return be_cpu->get_addr(dbg_curr_thread->handle, &dbg_context, 
@@ -75,7 +75,7 @@ BOOL memory_get_current_frame(ADDRESS* a
 
 static void	memory_report_invalid_addr(const void* addr)
 {
-    ADDRESS     address;
+    ADDRESS64   address;
 
     address.Mode    = AddrModeFlat;
     address.Segment = 0;
@@ -104,7 +104,7 @@ BOOL memory_read_value(const struct dbg_
     {
         if (lvalue->addr.Offset)
         {
-            memcpy(result, (void*)lvalue->addr.Offset, size);
+            memcpy(result, (void*)(DWORD_PTR)lvalue->addr.Offset, size);
             ret = TRUE;
         }
     }
@@ -134,7 +134,7 @@ BOOL memory_write_value(const struct dbg
     }
     else 
     {
-        memcpy((void*)lvalue->addr.Offset, value, size);
+        memcpy((void*)(DWORD_PTR)lvalue->addr.Offset, value, size);
     }
     return ret;
 }
@@ -148,7 +148,7 @@ void memory_examine(const struct dbg_lva
 {
     int			i;
     char                buffer[256];
-    ADDRESS             addr;
+    ADDRESS64           addr;
     void               *linear;
 
     types_extract_as_address(lvalue, &addr);
@@ -478,19 +478,19 @@ void print_basic(const struct dbg_lvalue
     }
 }
 
-void print_bare_address(const ADDRESS* addr)
+void print_bare_address(const ADDRESS64* addr)
 {
     switch (addr->Mode)
     {
     case AddrModeFlat: 
-        dbg_printf("0x%08lx", addr->Offset); 
+        dbg_printf("0x%08llx", addr->Offset); 
         break;
     case AddrModeReal:
     case AddrMode1616:
-        dbg_printf("0x%04x:0x%04lx", addr->Segment, addr->Offset);
+        dbg_printf("0x%04x:0x%04llx", addr->Segment, addr->Offset);
         break;
     case AddrMode1632:
-        dbg_printf("0x%04x:0x%08lx", addr->Segment, addr->Offset);
+        dbg_printf("0x%04x:0x%08llx", addr->Segment, addr->Offset);
         break;
     default:
         dbg_printf("Unknown mode %x\n", addr->Mode);
@@ -503,7 +503,7 @@ void print_bare_address(const ADDRESS* a
  *
  * Print an 16- or 32-bit address, with the nearest symbol if any.
  */
-void print_address(const ADDRESS* addr, BOOLEAN with_line)
+void print_address(const ADDRESS64* addr, BOOLEAN with_line)
 {
     char                buffer[sizeof(SYMBOL_INFO) + 256];
     SYMBOL_INFO*        si = (SYMBOL_INFO*)buffer;
@@ -532,7 +532,7 @@ void print_address(const ADDRESS* addr, 
     }
 }
 
-BOOL memory_disasm_one_insn(ADDRESS* addr)
+BOOL memory_disasm_one_insn(ADDRESS64* addr)
 {
     char        ch;
 
@@ -551,7 +551,7 @@ BOOL memory_disasm_one_insn(ADDRESS* add
 void memory_disassemble(const struct dbg_lvalue* xstart, 
                         const struct dbg_lvalue* xend, int instruction_count)
 {
-    static ADDRESS last = {0,0,0};
+    static ADDRESS64 last = {0,0,0};
     int stop = 0;
     int i;
 
diff --git a/programs/winedbg/source.c b/programs/winedbg/source.c
index 7ca935c..500dd94 100644
--- a/programs/winedbg/source.c
+++ b/programs/winedbg/source.c
@@ -355,10 +355,10 @@ void source_list(IMAGEHLP_LINE* src1, IM
     source_end_line = end;
 }
 
-void source_list_from_addr(const ADDRESS* addr, int nlines)
+void source_list_from_addr(const ADDRESS64* addr, int nlines)
 {
     IMAGEHLP_LINE       il;
-    ADDRESS             la;
+    ADDRESS64           la;
     DWORD               disp;
 
     if (!addr)
diff --git a/programs/winedbg/stack.c b/programs/winedbg/stack.c
index c2dec5f..70a7a11 100644
--- a/programs/winedbg/stack.c
+++ b/programs/winedbg/stack.c
@@ -101,7 +101,7 @@ BOOL stack_get_current_frame(IMAGEHLP_ST
 
 BOOL stack_set_frame(int newframe)
 {
-    ADDRESS     addr;
+    ADDRESS64   addr;
     if (!stack_set_frame_internal(newframe)) return FALSE;
     addr.Mode = AddrModeFlat;
     addr.Offset = (unsigned long)memory_to_linear_addr(&dbg_curr_thread->frames[dbg_curr_thread->curr_frame].addr_pc);
@@ -124,7 +124,7 @@ BOOL stack_get_current_symbol(SYMBOL_INF
                        &disp, symbol);
 }
 
-static BOOL CALLBACK stack_read_mem(HANDLE hProc, DWORD addr, 
+static BOOL CALLBACK stack_read_mem(HANDLE hProc, DWORD64 addr, 
                                     PVOID buffer, DWORD size, PDWORD written)
 {
     SIZE_T sz;
@@ -132,7 +132,8 @@ static BOOL CALLBACK stack_read_mem(HAND
 
     struct dbg_process* pcs = dbg_get_process_h(hProc);
     if (!pcs) return FALSE;
-    ret = pcs->process_io->read(hProc, (const void*)addr, buffer, size, &sz);
+    ret = pcs->process_io->read(hProc, (const void*)(DWORD_PTR)addr, buffer,
+                                size, &sz);
     if (written != NULL) *written = sz;
     return ret;
 }
@@ -144,8 +145,8 @@ static BOOL CALLBACK stack_read_mem(HAND
  */
 unsigned stack_fetch_frames(void)
 {
-    STACKFRAME  sf;
-    unsigned    nf = 0;
+    STACKFRAME64 sf;
+    unsigned     nf = 0;
 
     HeapFree(GetProcessHeap(), 0, dbg_curr_thread->frames);
     dbg_curr_thread->frames = NULL;
@@ -161,9 +162,9 @@ unsigned stack_fetch_frames(void)
         sf.AddrFrame.Mode = AddrModeFlat;
     }
 
-    while (StackWalk(IMAGE_FILE_MACHINE_I386, dbg_curr_process->handle, 
-                     dbg_curr_thread->handle, &sf, &dbg_context, stack_read_mem,
-                     SymFunctionTableAccess, SymGetModuleBase, NULL))
+    while (StackWalk64(IMAGE_FILE_MACHINE_I386, dbg_curr_process->handle, 
+                       dbg_curr_thread->handle, &sf, &dbg_context, stack_read_mem,
+                       SymFunctionTableAccess64, SymGetModuleBase64, NULL))
     {
         dbg_curr_thread->frames = dbg_heap_realloc(dbg_curr_thread->frames, 
                                                    (nf + 1) * sizeof(dbg_curr_thread->frames[0]));
diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c
index 94bf9c7..9e8ccf4 100644
--- a/programs/winedbg/symbol.c
+++ b/programs/winedbg/symbol.c
@@ -419,7 +419,7 @@ #endif
  *
  * Find the symbol nearest to a given address.
  */
-enum dbg_line_status symbol_get_function_line_status(const ADDRESS* addr)
+enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr)
 {
     IMAGEHLP_LINE       il;
     DWORD               disp;
@@ -573,7 +573,7 @@ static BOOL CALLBACK info_locals_cb(SYMB
 int symbol_info_locals(void)
 {
     IMAGEHLP_STACK_FRAME        ihsf;
-    ADDRESS                     addr;
+    ADDRESS64                   addr;
 
     stack_get_current_frame(&ihsf);
     addr.Mode = AddrModeFlat;
diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c
index 9cd1832..6e386c2 100644
--- a/programs/winedbg/tgt_active.c
+++ b/programs/winedbg/tgt_active.c
@@ -47,7 +47,7 @@ static void dbg_init_current_thread(void
             !dbg_curr_process->threads->next && /* first thread ? */
 	    DBG_IVAR(BreakAllThreadsStartup)) 
         {
-	    ADDRESS     addr;
+	    ADDRESS64   addr;
 
             break_set_xpoints(FALSE);
 	    addr.Mode   = AddrModeFlat;
@@ -118,7 +118,7 @@ #endif
 
 static unsigned dbg_exception_prolog(BOOL is_debug, const EXCEPTION_RECORD* rec)
 {
-    ADDRESS     addr;
+    ADDRESS64   addr;
     BOOL        is_break;
 
     memory_get_current_pc(&addr);
@@ -130,10 +130,10 @@ static unsigned dbg_exception_prolog(BOO
     {
         switch (addr.Mode)
         {
-        case AddrModeFlat: dbg_printf(" in 32-bit code (0x%08lx)", addr.Offset); break;
-        case AddrModeReal: dbg_printf(" in vm86 code (%04x:%04lx)", addr.Segment, addr.Offset); break;
-        case AddrMode1616: dbg_printf(" in 16-bit code (%04x:%04lx)", addr.Segment, addr.Offset); break;
-        case AddrMode1632: dbg_printf(" in 32-bit code (%04x:%08lx)", addr.Segment, addr.Offset); break;
+        case AddrModeFlat: dbg_printf(" in 32-bit code (0x%08llx)", addr.Offset); break;
+        case AddrModeReal: dbg_printf(" in vm86 code (%04x:%04llx)", addr.Segment, addr.Offset); break;
+        case AddrMode1616: dbg_printf(" in 16-bit code (%04x:%04llx)", addr.Segment, addr.Offset); break;
+        case AddrMode1632: dbg_printf(" in 32-bit code (%04x:%08llx)", addr.Segment, addr.Offset); break;
         default: dbg_printf(" bad address");
         }
 	dbg_printf(".\n");
@@ -209,7 +209,7 @@ static unsigned dbg_exception_prolog(BOO
         dbg_curr_thread->exec_mode == dbg_exec_step_over_insn ||
         dbg_curr_thread->exec_mode == dbg_exec_step_into_insn)
     {
-        ADDRESS tmp = addr;
+        ADDRESS64 tmp = addr;
         /* Show where we crashed */
         memory_disasm_one_insn(&tmp);
     }
@@ -312,7 +312,7 @@ static DWORD dbg_handle_exception(const 
             break;
         case STATUS_POSSIBLE_DEADLOCK:
         {
-            ADDRESS         addr;
+            ADDRESS64       addr;
 
             addr.Mode   = AddrModeFlat;
             addr.Offset = rec->ExceptionInformation[0];
@@ -605,11 +605,11 @@ static void dbg_resume_debuggee(DWORD co
 {
     if (dbg_curr_thread->in_exception)
     {
-        ADDRESS         addr;
+        ADDRESS64       addr;
 
         dbg_exception_epilog();
         memory_get_current_pc(&addr);
-        WINE_TRACE("Exiting debugger      PC=0x%lx mode=%d count=%d\n",
+        WINE_TRACE("Exiting debugger      PC=0x%llx mode=%d count=%d\n",
                    addr.Offset, dbg_curr_thread->exec_mode,
                    dbg_curr_thread->exec_count);
         if (dbg_curr_thread)
@@ -626,7 +626,7 @@ static void dbg_resume_debuggee(DWORD co
 void dbg_wait_next_exception(DWORD cont, int count, int mode)
 {
     DEBUG_EVENT         de;
-    ADDRESS             addr;
+    ADDRESS64           addr;
 
     if (cont == DBG_CONTINUE)
     {
@@ -643,7 +643,7 @@ void dbg_wait_next_exception(DWORD cont,
     dbg_interactiveP = TRUE;
 
     memory_get_current_pc(&addr);
-    WINE_TRACE("Entering debugger     PC=0x%lx mode=%d count=%d\n",
+    WINE_TRACE("Entering debugger     PC=0x%llx mode=%d count=%d\n",
                addr.Offset, dbg_curr_thread->exec_mode,
                dbg_curr_thread->exec_count);
 }
diff --git a/programs/winedbg/tgt_minidump.c b/programs/winedbg/tgt_minidump.c
index c1f0b9e..274c138 100644
--- a/programs/winedbg/tgt_minidump.c
+++ b/programs/winedbg/tgt_minidump.c
@@ -332,7 +332,7 @@ static enum dbg_start minidump_do_reload
 
         if ((dbg_curr_thread = dbg_get_thread(dbg_curr_process, mes->ThreadId)))
         {
-            ADDRESS     addr;
+            ADDRESS64   addr;
 
             dbg_curr_tid = mes->ThreadId;
             dbg_curr_thread->in_exception = TRUE;
diff --git a/programs/winedbg/types.c b/programs/winedbg/types.c
index 7ea1aa5..f248f21 100644
--- a/programs/winedbg/types.c
+++ b/programs/winedbg/types.c
@@ -132,7 +132,7 @@ long int types_extract_as_integer(const 
  *
  *
  */
-void types_extract_as_address(const struct dbg_lvalue* lvalue, ADDRESS* addr)
+void types_extract_as_address(const struct dbg_lvalue* lvalue, ADDRESS64* addr)
 {
     if (lvalue->type.id == dbg_itype_segptr && lvalue->type.module == 0)
     {
-- 
1.4.0




More information about the wine-patches mailing list