winedbg: Force 64bit line number information throughout the code to ease 64bit portability.

This commit is contained in:
Eric Pouech 2009-12-12 12:19:44 +01:00 committed by Alexandre Julliard
parent 91c7ff2994
commit 12c3a012cb
8 changed files with 29 additions and 28 deletions

View File

@ -299,14 +299,14 @@ void break_add_break_from_lineno(int lineno, BOOL swbp)
if (lineno != -1) if (lineno != -1)
{ {
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
DWORD disp; DWORD disp;
DWORD_PTR linear = (DWORD_PTR)memory_to_linear_addr(&bkln.addr); DWORD_PTR linear = (DWORD_PTR)memory_to_linear_addr(&bkln.addr);
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (!SymGetLineFromAddr(dbg_curr_process->handle, linear, &disp, &il)) if (!SymGetLineFromAddr64(dbg_curr_process->handle, linear, &disp, &il))
{ {
dbg_printf("Unable to add breakpoint (unknown address %lx)\n", linear); dbg_printf("Unable to add breakpoint (unknown address %lx)\n", linear);
return; return;

View File

@ -46,7 +46,7 @@ static void parser(const char*);
struct dbg_lvalue lvalue; struct dbg_lvalue lvalue;
char* string; char* string;
INT_PTR integer; INT_PTR integer;
IMAGEHLP_LINE listing; IMAGEHLP_LINE64 listing;
struct expr* expression; struct expr* expression;
struct type_expr_t type; struct type_expr_t type;
} }
@ -184,7 +184,7 @@ list_arg:
| pathname ':' identifier { symbol_get_line($1, $3, &$$); } | pathname ':' identifier { symbol_get_line($1, $3, &$$); }
| '*' expr_lvalue { DWORD disp; ADDRESS64 addr; $$.SizeOfStruct = sizeof($$); | '*' expr_lvalue { DWORD disp; ADDRESS64 addr; $$.SizeOfStruct = sizeof($$);
types_extract_as_address(&$2, &addr); types_extract_as_address(&$2, &addr);
SymGetLineFromAddr(dbg_curr_process->handle, (unsigned long)memory_to_linear_addr(& addr), &disp, & $$); } SymGetLineFromAddr64(dbg_curr_process->handle, (unsigned long)memory_to_linear_addr(& addr), &disp, & $$); }
; ;
run_command: run_command:

View File

@ -375,7 +375,7 @@ extern void print_address(const ADDRESS64* addr, BOOLEAN with_line);
extern void print_basic(const struct dbg_lvalue* value, char format); extern void print_basic(const struct dbg_lvalue* value, char format);
/* source.c */ /* source.c */
extern void source_list(IMAGEHLP_LINE* src1, IMAGEHLP_LINE* src2, int delta); extern void source_list(IMAGEHLP_LINE64* src1, IMAGEHLP_LINE64* src2, int delta);
extern void source_list_from_addr(const ADDRESS64* addr, int nlines); extern void source_list_from_addr(const ADDRESS64* addr, int nlines);
extern void source_show_path(void); extern void source_show_path(void);
extern void source_add_path(const char* path); extern void source_add_path(const char* path);
@ -395,7 +395,7 @@ extern BOOL stack_get_current_symbol(SYMBOL_INFO* sym);
extern enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno, struct dbg_lvalue* addr, BOOL bp_disp); 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 void symbol_read_symtable(const char* filename, unsigned long offset);
extern enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* 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 BOOL symbol_get_line(const char* filename, const char* func, IMAGEHLP_LINE64* ret);
extern void symbol_info(const char* str); extern void symbol_info(const char* str);
extern void symbol_print_local(const SYMBOL_INFO* sym, ULONG_PTR base, BOOL detailed); extern void symbol_print_local(const SYMBOL_INFO* sym, ULONG_PTR base, BOOL detailed);
extern int symbol_info_locals(void); extern int symbol_info_locals(void);

View File

@ -588,11 +588,11 @@ void print_address(const ADDRESS64* addr, BOOLEAN with_line)
if (disp64) dbg_printf("+0x%lx", (DWORD_PTR)disp64); if (disp64) dbg_printf("+0x%lx", (DWORD_PTR)disp64);
if (with_line) if (with_line)
{ {
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
IMAGEHLP_MODULE im; IMAGEHLP_MODULE im;
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (SymGetLineFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, &disp, &il)) if (SymGetLineFromAddr64(dbg_curr_process->handle, (DWORD_PTR)lin, &disp, &il))
dbg_printf(" [%s:%u]", il.FileName, il.LineNumber); dbg_printf(" [%s:%u]", il.FileName, il.LineNumber);
im.SizeOfStruct = sizeof(im); im.SizeOfStruct = sizeof(im);
if (SymGetModuleInfo(dbg_curr_process->handle, (DWORD_PTR)lin, &im)) if (SymGetModuleInfo(dbg_curr_process->handle, (DWORD_PTR)lin, &im))

View File

@ -286,7 +286,7 @@ static int source_display(const char* sourcefile, int start, int end)
return rtn; return rtn;
} }
void source_list(IMAGEHLP_LINE* src1, IMAGEHLP_LINE* src2, int delta) void source_list(IMAGEHLP_LINE64* src1, IMAGEHLP_LINE64* src2, int delta)
{ {
int end; int end;
int start; int start;
@ -344,7 +344,7 @@ void source_list(IMAGEHLP_LINE* src1, IMAGEHLP_LINE* src2, int delta)
void source_list_from_addr(const ADDRESS64* addr, int nlines) void source_list_from_addr(const ADDRESS64* addr, int nlines)
{ {
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
ADDRESS64 la; ADDRESS64 la;
DWORD disp; DWORD disp;
@ -355,9 +355,9 @@ void source_list_from_addr(const ADDRESS64* addr, int nlines)
} }
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (SymGetLineFromAddr(dbg_curr_process->handle, if (SymGetLineFromAddr64(dbg_curr_process->handle,
(unsigned long)memory_to_linear_addr(addr), (DWORD_PTR)memory_to_linear_addr(addr),
&disp, &il)) &disp, &il))
source_list(&il, NULL, nlines); source_list(&il, NULL, nlines);
} }

