cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setjmp_64.S (1041B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#
      3# arch/x86_64/setjmp.S
      4#
      5# setjmp/longjmp for the x86-64 architecture
      6#
      7
      8#
      9# The jmp_buf is assumed to contain the following, in order:
     10#	%rbx
     11#	%rsp (post-return)
     12#	%rbp
     13#	%r12
     14#	%r13
     15#	%r14
     16#	%r15
     17#	<return address>
     18#
     19
     20	.text
     21	.align 4
     22	.globl kernel_setjmp
     23	.type kernel_setjmp, @function
     24kernel_setjmp:
     25	pop  %rsi			# Return address, and adjust the stack
     26	xorl %eax,%eax			# Return value
     27	movq %rbx,(%rdi)
     28	movq %rsp,8(%rdi)		# Post-return %rsp!
     29	push %rsi			# Make the call/return stack happy
     30	movq %rbp,16(%rdi)
     31	movq %r12,24(%rdi)
     32	movq %r13,32(%rdi)
     33	movq %r14,40(%rdi)
     34	movq %r15,48(%rdi)
     35	movq %rsi,56(%rdi)		# Return address
     36	RET
     37
     38	.size kernel_setjmp,.-kernel_setjmp
     39
     40	.text
     41	.align 4
     42	.globl kernel_longjmp
     43	.type kernel_longjmp, @function
     44kernel_longjmp:
     45	movl %esi,%eax			# Return value (int)
     46	movq (%rdi),%rbx
     47	movq 8(%rdi),%rsp
     48	movq 16(%rdi),%rbp
     49	movq 24(%rdi),%r12
     50	movq 32(%rdi),%r13
     51	movq 40(%rdi),%r14
     52	movq 48(%rdi),%r15
     53	jmp *56(%rdi)
     54
     55	.size kernel_longjmp,.-kernel_longjmp