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
e2b62c91
Commit
e2b62c91
authored
Mar 24, 2010
by
Eric Pouech
Committed by
Alexandre Julliard
Mar 25, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dbghelp: Created a CPU method to map dwarf register number to codeview register number.
parent
403f4168
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
118 additions
and
40 deletions
+118
-40
cpu_i386.c
dlls/dbghelp/cpu_i386.c
+47
-0
cpu_ppc.c
dlls/dbghelp/cpu_ppc.c
+7
-0
cpu_x86_64.c
dlls/dbghelp/cpu_x86_64.c
+56
-0
dbghelp_private.h
dlls/dbghelp/dbghelp_private.h
+3
-0
dwarf.c
dlls/dbghelp/dwarf.c
+3
-40
cvconst.h
include/cvconst.h
+2
-0
No files found.
dlls/dbghelp/cpu_i386.c
View file @
e2b62c91
...
...
@@ -404,10 +404,57 @@ done_err:
return
FALSE
;
}
static
unsigned
i386_map_dwarf_register
(
unsigned
regno
)
{
unsigned
reg
;
switch
(
regno
)
{
case
0
:
reg
=
CV_REG_EAX
;
break
;
case
1
:
reg
=
CV_REG_ECX
;
break
;
case
2
:
reg
=
CV_REG_EDX
;
break
;
case
3
:
reg
=
CV_REG_EBX
;
break
;
case
4
:
reg
=
CV_REG_ESP
;
break
;
case
5
:
reg
=
CV_REG_EBP
;
break
;
case
6
:
reg
=
CV_REG_ESI
;
break
;
case
7
:
reg
=
CV_REG_EDI
;
break
;
case
8
:
reg
=
CV_REG_EIP
;
break
;
case
9
:
reg
=
CV_REG_EFLAGS
;
break
;
case
10
:
reg
=
CV_REG_CS
;
break
;
case
11
:
reg
=
CV_REG_SS
;
break
;
case
12
:
reg
=
CV_REG_DS
;
break
;
case
13
:
reg
=
CV_REG_ES
;
break
;
case
14
:
reg
=
CV_REG_FS
;
break
;
case
15
:
reg
=
CV_REG_GS
;
break
;
case
16
:
case
17
:
case
18
:
case
19
:
case
20
:
case
21
:
case
22
:
case
23
:
reg
=
CV_REG_ST0
+
regno
-
16
;
break
;
case
24
:
reg
=
CV_REG_CTRL
;
break
;
case
25
:
reg
=
CV_REG_STAT
;
break
;
case
26
:
reg
=
CV_REG_TAG
;
break
;
/*
reg: fiseg 27
reg: fioff 28
reg: foseg 29
reg: fooff 30
reg: fop 31
*/
case
32
:
case
33
:
case
34
:
case
35
:
case
36
:
case
37
:
case
38
:
case
39
:
reg
=
CV_REG_XMM0
+
regno
-
32
;
break
;
case
40
:
reg
=
CV_REG_MXCSR
;
break
;
default:
FIXME
(
"Don't know how to map register %d
\n
"
,
regno
);
return
0
;
}
return
reg
;
}
struct
cpu
cpu_i386
=
{
IMAGE_FILE_MACHINE_I386
,
4
,
i386_get_addr
,
i386_stack_walk
,
NULL
,
i386_map_dwarf_register
,
};
dlls/dbghelp/cpu_ppc.c
View file @
e2b62c91
...
...
@@ -54,10 +54,17 @@ static BOOL ppc_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CON
return
FALSE
;
}
static
unsigned
ppc_map_dwarf_register
(
unsigned
regno
)
{
FIXME
(
"not done
\n
"
);
return
0
;
}
struct
cpu
cpu_ppc
=
{
IMAGE_FILE_MACHINE_POWERPC
,
4
,
ppc_get_addr
,
ppc_stack_walk
,
NULL
,
ppc_map_dwarf_register
,
};
dlls/dbghelp/cpu_x86_64.c
View file @
e2b62c91
...
...
@@ -579,10 +579,66 @@ static void* x86_64_find_runtime_function(struct module* module, DWORD64 addr
return
NULL
;
}
static
unsigned
x86_64_map_dwarf_register
(
unsigned
regno
)
{
unsigned
reg
;
if
(
regno
>=
17
&&
regno
<=
24
)
reg
=
CV_AMD64_XMM0
+
regno
-
17
;
else
if
(
regno
>=
25
&&
regno
<=
32
)
reg
=
CV_AMD64_XMM8
+
regno
-
25
;
else
if
(
regno
>=
33
&&
regno
<=
40
)
reg
=
CV_AMD64_ST0
+
regno
-
33
;
else
switch
(
regno
)
{
case
0
:
reg
=
CV_AMD64_RAX
;
break
;
case
1
:
reg
=
CV_AMD64_RDX
;
break
;
case
2
:
reg
=
CV_AMD64_RCX
;
break
;
case
3
:
reg
=
CV_AMD64_RBX
;
break
;
case
4
:
reg
=
CV_AMD64_RSI
;
break
;
case
5
:
reg
=
CV_AMD64_RDI
;
break
;
case
6
:
reg
=
CV_AMD64_RBP
;
break
;
case
7
:
reg
=
CV_AMD64_RSP
;
break
;
case
8
:
reg
=
CV_AMD64_R8
;
break
;
case
9
:
reg
=
CV_AMD64_R9
;
break
;
case
10
:
reg
=
CV_AMD64_R10
;
break
;
case
11
:
reg
=
CV_AMD64_R11
;
break
;
case
12
:
reg
=
CV_AMD64_R12
;
break
;
case
13
:
reg
=
CV_AMD64_R13
;
break
;
case
14
:
reg
=
CV_AMD64_R14
;
break
;
case
15
:
reg
=
CV_AMD64_R15
;
break
;
case
16
:
reg
=
CV_AMD64_RIP
;
break
;
case
49
:
reg
=
CV_AMD64_EFLAGS
;
break
;
case
50
:
reg
=
CV_AMD64_ES
;
break
;
case
51
:
reg
=
CV_AMD64_CS
;
break
;
case
52
:
reg
=
CV_AMD64_SS
;
break
;
case
53
:
reg
=
CV_AMD64_DS
;
break
;
case
54
:
reg
=
CV_AMD64_FS
;
break
;
case
55
:
reg
=
CV_AMD64_GS
;
break
;
case
62
:
reg
=
CV_AMD64_TR
;
break
;
case
63
:
reg
=
CV_AMD64_LDTR
;
break
;
case
64
:
reg
=
CV_AMD64_MXCSR
;
break
;
case
65
:
reg
=
CV_AMD64_CTRL
;
break
;
case
66
:
reg
=
CV_AMD64_STAT
;
break
;
/*
* 56-57 reserved
* 58 %fs.base
* 59 %gs.base
* 60-61 reserved
*/
default:
FIXME
(
"Don't know how to map register %d
\n
"
,
regno
);
return
0
;
}
return
reg
;
}
struct
cpu
cpu_x86_64
=
{
IMAGE_FILE_MACHINE_AMD64
,
8
,
x86_64_get_addr
,
x86_64_stack_walk
,
x86_64_find_runtime_function
,
x86_64_map_dwarf_register
,
};
dlls/dbghelp/dbghelp_private.h
View file @
e2b62c91
...
...
@@ -478,6 +478,9 @@ struct cpu
/* module manipulation */
void
*
(
*
find_runtime_function
)(
struct
module
*
,
DWORD64
addr
);
/* dwarf dedicated information */
unsigned
(
*
map_dwarf_register
)(
unsigned
regno
);
};
extern
struct
cpu
*
dbghelp_current_cpu
;
...
...
dlls/dbghelp/dwarf.c
View file @
e2b62c91
...
...
@@ -629,49 +629,12 @@ static void dwarf2_load_one_entry(dwarf2_parse_context_t*, dwarf2_debug_info_t*,
static
unsigned
dwarf2_map_register
(
int
regno
)
{
unsigned
reg
;
switch
(
regno
)
if
(
regno
==
Wine_DW_no_register
)
{
case
Wine_DW_no_register
:
FIXME
(
"What the heck map reg 0x%x
\n
"
,
regno
);
reg
=
0
;
break
;
case
0
:
reg
=
CV_REG_EAX
;
break
;
case
1
:
reg
=
CV_REG_ECX
;
break
;
case
2
:
reg
=
CV_REG_EDX
;
break
;
case
3
:
reg
=
CV_REG_EBX
;
break
;
case
4
:
reg
=
CV_REG_ESP
;
break
;
case
5
:
reg
=
CV_REG_EBP
;
break
;
case
6
:
reg
=
CV_REG_ESI
;
break
;
case
7
:
reg
=
CV_REG_EDI
;
break
;
case
8
:
reg
=
CV_REG_EIP
;
break
;
case
9
:
reg
=
CV_REG_EFLAGS
;
break
;
case
10
:
reg
=
CV_REG_CS
;
break
;
case
11
:
reg
=
CV_REG_SS
;
break
;
case
12
:
reg
=
CV_REG_DS
;
break
;
case
13
:
reg
=
CV_REG_ES
;
break
;
case
14
:
reg
=
CV_REG_FS
;
break
;
case
15
:
reg
=
CV_REG_GS
;
break
;
case
16
:
case
17
:
case
18
:
case
19
:
case
20
:
case
21
:
case
22
:
case
23
:
reg
=
CV_REG_ST0
+
regno
-
16
;
break
;
case
24
:
reg
=
CV_REG_CTRL
;
break
;
case
25
:
reg
=
CV_REG_STAT
;
break
;
case
26
:
reg
=
CV_REG_TAG
;
break
;
/*
reg: fiseg 27
reg: fioff 28
reg: foseg 29
reg: fooff 30
reg: fop 31
*/
case
32
:
case
33
:
case
34
:
case
35
:
case
36
:
case
37
:
case
38
:
case
39
:
reg
=
CV_REG_XMM0
+
regno
-
32
;
break
;
case
40
:
reg
=
CV_REG_MXCSR
;
break
;
default:
FIXME
(
"Don't know how to map register %d
\n
"
,
regno
);
FIXME
(
"What the heck map reg 0x%x
\n
"
,
regno
);
return
0
;
}
return
reg
;
return
dbghelp_current_cpu
->
map_dwarf_register
(
regno
)
;
}
static
enum
location_error
...
...
include/cvconst.h
View file @
e2b62c91
...
...
@@ -511,6 +511,8 @@ enum CV_HREG_e
CV_AMD64_MM70
=
CV_REG_MM70
,
CV_AMD64_MM71
=
CV_REG_MM71
,
CV_AMD64_XMM8
=
252
,
/* this includes XMM9 to XMM15 */
CV_AMD64_RAX
=
328
,
CV_AMD64_RBX
=
329
,
CV_AMD64_RCX
=
330
,
...
...
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