NetBSD Problem Report #6095
Received: (qmail 5699 invoked from network); 3 Sep 1998 18:54:39 -0000
Message-Id: <199809031856.UAA18864@q610.ebe.uni-c.dk>
Date: Thu, 3 Sep 1998 20:56:33 +0200 (MEST)
From: Erik Bertelsen <erik@q610.ebe.uni-c.dk>
Reply-To: erik@mediator.uni-c.dk
To: gnats-bugs@gnats.netbsd.org
Subject: bcopy->memcpy for arch/powerpc
X-Send-Pr-Version: 3.95
>Number: 6095
>Category: port-powerpc
>Synopsis: bcopy->memcpy for arch/powerpc
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: port-powerpc-maintainer
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Sep 03 12:05:00 +0000 1998
>Closed-Date: Sun Jul 22 13:07:15 +0000 2001
>Last-Modified: Sun Jul 22 13:07:15 +0000 2001
>Originator: Erik Bertelsen
>Release: NetBSD-current 3 Sep 1998
>Organization:
>Environment:
System: NetBSD q610.ebe.uni-c.dk 1.3H NetBSD 1.3H (Q610) #: Wed Sep 2 20:49:28 MEST 1998 erik@q610.ebe.uni-c.dk:/home/src/sys/arch/mac68k/compile/Q610 mac68k
>Description:
Recently parts of the kernel has been updated to use memcpy and
friends instead of bcopy.
Below is the patches to changes calls of bcopy into calls of
memcpy for powerpc. These patches have been developed while
building a macppc kernel without bcopy.
>How-To-Repeat:
>Fix:
Index: db_interface.c
===================================================================
RCS file: /home/cvs-base/src/sys/arch/powerpc/powerpc/db_interface.c,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 db_interface.c
*** db_interface.c 1998/09/01 17:15:15 1.1.1.3
--- db_interface.c 1998/09/03 18:51:21
***************
*** 28,40 ****
&& (frame->srr1 & 0x20000))
|| frame->exc == EXC_BPT)) {
! bcopy(frame->fixreg, DDB_REGS->r, 32 * sizeof(u_int32_t));
DDB_REGS->iar = frame->srr0;
DDB_REGS->msr = frame->srr1;
db_trap(T_BREAKPOINT, 0);
! bcopy(DDB_REGS->r, frame->fixreg, 32 * sizeof(u_int32_t));
return 1;
}
--- 28,40 ----
&& (frame->srr1 & 0x20000))
|| frame->exc == EXC_BPT)) {
! memcpy(DDB_REGS->r, frame->fixreg, 32 * sizeof(u_int32_t));
DDB_REGS->iar = frame->srr0;
DDB_REGS->msr = frame->srr1;
db_trap(T_BREAKPOINT, 0);
! memcpy(frame->fixreg, DDB_REGS->r, 32 * sizeof(u_int32_t));
return 1;
}
Index: pmap.c
===================================================================
RCS file: /home/cvs-base/src/sys/arch/powerpc/powerpc/pmap.c,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 pmap.c
*** pmap.c 1998/09/01 17:15:17 1.1.1.7
--- pmap.c 1998/09/03 18:51:21
***************
*** 389,395 ****
*/
if (sz == 0) {
empty:
! bcopy(mp + 1, mp,
(cnt - (mp - avail)) * sizeof *mp);
cnt--;
mp--;
--- 389,395 ----
*/
if (sz == 0) {
empty:
! memcpy(mp, mp + 1,
(cnt - (mp - avail)) * sizeof *mp);
cnt--;
mp--;
***************
*** 403,409 ****
if (s < mp1->start)
break;
if (mp1 < mp) {
! bcopy(mp1, mp1 + 1, (void *)mp - (void *)mp1);
mp1->start = s;
mp1->size = sz;
} else {
--- 403,409 ----
if (s < mp1->start)
break;
if (mp1 < mp) {
! memcpy(mp1 + 1, mp1, (void *)mp - (void *)mp1);
mp1->start = s;
mp1->size = sz;
} else {
***************
*** 432,445 ****
if (s)
mp->size = s;
else {
! bcopy(mp + 1, mp,
(cnt - (mp - avail)) * sizeof *mp);
mp = avail;
}
break;
}
if (s != 0) {
! bcopy(mp, mp + 1,
(cnt - (mp - avail)) * sizeof *mp);
mp++->size = s;
}
--- 432,445 ----
if (s)
mp->size = s;
else {
! memcpy(mp, mp + 1,
(cnt - (mp - avail)) * sizeof *mp);
mp = avail;
}
break;
}
if (s != 0) {
! memcpy(mp + 1, mp,
(cnt - (mp - avail)) * sizeof *mp);
mp++->size = s;
}
***************
*** 471,477 ****
mp->size -= sz;
mp->start += sz;
if (mp->size <= 0)
! bcopy(mp + 1, mp, (cnt - (mp - avail)) * sizeof *mp);
for (i = 0; i < ptab_cnt; i++)
LIST_INIT(potable + i);
LIST_INIT(&pv_page_freelist);
--- 471,477 ----
mp->size -= sz;
mp->start += sz;
if (mp->size <= 0)
! memcpy(mp, mp + 1, (cnt - (mp - avail)) * sizeof *mp);
for (i = 0; i < ptab_cnt; i++)
LIST_INIT(potable + i);
LIST_INIT(&pv_page_freelist);
***************
*** 492,498 ****
mp->size -= sz;
mp->start += sz;
if (mp->size <= 0)
! bcopy(mp + 1, mp, (cnt - (mp - avail)) * sizeof *mp);
#endif
#if defined(MACHINE_NEW_NONCONTIG)
--- 492,498 ----
mp->size -= sz;
mp->start += sz;
if (mp->size <= 0)
! memcpy(mp, mp + 1, (cnt - (mp - avail)) * sizeof *mp);
#endif
#if defined(MACHINE_NEW_NONCONTIG)
***************
*** 822,828 ****
pmap_copy_page(src, dst)
paddr_t src, dst;
{
! bcopy((caddr_t)src, (caddr_t)dst, NBPG);
}
static struct pv_entry *
--- 822,828 ----
pmap_copy_page(src, dst)
paddr_t src, dst;
{
! memcpy((void *)dst, (void *)src, NBPG);
}
static struct pv_entry *
Index: trap.c
===================================================================
RCS file: /home/cvs-base/src/sys/arch/powerpc/powerpc/trap.c,v
retrieving revision 1.1.1.5
diff -c -r1.1.1.5 trap.c
*** trap.c 1998/09/01 17:15:18 1.1.1.5
--- trap.c 1998/09/03 18:51:21
***************
*** 117,123 ****
frame->srr0 = (*fb)[0];
frame->fixreg[1] = (*fb)[1];
frame->cr = (*fb)[2];
! bcopy(&(*fb)[3], &frame->fixreg[13],
19 * sizeof(register_t));
return;
}
--- 117,123 ----
frame->srr0 = (*fb)[0];
frame->fixreg[1] = (*fb)[1];
frame->cr = (*fb)[2];
! memcpy(&frame->fixreg[13], &(*fb)[3],
19 * sizeof(register_t));
return;
}
***************
*** 215,221 ****
argsize = callp->sy_argsize;
n = NARGREG - (params - (frame->fixreg + FIRSTARG));
if (argsize > n * sizeof(register_t)) {
! bcopy(params, args, n * sizeof(register_t));
if (error = copyin(MOREARGS(frame->fixreg[1]),
args + n,
argsize - n * sizeof(register_t))) {
--- 215,221 ----
argsize = callp->sy_argsize;
n = NARGREG - (params - (frame->fixreg + FIRSTARG));
if (argsize > n * sizeof(register_t)) {
! memcpy(args, params, n * sizeof(register_t));
if (error = copyin(MOREARGS(frame->fixreg[1]),
args + n,
argsize - n * sizeof(register_t))) {
***************
*** 406,412 ****
if (l > len)
l = len;
setusr(curpcb->pcb_pm->pm_sr[(u_int)udaddr >> ADDR_SR_SHFT]);
! bcopy(p, kaddr, l);
udaddr += l;
kaddr += l;
len -= l;
--- 406,412 ----
if (l > len)
l = len;
setusr(curpcb->pcb_pm->pm_sr[(u_int)udaddr >> ADDR_SR_SHFT]);
! memcpy(kaddr, p, l);
udaddr += l;
kaddr += l;
len -= l;
***************
*** 433,439 ****
if (l > len)
l = len;
setusr(curpcb->pcb_pm->pm_sr[(u_int)udaddr >> ADDR_SR_SHFT]);
! bcopy(kaddr, p, l);
udaddr += l;
kaddr += l;
len -= l;
--- 433,439 ----
if (l > len)
l = len;
setusr(curpcb->pcb_pm->pm_sr[(u_int)udaddr >> ADDR_SR_SHFT]);
! memcpy(p, kaddr, l);
udaddr += l;
kaddr += l;
len -= l;
***************
*** 466,472 ****
return EFAULT;
}
! bcopy(src, dst, len);
curpcb->pcb_onfault = 0;
return 0;
--- 466,472 ----
return EFAULT;
}
! memcpy(dst, src, len);
curpcb->pcb_onfault = 0;
return 0;
Index: vm_machdep.c
===================================================================
RCS file: /home/cvs-base/src/sys/arch/powerpc/powerpc/vm_machdep.c,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 vm_machdep.c
*** vm_machdep.c 1998/09/01 17:15:19 1.1.1.3
--- vm_machdep.c 1998/09/03 18:51:21
***************
*** 77,83 ****
*/
stktop1 = (caddr_t)trapframe(p1);
stktop2 = (caddr_t)trapframe(p2);
! bcopy(stktop1, stktop2, sizeof(struct trapframe));
stktop2 = (caddr_t)((u_long)stktop2 & ~15); /* Align stack pointer */
/*
--- 77,83 ----
*/
stktop1 = (caddr_t)trapframe(p1);
stktop2 = (caddr_t)trapframe(p2);
! memcpy(stktop2, stktop1, sizeof(struct trapframe));
stktop2 = (caddr_t)((u_long)stktop2 & ~15); /* Align stack pointer */
/*
***************
*** 197,203 ****
chdr->c_cpusize = sizeof md_core;
tf = trapframe(p);
! bcopy(tf, &md_core.frame, sizeof md_core.frame);
CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_POWERPC, CORE_CPU);
cseg.c_addr = 0;
--- 197,203 ----
chdr->c_cpusize = sizeof md_core;
tf = trapframe(p);
! memcpy(&md_core.frame, tf, sizeof md_core.frame);
CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_POWERPC, CORE_CPU);
cseg.c_addr = 0;
regards
Erik Bertelsen
>Release-Note:
>Audit-Trail:
From: Matthias Drochner <drochner@zelux6.zel.kfa-juelich.de>
To: gnats-bugs@gnats.netbsd.org, erik@mediator.uni-c.dk
Cc: Subject: Re: port-powerpc/6095: bcopy->memcpy for arch/powerpc
Date: Thu, 3 Sep 1998 21:25:20 +0200 (MET DST)
Excerpts from netbsd: 3-Sep-98 port-powerpc/6095: bcopy->m.. Erik
Bertelsen@q610.ebe. (8331)
> ! memcpy(mp, mp + 1,
> (cnt - (mp - avail)) * sizeof *mp);
Without exactly knowing what I'm speaking about:
This looks a lot like overlapping regions.
Do you want to use memmove() instead?
best regards
Matthias
From: Erik Bertelsen <erik@mediator.uni-c.dk>
To: Matthias Drochner <drochner@zelux6.zel.kfa-juelich.de>,
gnats-bugs@gnats.netbsd.org, erik@mediator.uni-c.dk
Cc: Subject: Re: port-powerpc/6095: bcopy->memcpy for arch/powerpc
Date: Thu, 3 Sep 1998 22:22:14 +0200
On Thu, Sep 03, 1998 at 09:25:20PM +0200, Matthias Drochner wrote:
> Excerpts from netbsd: 3-Sep-98 port-powerpc/6095: bcopy->m.. Erik
> Bertelsen@q610.ebe. (8331)
>
> > ! memcpy(mp, mp + 1,
> > (cnt - (mp - avail)) * sizeof *mp);
>
> Without exactly knowing what I'm speaking about:
> This looks a lot like overlapping regions.
> Do you want to use memmove() instead?
Actually, I was wondering about this as well, and re-reading the manual
page for bcopy (that states that overlapping copies are handled correctly),
I tend to agree that memmove is better in this case. There are a few examples
of this in my patches, but (IIRC) only in one of the source files.
- Erik
Responsible-Changed-From-To: gnats-admin->port-powerpc-maintainer
Responsible-Changed-By: fair
Responsible-Changed-When: Mon Dec 28 09:46:14 PST 1998
Responsible-Changed-Why:
This PR is the responsibility of the portmaster,
not the GNATS database administrator.
State-Changed-From-To: open->closed
State-Changed-By: wiz
State-Changed-When: Sun Jul 22 06:06:23 PDT 2001
State-Changed-Why:
I recently replaced all bcopys/bcmps/bzeros in arch/powerpc with their
mem*-equivalent.
Thanks for the PR!
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.