Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Jun 2005 14:56:39 +0200
From:      Fredrik Lindberg <fli+freebsd-current@shapeshifter.se>
To:        freebsd-current@freebsd.org
Subject:   Slight problem with ndisgen and ndiscvt
Message-ID:  <20050616125639.GA1419@shapeshifter.se>

next in thread | raw e-mail | index | archive | help

--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi

There is a slight problem with ndisgen and ndiscvt when the filename of the
.sys-file starts with a number (such as 3C154G72.sys).
The produced header file contains variable declarations which starts with a number,
such as extern unsigned char 3C154G72_sys_drv_data_start[] which results in 
several "syntax error before numeric constant" during compilation.

While this can be solved simply by renaming the .sys-file, that solution might not
be obvious to ordinary users. 
Here is a  small patch which adds a "ndis_" prefix to drv_data_start and 
related variables. This will allow filesnames which starts with a number. 
Maybe even more care should be taken to make sure there are no spaces or 
other "strange" characters in the name.

   Fredrik Lindberg

--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ndisgen-numeric-sysfile.patch"

diff -cr --exclude=CVS ndiscvt.old/ndiscvt.c ndiscvt/ndiscvt.c
*** ndiscvt.old/ndiscvt.c	Thu Jun 16 14:45:38 2005
--- ndiscvt/ndiscvt.c	Mon Jun 13 19:07:26 2005
***************
*** 207,215 ****
  	}
  
  	snprintf(sysbuf, sizeof(sysbuf),
! 	    "objcopy --redefine-sym _binary_%s_start=%s_drv_data_start "
  	    "--strip-symbol _binary_%s_size "
! 	    "--redefine-sym _binary_%s_end=%s_drv_data_end %s.o %s.o\n",
  	    tname, sysfile, tname, tname, sysfile, outfile, outfile);
  	printf("%s", sysbuf);
  	system(sysbuf);
--- 207,215 ----
  	}
  
  	snprintf(sysbuf, sizeof(sysbuf),
! 	    "objcopy --redefine-sym _binary_%s_start=ndis_%s_drv_data_start "
  	    "--strip-symbol _binary_%s_size "
! 	    "--redefine-sym _binary_%s_end=ndis_%s_drv_data_end %s.o %s.o\n",
  	    tname, sysfile, tname, tname, sysfile, outfile, outfile);
  	printf("%s", sysbuf);
  	system(sysbuf);
***************
*** 384,393 ****
  			ptr++;
  		}
  		fprintf(outfp,
! 		    "\nextern unsigned char %s_drv_data_start[];\n",
  		    sysfile);
  		fprintf(outfp, "static unsigned char *drv_data = "
! 		    "%s_drv_data_start;\n\n", sysfile);
  		bincvt(sysfile, outfile, img, fsize);
  		goto done;
  	}
--- 384,393 ----
  			ptr++;
  		}
  		fprintf(outfp,
! 		    "\nextern unsigned char ndis_%s_drv_data_start[];\n",
  		    sysfile);
  		fprintf(outfp, "static unsigned char *drv_data = "
! 		    "ndis_%s_drv_data_start;\n\n", sysfile);
  		bincvt(sysfile, outfile, img, fsize);
  		goto done;
  	}
diff -cr --exclude=CVS ndiscvt.old/ndisgen.sh ndiscvt/ndisgen.sh
*** ndiscvt.old/ndisgen.sh	Thu Jun 16 14:45:38 2005
--- ndiscvt/ndisgen.sh	Mon Jun 13 20:45:37 2005
***************
*** 393,399 ****
  touch bus_if.h
  touch device_if.h
  echo -n "	Compiling stub... "
! if ! ${CC} -D_KERNEL -DDRV_DATA_START=${SYSBASE}_drv_data_start -DDRV_NAME=${SYSBASE} -DDRV_DATA_END=${SYSBASE}_drv_data_end -I. ${STUBFILE} -c -o windrv_stub.o; then
  	echo "compilation failed. Exiting."
  	echo ""
  	exit
--- 393,399 ----
  touch bus_if.h
  touch device_if.h
  echo -n "	Compiling stub... "
! if ! ${CC} -D_KERNEL -DDRV_DATA_START=ndis_${SYSBASE}_drv_data_start -DDRV_NAME=ndis_${SYSBASE} -DDRV_DATA_END=ndis_${SYSBASE}_drv_data_end -I. ${STUBFILE} -c -o windrv_stub.o; then
  	echo "compilation failed. Exiting."
  	echo ""
  	exit

--r5Pyd7+fXNt84Ff3--



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