Subject: Re: SoC: NDIS
To: Alan Ritter <rittera@cc.wwu.edu>
From: Frank van der Linden <fvdl@netbsd.org>
List: tech-kern
Date: 08/01/2005 21:33:51
>I think I may have finally ran into a problem with this.  So far I haven't
>had to make any modifications to the PE code (subr_pe.c), and I've been
>able to call into the binary Windows driver and it's been calling
>NdisXXX() functions just fine.  Right now I'm trying to get through the
>MiniportInitalize() function (inside the Windows binary).  It calls a
>bunch of the Ndis functions to set up the device, then it blows up after
>the following machine instruction:
>
>jmp ds:0xc0a5d548
>
>This is what happens when I try to step past it:
>
>8: x/i $pc 0xc0a5d410 : jmp ds:0xc0a5d548
>(gdb) si
>0x00057fd4 in ?? ()
>8: x/i $pc 0x57fd4: Cannot access memory at address 0x57fd4
>Disabling display 8 to avoid infinite recursion.
>(gdb)
>
>As you can see the program counter is getting set to an invalid memory
>address.  I'm thinking this might be a problem with how the segment
>registers are set up.
>  
>
Actually, the segment registers look normal for NetBSD purposes (ignore 
the upper bits of what gdb says they are).

I'm not quite sure what gdb disassembles as "jmp ds:XXXXXX". It might 
just be a plain pointer jump, with the pointer being at 0xc0a5d548. What 
is the value at address 0xc0a5d548? What are the bytes in the jmp 
instruction?

- Frank