-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
efbaf19
commit da861cb
Showing
66 changed files
with
4,059 additions
and
1,203 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
target | ||
Cargo.lock | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
; Copyright Edward Nevill + Oliver Kowalke 2015 | ||
; Distributed under the Boost Software License, Version 1.0. | ||
; (See accompanying file LICENSE_1_0.txt or copy at | ||
; http://www.boost.org/LICENSE_1_0.txt) | ||
|
||
;******************************************************* | ||
;* * | ||
;* ------------------------------------------------- * | ||
;* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * | ||
;* ------------------------------------------------- * | ||
;* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| * | ||
;* ------------------------------------------------- * | ||
;* | d8 | d9 | d10 | d11 | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * | ||
;* ------------------------------------------------- * | ||
;* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| * | ||
;* ------------------------------------------------- * | ||
;* | d12 | d13 | d14 | d15 | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * | ||
;* ------------------------------------------------- * | ||
;* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| * | ||
;* ------------------------------------------------- * | ||
;* | x19 | x20 | x21 | x22 | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * | ||
;* ------------------------------------------------- * | ||
;* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| * | ||
;* ------------------------------------------------- * | ||
;* | x23 | x24 | x25 | x26 | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * | ||
;* ------------------------------------------------- * | ||
;* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| * | ||
;* ------------------------------------------------- * | ||
;* | x27 | x28 | FP | LR | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * | ||
;* ------------------------------------------------- * | ||
;* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| * | ||
;* ------------------------------------------------- * | ||
;* | fiber data| base | limit | dealloc | * | ||
;* ------------------------------------------------- * | ||
;* ------------------------------------------------- * | ||
;* | 48 | 49 | 50 | 51 | | | * | ||
;* ------------------------------------------------- * | ||
;* | 0xc0| 0xc4| 0xc8| 0xcc| | | * | ||
;* ------------------------------------------------- * | ||
;* | PC | align | | | * | ||
;* ------------------------------------------------- * | ||
;* * | ||
;******************************************************* | ||
|
||
AREA |.text|, CODE, READONLY, ALIGN=4, CODEALIGN | ||
EXPORT jump_fcontext | ||
|
||
jump_fcontext proc | ||
; prepare stack for GP + FPU | ||
sub sp, sp, #0xd0 | ||
|
||
; save d8 - d15 | ||
stp d8, d9, [sp, #0x00] | ||
stp d10, d11, [sp, #0x10] | ||
stp d12, d13, [sp, #0x20] | ||
stp d14, d15, [sp, #0x30] | ||
|
||
; save x19-x30 | ||
stp x19, x20, [sp, #0x40] | ||
stp x21, x22, [sp, #0x50] | ||
stp x23, x24, [sp, #0x60] | ||
stp x25, x26, [sp, #0x70] | ||
stp x27, x28, [sp, #0x80] | ||
stp x29, x30, [sp, #0x90] | ||
|
||
; save LR as PC | ||
str x30, [sp, #0xc0] | ||
|
||
; save current stack base and limit | ||
ldp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h | ||
stp x5, x6, [sp, #0xa0] | ||
; save current fiber data and deallocation stack | ||
ldr x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h | ||
ldr x6, [x18, #0x20] ; TeFiberData at ksarm64.h | ||
stp x5, x6, [sp, #0xb0] | ||
|
||
; store RSP (pointing to context-data) in X0 | ||
mov x4, sp | ||
|
||
; restore RSP (pointing to context-data) from X1 | ||
mov sp, x0 | ||
|
||
; restore stack base and limit | ||
ldp x5, x6, [sp, #0xa0] | ||
stp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h | ||
; restore fiber data and deallocation stack | ||
ldp x5, x6, [sp, #0xb0] | ||
str x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h | ||
str x6, [x18, #0x20] ; TeFiberData at ksarm64.h | ||
|
||
; load d8 - d15 | ||
ldp d8, d9, [sp, #0x00] | ||
ldp d10, d11, [sp, #0x10] | ||
ldp d12, d13, [sp, #0x20] | ||
ldp d14, d15, [sp, #0x30] | ||
|
||
; load x19-x30 | ||
ldp x19, x20, [sp, #0x40] | ||
ldp x21, x22, [sp, #0x50] | ||
ldp x23, x24, [sp, #0x60] | ||
ldp x25, x26, [sp, #0x70] | ||
ldp x27, x28, [sp, #0x80] | ||
ldp x29, x30, [sp, #0x90] | ||
|
||
; return transfer_t from jump | ||
; pass transfer_t as first arg in context function | ||
; X0 == FCTX, X1 == DATA | ||
mov x0, x4 | ||
|
||
; load pc | ||
ldr x4, [sp, #0xc0] | ||
|
||
; restore stack from GP + FPU | ||
add sp, sp, #0xd0 | ||
|
||
ret x4 | ||
ENDP | ||
END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
/* | ||
Copyright Oliver Kowalke 2009. | ||
Copyright Thomas Sailer 2013. | ||
Distributed under the Boost Software License, Version 1.0. | ||
(See accompanying file LICENSE_1_0.txt or copy at | ||
http://www.boost.org/LICENSE_1_0.txt) | ||
*/ | ||
|
||
/************************************************************************************* | ||
* --------------------------------------------------------------------------------- * | ||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * | ||
* --------------------------------------------------------------------------------- * | ||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * | ||
* --------------------------------------------------------------------------------- * | ||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * | ||
* --------------------------------------------------------------------------------- * | ||
* --------------------------------------------------------------------------------- * | ||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * | ||
* --------------------------------------------------------------------------------- * | ||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * | ||
* --------------------------------------------------------------------------------- * | ||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * | ||
* --------------------------------------------------------------------------------- * | ||
**************************************************************************************/ | ||
|
||
.file "jump_i386_ms_pe_clang_gas.S" | ||
.text | ||
.p2align 4,,15 | ||
|
||
/* mark as using no unregistered SEH handlers */ | ||
.globl @feat.00 | ||
.def @feat.00; .scl 3; .type 0; .endef | ||
.set @feat.00, 1 | ||
|
||
.globl _jump_fcontext | ||
.def _jump_fcontext; .scl 2; .type 32; .endef | ||
_jump_fcontext: | ||
/* prepare stack */ | ||
leal -0x2c(%esp), %esp | ||
|
||
#if !defined(BOOST_USE_TSX) | ||
/* save MMX control- and status-word */ | ||
stmxcsr (%esp) | ||
/* save x87 control-word */ | ||
fnstcw 0x4(%esp) | ||
#endif | ||
|
||
/* load NT_TIB */ | ||
movl %fs:(0x18), %edx | ||
/* load fiber local storage */ | ||
movl 0x10(%edx), %eax | ||
movl %eax, 0x8(%esp) | ||
/* load current dealloction stack */ | ||
movl 0xe0c(%edx), %eax | ||
movl %eax, 0xc(%esp) | ||
/* load current stack limit */ | ||
movl 0x8(%edx), %eax | ||
movl %eax, 0x10(%esp) | ||
/* load current stack base */ | ||
movl 0x4(%edx), %eax | ||
movl %eax, 0x14(%esp) | ||
/* load current SEH exception list */ | ||
movl (%edx), %eax | ||
movl %eax, 0x18(%esp) | ||
|
||
movl %edi, 0x1c(%esp) /* save EDI */ | ||
movl %esi, 0x20(%esp) /* save ESI */ | ||
movl %ebx, 0x24(%esp) /* save EBX */ | ||
movl %ebp, 0x28(%esp) /* save EBP */ | ||
|
||
/* store ESP (pointing to context-data) in EAX */ | ||
movl %esp, %eax | ||
|
||
/* firstarg of jump_fcontext() == fcontext to jump to */ | ||
movl 0x30(%esp), %ecx | ||
|
||
/* restore ESP (pointing to context-data) from ECX */ | ||
movl %ecx, %esp | ||
|
||
#if !defined(BOOST_USE_TSX) | ||
/* restore MMX control- and status-word */ | ||
ldmxcsr (%esp) | ||
/* restore x87 control-word */ | ||
fldcw 0x4(%esp) | ||
#endif | ||
|
||
/* restore NT_TIB into EDX */ | ||
movl %fs:(0x18), %edx | ||
/* restore fiber local storage */ | ||
movl 0x8(%esp), %ecx | ||
movl %ecx, 0x10(%edx) | ||
/* restore current deallocation stack */ | ||
movl 0xc(%esp), %ecx | ||
movl %ecx, 0xe0c(%edx) | ||
/* restore current stack limit */ | ||
movl 0x10(%esp), %ecx | ||
movl %ecx, 0x8(%edx) | ||
/* restore current stack base */ | ||
movl 0x14(%esp), %ecx | ||
movl %ecx, 0x4(%edx) | ||
/* restore current SEH exception list */ | ||
movl 0x18(%esp), %ecx | ||
movl %ecx, (%edx) | ||
|
||
movl 0x2c(%esp), %ecx /* restore EIP */ | ||
|
||
movl 0x1c(%esp), %edi /* restore EDI */ | ||
movl 0x20(%esp), %esi /* restore ESI */ | ||
movl 0x24(%esp), %ebx /* restore EBX */ | ||
movl 0x28(%esp), %ebp /* restore EBP */ | ||
|
||
/* prepare stack */ | ||
leal 0x30(%esp), %esp | ||
|
||
/* return transfer_t */ | ||
/* FCTX == EAX, DATA == EDX */ | ||
movl 0x34(%eax), %edx | ||
|
||
/* jump to context */ | ||
jmp *%ecx | ||
|
||
.section .drectve | ||
.ascii " -export:\"_jump_fcontext\"" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.