Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
8e0164bd
Commit
8e0164bd
authored
May 27, 2015
by
André Hentschel
Committed by
Alexandre Julliard
May 28, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
include: Add more ARM64 CV constants.
parent
39d71c52
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
61 additions
and
38 deletions
+61
-38
cpu_arm64.c
dlls/dbghelp/cpu_arm64.c
+13
-11
signal_arm64.c
dlls/ntdll/signal_arm64.c
+15
-5
cvconst.h
include/cvconst.h
+19
-7
winnt.h
include/winnt.h
+3
-3
be_arm64.c
programs/winedbg/be_arm64.c
+9
-10
gdbproxy.c
programs/winedbg/gdbproxy.c
+2
-2
No files found.
dlls/dbghelp/cpu_arm64.c
View file @
8e0164bd
...
...
@@ -39,7 +39,7 @@ static BOOL arm64_get_addr(HANDLE hThread, const CONTEXT* ctx,
#ifdef __aarch64__
case
cpu_addr_pc
:
addr
->
Offset
=
ctx
->
Pc
;
return
TRUE
;
case
cpu_addr_stack
:
addr
->
Offset
=
ctx
->
Sp
;
return
TRUE
;
case
cpu_addr_frame
:
addr
->
Offset
=
ctx
->
X29
;
return
TRUE
;
case
cpu_addr_frame
:
addr
->
Offset
=
ctx
->
Fp
;
return
TRUE
;
#endif
default:
addr
->
Mode
=
-
1
;
return
FALSE
;
...
...
@@ -67,7 +67,7 @@ static BOOL fetch_next_frame(struct cpu_stack_walk* csw,
CONTEXT
*
context
,
DWORD_PTR
curr_pc
)
{
DWORD_PTR
xframe
;
DWORD_PTR
oldReturn
=
context
->
X30
;
DWORD_PTR
oldReturn
=
context
->
Lr
;
if
(
dwarf2_virtual_unwind
(
csw
,
curr_pc
,
context
,
&
xframe
))
{
...
...
@@ -76,7 +76,7 @@ static BOOL fetch_next_frame(struct cpu_stack_walk* csw,
return
TRUE
;
}
if
(
context
->
Pc
==
context
->
X30
)
return
FALSE
;
if
(
context
->
Pc
==
context
->
Lr
)
return
FALSE
;
context
->
Pc
=
oldReturn
;
return
TRUE
;
...
...
@@ -121,8 +121,8 @@ static BOOL arm64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, C
/* set frame information */
frame
->
AddrStack
.
Offset
=
context
->
Sp
;
frame
->
AddrReturn
.
Offset
=
context
->
X30
;
frame
->
AddrFrame
.
Offset
=
context
->
X29
;
frame
->
AddrReturn
.
Offset
=
context
->
Lr
;
frame
->
AddrFrame
.
Offset
=
context
->
Fp
;
frame
->
AddrPC
.
Offset
=
context
->
Pc
;
frame
->
Far
=
TRUE
;
...
...
@@ -152,7 +152,9 @@ static BOOL arm64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, C
static
unsigned
arm64_map_dwarf_register
(
unsigned
regno
)
{
if
(
regno
<=
30
)
return
CV_ARM64_X0
+
regno
;
if
(
regno
<=
28
)
return
CV_ARM64_X0
+
regno
;
if
(
regno
==
29
)
return
CV_ARM64_FP
;
if
(
regno
==
30
)
return
CV_ARM64_LR
;
if
(
regno
==
31
)
return
CV_ARM64_SP
;
FIXME
(
"Don't know how to map register %d
\n
"
,
regno
);
...
...
@@ -194,9 +196,9 @@ static void* arm64_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* siz
case
CV_ARM64_X0
+
26
:
*
size
=
sizeof
(
ctx
->
X26
);
return
&
ctx
->
X26
;
case
CV_ARM64_X0
+
27
:
*
size
=
sizeof
(
ctx
->
X27
);
return
&
ctx
->
X27
;
case
CV_ARM64_X0
+
28
:
*
size
=
sizeof
(
ctx
->
X28
);
return
&
ctx
->
X28
;
case
CV_ARM64_X0
+
29
:
*
size
=
sizeof
(
ctx
->
X29
);
return
&
ctx
->
X29
;
case
CV_ARM64_X0
+
30
:
*
size
=
sizeof
(
ctx
->
X30
);
return
&
ctx
->
X30
;
case
CV_ARM64_FP
:
*
size
=
sizeof
(
ctx
->
Fp
);
return
&
ctx
->
Fp
;
case
CV_ARM64_LR
:
*
size
=
sizeof
(
ctx
->
Lr
);
return
&
ctx
->
Lr
;
case
CV_ARM64_SP
:
*
size
=
sizeof
(
ctx
->
Sp
);
return
&
ctx
->
Sp
;
case
CV_ARM64_PC
:
*
size
=
sizeof
(
ctx
->
Pc
);
return
&
ctx
->
Pc
;
case
CV_ARM64_PSTATE
:
*
size
=
sizeof
(
ctx
->
PState
);
return
&
ctx
->
PState
;
...
...
@@ -239,9 +241,9 @@ static const char* arm64_fetch_regname(unsigned regno)
case
CV_ARM64_X0
+
26
:
return
"x26"
;
case
CV_ARM64_X0
+
27
:
return
"x27"
;
case
CV_ARM64_X0
+
28
:
return
"x28"
;
case
CV_ARM64_X0
+
29
:
return
"x29"
;
case
CV_ARM64_X0
+
30
:
return
"x30"
;
case
CV_ARM64_FP
:
return
"fp"
;
case
CV_ARM64_LR
:
return
"lr"
;
case
CV_ARM64_SP
:
return
"sp"
;
case
CV_ARM64_PC
:
return
"pc"
;
case
CV_ARM64_PSTATE
:
return
"cpsr"
;
...
...
@@ -275,7 +277,7 @@ static BOOL arm64_fetch_minidump_module(struct dump_context* dc, unsigned index,
DECLSPEC_HIDDEN
struct
cpu
cpu_arm64
=
{
IMAGE_FILE_MACHINE_ARM64
,
8
,
CV_ARM64_
X0
+
29
,
CV_ARM64_
FP
,
arm64_get_addr
,
arm64_stack_walk
,
NULL
,
...
...
dlls/ntdll/signal_arm64.c
View file @
8e0164bd
...
...
@@ -121,10 +121,12 @@ static void save_context( CONTEXT *context, const ucontext_t *sigcontext )
/* Save normal registers */
C
(
0
);
C
(
1
);
C
(
2
);
C
(
3
);
C
(
4
);
C
(
5
);
C
(
6
);
C
(
7
);
C
(
8
);
C
(
9
);
C
(
10
);
C
(
11
);
C
(
12
);
C
(
13
);
C
(
14
);
C
(
15
);
C
(
16
);
C
(
17
);
C
(
18
);
C
(
19
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
C
(
29
);
C
(
30
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
#undef C
context
->
ContextFlags
=
CONTEXT_FULL
;
context
->
Fp
=
FP_sig
(
sigcontext
);
/* Frame pointer */
context
->
Lr
=
LR_sig
(
sigcontext
);
/* Link register */
context
->
Sp
=
SP_sig
(
sigcontext
);
/* Stack pointer */
context
->
Pc
=
PC_sig
(
sigcontext
);
/* Program Counter */
context
->
PState
=
PSTATE_sig
(
sigcontext
);
/* Current State Register */
...
...
@@ -142,9 +144,11 @@ static void restore_context( const CONTEXT *context, ucontext_t *sigcontext )
/* Restore normal registers */
C
(
0
);
C
(
1
);
C
(
2
);
C
(
3
);
C
(
4
);
C
(
5
);
C
(
6
);
C
(
7
);
C
(
8
);
C
(
9
);
C
(
10
);
C
(
11
);
C
(
12
);
C
(
13
);
C
(
14
);
C
(
15
);
C
(
16
);
C
(
17
);
C
(
18
);
C
(
19
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
C
(
29
);
C
(
30
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
#undef C
FP_sig
(
sigcontext
)
=
context
->
Fp
;
/* Frame pointer */
LR_sig
(
sigcontext
)
=
context
->
Lr
;
/* Link register */
SP_sig
(
sigcontext
)
=
context
->
Sp
;
/* Stack pointer */
PC_sig
(
sigcontext
)
=
context
->
Pc
;
/* Program Counter */
PSTATE_sig
(
sigcontext
)
=
context
->
PState
;
/* Current State Register */
...
...
@@ -201,6 +205,8 @@ void copy_context( CONTEXT *to, const CONTEXT *from, DWORD flags )
flags
&=
~
CONTEXT_ARM64
;
/* get rid of CPU id */
if
(
flags
&
CONTEXT_CONTROL
)
{
to
->
Fp
=
from
->
Fp
;
to
->
Lr
=
from
->
Lr
;
to
->
Sp
=
from
->
Sp
;
to
->
Pc
=
from
->
Pc
;
to
->
PState
=
from
->
PState
;
...
...
@@ -211,7 +217,7 @@ void copy_context( CONTEXT *to, const CONTEXT *from, DWORD flags )
/* Restore normal registers */
C
(
0
);
C
(
1
);
C
(
2
);
C
(
3
);
C
(
4
);
C
(
5
);
C
(
6
);
C
(
7
);
C
(
8
);
C
(
9
);
C
(
10
);
C
(
11
);
C
(
12
);
C
(
13
);
C
(
14
);
C
(
15
);
C
(
16
);
C
(
17
);
C
(
18
);
C
(
19
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
C
(
29
);
C
(
30
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
#undef C
}
}
...
...
@@ -231,6 +237,8 @@ NTSTATUS context_to_server( context_t *to, const CONTEXT *from )
if
(
flags
&
CONTEXT_CONTROL
)
{
to
->
flags
|=
SERVER_CTX_CONTROL
;
to
->
integer
.
arm64_regs
.
x
[
29
]
=
from
->
Fp
;
to
->
integer
.
arm64_regs
.
x
[
30
]
=
from
->
Lr
;
to
->
ctl
.
arm64_regs
.
sp
=
from
->
Sp
;
to
->
ctl
.
arm64_regs
.
pc
=
from
->
Pc
;
to
->
ctl
.
arm64_regs
.
pstate
=
from
->
PState
;
...
...
@@ -242,7 +250,7 @@ NTSTATUS context_to_server( context_t *to, const CONTEXT *from )
/* Restore normal registers */
C
(
0
);
C
(
1
);
C
(
2
);
C
(
3
);
C
(
4
);
C
(
5
);
C
(
6
);
C
(
7
);
C
(
8
);
C
(
9
);
C
(
10
);
C
(
11
);
C
(
12
);
C
(
13
);
C
(
14
);
C
(
15
);
C
(
16
);
C
(
17
);
C
(
18
);
C
(
19
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
C
(
29
);
C
(
30
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
#undef C
}
return
STATUS_SUCCESS
;
...
...
@@ -262,6 +270,8 @@ NTSTATUS context_from_server( CONTEXT *to, const context_t *from )
if
(
from
->
flags
&
SERVER_CTX_CONTROL
)
{
to
->
ContextFlags
|=
CONTEXT_CONTROL
;
to
->
Fp
=
from
->
integer
.
arm64_regs
.
x
[
29
];
to
->
Lr
=
from
->
integer
.
arm64_regs
.
x
[
30
];
to
->
Sp
=
from
->
ctl
.
arm64_regs
.
sp
;
to
->
Pc
=
from
->
ctl
.
arm64_regs
.
pc
;
to
->
PState
=
from
->
ctl
.
arm64_regs
.
pstate
;
...
...
@@ -273,7 +283,7 @@ NTSTATUS context_from_server( CONTEXT *to, const context_t *from )
/* Restore normal registers */
C
(
0
);
C
(
1
);
C
(
2
);
C
(
3
);
C
(
4
);
C
(
5
);
C
(
6
);
C
(
7
);
C
(
8
);
C
(
9
);
C
(
10
);
C
(
11
);
C
(
12
);
C
(
13
);
C
(
14
);
C
(
15
);
C
(
16
);
C
(
17
);
C
(
18
);
C
(
19
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
C
(
29
);
C
(
30
);
C
(
20
);
C
(
21
);
C
(
22
);
C
(
23
);
C
(
24
);
C
(
25
);
C
(
26
);
C
(
27
);
C
(
28
);
#undef C
}
return
STATUS_SUCCESS
;
...
...
include/cvconst.h
View file @
8e0164bd
...
...
@@ -457,6 +457,25 @@ enum CV_HREG_e
CV_ARM_ND0
=
300
,
/* this includes ND1 to ND31 */
CV_ARM_NQ0
=
400
,
/* this includes NQ1 to NQ15 */
/* ARM64 CPU */
CV_ARM64_NOREG
=
CV_REG_NONE
,
CV_ARM64_W0
=
10
,
/* this includes W0 to W30 */
CV_ARM64_WZR
=
41
,
CV_ARM64_PC
=
42
,
/* Wine extension */
CV_ARM64_PSTATE
=
43
,
/* Wine extension */
CV_ARM64_X0
=
50
,
/* this includes X0 to X28 */
CV_ARM64_IP0
=
66
,
/* Same as X16 */
CV_ARM64_IP1
=
67
,
/* Same as X17 */
CV_ARM64_FP
=
79
,
CV_ARM64_LR
=
80
,
CV_ARM64_SP
=
81
,
CV_ARM64_ZR
=
82
,
CV_ARM64_NZCV
=
90
,
CV_ARM64_S0
=
100
,
/* this includes S0 to S31 */
CV_ARM64_D0
=
140
,
/* this includes D0 to D31 */
CV_ARM64_Q0
=
180
,
/* this includes Q0 to Q31 */
CV_ARM64_FPSR
=
220
,
/* Intel IA64 CPU */
CV_IA64_NOREG
=
CV_REG_NONE
,
CV_IA64_Br0
=
512
,
/* this includes Br1 to Br7 */
...
...
@@ -664,13 +683,6 @@ enum CV_HREG_e
CV_AMD64_R13
=
341
,
CV_AMD64_R14
=
342
,
CV_AMD64_R15
=
343
,
/* Wine extension */
CV_ARM64_NOREG
=
CV_REG_NONE
,
CV_ARM64_X0
=
10
,
/* this includes X0 to X30 */
CV_ARM64_SP
=
41
,
CV_ARM64_PC
=
42
,
CV_ARM64_PSTATE
=
43
,
};
typedef
enum
...
...
include/winnt.h
View file @
8e0164bd
...
...
@@ -1740,7 +1740,7 @@ PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_
*
*/
#define CONTEXT_ARM64 0x
20
00000
#define CONTEXT_ARM64 0x
4
00000
#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001)
#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002)
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
...
...
@@ -1786,10 +1786,10 @@ typedef struct _CONTEXT {
ULONGLONG
X26
;
ULONGLONG
X27
;
ULONGLONG
X28
;
ULONGLONG
X29
;
ULONGLONG
X30
;
/* These are selected by CONTEXT_CONTROL */
ULONGLONG
Fp
;
ULONGLONG
Lr
;
ULONGLONG
Sp
;
ULONGLONG
Pc
;
ULONGLONG
PState
;
...
...
programs/winedbg/be_arm64.c
View file @
8e0164bd
...
...
@@ -32,7 +32,7 @@ static BOOL be_arm64_get_addr(HANDLE hThread, const CONTEXT* ctx,
case
be_cpu_addr_stack
:
return
be_cpu_build_addr
(
hThread
,
ctx
,
addr
,
0
,
ctx
->
Sp
);
case
be_cpu_addr_frame
:
return
be_cpu_build_addr
(
hThread
,
ctx
,
addr
,
0
,
ctx
->
X29
);
return
be_cpu_build_addr
(
hThread
,
ctx
,
addr
,
0
,
ctx
->
Fp
);
break
;
}
return
FALSE
;
...
...
@@ -44,7 +44,7 @@ static BOOL be_arm64_get_register_info(int regno, enum be_cpu_addr* kind)
{
case
CV_ARM64_PC
:
*
kind
=
be_cpu_addr_pc
;
return
TRUE
;
case
CV_ARM64_SP
:
*
kind
=
be_cpu_addr_stack
;
return
TRUE
;
case
CV_ARM64_
X0
+
29
:
*
kind
=
be_cpu_addr_frame
;
return
TRUE
;
case
CV_ARM64_
FP
:
*
kind
=
be_cpu_addr_frame
;
return
TRUE
;
}
return
FALSE
;
}
...
...
@@ -80,21 +80,20 @@ static void be_arm64_print_context(HANDLE hThread, const CONTEXT* ctx, int all_r
if
(
!
((
ctx
->
PState
>>
26
)
&
(
1
<<
(
sizeof
(
condflags
)
-
i
))))
buf
[
i
]
=
'-'
;
dbg_printf
(
" Pc:%016lx Sp:%016lx Pstate:%016lx(%s)
\n
"
,
ctx
->
Pc
,
ctx
->
Sp
,
ctx
->
PState
,
buf
);
dbg_printf
(
" Pc:%016lx Sp:%016lx
Lr:%016lx
Pstate:%016lx(%s)
\n
"
,
ctx
->
Pc
,
ctx
->
Sp
,
ctx
->
Lr
,
ctx
->
PState
,
buf
);
dbg_printf
(
" x0: %016lx x1: %016lx x2: %016lx x3: %016lx x4: %016lx
\n
"
,
ctx
->
X0
,
ctx
->
X1
,
ctx
->
X2
,
ctx
->
X3
,
ctx
->
X4
);
dbg_printf
(
" x5: %016lx x6: %016lx x7: %016lx x8: %016lx x9: %016lx
\n
"
,
ctx
->
X5
,
ctx
->
X6
,
ctx
->
X7
,
ctx
->
X8
,
ctx
->
X9
);
dbg_printf
(
" x10:%016lx x11:%016lx x12:%016lx x13:%016lx x14:%016lx
\n
"
,
ctx
->
X10
,
ctx
->
X11
,
ctx
->
X12
,
ctx
->
X13
,
ctx
->
X14
);
dbg_printf
(
" x15:%016lx
x16:%016lx x17
:%016lx x18:%016lx x19:%016lx
\n
"
,
dbg_printf
(
" x15:%016lx
ip0:%016lx ip1
:%016lx x18:%016lx x19:%016lx
\n
"
,
ctx
->
X15
,
ctx
->
X16
,
ctx
->
X17
,
ctx
->
X18
,
ctx
->
X19
);
dbg_printf
(
" x20:%016lx x21:%016lx x22:%016lx x23:%016lx x24:%016lx
\n
"
,
ctx
->
X20
,
ctx
->
X21
,
ctx
->
X22
,
ctx
->
X23
,
ctx
->
X24
);
dbg_printf
(
" x25:%016lx x26:%016lx x27:%016lx x28:%016lx x29:%016lx
\n
"
,
ctx
->
X25
,
ctx
->
X26
,
ctx
->
X27
,
ctx
->
X28
,
ctx
->
X29
);
dbg_printf
(
" x30:%016lx
\n
"
,
ctx
->
X30
);
dbg_printf
(
" x25:%016lx x26:%016lx x27:%016lx x28:%016lx Fp:%016lx
\n
"
,
ctx
->
X25
,
ctx
->
X26
,
ctx
->
X27
,
ctx
->
X28
,
ctx
->
Fp
);
if
(
all_regs
)
dbg_printf
(
"Floating point ARM64 dump not implemented
\n
"
);
}
...
...
@@ -134,8 +133,8 @@ static struct dbg_internal_var be_arm64_ctx[] =
{
CV_ARM64_X0
+
26
,
"x26"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
X26
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_X0
+
27
,
"x27"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
X27
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_X0
+
28
,
"x28"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
X28
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_
X0
+
29
,
"x29"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
X29
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_
X0
+
30
,
"x30"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
X30
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_
FP
,
"fp"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
Fp
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_
LR
,
"lr"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
Lr
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_SP
,
"sp"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
Sp
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_PC
,
"pc"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
Pc
),
dbg_itype_unsigned_long_int
},
{
CV_ARM64_PSTATE
,
"pstate"
,
(
DWORD_PTR
*
)
FIELD_OFFSET
(
CONTEXT
,
PState
),
dbg_itype_unsigned_long_int
},
...
...
programs/winedbg/gdbproxy.c
View file @
8e0164bd
...
...
@@ -428,8 +428,8 @@ static struct cpu_register cpu_register_map[] = {
REG
(
X26
,
8
,
CONTEXT_INTEGER
),
REG
(
X27
,
8
,
CONTEXT_INTEGER
),
REG
(
X28
,
8
,
CONTEXT_INTEGER
),
REG
(
X29
,
8
,
CONTEXT_INTEGER
),
REG
(
X30
,
8
,
CONTEXT_INTEGER
),
REG
(
Fp
,
8
,
CONTEXT_INTEGER
),
REG
(
Lr
,
8
,
CONTEXT_INTEGER
),
REG
(
Sp
,
8
,
CONTEXT_CONTROL
),
REG
(
Pc
,
8
,
CONTEXT_CONTROL
),
REG
(
PState
,
8
,
CONTEXT_CONTROL
),
...
...
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