diff options
Diffstat (limited to 'libc/sysdeps/linux/vax/setjmp.S')
-rw-r--r-- | libc/sysdeps/linux/vax/setjmp.S | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/vax/setjmp.S b/libc/sysdeps/linux/vax/setjmp.S new file mode 100644 index 000000000..bdbde4b13 --- /dev/null +++ b/libc/sysdeps/linux/vax/setjmp.S @@ -0,0 +1,39 @@ + +/* + * setjmp.S atp. Sept. 2001 + * Jan-Benedict Glaw <jbglaw@lug-owl.de> 2006 + * + * Save regs and info needed for a longjmp + */ + +.globl __sigsetjmp +.align 4 +__sigsetjmp: + .word 0x0000 /* We look after reg saving here - this */ + /* must match longjmp. */ + movl 0x4(%ap), %r0 /* Our scratch reg */ + /* kenn would probably use movq here. :-) */ + movl %r1, 0x14(%r0) /* save regs */ + movl %r2, 0x18(%r0) + movl %r3, 0x1c(%r0) + movl %r4, 0x20(%r0) + movl %r5, 0x24(%r0) + movl %r6, 0x28(%r0) + movl %r7, 0x2c(%r0) + movl %r8, 0x30(%r0) + movl %r9, 0x34(%r0) + movl %r10, 0x38(%r0) + movl %r11, 0x3c(%r0) + /* Now save our call frame */ + movl (%fp), (%r0) /* Condition handler (for VMS emulation) */ + movl 0x4(%fp), 0x4(%r0) /* psw */ + movl 0x8(%fp), 0x8(%r0) /* ap */ + movl 0xc(%fp), 0xc(%r0) /* fp */ + movl 0x10(%fp), 0x10(%r0) /* pc */ + /* Call the sigjmp save routine */ + pushl 8(%ap) + pushl %r0 + calls $2, __sigjmp_save + /* Done */ + ret + |