setjmp.S (5911b520278d793b939fb365d1e0900b3dcf5179) | setjmp.S (31489a9a2653e123121e8ca39b4be802013d2b50) |
---|---|
1/* $NetBSD: setjmp.S,v 1.5 2003/04/05 23:08:51 bjh21 Exp $ */ 2 3/* 4 * Copyright (c) 1997 Mark Brinicombe 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 33 unchanged lines hidden (view full) --- 42 * setjmp(a) 43 * by restoring registers from the stack. 44 * The previous signal state is restored. 45 */ 46 47ENTRY(setjmp) 48 /* Block all signals and retrieve the old signal mask */ 49 stmfd sp!, {r0, r14} | 1/* $NetBSD: setjmp.S,v 1.5 2003/04/05 23:08:51 bjh21 Exp $ */ 2 3/* 4 * Copyright (c) 1997 Mark Brinicombe 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 33 unchanged lines hidden (view full) --- 42 * setjmp(a) 43 * by restoring registers from the stack. 44 * The previous signal state is restored. 45 */ 46 47ENTRY(setjmp) 48 /* Block all signals and retrieve the old signal mask */ 49 stmfd sp!, {r0, r14} |
50 add r2, r0, #4 /* oset */ | 50 add r2, r0, #(25 * 4) /* oset */ |
51 mov r0, #0x00000001 /* SIG_BLOCK */ 52 mov r1, #0 /* set */ 53 54 bl PIC_SYM(_C_LABEL(sigprocmask), PLT) 55 56 ldmfd sp!, {r0, r14} 57 58 ldr r1, .Lsetjmp_magic --- 6 unchanged lines hidden (view full) --- 65 sfm f4, 4, [r0], #48 66 /* Store fpsr */ 67 rfs r1 68 str r1, [r0], #0x0004 69#endif /*SOFTFLOAT*/ 70 /* Store integer registers */ 71 stmia r0, {r4-r14} 72 mov r0, #0x00000000 | 51 mov r0, #0x00000001 /* SIG_BLOCK */ 52 mov r1, #0 /* set */ 53 54 bl PIC_SYM(_C_LABEL(sigprocmask), PLT) 55 56 ldmfd sp!, {r0, r14} 57 58 ldr r1, .Lsetjmp_magic --- 6 unchanged lines hidden (view full) --- 65 sfm f4, 4, [r0], #48 66 /* Store fpsr */ 67 rfs r1 68 str r1, [r0], #0x0004 69#endif /*SOFTFLOAT*/ 70 /* Store integer registers */ 71 stmia r0, {r4-r14} 72 mov r0, #0x00000000 |
73 mov r15, r14 | 73 RET |
74 75.Lsetjmp_magic: 76 .word _JB_MAGIC_SETJMP 77 78 79.weak _C_LABEL(longjmp) 80.set _C_LABEL(longjmp), _C_LABEL(__longjmp) 81ENTRY(__longjmp) 82 ldr r2, .Lsetjmp_magic 83 ldr r3, [r0] 84 teq r2, r3 85 bne botch 86 | 74 75.Lsetjmp_magic: 76 .word _JB_MAGIC_SETJMP 77 78 79.weak _C_LABEL(longjmp) 80.set _C_LABEL(longjmp), _C_LABEL(__longjmp) 81ENTRY(__longjmp) 82 ldr r2, .Lsetjmp_magic 83 ldr r3, [r0] 84 teq r2, r3 85 bne botch 86 |
87 /* Fetch signal mask */ 88 add r2, r0, #4 | |
89 90 /* Set signal mask */ 91 stmfd sp!, {r0, r1, r14} 92 sub sp, sp, #4 /* align the stack */ 93 | 87 88 /* Set signal mask */ 89 stmfd sp!, {r0, r1, r14} 90 sub sp, sp, #4 /* align the stack */ 91 |
94 mov r1, r2 | 92 add r1, r0, #(25 * 4) /* Signal mask */ |
95 mov r0, #3 /* SIG_SETMASK */ 96 mov r2, #0 97 bl PIC_SYM(_C_LABEL(sigprocmask), PLT) 98 99 add sp, sp, #4 /* unalign the stack */ 100 ldmfd sp!, {r0, r1, r14} 101 102 add r0, r0, #4 --- 14 unchanged lines hidden (view full) --- 117 teqne r14, #0 118 beq botch 119 120 /* Set return value */ 121 122 mov r0, r1 123 teq r0, #0x00000000 124 moveq r0, #0x00000001 | 93 mov r0, #3 /* SIG_SETMASK */ 94 mov r2, #0 95 bl PIC_SYM(_C_LABEL(sigprocmask), PLT) 96 97 add sp, sp, #4 /* unalign the stack */ 98 ldmfd sp!, {r0, r1, r14} 99 100 add r0, r0, #4 --- 14 unchanged lines hidden (view full) --- 115 teqne r14, #0 116 beq botch 117 118 /* Set return value */ 119 120 mov r0, r1 121 teq r0, #0x00000000 122 moveq r0, #0x00000001 |
125 mov r15, r14 | 123 RET |
126 127 /* validation failed, die die die. */ 128botch: 129 bl PIC_SYM(_C_LABEL(longjmperror), PLT) 130 bl PIC_SYM(_C_LABEL(abort), PLT) 131 b . - 8 /* Cannot get here */ | 124 125 /* validation failed, die die die. */ 126botch: 127 bl PIC_SYM(_C_LABEL(longjmperror), PLT) 128 bl PIC_SYM(_C_LABEL(abort), PLT) 129 b . - 8 /* Cannot get here */ |