Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
boost.context
- Loading branch information
Showing
9 changed files
with
1,183 additions
and
1 deletion.
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 |
---|---|---|
|
@@ -8,7 +8,6 @@ | |
*.lo | ||
*.o | ||
*.png | ||
*.s | ||
*.tmp | ||
.DS_Store | ||
.deps/ | ||
|
98 changes: 98 additions & 0 deletions
98
third_party/boost_context/src/asm/fcontext_arm_aapcs_elf_gas.S
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,98 @@ | ||
/* | ||
Copyright Oliver Kowalke 2009. | ||
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 | 8 | 9 | * | ||
* ------------------------------------------------------------- * | ||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| 0x20| 0x24| * | ||
* ------------------------------------------------------------- * | ||
* | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | sp | lr | * | ||
* ------------------------------------------------------------- * | ||
* ------------------------------------------------------------- * | ||
* | 10 | | * | ||
* ------------------------------------------------------------- * | ||
* | 0x28| | * | ||
* ------------------------------------------------------------- * | ||
* | pc | | * | ||
* ------------------------------------------------------------- * | ||
* ------------------------------------------------------------- * | ||
* | 11 | 12 | | * | ||
* ------------------------------------------------------------- * | ||
* | 0x2c| 0x30| | * | ||
* ------------------------------------------------------------- * | ||
* |sbase|slimit| | * | ||
* ------------------------------------------------------------- * | ||
* ------------------------------------------------------------- * | ||
* | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | * | ||
* ------------------------------------------------------------- * | ||
* | 0x34| 0x38|0x3c| 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58 | * | ||
* ------------------------------------------------------------- * | ||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | s24 | s25 | * | ||
* ------------------------------------------------------------- * | ||
* ------------------------------------------------------------- * | ||
* | 23 | 24 | 25 | 26 | 27 | 28 | | * | ||
* ------------------------------------------------------------- * | ||
* | 0x5c| 0x60| 0x64| 0x68| 0x6c| 0x70| | * | ||
* ------------------------------------------------------------- * | ||
* | s26 | s27 | s28 | s29 | s30 | s31 | | * | ||
* ------------------------------------------------------------- * | ||
* * | ||
* *****************************************************************/ | ||
|
||
.text | ||
.globl jump_fcontext | ||
.align 2 | ||
.type jump_fcontext,%function | ||
jump_fcontext: | ||
stmia a1, {v1-v8,sp-lr} @ save V1-V8,SP-LR | ||
str lr, [a1,#40] @ save LR as PC | ||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__)) | ||
cmp a4, #0 @ test if fpu env should be preserved | ||
be 1f | ||
|
||
ldr a4, [a1,#52] | ||
stmia a4, {s16-s31} @ save S16-S31 | ||
|
||
ldr a4, [a2,#52] | ||
ldmia a4, {s16-s31} @ restore S16-S31 | ||
1: | ||
#endif | ||
|
||
mov a1, a3 @ use third arg as return value after jump | ||
@ and as first arg in context function | ||
ldmia a2, {v1-v8,sp-pc} @ restore v1-V8,SP-PC | ||
.size jump_fcontext,.-jump_fcontext | ||
|
||
.text | ||
.globl make_fcontext | ||
.align 2 | ||
.type make_fcontext,%function | ||
make_fcontext: | ||
str a1, [a1,#0] @ save the address of passed context | ||
str a2, [a1,#40] @ save address of the context function | ||
ldr a2, [a1,#44] @ load the stack base | ||
|
||
push {a1,lr} @ save pointer to fcontext_t | ||
mov a1, a2 @ stack pointer as arg for align_stack | ||
bl align_stack@PLT @ align stack | ||
mov a2, a1 @ begin of aligned stack | ||
pop {a1,lr} @ restore pointer to fcontext_t | ||
|
||
str a2, [a1,#32] @ save the aligned stack base | ||
|
||
adr a2, finish @ address of finish; called after context function returns | ||
str a2, [a1,#36] | ||
|
||
mov a1, #0 | ||
bx lr | ||
|
||
finish: | ||
mov a1, #0 @ exit code is zero | ||
bl _exit@PLT @ exit application | ||
.size make_fcontext,.-make_fcontext |
122 changes: 122 additions & 0 deletions
122
third_party/boost_context/src/asm/fcontext_i386_sysv_elf_gas.S
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,122 @@ | ||
/* | ||
Copyright Oliver Kowalke 2009. | ||
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 | * | ||
* -------------------------------------------------------------- * | ||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | * | ||
* -------------------------------------------------------------- * | ||
* | EDI | ESI | EBX | EBP | ESP | EIP | * | ||
* -------------------------------------------------------------- * | ||
* -------------------------------------------------------------- * | ||
* | 6 | 7 | | * | ||
* -------------------------------------------------------------- * | ||
* | 0x18 | 0x1c | | * | ||
* -------------------------------------------------------------- * | ||
* | sbase | slimit | | * | ||
* -------------------------------------------------------------- * | ||
* -------------------------------------------------------------- * | ||
* | 8 | 9 | | * | ||
* -------------------------------------------------------------- * | ||
* | 0x20 | 0x24 | | * | ||
* -------------------------------------------------------------- * | ||
* | fc_mxcsr|fc_x87_cw| | * | ||
* -------------------------------------------------------------- * | ||
* * | ||
* *****************************************************************/ | ||
|
||
.text | ||
.globl jump_fcontext | ||
.align 2 | ||
.type jump_fcontext,@function | ||
jump_fcontext: | ||
movl 0x4(%esp), %ecx /* load address of the first fcontext_t arg */ | ||
movl %edi, (%ecx) /* save EDI */ | ||
movl %esi, 0x4(%ecx) /* save ESI */ | ||
movl %ebx, 0x8(%ecx) /* save EBX */ | ||
movl %ebp, 0xc(%ecx) /* save EBP */ | ||
|
||
leal 0x4(%esp), %eax /* exclude the return address */ | ||
movl %eax, 0x10(%ecx) /* save as stack pointer */ | ||
movl (%esp), %eax /* load return address */ | ||
movl %eax, 0x14(%ecx) /* save return address */ | ||
|
||
movl 0x8(%esp), %edx /* load address of the second fcontext_t arg */ | ||
movl (%edx), %edi /* restore EDI */ | ||
movl 0x4(%edx), %esi /* restore ESI */ | ||
movl 0x8(%edx), %ebx /* restore EBX */ | ||
movl 0xc(%edx), %ebp /* restore EBP */ | ||
|
||
movl 0x10(%esp), %eax /* check if fpu enve preserving was requested */ | ||
test %eax, %eax | ||
je 1f | ||
|
||
stmxcsr 0x20(%ecx) /* save MMX control and status word */ | ||
fnstcw 0x24(%ecx) /* save x87 control word */ | ||
ldmxcsr 0x20(%edx) /* restore MMX control and status word */ | ||
fldcw 0x24(%edx) /* restore x87 control word */ | ||
1: | ||
movl 0xc(%esp), %eax /* use third arg as return value after jump */ | ||
|
||
movl 0x10(%edx), %esp /* restore ESP */ | ||
movl %eax, 0x4(%esp) /* use third arg as first arg in context function */ | ||
movl 0x14(%edx), %edx /* fetch the address to return to */ | ||
|
||
jmp *%edx /* indirect jump to context */ | ||
.size jump_fcontext,.-jump_fcontext | ||
|
||
.text | ||
.globl make_fcontext | ||
.align 2 | ||
.type make_fcontext,@function | ||
make_fcontext: | ||
movl 0x4(%esp), %eax /* load address of the fcontext_t */ | ||
movl %eax, (%eax) /* save the address of current context */ | ||
movl 0x8(%esp), %ecx /* load the address of the context function */ | ||
movl %ecx, 0x14(%eax) /* save the address of the context function */ | ||
movl 0x18(%eax), %edx /* load the stack base */ | ||
|
||
pushl %eax /* save pointer to fcontext_t */ | ||
pushl %ebx /* save EBX */ | ||
pushl %edx /* stack pointer as arg for align_stack */ | ||
call 1f | ||
1: popl %ebx /* address of label 1 */ | ||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx /* compute address of GOT and store it in EBX */ | ||
call align_stack@PLT /* align stack */ | ||
movl %eax, %edx /* begin of aligned stack */ | ||
popl %eax /* remove arg for align_stack */ | ||
popl %ebx /* restore EBX */ | ||
popl %eax /* restore pointer to fcontext_t */ | ||
|
||
leal -0x14(%edx), %edx /* reserve space for the last frame on stack, (ESP + 4) % 16 == 0 */ | ||
movl %edx, 0x10(%eax) /* save the aligned stack base */ | ||
|
||
stmxcsr 0x20(%eax) /* save MMX control and status word */ | ||
fnstcw 0x24(%eax) /* save x87 control word */ | ||
|
||
call 2f | ||
2: popl %ecx /* address of label 2 */ | ||
addl $finish-2b, %ecx /* helper code executed after context function returns */ | ||
movl %ecx, (%edx) | ||
|
||
xorl %eax, %eax | ||
ret | ||
|
||
finish: | ||
leal -0xc(%esp), %esp | ||
|
||
call 3f | ||
3: popl %ebx /* address of label 3 */ | ||
addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx /* compute address of GOT and store it in EBX */ | ||
|
||
xorl %eax, %eax | ||
pushl %eax /* exit code is zero */ | ||
call _exit@PLT /* exit application */ | ||
hlt | ||
.size make_fcontext,.-make_fcontext |
118 changes: 118 additions & 0 deletions
118
third_party/boost_context/src/asm/fcontext_i386_sysv_macho_gas.S
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,118 @@ | ||
/* | ||
Copyright Oliver Kowalke 2009. | ||
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 | * | ||
* -------------------------------------------------------------- * | ||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | * | ||
* -------------------------------------------------------------- * | ||
* | EDI | ESI | EBX | EBP | ESP | EIP | * | ||
* -------------------------------------------------------------- * | ||
* -------------------------------------------------------------- * | ||
* | 6 | 7 | | * | ||
* -------------------------------------------------------------- * | ||
* | 0x18 | 0x1c | | * | ||
* -------------------------------------------------------------- * | ||
* | sbase | slimit | | * | ||
* -------------------------------------------------------------- * | ||
* -------------------------------------------------------------- * | ||
* | 8 | 9 | | * | ||
* -------------------------------------------------------------- * | ||
* | 0x20 | 0x24 | | * | ||
* -------------------------------------------------------------- * | ||
* | fc_mxcsr|fc_x87_cw| | * | ||
* -------------------------------------------------------------- * | ||
* * | ||
* *****************************************************************/ | ||
|
||
.text | ||
.globl _jump_fcontext | ||
.align 2 | ||
_jump_fcontext: | ||
movl 0x4(%esp), %ecx /* load address of the first fcontext_t arg */ | ||
movl %edi, (%ecx) /* save EDI */ | ||
movl %esi, 0x4(%ecx) /* save ESI */ | ||
movl %ebx, 0x8(%ecx) /* save EBX */ | ||
movl %ebp, 0xc(%ecx) /* save EBP */ | ||
|
||
leal 0x4(%esp), %eax /* exclude the return address */ | ||
movl %eax, 0x10(%ecx) /* save as stack pointer */ | ||
movl (%esp), %eax /* load return address */ | ||
movl %eax, 0x14(%ecx) /* save return address */ | ||
|
||
movl 0x8(%esp), %edx /* load address of the second fcontext_t arg */ | ||
movl (%edx), %edi /* restore EDI */ | ||
movl 0x4(%edx), %esi /* restore ESI */ | ||
movl 0x8(%edx), %ebx /* restore EBX */ | ||
movl 0xc(%edx), %ebp /* restore EBP */ | ||
|
||
movl 0x10(%esp), %eax /* check if fpu enve preserving was requested */ | ||
test %eax, %eax | ||
je 1f | ||
|
||
stmxcsr 0x20(%ecx) /* save MMX control and status word */ | ||
fnstcw 0x24(%ecx) /* save x87 control word */ | ||
ldmxcsr 0x20(%edx) /* restore MMX control and status word */ | ||
fldcw 0x24(%edx) /* restore x87 control word */ | ||
1: | ||
movl 0xc(%esp), %eax /* use third arg as return value after jump */ | ||
|
||
movl 0x10(%edx), %esp /* restore ESP */ | ||
movl %eax, 0x4(%esp) /* use third arg as first arg in context function */ | ||
movl 0x14(%edx), %edx /* fetch the address to return to */ | ||
|
||
jmp *%edx /* indirect jump to context */ | ||
|
||
.text | ||
.globl _make_fcontext | ||
.align 2 | ||
_make_fcontext: | ||
movl 0x4(%esp), %eax /* load address of the fcontext_t */ | ||
movl %eax, (%eax) /* save the address of current context */ | ||
movl 0x8(%esp), %ecx /* load the address of the context function */ | ||
movl %ecx, 0x14(%eax) /* save the address of the context function */ | ||
movl 0x18(%eax), %edx /* load the stack base */ | ||
|
||
pushl %eax /* save pointer to fcontext_t */ | ||
pushl %ebx /* save EBX */ | ||
pushl %edx /* stack pointer as arg for align_stack */ | ||
call 1f | ||
1: popl %ebx /* address of label 1 */ | ||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx /* compute address of GOT and store it in EBX */ | ||
call align_stack@PLT /* align stack */ | ||
movl %eax, %edx /* begin of aligned stack */ | ||
popl %eax /* remove arg for align_stack */ | ||
popl %ebx /* restore EBX */ | ||
popl %eax /* restore pointer to fcontext_t */ | ||
|
||
leal -0x14(%edx), %edx /* reserve space for the last frame on stack, (ESP + 4) % 16 == 0 */ | ||
movl %edx, 0x10(%eax) /* save the aligned stack base */ | ||
|
||
stmxcsr 0x20(%eax) /* save MMX control and status word */ | ||
fnstcw 0x24(%eax) /* save x87 control word */ | ||
|
||
call 2f | ||
2: popl %ecx /* address of label 2 */ | ||
addl $finish-2b, %ecx /* helper code executed after context function returns */ | ||
movl %ecx, (%edx) | ||
|
||
xorl %eax, %eax | ||
ret | ||
|
||
finish: | ||
leal -0xc(%esp), %esp | ||
|
||
call 3f | ||
3: popl %ebx /* address of label 3 */ | ||
addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx /* compute address of GOT and store it in EBX */ | ||
|
||
xorl %eax, %eax | ||
pushl %eax /* exit code is zero */ | ||
call _exit@PLT /* exit application */ | ||
hlt |
Oops, something went wrong.