winedbg: Force 64bit line number information throughout the code to ease 64bit portability.
This commit is contained in:
parent
91c7ff2994
commit
12c3a012cb
@ -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;
|
||||||
|
@ -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:
|
||||||
|
@ -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);
|
||||||
|
@ -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))
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user