Module Name: src Committed By: matt Date: Mon Aug 19 22:11:50 UTC 2013
Modified Files: src/lib/libc/compat/arch/arm/gen: compat_setjmp.S compat_sigsetjmp.S src/lib/libc/compat/arch/arm/sys: compat_Ovfork.S compat___sigtramp1.S compat_sigpending.S compat_sigprocmask.S compat_sigsuspend.S Log Message: Use _INVOKE_CERROR() and movs To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S \ src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S \ src/lib/libc/compat/arch/arm/sys/compat_sigpending.S \ src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S \ src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/compat/arch/arm/gen/compat_setjmp.S diff -u src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.2 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.3 --- src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.2 Fri Jan 11 13:55:26 2013 +++ src/lib/libc/compat/arch/arm/gen/compat_setjmp.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_setjmp.S,v 1.2 2013/01/11 13:55:26 matt Exp $ */ +/* $NetBSD: compat_setjmp.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /* * Copyright (c) 1997 Mark Brinicombe @@ -47,14 +47,12 @@ ENTRY(setjmp) /* Block all signals and retrieve the old signal mask */ - stmfd sp!, {r0, r14} - mov r0, #0x00000000 + push {r0, lr} + movs r0, #0x00000000 bl PIC_SYM(_C_LABEL(sigblock), PLT) mov r1, r0 - ldmfd sp!, {r0, r14} - /* Store signal mask */ str r1, [r0, #(_JB_SIGMASK * 4)] @@ -62,52 +60,96 @@ ENTRY(setjmp) str r1, [r0] /* Store integer registers */ - add r0, r0, #(_JB_REG_R4 * 4) - stmia r0, {r4-r14} - mov r0, #0x00000000 - RET - -.Lsetjmp_magic: - .word _JB_MAGIC_SETJMP - + adds r0, r0, #(_JB_REG_R4 * 4) +#ifdef __thumb__ +#ifdef _ARM_ARCH_7 + stmia r0!, {r4-r12} + str sp, [r0, #0] + str lr, [r0, #4] +#else + stmia r0!, {r4-r7} + mov r2, r8 + mov r3, r9 + stmia r0!, {r2-r3} + mov r1, r10 + mov r2, r11 + mov r3, r12 + stmia r0!, {r1-r3} + mov r2, sp + mov r3, lr + stmia r0!, {r2-r3} +#endif +#else + stmia r0, {r4-lr} +#endif + movs r0, #0 + pop {r3, pc} +END(setjmp) ENTRY(longjmp) ldr r2, .Lsetjmp_magic ldr r3, [r0] - teq r2, r3 + cmp r2, r3 bne botch /* Fetch signal mask */ ldr r2, [r0, #(_JB_SIGMASK * 4)] /* Set signal mask */ - stmfd sp!, {r0, r1, r14} - sub sp, sp, #4 /* align the stack */ + push {r0, r1} /* don't care about lr */ mov r0, r2 bl PIC_SYM(_C_LABEL(sigsetmask), PLT) - add sp, sp, #4 /* unalign the stack */ - ldmfd sp!, {r0, r1, r14} + pop {r0, r1} /* Restore integer registers */ - add r0, r0, #(_JB_REG_R4 * 4) - ldmia r0, {r4-r14} + adds r0, r0, #(_JB_REG_R4 * 4) +#if !defined(__thumb__) || defined(_ARM_ARCH_7) + ldmia r0!, {r4-r12} +#else + ldmia r0!, {r4-r7} + ldmia r0!, {r2-r3} + mov r8, r2 + mov r9, r3 + ldmia r0!, {r1-r3} + mov r10, r2 + mov r11, r3 + ldmia r0!, {r2} + mov r12, r2 +#endif + + ldmia r0!, {r2-r3} /* r2 = sp, r3 = lr */ - /* Validate sp and r14 */ - teq sp, #0 - teqne r14, #0 + /* Validate sp */ + cmp r2, #0 beq botch + mov sp, r2 - /* Set return value */ + /* Validate lr */ + cmp r3, #0 + beq botch + mov lr, r3 + /* Set return value */ mov r0, r1 - teq r0, #0x00000000 - moveq r0, #0x00000001 + cmp r0, #0 +#ifdef __thumb__ + bne 1f + movs r0, #1 +1: +#else + moveq r0, #1 +#endif RET /* validation failed, die die die. */ botch: bl PIC_SYM(_C_LABEL(longjmperror), PLT) bl PIC_SYM(_C_LABEL(abort), PLT) - b . - 8 /* Cannot get here */ +2: b 2b /* Cannot get here */ + + .align 0 +.Lsetjmp_magic: + .word _JB_MAGIC_SETJMP +END(longjmp) Index: src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S diff -u src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.1 src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.2 --- src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.1 Sun Oct 16 17:27:50 2005 +++ src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sigsetjmp.S,v 1.1 2005/10/16 17:27:50 christos Exp $ */ +/* $NetBSD: compat_sigsetjmp.S,v 1.2 2013/08/19 22:11:50 matt Exp $ */ /* * Copyright (c) 1997 Mark Brinicombe @@ -46,16 +46,46 @@ */ ENTRY(sigsetjmp) - teq r1, #0 - beq PIC_SYM(_C_LABEL(_setjmp), PLT) - b PIC_SYM(_C_LABEL(setjmp), PLT) - -.L_setjmp_magic: - .word _JB_MAGIC__SETJMP +#if defined(__thumb__) && defined(_ARM_ARCH_T2) + cbnz r1, 1f + b PLT_SYM(_C_LABEL(_setjmp)) +1: b PLT_SYM(_C_LABEL(setjmp)) +#elif !defined(__thumb__) + cmp r1, #0 + beq PLT_SYM(_C_LABEL(_setjmp)) + b PLT_SYM(_C_LABEL(setjmp)) +#else + push {r3, lr} + beq 1f + bl PLT_SYM(_C_LABEL(setjmp)) + pop {r3, pc} +1: bl PLT_SYM(_C_LABEL(_setjmp)) + pop {r3, pc} +#endif +END(sigsetjmp) ENTRY(siglongjmp) ldr r2, .L_setjmp_magic ldr r3, [r0] - teq r2, r3 + cmp r2, r3 +#if !defined(__thumb__) || defined(_ARM_ARCH_T2) +#if defined(__thumb__) + it eq +#endif beq PIC_SYM(_C_LABEL(_longjmp), PLT) b PIC_SYM(_C_LABEL(longjmp), PLT) +#else + push {lr} + sub sp, sp, #4 + beq 1f + bl PIC_SYM(_C_LABEL(longjmp), PLT) + b 2f +1: bl PIC_SYM(_C_LABEL(_longjmp), PLT) +2: add sp, sp, #4 + pop {pc} +#endif + + .align 0 +.L_setjmp_magic: + .word _JB_MAGIC__SETJMP +END(siglongjmp) Index: src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S diff -u src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.3 --- src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.2 Thu Aug 1 05:54:24 2013 +++ src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_Ovfork.S,v 1.2 2013/08/01 05:54:24 matt Exp $ */ +/* $NetBSD: compat_Ovfork.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -43,14 +43,12 @@ WARN_REFERENCES(vfork, \ * r1 == 0 in parent process, r1 == 1 in child process. * r0 == pid of child in parent, r0 == pid of parent in child. */ - .text - .align 0 - ENTRY(vfork) - mov r2, r14 + mov r2, lr SYSTRAP(vfork) - bcs CERROR - mov r14, r2 - sub r1, r1, #1 /* r1 == 0xffffffff if parent, 0 if child */ - and r0, r0, r1 /* r0 == 0 if child, else unchanged */ + _INVOKE_CERROR() + mov lr, r2 + subs r1, r1, #1 /* r1 == 0xffffffff if parent, 0 if child */ + ands r0, r0, r1 /* r0 == 0 if child, else unchanged */ RET +END(vfork) Index: src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S diff -u src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.2 src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.3 --- src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.2 Mon Apr 28 20:22:58 2008 +++ src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat___sigtramp1.S,v 1.2 2008/04/28 20:22:58 martin Exp $ */ +/* $NetBSD: compat___sigtramp1.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -39,9 +39,10 @@ * * sp-> sigcontext structure */ -ENTRY_NP(__sigtramp_sigcontext_1) +ENTRY(__sigtramp_sigcontext_1) mov r0, sp /* get pointer to sigcontext */ SYSTRAP(compat_16___sigreturn14) /* and call sigreturn */ /* If that failed, exit with the error code. */ SYSTRAP(exit) +END(__sigtramp_sigcontext_1) Index: src/lib/libc/compat/arch/arm/sys/compat_sigpending.S diff -u src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.3 --- src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.2 Thu Aug 1 05:54:24 2013 +++ src/lib/libc/compat/arch/arm/sys/compat_sigpending.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sigpending.S,v 1.2 2013/08/01 05:54:24 matt Exp $ */ +/* $NetBSD: compat_sigpending.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -39,7 +39,8 @@ WARN_REFERENCES(sigpending, \ ENTRY(sigpending) mov r2, r0 SYSTRAP(compat_13_sigpending13) - bcs CERROR + _INVOKE_CERROR() str r0, [r2] - mov r0, #0x00000000 + movs r0, #0 RET +END(sigpending) Index: src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S diff -u src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.3 --- src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.2 Thu Aug 1 05:54:24 2013 +++ src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sigprocmask.S,v 1.2 2013/08/01 05:54:24 matt Exp $ */ +/* $NetBSD: compat_sigprocmask.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -37,13 +37,35 @@ WARN_REFERENCES(sigprocmask, \ "warning: reference to compatibility sigprocmask(); include <signal.h> for correct reference") ENTRY(sigprocmask) - teq r1, #0x00000000 - moveq r0, #0x00000001 - moveq r1, #0x00000000 + cmp r1, #0 +#if defined(_ARM_ARCH_7) || !defined(__thumb__) +#ifdef __thumb__ + itte eq +#endif + moveq r0, #1 + moveq r1, #0 ldrne r1, [r1] +#else + bne 1f + movs r0, #1 + movs r1, #0 + b 2f +1: ldr r1, [r1] +2: +#endif SYSTRAP(compat_13_sigprocmask13) - bcs CERROR - teq r2, #0x00000000 + _INVOKE_CERROR() + cmp r2, #0 +#if defined(_ARM_ARCH_7) || !defined(__thumb__) +#ifdef __thumb__ + it ne +#endif strne r0, [r2] - mov r0, #0x00000000 +#else + beq 3f + str r0, [r2] +3: +#endif + movs r0, #0 RET +END(sigprocmask) Index: src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S diff -u src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.3 --- src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.2 Thu Aug 1 05:54:24 2013 +++ src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S Mon Aug 19 22:11:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_sigsuspend.S,v 1.2 2013/08/01 05:54:24 matt Exp $ */ +/* $NetBSD: compat_sigsuspend.S,v 1.3 2013/08/19 22:11:50 matt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -39,6 +39,7 @@ WARN_REFERENCES(sigsuspend, \ ENTRY(sigsuspend) ldr r0, [r0] SYSTRAP(compat_13_sigsuspend13) - bcs CERROR - mov r0, #0x00000000 + _INVOKE_CERROR() + movs r0, #0 RET +END(sigsuspend)