Subject: kern/6778: wscons fixes for bzero/bcopy -> memxxx transition
To: None <gnats-bugs@gnats.netbsd.org>
From: Erik Bertelsen <erik@q610.ebe.uni-c.dk>
List: netbsd-bugs
Date: 01/09/1999 22:31:13
>Number:         6778
>Category:       kern
>Synopsis:       wscons fixes for bzero/bcopy -> memxxx transition
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jan  9 13:50:01 1999
>Last-Modified:
>Originator:     Erik Bertelsen
>Organization:
	
>Release:        NetBSD-current 9 Jan 1999
>Environment:
	
System: NetBSD q610.ebe.uni-c.dk 1.3I NetBSD 1.3I (Q610) #86: Fri Jan 8 18:10:52 MET 1999 erik@q610.ebe.uni-c.dk:/home/src/sys/arch/mac68k/compile/Q610 mac68k
(really: NetBSD/macppc-current).


>Description:
	I'm building my NetBSD/macppc kernels on a homegrown crosscompilation
	setup on the same PowerMac running Linux/ppc. In this setup, I don't
	have the bzero, bcopy,  etc. functions, and as I have noticed that the
	NetBSD kernel is in a transistion to use the memxxx functions, I have
	not bothered including the bxxx functions, but rather patched the
	sources to use the memxxx functions. The patch below contains the
	patches that I have made to avoid the older functions in the 
	sys/dev/wscons files.

	regards
	Erik Bertelsen
>How-To-Repeat:
>Fix:
Index: wsemul_sun.c
===================================================================
RCS file: /home/cvs-base/src/sys/dev/wscons/wsemul_sun.c,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 wsemul_sun.c
*** wsemul_sun.c	1998/06/21 17:49:17	1.1.1.7
--- wsemul_sun.c	1999/01/09 21:22:29
***************
*** 337,343 ****
  
  	switch (c) {
  	case '[':		/* continuation of multi-char sequence */
! 		bzero(edp->args, sizeof (edp->args));
  		newstate = SUN_EMUL_STATE_CONTROL;
  		break;
  
--- 337,343 ----
  
  	switch (c) {
  	case '[':		/* continuation of multi-char sequence */
! 		memset(edp->args, 0, sizeof (edp->args));
  		newstate = SUN_EMUL_STATE_CONTROL;
  		break;
  
Index: wsemul_vt100.c
===================================================================
RCS file: /home/cvs-base/src/sys/dev/wscons/wsemul_vt100.c,v
retrieving revision 1.1.1.4
diff -c -r1.1.1.4 wsemul_vt100.c
*** wsemul_vt100.c	1998/08/13 17:43:49	1.1.1.4
--- wsemul_vt100.c	1999/01/09 21:22:29
***************
*** 219,225 ****
  
  	edp->tabs = malloc(edp->ncols, M_DEVBUF, M_NOWAIT);
  	edp->dblwid = malloc(edp->nrows, M_DEVBUF, M_NOWAIT);
! 	bzero(edp->dblwid, edp->nrows);
  	edp->dw = 0;
  	edp->dcsarg = malloc(DCS_MAXLEN, M_DEVBUF, M_NOWAIT);
  	edp->isolatin1tab = malloc(128 * sizeof(int), M_DEVBUF, M_NOWAIT);
--- 219,225 ----
  
  	edp->tabs = malloc(edp->ncols, M_DEVBUF, M_NOWAIT);
  	edp->dblwid = malloc(edp->nrows, M_DEVBUF, M_NOWAIT);
! 	memset(edp->dblwid, 0, edp->nrows);
  	edp->dw = 0;
  	edp->dcsarg = malloc(DCS_MAXLEN, M_DEVBUF, M_NOWAIT);
  	edp->isolatin1tab = malloc(128 * sizeof(int), M_DEVBUF, M_NOWAIT);
***************
*** 268,274 ****
  	edp->scrreg_startrow = 0;
  	edp->scrreg_nrows = edp->nrows;
  	if (edp->tabs) {
! 		bzero(edp->tabs, edp->ncols);
  		for (i = 8; i < edp->ncols; i += 8)
  			edp->tabs[i] = 1;
  	}
--- 268,274 ----
  	edp->scrreg_startrow = 0;
  	edp->scrreg_nrows = edp->nrows;
  	if (edp->tabs) {
! 		memset(edp->tabs, 0, edp->ncols);
  		for (i = 8; i < edp->ncols; i += 8)
  			edp->tabs[i] = 1;
  	}
***************
*** 394,407 ****
  	    case CSI: /* 8-bit */
  		/* XXX cancel current escape sequence */
  		edp->nargs = 0;
! 		bzero(edp->args, sizeof (edp->args));
  		edp->modif1 = edp->modif2 = '\0';
  		edp->state = VT100_EMUL_STATE_CSI;
  		break;
  	    case DCS: /* 8-bit */
  		/* XXX cancel current escape sequence */
  		edp->nargs = 0;
! 		bzero(edp->args, sizeof (edp->args));
  		edp->state = VT100_EMUL_STATE_DCS;
  		break;
  	    case ST: /* string end 8-bit */
--- 394,407 ----
  	    case CSI: /* 8-bit */
  		/* XXX cancel current escape sequence */
  		edp->nargs = 0;
! 		memset(edp->args, 0, sizeof (edp->args));
  		edp->modif1 = edp->modif2 = '\0';
  		edp->state = VT100_EMUL_STATE_CSI;
  		break;
  	    case DCS: /* 8-bit */
  		/* XXX cancel current escape sequence */
  		edp->nargs = 0;
! 		memset(edp->args, 0, sizeof (edp->args));
  		edp->state = VT100_EMUL_STATE_DCS;
  		break;
  	    case ST: /* string end 8-bit */
***************
*** 432,438 ****
  	switch (c) {
  	    case '[': /* CSI */
  		edp->nargs = 0;
! 		bzero(edp->args, sizeof (edp->args));
  		edp->modif1 = edp->modif2 = '\0';
  		newstate = VT100_EMUL_STATE_CSI;
  		break;
--- 432,438 ----
  	switch (c) {
  	    case '[': /* CSI */
  		edp->nargs = 0;
! 		memset(edp->args, 0, sizeof (edp->args));
  		edp->modif1 = edp->modif2 = '\0';
  		newstate = VT100_EMUL_STATE_CSI;
  		break;
***************
*** 512,518 ****
  		break;
  	    case 'P': /* DCS */
  		edp->nargs = 0;
! 		bzero(edp->args, sizeof (edp->args));
  		newstate = VT100_EMUL_STATE_DCS;
  		break;
  	    case 'c': /* RIS */
--- 512,518 ----
  		break;
  	    case 'P': /* DCS */
  		edp->nargs = 0;
! 		memset(edp->args, 0, sizeof (edp->args));
  		newstate = VT100_EMUL_STATE_DCS;
  		break;
  	    case 'c': /* RIS */
Index: wsemul_vt100_subr.c
===================================================================
RCS file: /home/cvs-base/src/sys/dev/wscons/wsemul_vt100_subr.c,v
retrieving revision 1.1.1.4
diff -c -r1.1.1.4 wsemul_vt100_subr.c
*** wsemul_vt100_subr.c	1998/08/13 17:43:51	1.1.1.4
--- wsemul_vt100_subr.c	1999/01/09 21:22:29
***************
*** 68,82 ****
  					  edp->scrreg_startrow,
  					  help);
  		if (edp->dblwid)
! 			bcopy(&edp->dblwid[edp->scrreg_startrow + n],
! 			      &edp->dblwid[edp->scrreg_startrow],
! 			      help);
  	}
  	(*edp->emulops->eraserows)(edp->emulcookie,
  				   edp->scrreg_startrow + help, n,
  				   edp->defattr);
  	if (edp->dblwid)
! 		bzero(&edp->dblwid[edp->scrreg_startrow + help], n);
  	CHECK_DW;
  }
  
--- 68,82 ----
  					  edp->scrreg_startrow,
  					  help);
  		if (edp->dblwid)
! 			memmove(&edp->dblwid[edp->scrreg_startrow],
! 				&edp->dblwid[edp->scrreg_startrow + n],
! 				help);
  	}
  	(*edp->emulops->eraserows)(edp->emulcookie,
  				   edp->scrreg_startrow + help, n,
  				   edp->defattr);
  	if (edp->dblwid)
! 		memset(&edp->dblwid[edp->scrreg_startrow + help], 0, n);
  	CHECK_DW;
  }
  
***************
*** 100,114 ****
  					  edp->scrreg_startrow + n,
  					  help);
  		if (edp->dblwid)
! 			bcopy(&edp->dblwid[edp->scrreg_startrow],
! 			      &edp->dblwid[edp->scrreg_startrow + n],
! 			      help);
  	}
  	(*edp->emulops->eraserows)(edp->emulcookie,
  				   edp->scrreg_startrow, n,
  				   edp->defattr);
  	if (edp->dblwid)
! 		bzero(&edp->dblwid[edp->scrreg_startrow], n);
  	CHECK_DW;
  }
  
--- 100,114 ----
  					  edp->scrreg_startrow + n,
  					  help);
  		if (edp->dblwid)
! 			memmove(&edp->dblwid[edp->scrreg_startrow + n],
! 				&edp->dblwid[edp->scrreg_startrow],
! 				help);
  	}
  	(*edp->emulops->eraserows)(edp->emulcookie,
  				   edp->scrreg_startrow, n,
  				   edp->defattr);
  	if (edp->dblwid)
! 		memset(&edp->dblwid[edp->scrreg_startrow], 0, n);
  	CHECK_DW;
  }
  
