remove broken lib/libc/arm/string/memcpy_xscale.S
Warner Losh
imp at bsdimp.com
Mon Apr 6 22:35:42 UTC 2015
> On Apr 6, 2015, at 4:24 PM, John-Mark Gurney <jmg at funkthat.com> wrote:
>
> Warner Losh wrote this message on Mon, Apr 06, 2015 at 16:15 -0600:
>>
>>> On Apr 6, 2015, at 11:32 AM, Ian Lepore <ian at freebsd.org> wrote:
>>>
>>> On Mon, 2015-04-06 at 09:58 -0600, Warner Losh wrote:
>>>>> On Apr 4, 2015, at 7:52 PM, John-Mark Gurney <jmg at funkthat.com> wrote:
>>>>>
>>>>> 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.
>>>>>
>>>>> Sample test program:
>>>>> #include <stdio.h>
>>>>> #include <string.h>
>>>>>
>>>>> char bufa[512] = "this is a test buffer that should be copied fine.";
>>>>> int
>>>>> main()
>>>>> {
>>>>>
>>>>> memcpy(&bufa[10], &bufa[0], strlen(&bufa[10]));
>>>>> printf("%s\n", bufa);
>>>>>
>>>>> return 0;
>>>>> }
>>>>>
>>>>> Output on amd64 HEAD:
>>>>> this is a this is a test buffer that should be co
>>>>>
>>>>> Output on old armv4 from 9.x:
>>>>> this is a this is a thst buffethst bufhould beufh
>>>>>
>>>>> 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.
>>>>>
>>>>> 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.
>>>>
>>>> Any chance you can fix this implementation instead?
>>>>
>>>> Warner
>>>
>>> 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.
>>>
>>> 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.
>>
>> 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.
>
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20150406/865dd4ff/attachment.sig>
More information about the freebsd-arm
mailing list