Subject: Re: kern/13369: gcc inlines memcpy(3)
To: Manuel Bouyer <bouyer@antioche.lip6.fr>
From: Oleg Polianski <Oleg.Polianski@clear.co.nz>
List: netbsd-bugs
Date: 07/05/2001 11:12:51
Manuel Bouyer <bouyer@antioche.lip6.fr> writes:
There is a special option, `-fno-builtin', that prevents gcc from
recognizing and inlining of well known functions like `memcpy', `memcmp' and
some other (math) functions. Plese consult `info gcc' for more information.
> On Wed, Jul 04, 2001 at 10:03:23AM +0900, minoura@netbsd.org wrote:
> >
> > >Number: 13369
> > >Category: kern
> > >Synopsis: gcc inlines memcpy(3)
> > >Confidential: no
> > >Severity: serious
> > >Priority: high
> > >Responsible: kern-bug-people
> > >State: open
> > >Class: sw-bug
> > >Submitter-Id: net
> > >Arrival-Date: Tue Jul 03 18:01:00 PDT 2001
> > >Closed-Date:
> > >Last-Modified:
> > >Originator: Minoura Makoto
> > >Release: 20010612
> > >Organization:
> > Minoura Makoto <minoura@netbsd.org>
> > The NetBSD Project/Japan NetBSD Users' Group
> > >Environment:
> > System: NetBSD daisy 1.5W NetBSD 1.5W (DAISY) #190: Mon Jun 25 14:28:07 JST 2001 root@daisy:/usr/obj/sys/arch/i386/compile/DAISY i386
> > gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)
> > Architecture: i386
> > Machine: i386
> > >Description:
> > gcc -O inlines the following memcpy(3) call (at least on i386):
> >
> > #include <string.h>
> >
> > extern char buf[];
> >
> > void testfunc(char *src)
> > {
> > memcpy(buf, src, 100);
> > }
> >
> > The inlined memcpy() gets insane when the two buffers are
> > overlapping.
> >
> > On the other hand, kernel bcopy() is #define'ed as memcpy() in
> > /sys/sys/systm.h.
> >
> > This might cause a problem that when the programmer
> > wants to transfer overlapping strings using bcopy()
> > they might be destroyed as a result.
>
> Shouldn't we just replace calls to bcopy with memmove or memcpy, as
> appropriate ?
>
> --
> Manuel Bouyer <bouyer@antioche.eu.org>
> --
--
-- Oleg Polianski <Oleg.Polianski@clear.co.nz>