NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: port-i386/46884: Compaq Armada E500 not booting 6.0 RC1

OK, so these show that:


is the stack trace.  and this is the code and asm:

struct cfdriver *
config_cfdriver_lookup(const char *name)
        struct cfdriver *cd;

        LIST_FOREACH(cd, &allcfdrivers, cd_list) {
                if (STREQ(cd->cd_name, name))
                        return cd;

        return NULL;

Dump of assembler code for function config_cfdriver_lookup:
   0xc077fbf5 <+0>:     push   %ebp
   0xc077fbf6 <+1>:     mov    %esp,%ebp
   0xc077fbf8 <+3>:     push   %edi
   0xc077fbf9 <+4>:     push   %esi
   0xc077fbfa <+5>:     push   %ebx
   0xc077fbfb <+6>:     sub    $0x1c,%esp
   0xc077fbfe <+9>:     mov    0x8(%ebp),%edi
   0xc077fc01 <+12>:    mov    0xc0c3ecd0,%ebx
   0xc077fc07 <+18>:    test   %ebx,%ebx
   0xc077fc09 <+20>:    je     0xc077fc2d <config_cfdriver_lookup+56>
   0xc077fc0b <+22>:    movzbl (%edi),%esi
   0xc077fc0e <+25>:    mov    0x10(%ebx),%eax
   0xc077fc11 <+28>:    mov    %esi,%edx
>> 0xc077fc13 <+30>:    cmp    %dl,(%eax)                                
   0xc077fc15 <+32>:    jne    0xc077fc27 <config_cfdriver_lookup+50>
   0xc077fc17 <+34>:    mov    %edi,0x4(%esp)
   0xc077fc1b <+38>:    mov    %eax,(%esp)
   0xc077fc1e <+41>:    call   0xc0906af0 <strcmp>
   0xc077fc23 <+46>:    test   %eax,%eax
   0xc077fc25 <+48>:    je     0xc077fc2d <config_cfdriver_lookup+56>
   0xc077fc27 <+50>:    mov    (%ebx),%ebx
   0xc077fc29 <+52>:    test   %ebx,%ebx
   0xc077fc2b <+54>:    jne    0xc077fc0e <config_cfdriver_lookup+25>
   0xc077fc2d <+56>:    mov    %ebx,%eax
   0xc077fc2f <+58>:    add    $0x1c,%esp
   0xc077fc32 <+61>:    pop    %ebx
   0xc077fc33 <+62>:    pop    %esi
   0xc077fc34 <+63>:    pop    %edi
   0xc077fc35 <+64>:    pop    %ebp
   0xc077fc36 <+65>:    ret

>> marks the faulting instruction.  so something is wrong with 
the allcfdrivers list here, i think.  robo, can you run these
command from the db> prompt:

db> p $eax

db> x 0xc0bc2bfd

the STREQ() macro checks that the first char matches first, before
calling strcmp() directly (side comment: this seems like a strange
optimisation for autoconf code.)

i'm not sure what is happening here, but the allcfdrivers list
appears broken some how.  or perhaps a cfdriver entry.  i don't
know autoconf code very well.


Home | Main Index | Thread Index | Old Index