ClickHouse/libs/libglibc-compatibility/musl/longjmp.s

23 lines
783 B
ArmAsm

/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
.global musl_glibc_longjmp
.type musl_glibc_longjmp,@function
musl_glibc_longjmp:
mov 0x30(%rdi),%r8
mov 0x8(%rdi),%r9
mov 0x38(%rdi),%rdx
ror $0x11,%r8
xor %fs:0x30,%r8 /* this ends up being the stack pointer */
ror $0x11,%r9
xor %fs:0x30,%r9
ror $0x11,%rdx
xor %fs:0x30,%rdx /* this is the instruction pointer */
mov (%rdi),%rbx /* rdi is the jmp_buf, restore regs from it */
mov 0x10(%rdi),%r12
mov 0x18(%rdi),%r13
mov 0x20(%rdi),%r14
mov 0x28(%rdi),%r15
mov %esi,%eax
mov %r8,%rsp
mov %r9,%rbp
jmpq *%rdx /* goto saved address without altering rsp */