diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/system/context_x86_64.asm | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/system/context_x86_64.asm')
-rw-r--r-- | util/system/context_x86_64.asm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/util/system/context_x86_64.asm b/util/system/context_x86_64.asm new file mode 100644 index 0000000000..8bcc01e4fc --- /dev/null +++ b/util/system/context_x86_64.asm @@ -0,0 +1,40 @@ + [bits 64] + + %define MJB_RBX 0 + %define MJB_RBP 1 + %define MJB_R12 2 + %define MJB_R13 3 + %define MJB_R14 4 + %define MJB_R15 5 + %define MJB_RSP 6 + %define MJB_PC 7 + %define MJB_SIZE (8*8) + +EXPORT __mylongjmp + mov rbx, [rdi + MJB_RBX * 8] + mov rbp, [rdi + MJB_RBP * 8] + mov r12, [rdi + MJB_R12 * 8] + mov r13, [rdi + MJB_R13 * 8] + mov r14, [rdi + MJB_R14 * 8] + mov r15, [rdi + MJB_R15 * 8] + test esi, esi + mov eax, 1 + cmove esi, eax + mov eax, esi + mov rdx, [rdi + MJB_PC * 8] + mov rsp, [rdi + MJB_RSP * 8] + jmp rdx + +EXPORT __mysetjmp + mov [rdi + MJB_RBX * 8], rbx + mov [rdi + MJB_RBP * 8], rbp + mov [rdi + MJB_R12 * 8], r12 + mov [rdi + MJB_R13 * 8], r13 + mov [rdi + MJB_R14 * 8], r14 + mov [rdi + MJB_R15 * 8], r15 + lea rdx, [rsp + 8] + mov [rdi + MJB_RSP * 8], rdx + mov rax, [rsp] + mov [rdi + MJB_PC * 8], rax + mov eax, 0 + ret |