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
10dcc85d
Commit
10dcc85d
authored
Feb 01, 2011
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Add support for longjmp in RtlUnwindEx.
parent
008cf3c1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
0 deletions
+52
-0
signal_x86_64.c
dlls/ntdll/signal_x86_64.c
+52
-0
No files found.
dlls/ntdll/signal_x86_64.c
View file @
10dcc85d
...
@@ -100,6 +100,33 @@ typedef struct _SCOPE_TABLE
...
@@ -100,6 +100,33 @@ typedef struct _SCOPE_TABLE
}
SCOPE_TABLE
,
*
PSCOPE_TABLE
;
}
SCOPE_TABLE
,
*
PSCOPE_TABLE
;
/* layering violation: the setjmp buffer is defined in msvcrt, but used by RtlUnwindEx */
struct
MSVCRT_JUMP_BUFFER
{
ULONG64
Frame
;
ULONG64
Rbx
;
ULONG64
Rsp
;
ULONG64
Rbp
;
ULONG64
Rsi
;
ULONG64
Rdi
;
ULONG64
R12
;
ULONG64
R13
;
ULONG64
R14
;
ULONG64
R15
;
ULONG64
Rip
;
ULONG64
Spare
;
M128A
Xmm6
;
M128A
Xmm7
;
M128A
Xmm8
;
M128A
Xmm9
;
M128A
Xmm10
;
M128A
Xmm11
;
M128A
Xmm12
;
M128A
Xmm13
;
M128A
Xmm14
;
M128A
Xmm15
;
};
/***********************************************************************
/***********************************************************************
* signal context platform-specific definitions
* signal context platform-specific definitions
*/
*/
...
@@ -3008,6 +3035,31 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec
...
@@ -3008,6 +3035,31 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec
context
=
new_context
;
context
=
new_context
;
}
}
if
(
rec
->
ExceptionCode
==
STATUS_LONGJUMP
&&
rec
->
NumberParameters
>=
1
)
{
struct
MSVCRT_JUMP_BUFFER
*
jmp
=
(
struct
MSVCRT_JUMP_BUFFER
*
)
rec
->
ExceptionInformation
[
0
];
context
.
Rbx
=
jmp
->
Rbx
;
context
.
Rsp
=
jmp
->
Rsp
;
context
.
Rbp
=
jmp
->
Rbp
;
context
.
Rsi
=
jmp
->
Rsi
;
context
.
Rdi
=
jmp
->
Rdi
;
context
.
R12
=
jmp
->
R12
;
context
.
R13
=
jmp
->
R13
;
context
.
R14
=
jmp
->
R14
;
context
.
R15
=
jmp
->
R15
;
context
.
Rip
=
jmp
->
Rip
;
context
.
u
.
s
.
Xmm6
=
jmp
->
Xmm6
;
context
.
u
.
s
.
Xmm7
=
jmp
->
Xmm7
;
context
.
u
.
s
.
Xmm8
=
jmp
->
Xmm8
;
context
.
u
.
s
.
Xmm9
=
jmp
->
Xmm9
;
context
.
u
.
s
.
Xmm10
=
jmp
->
Xmm10
;
context
.
u
.
s
.
Xmm11
=
jmp
->
Xmm11
;
context
.
u
.
s
.
Xmm12
=
jmp
->
Xmm12
;
context
.
u
.
s
.
Xmm13
=
jmp
->
Xmm13
;
context
.
u
.
s
.
Xmm14
=
jmp
->
Xmm14
;
context
.
u
.
s
.
Xmm15
=
jmp
->
Xmm15
;
}
context
.
Rax
=
(
ULONG64
)
retval
;
context
.
Rax
=
(
ULONG64
)
retval
;
context
.
Rip
=
(
ULONG64
)
target_ip
;
context
.
Rip
=
(
ULONG64
)
target_ip
;
TRACE
(
"returning to %lx stack %lx
\n
"
,
context
.
Rip
,
context
.
Rsp
);
TRACE
(
"returning to %lx stack %lx
\n
"
,
context
.
Rip
,
context
.
Rsp
);
...
...
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