fix coredump in sw
This commit is contained in:
4
deps/oblib/src/lib/CMakeLists.txt
vendored
4
deps/oblib/src/lib/CMakeLists.txt
vendored
@ -23,8 +23,8 @@ ob_lib_add_target(oblib_lib_coro_context
|
|||||||
coro/context/asm/jump_x86_64_sysv_elf_gas.S
|
coro/context/asm/jump_x86_64_sysv_elf_gas.S
|
||||||
coro/context/asm/make_x86_64_sysv_elf_gas.S
|
coro/context/asm/make_x86_64_sysv_elf_gas.S
|
||||||
coro/context/asm/ontop_x86_64_sysv_elf_gas.S
|
coro/context/asm/ontop_x86_64_sysv_elf_gas.S
|
||||||
coro/context/asm/make_sw_64_sysv_elf_gas.S
|
coro/context/asm/make_sw_64_aapcs_elf_gas.S
|
||||||
coro/context/asm/jump_sw_64_sysv_elf_gas.S
|
coro/context/asm/jump_sw_64_aapcs_elf_gas.S
|
||||||
coro/context/asm/ontop_sw_64_aapcs_elf_gas.S
|
coro/context/asm/ontop_sw_64_aapcs_elf_gas.S
|
||||||
coro/context/asm/jump_loongarch64_sysv_elf_gas.S
|
coro/context/asm/jump_loongarch64_sysv_elf_gas.S
|
||||||
coro/context/asm/make_loongarch64_sysv_elf_gas.S
|
coro/context/asm/make_loongarch64_sysv_elf_gas.S
|
||||||
|
88
deps/oblib/src/lib/coro/context/asm/jump_sw_64_aapcs_elf_gas.S
vendored
Normal file
88
deps/oblib/src/lib/coro/context/asm/jump_sw_64_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#if defined(__sw_64__)
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global jump_fcontext
|
||||||
|
.type jump_fcontext, %function
|
||||||
|
jump_fcontext:
|
||||||
|
# prepare stack for GP + FPU
|
||||||
|
#ldih $29,0($27)
|
||||||
|
#ldi $29,0($29)
|
||||||
|
subl $sp, 0x98, $sp
|
||||||
|
|
||||||
|
# save $f2-$f9
|
||||||
|
fstd $f2, 0x00($sp)
|
||||||
|
fstd $f3, 0x08($sp)
|
||||||
|
fstd $f4, 0x10($sp)
|
||||||
|
fstd $f5, 0x18($sp)
|
||||||
|
fstd $f6, 0x20($sp)
|
||||||
|
fstd $f7, 0x28($sp)
|
||||||
|
fstd $f8, 0x30($sp)
|
||||||
|
fstd $f9, 0x38($sp)
|
||||||
|
|
||||||
|
# save $9-$15, fp,$26
|
||||||
|
stl $9, 0x40($sp)
|
||||||
|
stl $10, 0x48($sp)
|
||||||
|
stl $11, 0x50($sp)
|
||||||
|
stl $12, 0x58($sp)
|
||||||
|
stl $13, 0x60($sp)
|
||||||
|
stl $14, 0x68($sp)
|
||||||
|
stl $15, 0x70($sp)
|
||||||
|
stl $fp, 0x78($sp)
|
||||||
|
stl $16, 0x80($sp) #save jump_fcontext return address
|
||||||
|
stl $26, 0x88($sp)
|
||||||
|
|
||||||
|
# save LR as PC
|
||||||
|
stl $26, 0x90($sp)
|
||||||
|
|
||||||
|
# store RSP (pointing to context-data) in $16
|
||||||
|
mov $sp, $20
|
||||||
|
|
||||||
|
|
||||||
|
# restore RSP (pointing to context-data) from $17
|
||||||
|
mov $17, $sp
|
||||||
|
|
||||||
|
# load $f2-$f9
|
||||||
|
fldd $f2, 0x00($sp)
|
||||||
|
fldd $f3, 0x08($sp)
|
||||||
|
fldd $f4, 0x10($sp)
|
||||||
|
fldd $f5, 0x18($sp)
|
||||||
|
fldd $f6, 0x20($sp)
|
||||||
|
fldd $f7, 0x28($sp)
|
||||||
|
fldd $f8, 0x30($sp)
|
||||||
|
fldd $f9, 0x38($sp)
|
||||||
|
|
||||||
|
# load $9-$15, fp,$26
|
||||||
|
ldl $9, 0x40($sp)
|
||||||
|
ldl $10, 0x48($sp)
|
||||||
|
ldl $11, 0x50($sp)
|
||||||
|
ldl $12, 0x58($sp)
|
||||||
|
ldl $13, 0x60($sp)
|
||||||
|
ldl $14, 0x68($sp)
|
||||||
|
ldl $15, 0x70($sp)
|
||||||
|
ldl $fp, 0x78($sp)
|
||||||
|
ldl $26, 0x88($sp)
|
||||||
|
|
||||||
|
# pass transfer_t as first arg in context function
|
||||||
|
# to store $1,$2 to $16 address
|
||||||
|
ldl $16, 0x80($sp) #load $16, store return struct do return address
|
||||||
|
stl $20,0($16)
|
||||||
|
stl $18,8($16)
|
||||||
|
|
||||||
|
# pass transfer_t as first arg in context function,such as f1,f2,f3
|
||||||
|
# $16 == FCTX, $17 == DATA
|
||||||
|
mov $20,$16 #$16 $17 as first and second arg
|
||||||
|
mov $18,$17
|
||||||
|
|
||||||
|
|
||||||
|
# load pc
|
||||||
|
ldl $27, 0x90($sp)
|
||||||
|
|
||||||
|
|
||||||
|
# restore stack from GP + FPU
|
||||||
|
addl $sp, 0x98, $sp
|
||||||
|
|
||||||
|
ret $31,($27),0x1 //jmp $31, ($27) //ret ($27)
|
||||||
|
.size jump_fcontext,.-jump_fcontext
|
||||||
|
# Mark that we don't need executable stack.
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
@ -1,172 +0,0 @@
|
|||||||
#if defined(__sw_64__)
|
|
||||||
/*
|
|
||||||
Copyright Edward Nevill 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 | | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* | PC | align | | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* *
|
|
||||||
*******************************************************/
|
|
||||||
|
|
||||||
#.cpu generic+fp+simd
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.global jump_fcontext
|
|
||||||
.type jump_fcontext, %function
|
|
||||||
jump_fcontext:
|
|
||||||
# prepare stack for GP + FPU
|
|
||||||
# sub sp, sp, #0xb0
|
|
||||||
ldih $29,0($27) !gpdisp!1
|
|
||||||
ldi $29,0($29) !gpdisp!1
|
|
||||||
subl $30, 0x98, $30
|
|
||||||
# Because gcc may save integer registers in fp registers across a
|
|
||||||
# function call we cannot skip saving the fp registers.
|
|
||||||
#
|
|
||||||
# Do not reinstate this test unless you fully understand what you
|
|
||||||
# are doing.
|
|
||||||
#
|
|
||||||
# # test if fpu env should be preserved
|
|
||||||
# cmp w3, #0
|
|
||||||
# b.eq 1f
|
|
||||||
|
|
||||||
# save d8 - d15
|
|
||||||
# stp d8, d9, [sp, #0x00]
|
|
||||||
# stp d10, d11, [sp, #0x10]
|
|
||||||
# stp d12, d13, [sp, #0x20]
|
|
||||||
# stp d14, d15, [sp, #0x30]
|
|
||||||
fstd $f2,0x00($30)
|
|
||||||
fstd $f3,0x08($30)
|
|
||||||
fstd $f3,0x10($30)
|
|
||||||
fstd $f4,0x18($30)
|
|
||||||
fstd $f5,0x20($30)
|
|
||||||
fstd $f6,0x28($30)
|
|
||||||
fstd $f7,0x30($30)
|
|
||||||
fstd $f8,0x38($30)
|
|
||||||
fstd $f9,0x40($30)
|
|
||||||
1:
|
|
||||||
# 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]
|
|
||||||
stl $9, 0x48($30)
|
|
||||||
stl $10, 0x50($30)
|
|
||||||
stl $11, 0x58($30)
|
|
||||||
stl $12, 0x60($30)
|
|
||||||
stl $13, 0x68($30)
|
|
||||||
stl $14, 0x70($30)
|
|
||||||
stl $15, 0x90($30)
|
|
||||||
# save LR as PC
|
|
||||||
# str x30, [sp, #0xa0]
|
|
||||||
stl $26, 0x80($30)
|
|
||||||
stl $26, 0x88($30)
|
|
||||||
# store RSP (pointing to context-data) in first argument (x0).
|
|
||||||
# STR cannot have sp as a target register
|
|
||||||
# mov x4, sp
|
|
||||||
mov $30,$1
|
|
||||||
# str x4, [x0]
|
|
||||||
stl $1,0x00($16)
|
|
||||||
# restore RSP (pointing to context-data) from A2 (x1)
|
|
||||||
# mov sp, x1
|
|
||||||
mov $17,$30
|
|
||||||
# # test if fpu env should be preserved
|
|
||||||
# cmp w3, #0
|
|
||||||
# b.eq 2f
|
|
||||||
|
|
||||||
# load d8 - d15
|
|
||||||
# ldp d8, d9, [sp, #0x00]
|
|
||||||
# ldp d10, d11, [sp, #0x10]
|
|
||||||
# ldp d12, d13, [sp, #0x20]
|
|
||||||
# ldp d14, d15, [sp, #0x30]
|
|
||||||
fldd $f2,0x00($30)
|
|
||||||
fldd $f3,0x08($30)
|
|
||||||
fldd $f3,0x10($30)
|
|
||||||
fldd $f4,0x18($30)
|
|
||||||
fldd $f5,0x20($30)
|
|
||||||
fldd $f6,0x28($30)
|
|
||||||
fldd $f7,0x30($30)
|
|
||||||
fldd $f8,0x38($30)
|
|
||||||
fldd $f9,0x40($30)
|
|
||||||
2:
|
|
||||||
# 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]
|
|
||||||
ldl $9, 0x48($30)
|
|
||||||
ldl $10, 0x50($30)
|
|
||||||
ldl $11, 0x58($30)
|
|
||||||
ldl $12, 0x60($30)
|
|
||||||
ldl $13, 0x68($30)
|
|
||||||
ldl $14, 0x70($30)
|
|
||||||
ldl $26, 0x80($30)
|
|
||||||
ldl $15, 0x90($30)
|
|
||||||
# use third arg as return value after jump
|
|
||||||
# and as first arg in context function
|
|
||||||
# mov x0, x2
|
|
||||||
mov $18,$16
|
|
||||||
mov $18,$0
|
|
||||||
# load pc
|
|
||||||
# ldr x4, [sp, #0xa0]
|
|
||||||
ldl $27,0x88($30)
|
|
||||||
# ldl $26,0x88($30)
|
|
||||||
# restore stack from GP + FPU
|
|
||||||
# add sp, sp, #0xb0
|
|
||||||
#mov $1,$30
|
|
||||||
addl $30, 0x98, $30
|
|
||||||
# addl $30,32,$30
|
|
||||||
# ret x4
|
|
||||||
# mov $1,$26
|
|
||||||
ret $31,($27),1
|
|
||||||
.size jump_fcontext,.-jump_fcontext
|
|
||||||
# Mark that we don't need executable stack.
|
|
||||||
.section .note.GNU-stack,"",%progbits
|
|
||||||
#endif
|
|
39
deps/oblib/src/lib/coro/context/asm/make_sw_64_aapcs_elf_gas.S
vendored
Normal file
39
deps/oblib/src/lib/coro/context/asm/make_sw_64_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#if defined(__sw_64__)
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global make_fcontext
|
||||||
|
.type make_fcontext, %function
|
||||||
|
make_fcontext:
|
||||||
|
#ldih $29,0($27)
|
||||||
|
#ldi $29,0($29)
|
||||||
|
# shift address in $16 (allocated stack) to lower 16 byte boundary
|
||||||
|
bic $16, 0xf,$16
|
||||||
|
|
||||||
|
# reserve space for context-data on context-stack
|
||||||
|
subl $16, 0x98,$16
|
||||||
|
|
||||||
|
# third arg of make_fcontext() == address of context-function
|
||||||
|
# store address as a PC to jump in
|
||||||
|
stl $18, 0x90($16)
|
||||||
|
|
||||||
|
# save address of finish as return-address for context-function
|
||||||
|
# will be entered after context-function returns (LR register)
|
||||||
|
ldi $17, finish
|
||||||
|
stl $17, 0x88($16)
|
||||||
|
|
||||||
|
stl $16, 0x80($16)
|
||||||
|
|
||||||
|
mov $16, $0
|
||||||
|
|
||||||
|
ret $31,($26),1 //jump ($26) // return pointer to context-data ($16)
|
||||||
|
|
||||||
|
finish:
|
||||||
|
# exit code is zero
|
||||||
|
mov 0, $0
|
||||||
|
# exit application
|
||||||
|
call _exit #ldi $27,_exit #jmp ($27)
|
||||||
|
|
||||||
|
.size make_fcontext,.-make_fcontext
|
||||||
|
# Mark that we don't need executable stack.
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
@ -1,93 +0,0 @@
|
|||||||
#if defined(__sw_64__)
|
|
||||||
/*
|
|
||||||
Copyright Edward Nevill 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 | | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* | PC | align | | | *
|
|
||||||
* ------------------------------------------------- *
|
|
||||||
* *
|
|
||||||
*******************************************************/
|
|
||||||
|
|
||||||
#.cpu generic+fp+simd
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.global make_fcontext
|
|
||||||
.type make_fcontext, %function
|
|
||||||
make_fcontext:
|
|
||||||
ldih $29,0($27) !gpdisp!1
|
|
||||||
ldi $29,0($29) !gpdisp!1
|
|
||||||
# shift address in x0 (allocated stack) to lower 16 byte boundary
|
|
||||||
# and $16, ~0xf, $16
|
|
||||||
srl $16,4,$16
|
|
||||||
sll $16,4,$16
|
|
||||||
# reserve space for context-data on context-stack
|
|
||||||
subl $16, 0x90,$16
|
|
||||||
|
|
||||||
# third arg of make_fcontext() == address of context-function
|
|
||||||
# store address as a PC to jump in
|
|
||||||
# stl x2, [x0, #0xa0]
|
|
||||||
stl $18, 0x88($16)
|
|
||||||
# save address of finish as return-address for context-function
|
|
||||||
# will be entered after context-function returns (LR register)
|
|
||||||
# adr x1, finish
|
|
||||||
ldi $17,finish
|
|
||||||
# str x1, [x0, #0x98]
|
|
||||||
stl $17,0x80($16)
|
|
||||||
# ret x30 // return pointer to context-data (x0)
|
|
||||||
mov $16,$0
|
|
||||||
ret $31,($26),1
|
|
||||||
finish:
|
|
||||||
# exit code is zero
|
|
||||||
# mov 0,$16
|
|
||||||
mov 0,$0
|
|
||||||
# exit application
|
|
||||||
call _exit
|
|
||||||
|
|
||||||
.size make_fcontext,.-make_fcontext
|
|
||||||
# Mark that we don't need executable stack.
|
|
||||||
.section .note.GNU-stack,"",%progbits
|
|
||||||
#endif
|
|
Reference in New Issue
Block a user