Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Apr 2015 18:52:45 -0700
From:      John-Mark Gurney <jmg@funkthat.com>
To:        freebsd-arm@FreeBSD.org
Subject:   remove broken lib/libc/arm/string/memcpy_xscale.S
Message-ID:  <20150405015245.GO51048@funkthat.com>

next in thread | raw e-mail | index | archive | help
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.

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150405015245.GO51048>