diff options
| author | matt <matt@NetBSD.org> | 2013-08-22 19:25:00 +0000 |
|---|---|---|
| committer | matt <matt@NetBSD.org> | 2013-08-22 19:25:00 +0000 |
| commit | 32a3bf46bee5bd11754fc2b2b18d4968cd5ececf (patch) | |
| tree | dea20f0dcc149a0d614b3b2a51f3345dcbd74cff /common/lib/libc/arch/arm/string | |
| parent | ca316df6db218d3de4ac33b3ad88f329bf4bdc8c (diff) | |
Don't include .cfi info if _KERNEL || _STANDALONE
Diffstat (limited to 'common/lib/libc/arch/arm/string')
| -rw-r--r-- | common/lib/libc/arch/arm/string/strcat_arm.S | 6 | ||||
| -rw-r--r-- | common/lib/libc/arch/arm/string/strlcat_arm.S | 8 | ||||
| -rw-r--r-- | common/lib/libc/arch/arm/string/strlcat_naive.S | 52 | ||||
| -rw-r--r-- | common/lib/libc/arch/arm/string/strlen_arm.S | 8 |
4 files changed, 43 insertions, 31 deletions
diff --git a/common/lib/libc/arch/arm/string/strcat_arm.S b/common/lib/libc/arch/arm/string/strcat_arm.S index 7413974de49..28db6a7c1ff 100644 --- a/common/lib/libc/arch/arm/string/strcat_arm.S +++ b/common/lib/libc/arch/arm/string/strcat_arm.S @@ -33,12 +33,12 @@ * Implementation of strcat using strlen/strcpy. */ ENTRY(strcat) -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .fnstart .cfi_startproc #endif push {r3-r5, lr} /* save registers */ -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .save {r3-r5, lr} .cfi_def_cfa_offset 16 .cfi_offset 14, -4 @@ -58,7 +58,7 @@ ENTRY(strcat) mov r0, r4 /* restore dst as return value */ pop {r3-r5, pc} /* restore registers */ -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .cfi_endproc .fnend #endif diff --git a/common/lib/libc/arch/arm/string/strlcat_arm.S b/common/lib/libc/arch/arm/string/strlcat_arm.S index 98b383207de..d4eaa5169ba 100644 --- a/common/lib/libc/arch/arm/string/strlcat_arm.S +++ b/common/lib/libc/arch/arm/string/strlcat_arm.S @@ -29,16 +29,16 @@ #include <machine/asm.h> -RCSID("$NetBSD: strlcat_arm.S,v 1.3 2013/08/19 06:11:20 matt Exp $") +RCSID("$NetBSD: strlcat_arm.S,v 1.4 2013/08/22 19:25:00 matt Exp $") /* LINTSTUB: size_t strlcat(char *, const char *, size_t) */ ENTRY(strlcat) -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .fnstart .cfi_startproc #endif push {r4-r6, lr} -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .save {r4-r6, lr} .cfi_def_cfa_offset 16 .cfi_offset 14, -4 @@ -60,7 +60,7 @@ ENTRY(strlcat) bl PLT_SYM(strlcpy) /* attempt to copy src */ adds r0, r0, r5 /* add remaining to strlcpy return */ pop {r4-r6, pc} /* restore registers and return */ -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .cfi_endproc .fnend #endif diff --git a/common/lib/libc/arch/arm/string/strlcat_naive.S b/common/lib/libc/arch/arm/string/strlcat_naive.S index 350117ec2c7..9fa3ac8a3d8 100644 --- a/common/lib/libc/arch/arm/string/strlcat_naive.S +++ b/common/lib/libc/arch/arm/string/strlcat_naive.S @@ -29,39 +29,51 @@ #include <machine/asm.h> -RCSID("$NetBSD: strlcat_naive.S,v 1.2 2013/08/11 05:02:35 matt Exp $") +RCSID("$NetBSD: strlcat_naive.S,v 1.3 2013/08/22 19:25:00 matt Exp $") /* LINTSTUB: size_t strlcat(char *, const char *, size_t) */ ENTRY(strlcat) - mov ip, r0 /* need to preserve r0 */ - add r3, r2, r0 /* point to just end of dst */ + adds r3, r2, r0 /* point to just end of dst */ + mov ip, r0 /* need to keep r0 for a while */ 1: cmp ip, r3 /* still within dst? */ - beq 4f /* no, get length of src */ + beq 3f /* no, get length of src */ ldrb r2, [ip], #1 /* load next byte */ - teq r2, #0 /* was it a NUL? */ + cmp r2, #0 /* was it a NUL? */ bne 1b /* no, get next byte */ - sub r0, ip, r0 /* get actual length was dst */ - sub r0, r0, #1 /* account for the trailing NUL */ - sub r3, r3, #1 /* back up to last byte in dst */ + sub r0, ip, r0 /* get actual length of dst */ + subs r0, r0, #1 /* account for the trailing NUL */ + subs r3, r3, #1 /* back up to last byte in dst */ sub ip, ip, #1 /* back up over the NUL */ 2: ldrb r2, [r1], #1 /* load next byte from append */ - teq r2, #0 /* was it a NUL? */ - beq 3f /* yes, end of append */ - add r0, r0, #1 /* count another byte */ +#if defined(__thumb__) && defined(_ARM_ARCH_T2) + cbz r2, 5f /* was it a NUL? yes, end of append */ +#else + cmp r2, #0 /* was it a NUL? */ + beq 5f /* yes, end of append */ +#endif + adds r0, r0, #1 /* count another byte */ cmp ip, r3 /* do we have enough room for it? */ +#ifdef __thumb__ + bge 2b + strb r2, [ip], #1 /* yes, store it */ +#else strblt r2, [ip], #1 /* yes, store it */ +#endif b 2b /* get next byte from append */ -3: mov r2, #0 /* NUL */ - strb r2, [ip] /* append final NUL */ - RET /* return */ - -4: sub r0, r3, r0 /* move size to return value */ -5: ldrb r2, [r1], #1 /* load next byte from append */ - teq r2, #0 /* was it a NUL? */ +3: subs r0, r3, r0 /* move size to return value */ +4: ldrb r2, [r1], #1 /* load next byte from append */ +#if defined(__thumb__) && defined(_ARM_ARCH_T2) + cbz r2, 6f /* was it a NUL? yes, we're done */ +#else RETc(eq) /* yes, we're done */ - add r0, r0, #1 /* add one to return value */ - b 5b /* get next byte from append */ +#endif + adds r0, r0, #1 /* add one to return value */ + b 4b /* get next byte from append */ + +5: movs r2, #0 /* NUL */ + strb r2, [ip] /* append final NUL */ +6: RET /* return */ END(strlcat) diff --git a/common/lib/libc/arch/arm/string/strlen_arm.S b/common/lib/libc/arch/arm/string/strlen_arm.S index 2b3568d26fe..f15710ce9a2 100644 --- a/common/lib/libc/arch/arm/string/strlen_arm.S +++ b/common/lib/libc/arch/arm/string/strlen_arm.S @@ -29,7 +29,7 @@ #include <machine/asm.h> -RCSID("$NetBSD: strlen_arm.S,v 1.6 2013/08/20 16:34:47 matt Exp $") +RCSID("$NetBSD: strlen_arm.S,v 1.7 2013/08/22 19:25:00 matt Exp $") #if defined(__thumb__) && !defined(_ARM_ARCH_T2) #error Only Thumb2 or ARM supported @@ -55,13 +55,13 @@ RCSID("$NetBSD: strlen_arm.S,v 1.6 2013/08/20 16:34:47 matt Exp $") .text ENTRY(FUNCNAME) -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .fnstart .cfi_startproc #endif #ifdef STRNLEN push {r4,r5} /* save some registers */ -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .save {r4,r5} .cfi_def_cfa_offset 8 .cfi_offset 5, -4 @@ -173,7 +173,7 @@ ENTRY(FUNCNAME) pop {r4, r5} /* restore registers */ RET /* return */ #endif -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) && (!defined(_KERNEL) && !defined(_STANDALONE)) .cfi_endproc .fnend #endif |
