summaryrefslogtreecommitdiff
path: root/gnu-efi/lib/x86_64/setjmp.S
diff options
context:
space:
mode:
authorSteve McIntyre <steve@einval.com>2021-03-23 23:49:46 +0000
committerSteve McIntyre <steve@einval.com>2021-03-23 23:49:46 +0000
commit1251a7ba86fc40a6aad8b4fecdbca2b61808d9fa (patch)
tree2125fda549aaca55cb49a48d54be77dec7fbf3df /gnu-efi/lib/x86_64/setjmp.S
parent85b409232ce89b34626df9d72abedf5d4f5ccef6 (diff)
parent031e5cce385d3f96b1caa1d53495332a7eb03749 (diff)
downloadefi-boot-shim-debian/15.3-1.tar.gz
efi-boot-shim-debian/15.3-1.zip
Update upstream source from tag 'upstream/15.3'debian/15.3-1
Update to upstream version '15.3' with Debian dir 1b484f1c1ac270604a5a1451b34de4b0865c6211
Diffstat (limited to 'gnu-efi/lib/x86_64/setjmp.S')
-rw-r--r--gnu-efi/lib/x86_64/setjmp.S48
1 files changed, 48 insertions, 0 deletions
diff --git a/gnu-efi/lib/x86_64/setjmp.S b/gnu-efi/lib/x86_64/setjmp.S
new file mode 100644
index 00000000..e3e51959
--- /dev/null
+++ b/gnu-efi/lib/x86_64/setjmp.S
@@ -0,0 +1,48 @@
+ .text
+ .globl setjmp
+
+#ifndef __APPLE__
+# ifndef __MINGW32__
+ .type setjmp, @function
+# else
+ .def setjmp; .scl 2; .type 32; .endef
+# endif
+#endif
+
+setjmp:
+ pop %rsi
+ movq %rbx,0x00(%rdi)
+ movq %rsp,0x08(%rdi)
+ push %rsi
+ movq %rbp,0x10(%rdi)
+ movq %r12,0x18(%rdi)
+ movq %r13,0x20(%rdi)
+ movq %r14,0x28(%rdi)
+ movq %r15,0x30(%rdi)
+ movq %rsi,0x38(%rdi)
+ xor %rax,%rax
+ ret
+
+ .globl longjmp
+#ifndef __APPLE__
+# ifndef __MINGW32__
+ .type longjmp, @function
+# else
+ .def longjmp; .scl 2; .type 32; .endef
+# endif
+#endif
+
+longjmp:
+ movl %esi, %eax
+ movq 0x00(%rdi), %rbx
+ movq 0x08(%rdi), %rsp
+ movq 0x10(%rdi), %rbp
+ movq 0x18(%rdi), %r12
+ movq 0x20(%rdi), %r13
+ movq 0x28(%rdi), %r14
+ movq 0x30(%rdi), %r15
+ xor %rdx,%rdx
+ mov $1,%rcx
+ cmp %rax,%rdx
+ cmove %rcx,%rax
+ jmp *0x38(%rdi)