sigsetjmp.S (50476) | sigsetjmp.S (51794) |
---|---|
1/*- 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * | 1/*- 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * William Jolitz. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * |
36 * $FreeBSD: head/lib/libc/i386/gen/sigsetjmp.S 50476 1999-08-28 00:22:10Z peter $ | 36 * $FreeBSD: head/lib/libc/i386/gen/sigsetjmp.S 51794 1999-09-29 15:18:46Z marcel $ |
37 */ 38 39#if defined(LIBC_RCS) && !defined(lint) 40 .text | 37 */ 38 39#if defined(LIBC_RCS) && !defined(lint) 40 .text |
41 .asciz "$FreeBSD: head/lib/libc/i386/gen/sigsetjmp.S 50476 1999-08-28 00:22:10Z peter $" | 41 .asciz "$FreeBSD: head/lib/libc/i386/gen/sigsetjmp.S 51794 1999-09-29 15:18:46Z marcel $" |
42#endif /* LIBC_RCS and not lint */ 43 44#include "DEFS.h" 45#include "SYS.h" 46 47/*- 48 * TODO: 49 * Rename sigsetjmp to __sigsetjmp and siglongjmp to __siglongjmp, --- 6 unchanged lines hidden (view full) --- 56 * check for and handle errors. 57 * 58 * Restore _all_ the registers and the signal mask atomically. Can 59 * use sigreturn() if sigreturn() works. 60 */ 61 62ENTRY(sigsetjmp) 63 movl 8(%esp),%eax | 42#endif /* LIBC_RCS and not lint */ 43 44#include "DEFS.h" 45#include "SYS.h" 46 47/*- 48 * TODO: 49 * Rename sigsetjmp to __sigsetjmp and siglongjmp to __siglongjmp, --- 6 unchanged lines hidden (view full) --- 56 * check for and handle errors. 57 * 58 * Restore _all_ the registers and the signal mask atomically. Can 59 * use sigreturn() if sigreturn() works. 60 */ 61 62ENTRY(sigsetjmp) 63 movl 8(%esp),%eax |
64 movl 4(%esp),%ecx 65 movl %eax,32(%ecx) | 64 movl 4(%esp),%ecx 65 movl %eax,44(%ecx) |
66 testl %eax,%eax 67 jz 2f 68 PIC_PROLOGUE | 66 testl %eax,%eax 67 jz 2f 68 PIC_PROLOGUE |
69 pushl $0 | 69 leal 28(%ecx), %eax 70 pushl %eax /* (sigset_t*)oset */ 71 pushl $0 /* (sigset_t*)set */ 72 pushl $1 /* SIG_BLOCK */ |
70#ifdef _THREAD_SAFE | 73#ifdef _THREAD_SAFE |
71 call PIC_PLT(CNAME(_thread_sys_sigblock)) | 74 call PIC_PLT(CNAME(_thread_sys_sigprocmask)) |
72#else | 75#else |
73 call PIC_PLT(CNAME(sigblock)) | 76 call PIC_PLT(CNAME(sigprocmask)) |
74#endif | 77#endif |
75 addl $4,%esp | 78 addl $12,%esp |
76 PIC_EPILOGUE | 79 PIC_EPILOGUE |
77 movl 4(%esp),%ecx 78 movl %eax,24(%ecx) | 80 movl 4(%esp),%ecx |
792: movl 0(%esp),%edx 80 movl %edx, 0(%ecx) 81 movl %ebx, 4(%ecx) 82 movl %esp, 8(%ecx) 83 movl %ebp,12(%ecx) 84 movl %esi,16(%ecx) 85 movl %edi,20(%ecx) | 812: movl 0(%esp),%edx 82 movl %edx, 0(%ecx) 83 movl %ebx, 4(%ecx) 84 movl %esp, 8(%ecx) 85 movl %ebp,12(%ecx) 86 movl %esi,16(%ecx) 87 movl %edi,20(%ecx) |
86 fnstcw 28(%ecx) | 88 fnstcw 24(%ecx) |
87 xorl %eax,%eax 88 ret 89 90ENTRY(siglongjmp) 91 movl 4(%esp),%edx | 89 xorl %eax,%eax 90 ret 91 92ENTRY(siglongjmp) 93 movl 4(%esp),%edx |
92 cmpl $0,32(%edx) | 94 cmpl $0,44(%edx) |
93 jz 2f 94 PIC_PROLOGUE | 95 jz 2f 96 PIC_PROLOGUE |
95 pushl 24(%edx) | 97 pushl $0 /* (sigset_t*)oset */ 98 leal 28(%edx), %eax 99 pushl %eax /* (sigset_t*)set */ 100 pushl $3 /* SIG_SETMASK */ |
96#ifdef _THREAD_SAFE | 101#ifdef _THREAD_SAFE |
97 call PIC_PLT(CNAME(_thread_sys_sigsetmask)) | 102 call PIC_PLT(CNAME(_thread_sys_sigprocmask)) |
98#else | 103#else |
99 call PIC_PLT(CNAME(sigsetmask)) | 104 call PIC_PLT(CNAME(sigprocmask)) |
100#endif | 105#endif |
101 addl $4,%esp | 106 addl $12,%esp |
102 PIC_EPILOGUE | 107 PIC_EPILOGUE |
1032: movl 4(%esp),%edx 104 movl 8(%esp),%eax | 108 movl 4(%esp),%edx 1092: movl 8(%esp),%eax |
105 movl 0(%edx),%ecx 106 movl 4(%edx),%ebx 107 movl 8(%edx),%esp 108 movl 12(%edx),%ebp 109 movl 16(%edx),%esi 110 movl 20(%edx),%edi 111 fninit | 110 movl 0(%edx),%ecx 111 movl 4(%edx),%ebx 112 movl 8(%edx),%esp 113 movl 12(%edx),%ebp 114 movl 16(%edx),%esi 115 movl 20(%edx),%edi 116 fninit |
112 fldcw 28(%edx) | 117 fldcw 24(%edx) |
113 testl %eax,%eax 114 jnz 1f 115 incl %eax 1161: movl %ecx,0(%esp) 117 ret | 118 testl %eax,%eax 119 jnz 1f 120 incl %eax 1211: movl %ecx,0(%esp) 122 ret |