http://www.vitanuova.com/inferno/papers/acidpaper.html


©®0t



On Tue, Jun 14, 2011 at 2:43 PM, Josh Marshall <
joshua.r.marshall.1...@gmail.com> wrote:

> Is there a resource whereby I could pickup this kind of debug skill, or is
> this experience, and assembly knowledge?
>
>
> On Mon, Jun 13, 2011 at 3:01 AM, <cinap_len...@gmx.de> wrote:
>
>> ok, i think i can explain the "unlock of ilock: pc f0140fc5, held by ..."
>> message.
>>
>> i extracted that 9pcflop kernel with muzgos cdfpart from the current iso
>> and
>> disassembled with acid arround.
>>
>> the routine that calls unlock looks like this:
>>
>> the routine that calls the unlock (shutdown from ether79c970.c)
>> 0xf0140f79 0xf0140f79   SUBL    $0x14,SP
>> 0xf0140f7c 0xf0140f7c   MOVL    0x18(SP),AX
>> # ctlr = arg->foobar
>> 0xf0140f80 0xf0140f80   MOVL    0x78(AX),CX
>> 0xf0140f83 0xf0140f83   MOVL    CX,0x10(SP)
>> 0xf0140f87 0xf0140f87   MOVL    CX,0x0(SP)
>> # ilock(ctlr)
>> 0xf0140f8a 0xf0140f8a   CALL    0xf019af31
>> 0xf0140f8f 0xf0140f8f   MOVL    0x10(SP),AX
>> 0xf0140f93 0xf0140f93   MOVL    AX,0x0(SP)
>> 0xf0140f96 0xf0140f96   MOVL    $0x18,AX
>> 0xf0140f9b 0xf0140f9b   MOVL    AX,0x4(SP)
>> # io32r(ctlr, 0x18) ???
>> 0xf0140f9f 0xf0140f9f   CALL    0xf01409b4
>> 0xf0140fa4 0xf0140fa4   MOVL    0x10(SP),AX
>> 0xf0140fa8 0xf0140fa8   MOVL    AX,0x0(SP)
>> 0xf0140fab 0xf0140fab   MOVL    $0x18,AX
>> 0xf0140fb0 0xf0140fb0   MOVL    AX,0x4(SP)
>> # io16r(ctlr, 0x18);
>> 0xf0140fb4 0xf0140fb4   CALL    0xf014093f
>> 0xf0140fb9 0xf0140fb9   MOVL    0x10(SP),AX
>> 0xf0140fbd 0xf0140fbd   MOVL    AX,0x0(SP)
>> # unlock(ctlr)
>> 0xf0140fc0 0xf0140fc0   CALL    0xf019b0be
>> 0xf0140fc5 0xf0140fc5   ADDL    $0x14,SP
>> 0xf0140fc8 0xf0140fc8   RET
>>
>> it have no debug symbols so i looked for magic numbers
>> arround (in this case 0x18)
>>
>> wich turned out to be:
>>
>> ether79c970.c:31:       Sreset          = 0x0018,       /* software reset
>> */
>>
>> # this looks like io32r() from ether79c970.c
>> acid: asm(0xf01409b4)
>> 0xf01409b4 0xf01409b4   SUBL    $0x8,SP
>> 0xf01409b7 0xf01409b7   MOVL    0xc(SP),CX
>> # port = arg2
>> 0xf01409bb 0xf01409bb   MOVL    0x1c(CX),CX
>> # port += arg1
>> 0xf01409be 0xf01409be   ADDL    0x10(SP),CX
>> 0xf01409c2 0xf01409c2   MOVL    CX,0x0(SP)
>> # inl(port)
>> 0xf01409c5 0xf01409c5   CALL    0xf010036e
>> 0xf01409ca 0xf01409ca   ADDL    $0x8,SP
>> 0xf01409cd 0xf01409cd   RET
>>
>> # this is inl()
>> acid: asm(0xf010036e)
>> 0xf010036e 0xf010036e   MOVL    0x4(SP),DX
>> 0xf0100372 0xf0100372   INL     DX,AX
>> 0xf0100373 0xf0100373   RET
>>
>> so there is your bug!
>>
>> static void
>> shutdown(Ether *ether)
>> {
>>        Ctlr *ctlr;
>>
>>        ctlr = ether->ctlr;
>>        ilock(ctlr);
>>        io32r(ctlr, Sreset);
>>        io16r(ctlr, Sreset);
>>        unlock(ctlr);
>> }
>>
>> it was commented out before...
>>
>> the file just changed... i think they try to fix it right now...
>>
>> --
>> cinap
>>
>>
>

Reply via email to