Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
1d04f826
Commit
1d04f826
authored
Jul 26, 2006
by
Ge van Geldorp
Committed by
Alexandre Julliard
Jul 26, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winedbg: Change ADDRESS variables to ADDRESS64 so we can handle 64-bit addresses.
parent
3b10a021
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
151 additions
and
102 deletions
+151
-102
be_alpha.c
programs/winedbg/be_alpha.c
+2
-2
be_cpu.h
programs/winedbg/be_cpu.h
+9
-9
be_i386.c
programs/winedbg/be_i386.c
+10
-9
be_ppc.c
programs/winedbg/be_ppc.c
+2
-2
be_x86_64.c
programs/winedbg/be_x86_64.c
+3
-3
break.c
programs/winedbg/break.c
+12
-10
db_disasm.c
programs/winedbg/db_disasm.c
+6
-6
debugger.h
programs/winedbg/debugger.h
+19
-17
memory.c
programs/winedbg/memory.c
+47
-18
source.c
programs/winedbg/source.c
+2
-2
stack.c
programs/winedbg/stack.c
+7
-6
symbol.c
programs/winedbg/symbol.c
+2
-2
tgt_active.c
programs/winedbg/tgt_active.c
+28
-14
tgt_minidump.c
programs/winedbg/tgt_minidump.c
+1
-1
types.c
programs/winedbg/types.c
+1
-1
No files found.
programs/winedbg/be_alpha.c
View file @
1d04f826
...
...
@@ -23,7 +23,7 @@
#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
,
ADDRESS
64
*
addr
)
{
dbg_printf
(
"not done
\n
"
);
return
FALSE
;
...
...
@@ -77,7 +77,7 @@ static unsigned be_alpha_is_func_call(void* insn, void** insn_callee)
return
FALSE
;
}
static
void
be_alpha_disasm_one_insn
(
ADDRESS
*
addr
,
int
display
)
static
void
be_alpha_disasm_one_insn
(
ADDRESS
64
*
addr
,
int
display
)
{
dbg_printf
(
"Disasm NIY
\n
"
);
}
...
...
programs/winedbg/be_cpu.h
View file @
1d04f826
...
...
@@ -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
ADDRESS
64
*
);
/* Fills in an ADDRESS
64
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 ADDRESS
64
(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
,
ADDRESS
64
*
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
,
ADDRESS
64
*
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
,
ADDRESS
64
*
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
)(
ADDRESS
64
*
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
ADDRESS
64
*
);
unsigned
be_cpu_build_addr
(
HANDLE
hThread
,
const
CONTEXT
*
ctx
,
ADDRESS
64
*
addr
,
unsigned
seg
,
unsigned
long
offset
);
programs/winedbg/be_i386.c
View file @
1d04f826
...
...
@@ -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
(
ADDRESS
64
*
addr
,
int
display
);
#define STEP_FLAG 0x00000100
/* single step flag */
#define V86_FLAG 0x00020000
...
...
@@ -46,30 +46,31 @@ static ADDRESS_MODE get_selector_type(HANDLE hThread, const CONTEXT* ctx, WORD s
return
-
1
;
}
static
void
*
be_i386_linearize
(
HANDLE
hThread
,
const
ADDRESS
*
addr
)
static
void
*
be_i386_linearize
(
HANDLE
hThread
,
const
ADDRESS
64
*
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
,
ADDRESS
64
*
addr
,
unsigned
seg
,
unsigned
long
offset
)
{
addr
->
Mode
=
AddrModeFlat
;
...
...
@@ -96,7 +97,7 @@ static unsigned be_i386_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS*
}
static
unsigned
be_i386_get_addr
(
HANDLE
hThread
,
const
CONTEXT
*
ctx
,
enum
be_cpu_addr
bca
,
ADDRESS
*
addr
)
enum
be_cpu_addr
bca
,
ADDRESS
64
*
addr
)
{
switch
(
bca
)
{
...
...
@@ -378,7 +379,7 @@ static unsigned be_i386_is_break_insn(const void* insn)
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
,
ADDRESS
64
*
callee
)
{
BYTE
ch
;
int
delta
;
...
...
programs/winedbg/be_ppc.c
View file @
1d04f826
...
...
@@ -24,7 +24,7 @@
#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
,
ADDRESS
64
*
addr
)
{
switch
(
bca
)
{
...
...
@@ -90,7 +90,7 @@ static unsigned be_ppc_is_func_call(void* insn, void** insn_callee)
return
FALSE
;
}
static
void
be_ppc_disasm_one_insn
(
ADDRESS
*
addr
,
int
display
)
static
void
be_ppc_disasm_one_insn
(
ADDRESS
64
*
addr
,
int
display
)
{
dbg_printf
(
"Disasm NIY
\n
"
);
}
...
...
programs/winedbg/be_x86_64.c
View file @
1d04f826
...
...
@@ -23,7 +23,7 @@
#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
,
ADDRESS
64
*
addr
)
{
addr
->
Mode
=
AddrModeFlat
;
switch
(
bca
)
...
...
@@ -142,13 +142,13 @@ static unsigned be_x86_64_is_break_insn(const void* 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
,
ADDRESS
64
*
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
(
ADDRESS
64
*
addr
,
int
display
)
{
dbg_printf
(
"Disasm NIY
\n
"
);
}
...
...
programs/winedbg/break.c
View file @
1d04f826
...
...
@@ -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
ADDRESS
64
*
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* addr, enum be_xpoint_type type)
*
* 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
ADDRESS
64
*
addr
)
{
int
num
;
struct
dbg_breakpoint
*
bp
=
dbg_curr_process
->
bp
;
...
...
@@ -160,7 +160,7 @@ static BOOL get_watched_value(int num, LPDWORD val)
*
* Add a breakpoint.
*/
BOOL
break_add_break
(
const
ADDRESS
*
addr
,
BOOL
verbose
,
BOOL
swbp
)
BOOL
break_add_break
(
const
ADDRESS
64
*
addr
,
BOOL
verbose
,
BOOL
swbp
)
{
int
num
;
BYTE
ch
;
...
...
@@ -204,7 +204,7 @@ BOOL break_add_break(const ADDRESS* addr, BOOL verbose, BOOL swbp)
*/
BOOL
break_add_break_from_lvalue
(
const
struct
dbg_lvalue
*
lvalue
,
BOOL
swbp
)
{
ADDRESS
addr
;
ADDRESS
64
addr
;
types_extract_as_address
(
lvalue
,
&
addr
);
...
...
@@ -270,7 +270,7 @@ void break_add_break_from_id(const char *name, int lineno, BOOL swbp)
struct
cb_break_lineno
{
int
lineno
;
ADDRESS
addr
;
ADDRESS
64
addr
;
};
static
BOOL
CALLBACK
line_cb
(
SRCCODEINFO
*
sci
,
void
*
user
)
...
...
@@ -336,6 +336,7 @@ void break_check_delayed_bp(void)
struct
dbg_lvalue
lvalue
;
int
i
;
struct
dbg_delayed_bp
*
dbp
=
dbg_curr_process
->
delayed_bp
;
char
hexbuf
[
MAX_OFFSET_TO_STR_LEN
];
for
(
i
=
0
;
i
<
dbg_curr_process
->
num_delayed_bp
;
i
++
)
{
...
...
@@ -350,8 +351,9 @@ 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
"
,
dbp
[
i
].
u
.
addr
.
Segment
,
dbp
[
i
].
u
.
addr
.
Offset
);
WINE_TRACE
(
"
\t
%04x:%s
\n
"
,
dbp
[
i
].
u
.
addr
.
Segment
,
memory_offset_to_string
(
hexbuf
,
dbp
[
i
].
u
.
addr
.
Offset
,
0
));
else
WINE_TRACE
(
"
\t
'%s' @ %d
\n
"
,
dbp
[
i
].
u
.
symbol
.
name
,
dbp
[
i
].
u
.
symbol
.
lineno
);
...
...
@@ -721,7 +723,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
(
ADDRESS
64
*
addr
,
DWORD
code
,
int
*
count
,
BOOL
*
is_break
)
{
DWORD
oldval
=
0
;
enum
dbg_exec_mode
mode
=
dbg_curr_thread
->
exec_mode
;
...
...
@@ -836,10 +838,10 @@ void break_suspend_execution(void)
*/
void
break_restart_execution
(
int
count
)
{
ADDRESS
addr
;
ADDRESS
64
addr
;
enum
dbg_line_status
status
;
enum
dbg_exec_mode
mode
,
ret_mode
;
ADDRESS
callee
;
ADDRESS
64
callee
;
void
*
linear
;
memory_get_current_pc
(
&
addr
);
...
...
programs/winedbg/db_disasm.c
View file @
1d04f826
...
...
@@ -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
ADDRESS
64
*
addr
,
int
size
,
int
is_signed
)
{
unsigned
int
result
=
0
;
...
...
@@ -1104,7 +1104,7 @@ static unsigned int db_get_task_value( const ADDRESS* addr,
/*
* 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
(
ADDRESS
64
*
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* addr, int short_addr, int regmodrm,
static
void
db_task_printsym
(
unsigned
int
addr
,
int
size
)
{
ADDRESS
a
;
ADDRESS
64
a
;
a
.
Mode
=
AddrModeFlat
;
a
.
Offset
=
addr
;
...
...
@@ -1238,7 +1238,7 @@ static void db_print_address(const char *seg, int size, struct i_addr *addrp, in
* 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
(
ADDRESS
64
*
addr
,
int
inst
,
int
short_addr
,
int
size
,
const
char
*
seg
)
{
int
regmodrm
;
...
...
@@ -1311,7 +1311,7 @@ static void db_disasm_esc( ADDRESS* addr, int inst, int short_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
(
ADDRESS
64
*
addr
,
int
display
)
{
int
inst
;
int
size
;
...
...
@@ -1791,7 +1791,7 @@ void be_i386_disasm_one_insn(ADDRESS *addr, int display)
case
OS
:
{
ADDRESS
address
;
ADDRESS
64
address
;
get_value_inc
(
address
.
Offset
,
addr
,
/* offset */
short_addr
?
2
:
4
,
FALSE
);
get_value_inc
(
address
.
Segment
,
addr
,
/* segment */
...
...
programs/winedbg/debugger.h
View file @
1d04f826
...
...
@@ -105,7 +105,7 @@ struct dbg_lvalue /* structure to hold left-values... */
*/
# define DLV_TARGET 0xF00D
# define DLV_HOST 0x50DA
ADDRESS
addr
;
ADDRESS
64
addr
;
struct
dbg_type
type
;
};
...
...
@@ -127,7 +127,7 @@ enum dbg_exec_mode
struct
dbg_breakpoint
{
ADDRESS
addr
;
ADDRESS
64
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
;
ADDRESS
64
addr_pc
;
ADDRESS
64
addr_frame
;
}
*
frames
;
int
num_frames
;
int
curr_frame
;
...
...
@@ -192,7 +192,7 @@ struct dbg_delayed_bp
int
lineno
;
char
*
name
;
}
symbol
;
ADDRESS
addr
;
ADDRESS
64
addr
;
}
u
;
};
...
...
@@ -263,7 +263,7 @@ enum dbg_start {start_ok, start_error_parse, start_error_init};
/* 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
ADDRESS
64
*
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_xpoint(int num);
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
(
ADDRESS
64
*
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,24 @@ extern void info_wine_dbg_channel(BOOL add, const char* chnl, const
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
ADDRESS
64
*
address
);
extern
BOOL
memory_get_current_pc
(
ADDRESS
64
*
address
);
extern
BOOL
memory_get_current_stack
(
ADDRESS
64
*
address
);
extern
BOOL
memory_get_current_frame
(
ADDRESS
64
*
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
);
#define MAX_OFFSET_TO_STR_LEN 19
extern
char
*
memory_offset_to_string
(
char
*
str
,
DWORD64
offset
,
unsigned
mode
);
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
ADDRESS
64
*
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 +366,7 @@ extern BOOL stack_get_current_symbol(SYMBOL_INFO* sym);
/* 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
ADDRESS
64
*
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 +389,7 @@ extern void print_value(const struct dbg_lvalue* addr, char format,
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
*
,
ADDRESS
64
*
);
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
);
...
...
programs/winedbg/memory.c
View file @
1d04f826
...
...
@@ -32,13 +32,13 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
winedbg
);
void
*
be_cpu_linearize
(
HANDLE
hThread
,
const
ADDRESS
*
addr
)
void
*
be_cpu_linearize
(
HANDLE
hThread
,
const
ADDRESS
64
*
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
,
ADDRESS
64
*
addr
,
unsigned
seg
,
unsigned
long
offset
)
{
addr
->
Mode
=
AddrModeFlat
;
...
...
@@ -47,26 +47,26 @@ unsigned be_cpu_build_addr(HANDLE hThread, const CONTEXT* ctx, ADDRESS* addr,
return
TRUE
;
}
void
*
memory_to_linear_addr
(
const
ADDRESS
*
addr
)
void
*
memory_to_linear_addr
(
const
ADDRESS
64
*
addr
)
{
return
be_cpu
->
linearize
(
dbg_curr_thread
->
handle
,
addr
);
}
BOOL
memory_get_current_pc
(
ADDRESS
*
addr
)
BOOL
memory_get_current_pc
(
ADDRESS
64
*
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
(
ADDRESS
64
*
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
(
ADDRESS
64
*
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* addr)
static
void
memory_report_invalid_addr
(
const
void
*
addr
)
{
ADDRESS
address
;
ADDRESS
64
address
;
address
.
Mode
=
AddrModeFlat
;
address
.
Segment
=
0
;
...
...
@@ -104,7 +104,7 @@ BOOL memory_read_value(const struct dbg_lvalue* lvalue, DWORD size, void* result
{
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_lvalue* lvalue, DWORD size, void* value
}
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_lvalue *lvalue, int count, char format)
{
int
i
;
char
buffer
[
256
];
ADDRESS
addr
;
ADDRESS
64
addr
;
void
*
linear
;
types_extract_as_address
(
lvalue
,
&
addr
);
...
...
@@ -273,6 +273,32 @@ BOOL memory_get_string_indirect(struct dbg_process* pcs, void* addr, BOOL unicod
return
FALSE
;
}
/*
* Convert an address offset to hex string. If mode == 32, treat offset as
* 32 bits (discard upper 32 bits), if mode == 64 use all 64 bits, if mode == 0
* treat as either 32 or 64 bits, depending on whether we're running as
* Wine32 or Wine64.
*/
char
*
memory_offset_to_string
(
char
*
str
,
DWORD64
offset
,
unsigned
mode
)
{
if
(
mode
!=
32
&&
mode
!=
64
)
{
#ifdef _WIN64
mode
=
64
;
#else
mode
=
32
;
#endif
}
if
(
mode
==
32
)
sprintf
(
str
,
"0x%08x"
,
(
unsigned
int
)
offset
);
else
sprintf
(
str
,
"0x%08x%08x"
,
(
unsigned
int
)(
offset
>>
32
),
(
unsigned
int
)
offset
);
return
str
;
}
static
void
print_typed_basic
(
const
struct
dbg_lvalue
*
lvalue
)
{
LONGLONG
val_int
;
...
...
@@ -478,19 +504,22 @@ void print_basic(const struct dbg_lvalue* lvalue, int count, char format)
}
}
void
print_bare_address
(
const
ADDRESS
*
addr
)
void
print_bare_address
(
const
ADDRESS
64
*
addr
)
{
char
hexbuf
[
MAX_OFFSET_TO_STR_LEN
];
switch
(
addr
->
Mode
)
{
case
AddrModeFlat
:
dbg_printf
(
"
0x%08lx"
,
addr
->
Offset
);
dbg_printf
(
"
%s"
,
memory_offset_to_string
(
hexbuf
,
addr
->
Offset
,
0
)
);
break
;
case
AddrModeReal
:
case
AddrMode1616
:
dbg_printf
(
"0x%04x:0x%04
lx"
,
addr
->
Segment
,
addr
->
Offset
);
dbg_printf
(
"0x%04x:0x%04
x"
,
addr
->
Segment
,
(
unsigned
)
addr
->
Offset
);
break
;
case
AddrMode1632
:
dbg_printf
(
"0x%04x:0x%08lx"
,
addr
->
Segment
,
addr
->
Offset
);
dbg_printf
(
"0x%04x:%s"
,
addr
->
Segment
,
memory_offset_to_string
(
hexbuf
,
addr
->
Offset
,
32
));
break
;
default:
dbg_printf
(
"Unknown mode %x
\n
"
,
addr
->
Mode
);
...
...
@@ -503,7 +532,7 @@ void print_bare_address(const ADDRESS* addr)
*
* 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
ADDRESS
64
*
addr
,
BOOLEAN
with_line
)
{
char
buffer
[
sizeof
(
SYMBOL_INFO
)
+
256
];
SYMBOL_INFO
*
si
=
(
SYMBOL_INFO
*
)
buffer
;
...
...
@@ -532,7 +561,7 @@ void print_address(const ADDRESS* addr, BOOLEAN with_line)
}
}
BOOL
memory_disasm_one_insn
(
ADDRESS
*
addr
)
BOOL
memory_disasm_one_insn
(
ADDRESS
64
*
addr
)
{
char
ch
;
...
...
@@ -551,7 +580,7 @@ BOOL memory_disasm_one_insn(ADDRESS* addr)
void
memory_disassemble
(
const
struct
dbg_lvalue
*
xstart
,
const
struct
dbg_lvalue
*
xend
,
int
instruction_count
)
{
static
ADDRESS
last
=
{
0
,
0
,
0
};
static
ADDRESS
64
last
=
{
0
,
0
,
0
};
int
stop
=
0
;
int
i
;
...
...
programs/winedbg/source.c
View file @
1d04f826
...
...
@@ -355,10 +355,10 @@ void source_list(IMAGEHLP_LINE* src1, IMAGEHLP_LINE* src2, int delta)
source_end_line
=
end
;
}
void
source_list_from_addr
(
const
ADDRESS
*
addr
,
int
nlines
)
void
source_list_from_addr
(
const
ADDRESS
64
*
addr
,
int
nlines
)
{
IMAGEHLP_LINE
il
;
ADDRESS
la
;
ADDRESS
64
la
;
DWORD
disp
;
if
(
!
addr
)
...
...
programs/winedbg/stack.c
View file @
1d04f826
...
...
@@ -101,7 +101,7 @@ BOOL stack_get_current_frame(IMAGEHLP_STACK_FRAME* ihsf)
BOOL
stack_set_frame
(
int
newframe
)
{
ADDRESS
addr
;
ADDRESS
64
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_INFO* symbol)
&
disp
,
symbol
);
}
static
BOOL
CALLBACK
stack_read_mem
(
HANDLE
hProc
,
DWORD
addr
,
static
BOOL
CALLBACK
stack_read_mem
(
HANDLE
hProc
,
DWORD
64
addr
,
PVOID
buffer
,
DWORD
size
,
PDWORD
written
)
{
SIZE_T
sz
;
...
...
@@ -132,7 +132,8 @@ static BOOL CALLBACK stack_read_mem(HANDLE hProc, DWORD addr,
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,7 +145,7 @@ static BOOL CALLBACK stack_read_mem(HANDLE hProc, DWORD addr,
*/
unsigned
stack_fetch_frames
(
void
)
{
STACKFRAME
sf
;
STACKFRAME
64
sf
;
unsigned
nf
=
0
;
HeapFree
(
GetProcessHeap
(),
0
,
dbg_curr_thread
->
frames
);
...
...
@@ -161,9 +162,9 @@ unsigned stack_fetch_frames(void)
sf
.
AddrFrame
.
Mode
=
AddrModeFlat
;
}
while
(
StackWalk
(
IMAGE_FILE_MACHINE_I386
,
dbg_curr_process
->
handle
,
while
(
StackWalk
64
(
IMAGE_FILE_MACHINE_I386
,
dbg_curr_process
->
handle
,
dbg_curr_thread
->
handle
,
&
sf
,
&
dbg_context
,
stack_read_mem
,
SymFunctionTableAccess
,
SymGetModuleBase
,
NULL
))
SymFunctionTableAccess64
,
SymGetModuleBase64
,
NULL
))
{
dbg_curr_thread
->
frames
=
dbg_heap_realloc
(
dbg_curr_thread
->
frames
,
(
nf
+
1
)
*
sizeof
(
dbg_curr_thread
->
frames
[
0
]));
...
...
programs/winedbg/symbol.c
View file @
1d04f826
...
...
@@ -419,7 +419,7 @@ void symbol_read_symtable(const char* filename, unsigned long offset)
*
* 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
ADDRESS
64
*
addr
)
{
IMAGEHLP_LINE
il
;
DWORD
disp
;
...
...
@@ -573,7 +573,7 @@ static BOOL CALLBACK info_locals_cb(SYMBOL_INFO* sym, ULONG size, void* ctx)
int
symbol_info_locals
(
void
)
{
IMAGEHLP_STACK_FRAME
ihsf
;
ADDRESS
addr
;
ADDRESS
64
addr
;
stack_get_current_frame
(
&
ihsf
);
addr
.
Mode
=
AddrModeFlat
;
...
...
programs/winedbg/tgt_active.c
View file @
1d04f826
...
...
@@ -47,7 +47,7 @@ static void dbg_init_current_thread(void* start)
!
dbg_curr_process
->
threads
->
next
&&
/* first thread ? */
DBG_IVAR
(
BreakAllThreadsStartup
))
{
ADDRESS
addr
;
ADDRESS
64
addr
;
break_set_xpoints
(
FALSE
);
addr
.
Mode
=
AddrModeFlat
;
...
...
@@ -118,8 +118,9 @@ static unsigned dbg_fetch_context(void)
static
unsigned
dbg_exception_prolog
(
BOOL
is_debug
,
const
EXCEPTION_RECORD
*
rec
)
{
ADDRESS
addr
;
ADDRESS
64
addr
;
BOOL
is_break
;
char
hexbuf
[
MAX_OFFSET_TO_STR_LEN
];
memory_get_current_pc
(
&
addr
);
break_suspend_execution
();
...
...
@@ -130,10 +131,19 @@ static unsigned dbg_exception_prolog(BOOL is_debug, const EXCEPTION_RECORD* rec)
{
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 (%s)"
,
memory_offset_to_string
(
hexbuf
,
addr
.
Offset
,
0
));
break
;
case
AddrModeReal
:
dbg_printf
(
" in vm86 code (%04x:%04x)"
,
addr
.
Segment
,
(
unsigned
)
addr
.
Offset
);
break
;
case
AddrMode1616
:
dbg_printf
(
" in 16-bit code (%04x:%04x)"
,
addr
.
Segment
,
(
unsigned
)
addr
.
Offset
);
break
;
case
AddrMode1632
:
dbg_printf
(
" in 32-bit code (%04x:%08lx)"
,
addr
.
Segment
,
(
unsigned
long
)
addr
.
Offset
);
break
;
default:
dbg_printf
(
" bad address"
);
}
dbg_printf
(
".
\n
"
);
...
...
@@ -209,7 +219,7 @@ static unsigned dbg_exception_prolog(BOOL is_debug, const EXCEPTION_RECORD* rec)
dbg_curr_thread
->
exec_mode
==
dbg_exec_step_over_insn
||
dbg_curr_thread
->
exec_mode
==
dbg_exec_step_into_insn
)
{
ADDRESS
tmp
=
addr
;
ADDRESS
64
tmp
=
addr
;
/* Show where we crashed */
memory_disasm_one_insn
(
&
tmp
);
}
...
...
@@ -312,7 +322,7 @@ static DWORD dbg_handle_exception(const EXCEPTION_RECORD* rec, BOOL first_chance
break
;
case
STATUS_POSSIBLE_DEADLOCK
:
{
ADDRESS
addr
;
ADDRESS
64
addr
;
addr
.
Mode
=
AddrModeFlat
;
addr
.
Offset
=
rec
->
ExceptionInformation
[
0
];
...
...
@@ -605,12 +615,14 @@ static void dbg_resume_debuggee(DWORD cont)
{
if
(
dbg_curr_thread
->
in_exception
)
{
ADDRESS
addr
;
ADDRESS64
addr
;
char
hexbuf
[
MAX_OFFSET_TO_STR_LEN
];
dbg_exception_epilog
();
memory_get_current_pc
(
&
addr
);
WINE_TRACE
(
"Exiting debugger PC=0x%lx mode=%d count=%d
\n
"
,
addr
.
Offset
,
dbg_curr_thread
->
exec_mode
,
WINE_TRACE
(
"Exiting debugger PC=%s mode=%d count=%d
\n
"
,
memory_offset_to_string
(
hexbuf
,
addr
.
Offset
,
0
),
dbg_curr_thread
->
exec_mode
,
dbg_curr_thread
->
exec_count
);
if
(
dbg_curr_thread
)
{
...
...
@@ -626,7 +638,8 @@ static void dbg_resume_debuggee(DWORD cont)
void
dbg_wait_next_exception
(
DWORD
cont
,
int
count
,
int
mode
)
{
DEBUG_EVENT
de
;
ADDRESS
addr
;
ADDRESS64
addr
;
char
hexbuf
[
MAX_OFFSET_TO_STR_LEN
];
if
(
cont
==
DBG_CONTINUE
)
{
...
...
@@ -643,8 +656,9 @@ void dbg_wait_next_exception(DWORD cont, int count, int mode)
dbg_interactiveP
=
TRUE
;
memory_get_current_pc
(
&
addr
);
WINE_TRACE
(
"Entering debugger PC=0x%lx mode=%d count=%d
\n
"
,
addr
.
Offset
,
dbg_curr_thread
->
exec_mode
,
WINE_TRACE
(
"Entering debugger PC=%s mode=%d count=%d
\n
"
,
memory_offset_to_string
(
hexbuf
,
addr
.
Offset
,
0
),
dbg_curr_thread
->
exec_mode
,
dbg_curr_thread
->
exec_count
);
}
...
...
programs/winedbg/tgt_minidump.c
View file @
1d04f826
...
...
@@ -332,7 +332,7 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data)
if
((
dbg_curr_thread
=
dbg_get_thread
(
dbg_curr_process
,
mes
->
ThreadId
)))
{
ADDRESS
addr
;
ADDRESS
64
addr
;
dbg_curr_tid
=
mes
->
ThreadId
;
dbg_curr_thread
->
in_exception
=
TRUE
;
...
...
programs/winedbg/types.c
View file @
1d04f826
...
...
@@ -132,7 +132,7 @@ long int types_extract_as_integer(const struct dbg_lvalue* lvalue)
*
*
*/
void
types_extract_as_address
(
const
struct
dbg_lvalue
*
lvalue
,
ADDRESS
*
addr
)
void
types_extract_as_address
(
const
struct
dbg_lvalue
*
lvalue
,
ADDRESS
64
*
addr
)
{
if
(
lvalue
->
type
.
id
==
dbg_itype_segptr
&&
lvalue
->
type
.
module
==
0
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment