Closed reverland closed 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啊。。。
-O3
现象:
定位
当有sprintf那行时就会发生这种问题。外部库引入谨慎啊。 后来把https://github.com/reverland/osdevlibc clone下来 在cmakelists.txt设置
后正常运行,慎用
-O3
啊。。。