summaryrefslogtreecommitdiff
path: root/bindings/linux/setjmp.S
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2012-03-31 22:22:22 -0700
committerJoshua Haberman <jhaberman@gmail.com>2012-03-31 22:22:22 -0700
commit6cda8586b17d666351e231160648a44e20bbbc4f (patch)
treeff4862a1b33ad8b579aea2418c886f5d6f5f54b0 /bindings/linux/setjmp.S
parent9a7037a2fa4f909eea561d6d89997b0b4203df9e (diff)
Fix broken setjmp with working one.
Diffstat (limited to 'bindings/linux/setjmp.S')
-rw-r--r--bindings/linux/setjmp.S58
1 files changed, 58 insertions, 0 deletions
diff --git a/bindings/linux/setjmp.S b/bindings/linux/setjmp.S
new file mode 100644
index 0000000..8ef5831
--- /dev/null
+++ b/bindings/linux/setjmp.S
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2003 Peter Wemm.
+ * Copyright (c) 1993 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+_setjmp:
+ movq %rbx,0(%rdi) /* save rbx */
+ movq %rsp,8(%rdi) /* save rsp */
+ movq %rbp,16(%rdi) /* save rbp */
+ movq %r12,24(%rdi) /* save r12 */
+ movq %r13,32(%rdi) /* save r13 */
+ movq %r14,40(%rdi) /* save r14 */
+ movq %r15,48(%rdi) /* save r15 */
+ movq 0(%rsp),%rdx /* get rta */
+ movq %rdx,56(%rdi) /* save rip */
+ xorl %eax,%eax /* return(0); */
+ ret
+
+_longjmp:
+ movq 0(%rdi),%rbx /* restore rbx */
+ movq 8(%rdi),%rsp /* restore rsp */
+ movq 16(%rdi),%rbp /* restore rbp */
+ movq 24(%rdi),%r12 /* restore r12 */
+ movq 32(%rdi),%r13 /* restore r13 */
+ movq 40(%rdi),%r14 /* restore r14 */
+ movq 48(%rdi),%r15 /* restore r15 */
+ movq 56(%rdi),%rdx /* get rta */
+ movq %rdx,0(%rsp) /* put in return frame */
+ xorl %eax,%eax /* return(1); */
+ incl %eax
+ ret
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback