mailing list of musl libc
 help / color / mirror / code / Atom feed
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


  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).