View File

@ -232,7 +232,7 @@ static void stack_print_addr_and_args(int nf)
char buffer[sizeof(SYMBOL_INFO) + 256]; char buffer[sizeof(SYMBOL_INFO) + 256];
SYMBOL_INFO* si = (SYMBOL_INFO*)buffer; SYMBOL_INFO* si = (SYMBOL_INFO*)buffer;
IMAGEHLP_STACK_FRAME ihsf; IMAGEHLP_STACK_FRAME ihsf;
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
IMAGEHLP_MODULE im; IMAGEHLP_MODULE im;
DWORD64 disp64; DWORD64 disp64;
@ -263,8 +263,8 @@ static void stack_print_addr_and_args(int nf)
dbg_printf(")"); dbg_printf(")");
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (SymGetLineFromAddr(dbg_curr_process->handle, ihsf.InstructionOffset, if (SymGetLineFromAddr64(dbg_curr_process->handle,
&disp, &il)) ihsf.InstructionOffset, &disp, &il))
dbg_printf(" [%s:%u]", il.FileName, il.LineNumber); dbg_printf(" [%s:%u]", il.FileName, il.LineNumber);
dbg_printf(" in %s", im.ModuleName); dbg_printf(" in %s", im.ModuleName);
} }

View File

@ -403,13 +403,13 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno,
else else
{ {
DWORD disp; DWORD disp;
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
BOOL found = FALSE; BOOL found = FALSE;
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
SymGetLineFromAddr(dbg_curr_process->handle, SymGetLineFromAddr64(dbg_curr_process->handle,
(DWORD_PTR)memory_to_linear_addr(&sgv.syms[i].lvalue.addr), (DWORD_PTR)memory_to_linear_addr(&sgv.syms[i].lvalue.addr),
&disp, &il); &disp, &il);
do do
{ {
if (lineno == il.LineNumber) if (lineno == il.LineNumber)
@ -418,7 +418,7 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno,
found = TRUE; found = TRUE;
break; break;
} }
} while (SymGetLineNext(dbg_curr_process->handle, &il)); } while (SymGetLineNext64(dbg_curr_process->handle, &il));
if (!found) if (!found)
WINE_FIXME("No line (%d) found for %s (setting to symbol start)\n", WINE_FIXME("No line (%d) found for %s (setting to symbol start)\n",
lineno, name); lineno, name);
@ -521,7 +521,7 @@ void symbol_read_symtable(const char* filename, unsigned long offset)
*/ */
enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr) enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr)
{ {
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
DWORD disp; DWORD disp;
ULONG64 disp64, start; ULONG64 disp64, start;
DWORD_PTR lin = (DWORD_PTR)memory_to_linear_addr(addr); DWORD_PTR lin = (DWORD_PTR)memory_to_linear_addr(addr);
@ -552,7 +552,7 @@ enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr)
return dbg_no_line_info; return dbg_no_line_info;
} }
/* we should have a function now */ /* we should have a function now */
if (!SymGetLineFromAddr(dbg_curr_process->handle, lin, &disp, &il)) if (!SymGetLineFromAddr64(dbg_curr_process->handle, lin, &disp, &il))
return dbg_no_line_info; return dbg_no_line_info;
func.module = sym->ModBase; func.module = sym->ModBase;
@ -575,13 +575,14 @@ enum dbg_line_status symbol_get_function_line_status(const ADDRESS64* addr)
* Returns sourcefile name and line number in a format that the listing * Returns sourcefile name and line number in a format that the listing
* handler can deal with. * handler can deal with.
*/ */
BOOL symbol_get_line(const char* filename, const char* name, IMAGEHLP_LINE* line) BOOL symbol_get_line(const char* filename, const char* name,
IMAGEHLP_LINE64* line)
{ {
struct sgv_data sgv; struct sgv_data sgv;
char buffer[512]; char buffer[512];
DWORD opt, disp; DWORD opt, disp;
unsigned i, found = FALSE; unsigned i, found = FALSE;
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
sgv.num = 0; sgv.num = 0;
sgv.num_thunks = 0; sgv.num_thunks = 0;
@ -619,7 +620,7 @@ BOOL symbol_get_line(const char* filename, const char* name, IMAGEHLP_LINE* line
DWORD_PTR linear = (DWORD_PTR)memory_to_linear_addr(&sgv.syms[i].lvalue.addr); DWORD_PTR linear = (DWORD_PTR)memory_to_linear_addr(&sgv.syms[i].lvalue.addr);
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (!SymGetLineFromAddr(dbg_curr_process->handle, linear, &disp, &il)) if (!SymGetLineFromAddr64(dbg_curr_process->handle, linear, &disp, &il))
continue; continue;
if (filename && strcmp(il.FileName, filename)) continue; if (filename && strcmp(il.FileName, filename)) continue;
if (found) if (found)

View File

@ -196,14 +196,14 @@ static unsigned dbg_exception_prolog(BOOL is_debug, BOOL first_chance, const EXC
SYMBOL_INFO* si = (SYMBOL_INFO*)buffer; SYMBOL_INFO* si = (SYMBOL_INFO*)buffer;
void* lin = memory_to_linear_addr(&addr); void* lin = memory_to_linear_addr(&addr);
DWORD64 disp64; DWORD64 disp64;
IMAGEHLP_LINE il; IMAGEHLP_LINE64 il;
DWORD disp; DWORD disp;
si->SizeOfStruct = sizeof(*si); si->SizeOfStruct = sizeof(*si);
si->MaxNameLen = 256; si->MaxNameLen = 256;
il.SizeOfStruct = sizeof(il); il.SizeOfStruct = sizeof(il);
if (SymFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, &disp64, si) && if (SymFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, &disp64, si) &&
SymGetLineFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, &disp, &il)) SymGetLineFromAddr64(dbg_curr_process->handle, (DWORD_PTR)lin, &disp, &il))
{ {
if ((!last_name || strcmp(last_name, si->Name)) || if ((!last_name || strcmp(last_name, si->Name)) ||
(!last_file || strcmp(last_file, il.FileName))) (!last_file || strcmp(last_file, il.FileName)))