Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Apr 2015 16:30:01 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        John-Mark Gurney <jmg@funkthat.com>
Cc:        freebsd-arm@FreeBSD.org, Ian Lepore <ian@FreeBSD.org>
Subject:   Re: remove broken lib/libc/arm/string/memcpy_xscale.S
Message-ID:  <20DF0E2C-3552-4E55-8656-301EA8CD41C6@bsdimp.com>
In-Reply-To: <20150406222407.GB51048@funkthat.com>
References:  <20150405015245.GO51048@funkthat.com> <EBEF298E-38F7-49BA-8BFC-D8B61C0F0BBA@bsdimp.com> <1428341561.82583.154.camel@freebsd.org> <BA53E900-AA5D-4007-B1F8-C2A0075BC816@bsdimp.com> <20150406222407.GB51048@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_91BBA9EB-A0B9-4A15-90D0-0D76930AE3A3
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii


> On Apr 6, 2015, at 4:24 PM, John-Mark Gurney <jmg@funkthat.com> wrote:
>=20
> Warner Losh wrote this message on Mon, Apr 06, 2015 at 16:15 -0600:
>>=20
>>> On Apr 6, 2015, at 11:32 AM, Ian Lepore <ian@freebsd.org> wrote:
>>>=20
>>> On Mon, 2015-04-06 at 09:58 -0600, Warner Losh wrote:
>>>>> On Apr 4, 2015, at 7:52 PM, John-Mark Gurney <jmg@funkthat.com> =
wrote:
>>>>>=20
>>>>> I would like to remove this file as it does not implement our =
defined
>>>>> memcpy.  Per POSIX, overlapping regions passed to memcpy is =
undefined
>>>>> behavior.  We have defined it to have the same symatics as =
memmove.
>>>>>=20
>>>>> Sample test program:
>>>>> #include <stdio.h>
>>>>> #include <string.h>
>>>>>=20
>>>>> char bufa[512] =3D "this is a test buffer that should be copied =
fine.";
>>>>> int
>>>>> main()
>>>>> {
>>>>>=20
>>>>>      memcpy(&bufa[10], &bufa[0], strlen(&bufa[10]));
>>>>>      printf("%s\n", bufa);
>>>>>=20
>>>>>      return 0;
>>>>> }
>>>>>=20
>>>>> Output on amd64 HEAD:
>>>>> this is a this is a test buffer that should be co
>>>>>=20
>>>>> Output on old armv4 from 9.x:
>>>>> this is a this is a thst buffethst bufhould beufh
>>>>>=20
>>>>> If you just look at the file, it is clear that the implementation =
does
>>>>> not adjust the copy direction based upon pointers.  We imported =
the
>>>>> code from NetBSD, and NetBSD does apparently require memcpy's =
arguments
>>>>> to be non-overlapping.
>>>>>=20
>>>>> I'll remove the file shortly unless someone can prove to me that =
all
>>>>> uses of memcpy in our tree do not depend upon our defined behavior
>>>>> per memcpy(3)'s man page.
>>>>=20
>>>> Any chance you can fix this implementation instead?
>>>>=20
>>>> Warner
>>>=20
>>> I don't think we should be wasting our scarce developer resources =
trying
>>> to redevelop high-performance string functions for long-obsolete arm
>>> hardware.  Just revert to the generic implementations, and perhaps
>>> someone who actually uses that old hardware will contribute high
>>> performance implementations that follow the rules.
>>>=20
>>> Hmmm, does netbsd have xscale performance implementations of =
memmove()?
>>> Maybe we can just drop that in as memcpy().  Any more work than that =
is
>>> probably wasted effort at this late date.
>>=20
>> I just looked at what NetBSD has. I???ve looked at the assembly here.
>> I think that we should just use the generic implementation now. These =
routines
>> are optimized for xscale, and don???t seem to be that much better =
than the
>> generic routines.
>=20
> I've looked and I don't see a version of memmove.S in NetBSD...  There =
is
> lib/libc/arch/arm/string/bcopy.S which includes memmove.S, but I can't
> find memmove.S in their tree...  It could be a generated file as I =
don't
> know their build infrastructure...

bcopy is memmove with a different arg order, so they do assembler tricks =
to
provide both interfaces.

Warner

--Apple-Mail=_91BBA9EB-A0B9-4A15-90D0-0D76930AE3A3
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org

iQIcBAEBCgAGBQJVIwjpAAoJEGwc0Sh9sBEA/B0QANNlzI3/B7vV8A+9G5xIB8/u
wk9Wtq11VItmwHit+wNUYRQpP36EtZEd/3jK3vy7o0DfCekH4+TIh1499GyEZaVD
NoQn/7GEoGsKhNDVdi5uxQxwrKXDHFdFxRHwumJvUnk5DHMQRo+VL45lX+bEwfak
EkGWIs9Q5GZC5v9KDkvfQMt02xIq7IMHdIxjcDs6zfALenGg3I1yH9/FCGctu26O
xICQ9SUnAewLWT1GhvJcF+nAPhmGXlSILjPXJJp+W7WZTmz/G6s+A5zv4fHZElwt
TLYWftQj7WWpnlcWWiILT+hg948rgDCgpzJuRfPw0ZjcXSJNBnJKZNGmozHmih5y
d2DXkHgh28iONt+GmSx+Xh70HCVc0tWgq/KQsyi9AhP8NjKNfcs63JqUSTfvSJVT
XHG9+l8++fk3paAO+ZXE1+OOJPekylcxQRZ54fhHdxutywz5ssZo/zJ9EC4O7RMr
C05hAI7m6xeltv+M76NLTEFdwPJ79te+xISzTcFM/ScZUJWfqYmk/OS5BAfR0boS
XEgryW5ujDAcYtmjvX7Aizj8Kyxo7gCrL3wr+i5GeyTiOz12ko6U6fcv+K6jp7gA
215xzmuBWC1fBJyvz7ehK6YeqkWKHFZnAvXNaFrv2UUjJ00ZWPgm3jgMXOYGrVfJ
VDzpzXnKBKluXFJsWBqe
=FSWq
-----END PGP SIGNATURE-----

--Apple-Mail=_91BBA9EB-A0B9-4A15-90D0-0D76930AE3A3--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20DF0E2C-3552-4E55-8656-301EA8CD41C6>