***************
*** 131,137 ****
  						   edp->crow + 1, n,
  						   edp->defattr);
  			if (edp->dblwid)
! 				bzero(&edp->dblwid[edp->crow + 1], n);
  		}
  		break;
  	    case 1: /* beginning to cursor */
--- 131,137 ----
  						   edp->crow + 1, n,
  						   edp->defattr);
  			if (edp->dblwid)
! 				memset(&edp->dblwid[edp->crow + 1], 0, n);
  		}
  		break;
  	    case 1: /* beginning to cursor */
***************
*** 140,146 ****
  						   0, edp->crow,
  						   edp->defattr);
  			if (edp->dblwid)
! 				bzero(&edp->dblwid[0], edp->crow);
  		}
  		ERASECOLS(0, edp->ccol + 1, edp->defattr);
  		break;
--- 140,146 ----
  						   0, edp->crow,
  						   edp->defattr);
  			if (edp->dblwid)
! 				memset(&edp->dblwid[0], 0, edp->crow);
  		}
  		ERASECOLS(0, edp->ccol + 1, edp->defattr);
  		break;
***************
*** 149,155 ****
  					   0, edp->nrows,
  					   edp->defattr);
  		if (edp->dblwid)
! 			bzero(&edp->dblwid[0], edp->nrows);
  		break;
  	    default:
  #ifdef VT100_PRINTUNKNOWN
--- 149,155 ----
  					   0, edp->nrows,
  					   edp->defattr);
  		if (edp->dblwid)
! 			memset(&edp->dblwid[0], 0, edp->nrows);
  		break;
  	    default:
  #ifdef VT100_PRINTUNKNOWN
***************
*** 467,473 ****
  			edp->tabs[edp->ccol] = 0;
  			break;
  		    case 3:
! 			bzero(edp->tabs, edp->ncols);
  			break;
  		    default:
  #ifdef VT100_PRINTUNKNOWN
--- 467,473 ----
  			edp->tabs[edp->ccol] = 0;
  			break;
  		    case 3:
! 			memset(edp->tabs, 0, edp->ncols);
  			break;
  		    default:
  #ifdef VT100_PRINTUNKNOWN
***************
*** 704,710 ****
  		return;
  	    case DCSTYPE_TABRESTORE:
  		KASSERT(edp->tabs != 0);
! 		bzero(edp->tabs, edp->ncols);
  		pos = 0;
  		for (i = 0; i < edp->dcspos; i++) {
  			char c = edp->dcsarg[i];
--- 704,710 ----
  		return;
  	    case DCSTYPE_TABRESTORE:
  		KASSERT(edp->tabs != 0);
! 		memset(edp->tabs, 0, edp->ncols);
  		pos = 0;
  		for (i = 0; i < edp->dcspos; i++) {
  			char c = edp->dcsarg[i];
Index: wsevent.c
===================================================================
RCS file: /home/cvs-base/src/sys/dev/wscons/wsevent.c,v
retrieving revision 1.1.1.2
diff -c -r1.1.1.2 wsevent.c
*** wsevent.c	1998/08/19 14:51:49	1.1.1.2
--- wsevent.c	1999/01/09 21:22:29
***************
*** 106,112 ****
  	ev->get = ev->put = 0;
  	ev->q = malloc((u_long)WSEVENT_QSIZE * sizeof(struct wscons_event),
  	    M_DEVBUF, M_WAITOK);
! 	bzero((caddr_t)ev->q, WSEVENT_QSIZE * sizeof(struct wscons_event));
  }
  
  /*
--- 106,112 ----
  	ev->get = ev->put = 0;
  	ev->q = malloc((u_long)WSEVENT_QSIZE * sizeof(struct wscons_event),
  	    M_DEVBUF, M_WAITOK);
! 	memset((caddr_t)ev->q, 0, WSEVENT_QSIZE * sizeof(struct wscons_event));
  }
  
  /*
Index: wskbd.c
===================================================================
RCS file: /home/cvs-base/src/sys/dev/wscons/wskbd.c,v
retrieving revision 1.1.1.13
diff -c -r1.1.1.13 wskbd.c
*** wskbd.c	1998/12/30 23:06:02	1.1.1.13
--- wskbd.c	1999/01/09 21:22:29
***************
*** 723,729 ****
  		if (error == 0) {
  			wskbd_init_keymap(umdp->maplen,
  					  &sc->sc_map, &sc->sc_maplen);
! 			bcopy(buf, sc->sc_map, len);
  			sc->sc_layout = KB_USER;
  		}
  		free(buf, M_TEMP);
--- 723,729 ----
  		if (error == 0) {
  			wskbd_init_keymap(umdp->maplen,
  					  &sc->sc_map, &sc->sc_maplen);
! 			memcpy(sc->sc_map, buf, len);
  			sc->sc_layout = KB_USER;
  		}
  		free(buf, M_TEMP);
>Audit-Trail:
>Unformatted: