From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com
Subject: Re: [PATCH] fix arm run-time abi string functions
Date: Sun, 18 Jun 2017 13:58:47 +0200 [thread overview]
Message-ID: <20170618115847.GG27071@port70.net> (raw)
In-Reply-To: <20170221011506.GO12395@port70.net>
* Szabolcs Nagy <nsz@port70.net> [2017-02-21 02:15:08 +0100]:
> in arm rtabi these __aeabi_* functions have special abi (they are
> only allowed to clobber r0,r1,r2,r3,ip,lr,cpsr), so they cannot
> be simple wrappers around normal string functions (which may
> clobber other registers), the safest solution is to write them
> in asm, a naive implementation will do because these are not
> supposed to be emitted by compilers or used in general.
> ---
ping
> src/string/arm/__aeabi_memclr.c | 9 ---------
> src/string/arm/__aeabi_memcpy.c | 9 ---------
> src/string/arm/__aeabi_memcpy.s | 42 ++++++++++++++++++++++++++++++++++++++++
> src/string/arm/__aeabi_memmove.c | 9 ---------
> src/string/arm/__aeabi_memset.c | 9 ---------
> src/string/arm/__aeabi_memset.s | 31 +++++++++++++++++++++++++++++
> 6 files changed, 73 insertions(+), 36 deletions(-)
> delete mode 100644 src/string/arm/__aeabi_memclr.c
> delete mode 100644 src/string/arm/__aeabi_memcpy.c
> create mode 100644 src/string/arm/__aeabi_memcpy.s
> delete mode 100644 src/string/arm/__aeabi_memmove.c
> delete mode 100644 src/string/arm/__aeabi_memset.c
> create mode 100644 src/string/arm/__aeabi_memset.s
>
> diff --git a/src/string/arm/__aeabi_memclr.c b/src/string/arm/__aeabi_memclr.c
> deleted file mode 100644
> index a25306d7..00000000
> --- a/src/string/arm/__aeabi_memclr.c
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#include <string.h>
> -#include "libc.h"
> -
> -void __aeabi_memclr(void *dest, size_t n)
> -{
> - memset(dest, 0, n);
> -}
> -weak_alias(__aeabi_memclr, __aeabi_memclr4);
> -weak_alias(__aeabi_memclr, __aeabi_memclr8);
> diff --git a/src/string/arm/__aeabi_memcpy.c b/src/string/arm/__aeabi_memcpy.c
> deleted file mode 100644
> index 4ae5c777..00000000
> --- a/src/string/arm/__aeabi_memcpy.c
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#include <string.h>
> -#include "libc.h"
> -
> -void __aeabi_memcpy(void *restrict dest, const void *restrict src, size_t n)
> -{
> - memcpy(dest, src, n);
> -}
> -weak_alias(__aeabi_memcpy, __aeabi_memcpy4);
> -weak_alias(__aeabi_memcpy, __aeabi_memcpy8);
> diff --git a/src/string/arm/__aeabi_memcpy.s b/src/string/arm/__aeabi_memcpy.s
> new file mode 100644
> index 00000000..5dd9b027
> --- /dev/null
> +++ b/src/string/arm/__aeabi_memcpy.s
> @@ -0,0 +1,42 @@
> +.syntax unified
> +
> +.global __aeabi_memcpy8
> +.global __aeabi_memcpy4
> +.global __aeabi_memcpy
> +.global __aeabi_memmove8
> +.global __aeabi_memmove4
> +.global __aeabi_memmove
> +
> +.type __aeabi_memcpy8,%function
> +.type __aeabi_memcpy4,%function
> +.type __aeabi_memcpy,%function
> +.type __aeabi_memmove8,%function
> +.type __aeabi_memmove4,%function
> +.type __aeabi_memmove,%function
> +
> +__aeabi_memmove8:
> +__aeabi_memmove4:
> +__aeabi_memmove:
> + cmp r0, r1
> + bls 2f
> + cmp r2, #0
> + bxeq lr
> + add r0, r0, r2
> + add r2, r1, r2
> +1: ldrb r3, [r2, #-1]!
> + cmp r1, r2
> + strb r3, [r0, #-1]!
> + bne 1b
> + bx lr
> +__aeabi_memcpy8:
> +__aeabi_memcpy4:
> +__aeabi_memcpy:
> +2: cmp r2, #0
> + bxeq lr
> + sub r0, r0, #1
> + add r2, r1, r2
> +1: ldrb r3, [r1], #1
> + cmp r1, r2
> + strb r3, [r0, #1]!
> + bne 1b
> + bx lr
> diff --git a/src/string/arm/__aeabi_memmove.c b/src/string/arm/__aeabi_memmove.c
> deleted file mode 100644
> index 951e7d39..00000000
> --- a/src/string/arm/__aeabi_memmove.c
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#include <string.h>
> -#include "libc.h"
> -
> -void __aeabi_memmove(void *dest, const void *src, size_t n)
> -{
> - memmove(dest, src, n);
> -}
> -weak_alias(__aeabi_memmove, __aeabi_memmove4);
> -weak_alias(__aeabi_memmove, __aeabi_memmove8);
> diff --git a/src/string/arm/__aeabi_memset.c b/src/string/arm/__aeabi_memset.c
> deleted file mode 100644
> index 89299757..00000000
> --- a/src/string/arm/__aeabi_memset.c
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#include <string.h>
> -#include "libc.h"
> -
> -void __aeabi_memset(void *dest, size_t n, int c)
> -{
> - memset(dest, c, n);
> -}
> -weak_alias(__aeabi_memset, __aeabi_memset4);
> -weak_alias(__aeabi_memset, __aeabi_memset8);
> diff --git a/src/string/arm/__aeabi_memset.s b/src/string/arm/__aeabi_memset.s
> new file mode 100644
> index 00000000..f2c85883
> --- /dev/null
> +++ b/src/string/arm/__aeabi_memset.s
> @@ -0,0 +1,31 @@
> +.syntax unified
> +
> +.global __aeabi_memclr8
> +.global __aeabi_memclr4
> +.global __aeabi_memclr
> +.global __aeabi_memset8
> +.global __aeabi_memset4
> +.global __aeabi_memset
> +
> +.type __aeabi_memclr8,%function
> +.type __aeabi_memclr4,%function
> +.type __aeabi_memclr,%function
> +.type __aeabi_memset8,%function
> +.type __aeabi_memset4,%function
> +.type __aeabi_memset,%function
> +
> +__aeabi_memclr8:
> +__aeabi_memclr4:
> +__aeabi_memclr:
> + mov r2, #0
> +__aeabi_memset8:
> +__aeabi_memset4:
> +__aeabi_memset:
> + cmp r1, #0
> + bxeq lr
> + and r2, r2, #255
> + add r1, r0, r1
> +1: strb r2, [r0], #1
> + cmp r1, r0
> + bne 1b
> + bx lr
> --
> 2.11.0
next prev parent reply other threads:[~2017-06-18 11:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-21 1:15 Szabolcs Nagy
2017-06-18 11:58 ` Szabolcs Nagy [this message]
2017-06-18 12:14 ` Alexander Monakov
2017-06-18 18:50 ` Szabolcs Nagy
2017-06-18 19:05 ` Alexander Monakov
2017-06-18 19:09 ` Szabolcs Nagy
2017-06-18 19:27 ` Alexander Monakov
2017-06-18 19:11 ` Szabolcs Nagy
2017-06-18 19:40 ` Szabolcs Nagy
2017-06-22 22:39 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170618115847.GG27071@port70.net \
--to=nsz@port70.net \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).