Module Name:    src
Committed By:   martin
Date:           Sun Aug  8 10:22:04 UTC 2021

Modified Files:
        src/lib/libc/arch/arm/gen [netbsd-9]: swapcontext.S
        src/lib/libc/arch/arm/sys [netbsd-9]: __clone.S
        src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm [netbsd-9]:
            aeabi_cfcmp.S divmodsi4.S divsi3.S modsi3.S

Log Message:
Pull up following revision(s) (requested by skrll in ticket #1329):

        lib/libc/arch/arm/gen/swapcontext.S: revision 1.18
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 
1.2
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S: revision 
1.3
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: 
revision 1.2
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S: 
revision 1.3
        lib/libc/arch/arm/sys/__clone.S: revision 1.10
        lib/libc/arch/arm/sys/__clone.S: revision 1.11
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 
1.2
        lib/libc/arch/arm/sys/__clone.S: revision 1.12
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S: revision 
1.3
        lib/libc/arch/arm/sys/__clone.S: revision 1.13
        lib/libc/arch/arm/sys/__clone.S: revision 1.14
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: 
revision 1.2
        sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S: 
revision 1.3
        lib/libc/arch/arm/gen/swapcontext.S: revision 1.16
        lib/libc/arch/arm/gen/swapcontext.S: revision 1.17

Align sp to 8-byte boundary as required by EABI.

This is especially important for non-leaf functions; GCC optimizes codes
based on assumption that sp is aligned properly.

Mostly fix broken earmv5 userland compiled by GCC10 due to alignment
faults in ld.elf_so, where {ld,st}rd are used for [sp, #8x].

No regression for ATF is observed for earmv[67]{,hf}{,eb}.

Align sp to 8-byte boundary as required by EABI.
IIUC, this change only affects libc compiled for ``Thumb-mode userland'',
which we've not officially supported yet.

Fix previous. For Thumb-1:
- sp cannot be manipulated directly
- {add,sub}s should be used instead of {add,sub}

Trailing whitespace

The _INVOKE_CERROR macro deals with thumb so simplify the code (at the
expense of a couple more instructions).

Do previous differently by pushing even number of registers and remove
strange r7 usage.

Do previous differtly by pushing two registers in the same way as the
_INVOKE_CERROR macro


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.15.2.1 src/lib/libc/arch/arm/gen/swapcontext.S
cvs rdiff -u -r1.9 -r1.9.28.1 src/lib/libc/arch/arm/sys/__clone.S
cvs rdiff -u -r1.1.1.1 -r1.1.1.1.26.1 \
    src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S
cvs rdiff -u -r1.1.1.4 -r1.1.1.4.22.1 \
    src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S \
    src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S \
    src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.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/arch/arm/gen/swapcontext.S
diff -u src/lib/libc/arch/arm/gen/swapcontext.S:1.15 src/lib/libc/arch/arm/gen/swapcontext.S:1.15.2.1
--- src/lib/libc/arch/arm/gen/swapcontext.S:1.15	Wed Nov 21 21:01:41 2018
+++ src/lib/libc/arch/arm/gen/swapcontext.S	Sun Aug  8 10:22:04 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: swapcontext.S,v 1.15 2018/11/21 21:01:41 skrll Exp $	*/
+/*	$NetBSD: swapcontext.S,v 1.15.2.1 2021/08/08 10:22:04 martin Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include "assym.h"
 
 #if defined(LIBC_SCCS) && !defined(lint)
-        RCSID("$NetBSD: swapcontext.S,v 1.15 2018/11/21 21:01:41 skrll Exp $")
+        RCSID("$NetBSD: swapcontext.S,v 1.15.2.1 2021/08/08 10:22:04 martin Exp $")
 #endif /* LIBC_SCCS && !lint */
 
 ENTRY(swapcontext)
@@ -84,9 +84,9 @@ ENTRY(swapcontext)
 #if !defined(__thumb__) || defined(_ARM_ARCH_T2)
 	b	PLT_SYM(_C_LABEL(setcontext))
 #else
-	push	{lr}
+	push	{r3, lr}
 	bl	PLT_SYM(_C_LABEL(setcontext))
-	pop	{pc}
+	pop	{r3, pc}
 #endif
 #if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__)
 	.cfi_endproc

Index: src/lib/libc/arch/arm/sys/__clone.S
diff -u src/lib/libc/arch/arm/sys/__clone.S:1.9 src/lib/libc/arch/arm/sys/__clone.S:1.9.28.1
--- src/lib/libc/arch/arm/sys/__clone.S:1.9	Sat Nov 30 20:20:42 2013
+++ src/lib/libc/arch/arm/sys/__clone.S	Sun Aug  8 10:22:04 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: __clone.S,v 1.9 2013/11/30 20:20:42 joerg Exp $ */
+/* $NetBSD: __clone.S,v 1.9.28.1 2021/08/08 10:22:04 martin Exp $ */
 
 /*
  * Copyright (c) 2001 Christopher Gilbert
@@ -55,21 +55,17 @@ ENTRY(__clone)
 
 	/* place the func and its arg onto the child's stack */
 #if !defined(__thumb__) || defined(_ARM_ARCH_T2)
-	stmfd	r1!, {r0, r3} 
+	stmfd	r1!, {r0, r3}
 #else
 	subs	r1, r1, #8
-	stmia	r1!, {r0, r3} 
+	stmia	r1!, {r0, r3}
 #endif
-	
+
 	/* syscall expects (flags, stack) */
 	mov	r0, r2
 
 	SYSTRAP(__clone)
-#if !defined(__thumb__) || defined(_ARM_ARCH_T2)
 	_INVOKE_CERROR()
-#else
-	bcs	.Lcerror
-#endif
 
 	/*
 	 * r1 and r0 are the same as from fork:
@@ -121,8 +117,8 @@ ENTRY(__clone)
 	b	CERROR
 #else
 .Lcerror:
-	push	{lr}
+	push	{r3, lr}
 	bl	CERROR
-	pop	{pc}
+	pop	{r3, pc}
 #endif
 END(__clone)

Index: src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S
diff -u src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S:1.1.1.1 src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S:1.1.1.1.26.1
--- src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S:1.1.1.1	Sat Feb 27 18:59:31 2016
+++ src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/aeabi_cfcmp.S	Sun Aug  8 10:22:04 2021
@@ -27,10 +27,11 @@
         .syntax unified
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
-        push {r0-r3, lr}
+        // Save ip to ensure stack alignment (could be any register)
+        push {r0-r3, ip, lr}
         bl __aeabi_cfcmpeq_check_nan
         cmp r0, #1
-        pop {r0-r3, lr}
+        pop {r0-r3, ip, lr}
 
         // NaN has been ruled out, so __aeabi_cfcmple can't trap
         bne __aeabi_cfcmple
@@ -55,7 +56,8 @@ END_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
 DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple)
         // Per the RTABI, this function must preserve r0-r11.
         // Save lr in the same instruction for compactness
-        push {r0-r3, lr}
+        // Save ip to ensure stack alignment (could be any register)
+        push {r0-r3, ip, lr}
 
         bl __aeabi_fcmplt
         cmp r0, #1
@@ -70,7 +72,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmp
 
 1:
         msr CPSR_f, ip
-        pop {r0-r3}
+        pop {r0-r3, ip}
         POP_PC()
 END_COMPILERRT_FUNCTION(__aeabi_cfcmple)
 

Index: src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S
diff -u src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S:1.1.1.4 src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S:1.1.1.4.22.1
--- src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S:1.1.1.4	Sat Feb 27 18:59:31 2016
+++ src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divmodsi4.S	Sun Aug  8 10:22:04 2021
@@ -16,10 +16,9 @@
 #include "../assembly.h"
 
 #define ESTABLISH_FRAME    \
-    push   {r4-r7, lr}   ;\
-    add     r7,     sp, #12
+    push   {r4-r6, lr}
 #define CLEAR_FRAME_AND_RETURN \
-    pop    {r4-r7, pc}
+    pop    {r4-r6, pc}
 
 	.syntax unified
 	.text
Index: src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S
diff -u src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S:1.1.1.4 src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S:1.1.1.4.22.1
--- src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S:1.1.1.4	Sat Feb 27 18:59:31 2016
+++ src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/divsi3.S	Sun Aug  8 10:22:04 2021
@@ -15,10 +15,9 @@
 #include "../assembly.h"
 
 #define ESTABLISH_FRAME \
-    push   {r4, r7, lr}    ;\
-    add     r7,     sp, #4
+    push   {r4, lr}
 #define CLEAR_FRAME_AND_RETURN \
-    pop    {r4, r7, pc}
+    pop    {r4, pc}
 
 	.syntax unified
 	.text
Index: src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S
diff -u src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S:1.1.1.4 src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S:1.1.1.4.22.1
--- src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S:1.1.1.4	Sat Feb 27 18:59:31 2016
+++ src/sys/external/bsd/compiler_rt/dist/lib/builtins/arm/modsi3.S	Sun Aug  8 10:22:04 2021
@@ -15,10 +15,9 @@
 #include "../assembly.h"
 
 #define ESTABLISH_FRAME \
-    push   {r4, r7, lr}    ;\
-    add     r7,     sp, #4
+    push   {r4, lr}
 #define CLEAR_FRAME_AND_RETURN \
-    pop    {r4, r7, pc}
+    pop    {r4, pc}
 
 	.syntax unified
 	.text

Reply via email to