Tools miss-compile old kernel

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

 



I recently upgraded to a newer Cross-compiler tool chain to try to get up to
glibc2.2. I'm now at gcc-2.95.3-14 and binutils-2.10.91-2 (both from Maciej's
site). I have built 2.4.0-test9 with this tool-chain, but is will not boot. It
spews illegal instruction errors when init is launched.

Is this supposed to work, or are the new tools incompatible with older kernels?

I dumped out the disassembly of a newly compiled kernel and found some bad
instructions in many of the routines. First one is from head.S

SNIP>> of bad disassembly
0000000080100280 <except_vec0_r4000>:
except_vec0_r4000():
    80100280:     401a4000      mfc0         $k0,$8
    80100284:     001ad582      srl             $k0,$k0,0x16
    80100288:     3c1b0000      lui             $k1,0x0
    8010028c:     677b0001      0x677b0001
    80100290:     001bdc38      0x1bdc38
    80100294:     677b8023      0x677b8023
    80100298:     001bdc38      0x1bdc38
    8010029c:     8f7bb250      lw                 $k1,-19888($k1)
    801002a0:     001ad080      sll                $k0,$k0,0x2
    801002a4:     037ad821      addu            $k1,$k1,$k0
    801002a8:     401a2000      mfc0           $k0,$4
    801002ac:     8f7b0000      lw                 $k1,0($k1)
    801002b0:     001ad042      srl                $k0,$k0,0x1
    801002b4:     335a0ff8      andi              $k0,$k0,0xff8
    801002b8:     037ad821      addu            $k1,$k1,$k0
    801002bc:     8f7a0000      lw                  $k0,0($k1)
    801002c0:     8f7b0004      lw                  $k1,4($k1)
    801002c4:     001ad182      srl                 $k0,$k0,0x6
    801002c8:     409a1000      mtc0            $k0,$2
    801002cc:     001bd982      srl                 $k1,$k1,0x6
    801002d0:     409b1800      mtc0            $k1,$3
    801002d4:     10000001      b                    ffffffff801002dc
<except_vec0_r4000+0x5c>
    801002d8:     42000006      tlbwr
    801002dc:     00000000      nop
    801002e0:     42000018      c0 0x18
<<SNIP

>>SNIP of good assembly from old tools
0000000080100280 <except_vec0_r4000>:
except_vec0_r4000():
    80100280:     401a4000     mfc0         $k0,$8
    80100284:     001ad582     srl              $k0,$k0,0x16
    80100288:     3c1b8023     lui              $k1,0x8023
    8010028c:     8f7bd210      lw               $k1,-11760($k1)
    80100290:     001ad080     sll               $k0,$k0,0x2
    80100294:     037ad821     addu          $k1,$k1,$k0
    80100298:     401a2000     mfc0         $k0,$4
    8010029c:     8f7b0000      lw                $k1,0($k1)
    801002a0:     001ad042     srl             $k0,$k0,0x1
    801002a4:     335a0ff8      andi           $k0,$k0,0xff8
    801002a8:     037ad821     addu         $k1,$k1,$k0
    801002ac:     8f7a0000      lw             $k0,0($k1)
    801002b0:     8f7b0004      lw             $k1,4($k1)
    801002b4:     001ad182      srl             $k0,$k0,0x6
    801002b8:     409a1000      mtc0         $k0,$2
    801002bc:     001bd982      srl             $k1,$k1,0x6
    801002c0:     409b1800      mtc0         $k1,$3
    801002c4:     10000001      b 801002cc <except_vec0_r4000+4c>
    801002c8:     42000006      tlbwr
    801002cc:     00000000      nop
    801002d0:     42000018      eret
<<SNIP


Looks like here the tools blow the lui/lw combination and also the eret. Any
suggestions?




[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux