1/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ 2.global __setjmp 3.global _setjmp 4.global setjmp 5.type __setjmp,@function 6.type _setjmp,@function 7.type setjmp,@function 8__setjmp: 9_setjmp: 10setjmp: 11 mov [rdi], rbx /* rdi is jmp_buf, move registers onto it */ 12 mov [rdi + 8], rbp 13 mov [rdi + 16], r12 14 mov [rdi + 24], r13 15 mov [rdi + 32], r14 16 mov [rdi + 40], r15 17 lea rdx, [rsp + 8] /* this is our rsp WITHOUT current ret addr */ 18 mov [rdi + 48], rdx 19 mov rdx, [rsp] /* save return addr ptr for new rip */ 20 mov [rdi + 56], rdx 21 xor rax, rax /* always return 0 */ 22 ret 23