HalfdogStudio / HalfDogOS

OS
2 stars 2 forks source link

qemu中断退出 #7

Closed reverland closed 9 years ago

reverland commented 9 years ago

现象:

  qemu-system-x86_64 -m 32 -fda boot.img
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000000004671ffbe

EAX=00000044 EBX=0030ffa3 ECX=00000000 EDX=0000fe70
ESI=00000000 EDI=00000000 EBP=0030fd9c ESP=0030fd24
EIP=4649ffbe EFL=00000293 [--S-A-C] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0008 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0010 00280000 0007ffff 00479a00 DPL=0 CS32 [-R-]
SS =0008 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0008 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0008 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0008 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00270000 0000ffff
IDT=     0026f800 000007ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000058 CCD=0030fcec CCO=SUBB    
EFER=0000000000000000
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
make: *** [run] Aborted

定位

  for(;;){
        // 计数器
        count++;
        sprintf(s, "%010d", count);
        boxfill8(buf_win, 160, COL8_GRAY, 40, 28, 119, 43);
        putfont8_asc(buf_win, 160, 40, 28, COL8_BLACK, s);
        sheet_refresh(sht_win, 40, 28, 120, 44);
        // 计数器结束
        io_cli();                   //禁止中断
        if (fifo8_status(&keyinfo) + fifo8_status(&mouseinfo) == 0){      // keybuf为空

当有sprintf那行时就会发生这种问题。外部库引入谨慎啊。 后来把https://github.com/reverland/osdevlibc clone下来 在cmakelists.txt设置

  set(CMAKE_C_FLAGS "-nostdlib -O0 -m32")

后正常运行,慎用-O3啊。。。