On 2013-03-17 08:54, Jean-Pierre wrote:
Hi again,

Jim Klimov wrote:
On 2013-03-17 01:06, Jim Klimov wrote:
Hello Jean-Pierre,

I tried your fix and it seems mostly correct - I applied the patch to
a freshly untarred source that you published a couple of days ago, and
the resulting ndiscvt binary built under OI 151a7 succeeded to make a
driver.s file. However, it doesn't work fully, so the compilation of
"ndis" target failed. Build log attached.


Apparently, the code which created the assembly text forgot to add
newlines before leaq instructions. I added them manually, and the

Good point.

overall build fails at a bit later step now:

/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER driver.o
ERROR: ctfconvert: file does not contain dwarf type data (try compiling
with -g)
Removing driver.o

I do no know what this ctfconvert is about (probably related
to debugging), but I am quite sure this is useless (I do not
even have this tool). Likewise the -g dumps symbols into the
object file, only used for debugging, but this is probably
meaningless for an assembler source. Maybe ctfconvert extracts
the symbols created by -g and puts them in a specific file.

I cannot help you on such matters.


Ok, this helped move forward - I commented away the line for ctfconvert
in the Makefile for driver.o, and added "-gdwarf-2" to the CFLAGS for
ndiscvt, because ctfconvert of its component objects also complained
without it:

$(NDISCVT) :    CFLAGS = -I../include -O -m64 -DLINKEDIMAGE -gdwarf-2

Now the single gmake command (with an interruption to add manually the
line-breaks before leaq, which I hope you'd automate by release time)
builds the project from scratch with Makefile, ndis.inf and ndis.sys
being the only files in the build-dir (amd64), up to ndisapi (the "all"
target) with a few warnings repeated for a number of files - probably
stemming from some same header file:

...
/usr/sfw/bin/gcc -fident -finline -fno-inline-functions -fno-builtin -fno-asm -nodefaultlibs -D__sun -O2 -gdwarf-2 -fno-strict-aliasing -fno-unit-at-a-time -fno-optimize-sibling-calls -m64 -mtune=opteron -Wall -Wno-unknown-pragmas -Wno-missing-braces -Wno-sign-compare -Wno-parentheses -Wno-uninitialized -Wno-implicit-function-declaration -Wno-unused -Wno-trigraphs -Wno-char-subscripts -Wno-switch -ffreestanding -mcmodel=kernel -mno-red-zone -D_KERNEL -DLINKEDIMAGE -D__amd64__ -D__amd64 -I../include -I. -c ../kern_ndis.c -o kern_ndis.o
In file included from ../kern_ndis.c:74:
../include/ntoskrnl_var.h:354: warning: "struct ndis_softc" declared inside parameter list ../include/ntoskrnl_var.h:354: warning: its scope is only this definition or declaration, which is probably not what you want ../include/ntoskrnl_var.h:354: warning: "struct irp" declared inside parameter list ../include/ntoskrnl_var.h:354: warning: "struct device_object" declared inside parameter list ../kern_ndis.c:651: warning: static declaration of 'strdup' follows non-static declaration /usr/include/sys/sunddi.h:426: warning: previous declaration of 'strdup' was here /usr/sfw/bin/gcc -fident -finline -fno-inline-functions -fno-builtin -fno-asm -nodefaultlibs -D__sun -O2 -gdwarf-2 -fno-strict-aliasing -fno-unit-at-a-time -fno-optimize-sibling-calls -m64 -mtune=opteron -Wall -Wno-unknown-pragmas -Wno-missing-braces -Wno-sign-compare -Wno-parentheses -Wno-uninitialized -Wno-implicit-function-declaration -Wno-unused -Wno-trigraphs -Wno-char-subscripts -Wno-switch -ffreestanding -mcmodel=kernel -mno-red-zone -D_KERNEL -DLINKEDIMAGE -D__amd64__ -D__amd64 -I../include -I. -c ../kern_windrv.c -o kern_windrv.o
In file included from ../kern_windrv.c:73:
../include/ntoskrnl_var.h:354: warning: "struct ndis_softc" declared inside parameter list ../include/ntoskrnl_var.h:354: warning: its scope is only this definition or declaration, which is probably not what you want ../include/ntoskrnl_var.h:354: warning: "struct irp" declared inside parameter list ../include/ntoskrnl_var.h:354: warning: "struct device_object" declared inside parameter list /usr/sfw/bin/gcc -c -O2 -fno-inline -Wall -ffreestanding -U_NO_LONGLONG -D_KERNEL -mcmodel=kernel -mno-red-zone -fno-strict-aliasing -m64 -mtune=opteron -I../ ../winx64_wrap.S -o winx64_wrap.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER subr_ndis.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER subr_ntoskrnl.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER subr_pe.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER subr_hal.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER kern_ndis.o
/opt/onbld/bin/i386/ctfconvert -g -l NDISWRAPPER kern_windrv.o
/usr/ccs/bin/ld -r -o ndisapi subr_ndis.o subr_ntoskrnl.o subr_pe.o subr_hal.o kern_ndis.o kern_windrv.o winx64_wrap.o /opt/onbld/bin/i386/ctfmerge -l NDISWRAPPER -o ndisapi subr_ndis.o subr_ntoskrnl.o subr_pe.o subr_hal.o kern_ndis.o kern_windrv.o winx64_wrap.o

It has nominally succeeded for 64-bit variants of ndis5 and ndis6
drivers from varied vendors of laptops with broadcom wifi chips.

Unfortunately, this was built on another host than my laptop and I must
run now, so I won't test the resulting driver with the hardware until
some time later. Intrigue and suspense grows ;)

PS: I automated the "leaq" problem with sed/tr in the Makefile like
this, so the whole build from scratch happens by one command:

ndis.h driver.s : ndiscvt
        ./ndiscvt -i ndis.inf -s ndis.sys -o ndis.h -a driver.s
        rm -f driver.sx; mv -f driver.s driver.sx
cat driver.sx | sed 's/^\( .*\)\( leaq .*\)$/\1=\2/' | tr '=' '\n' > driver.s
        rm -f driver.sx

HTH,
//Jim Klimov


_______________________________________________
oi-dev mailing list
oi-dev@openindiana.org
http://openindiana.org/mailman/listinfo/oi-dev

Reply via email to