HalfdogStudio / HalfDogOS

OS
2 stars 2 forks source link

dev分支:无法正确清理timerctl->using #17

Closed reverland closed 9 years ago

reverland commented 9 years ago

程序中已无其它地方引用该变量。 然而必须保留其定义和在init_pit与inthandler20中对timerctl->using的赋值语句。

否则kernel panic,不断重启或者qemu aborted

检查保留与去掉timerctl->using生成的timer.o,除了赋值语句未见异常。

reverland commented 9 years ago

确认无任何引用timerctl+8using的程序

 ~/Work/learn/os_first_step   dev  cc -g -m32 -S *.c -masm=intel
bootpack.c: In function ‘HalfDogMain’:
bootpack.c:92:5: warning: incompatible implicit declaration of built-in function ‘sprintf’ [enabled by default]
 ~/Work/learn/os_first_step   dev ●  grep "timerctl+8" -r . -n    
./timer.s:74:   mov     DWORD PTR timerctl+8, 1234
./timer.s:388:  mov     DWORD PTR timerctl+8, 2345
reverland commented 9 years ago

@HalfdogStudio/os-team 为什么会出现这种不能清理掉不使用变量的问题?

reverland commented 9 years ago
  1. 可能和对齐有关
  2. 可能工具链某处或者qemubug
  3. 可能程序中存在某些隐蔽的问题。但排查对timerctl+8的引用并未发现。
reverland commented 9 years ago

仍然没有排查出原因。

检查timer.o变化, 只多了个这个程序就正常了:w

 29e:   c7 05 08 00 00 00 29    mov    DWORD PTR ds:0x8,0x929
 2a5:   09 00 00 

ld手动生成bootpack.bin对比前后

inthandler20处有两处引用timerctl->usingds:0x126a8

  f632: c7 05 a8 26 01 00 29    mov    DWORD PTR ds:0x126a8,0x929

  f446: c7 05 a8 26 01 00 d2    mov    DWORD PTR ds:0x126a8,0x4d2

In [7]: hex(0x126a8 - 0x8000)
Out[7]: '0xa6a8'

hexdump -C boot.img

0000a680  2a 4f 4f 4f 4f 4f 4f 4f  4f 2a 2e 2e 2e 2e 2e 2e  |*OOOOOOOO*......|
0000a690  2a 4f 4f 4f 4f 4f 4f 4f  2a 2e 2e 2e 2e 2e 2e 2e  |*OOOOOOO*.......|
*
0000a6b0  2a 4f 4f 4f 4f 4f 4f 4f  4f 2a 2e 2e 2e 2e 2e 2e  |*OOOOOOOO*......|
0000a6c0  2a 4f 4f 4f 4f 2a 2a 4f  4f 4f 2a 2e 2e 2e 2e 2e  |*OOOO**OOO*.....|

那里什么都没。。。。。。应该看ds起始地址开始的那里吧。。。 f632: c7 05 a8 26 01 00 29 mov DWORD PTR ds:0x126a8,0x929

reverland commented 9 years ago

回滚dev到之前的数组实现 将链表实现分支到branch timer-dev分支

reverland commented 9 years ago

今天进入了640x480的高分辨率模式,然而鼠标移动的卡顿也愈来越明显。 中断处理这里还是需要加强。

reverland commented 9 years ago

今天回滚到链表以前程序,依然出现多一个语句程序就崩溃的现象。于是做以下检查:

 ~/Work/learn/os_first_step   dev-timer ●  objdump -d timer.o|grep 929
  29e:   c7 05 08 00 00 00 29    movl   $0x929,0x8
 ~/Work/learn/os_first_step   dev-timer ●  cc -g -m32 -S timer.c -o timer_f.s && cat timer_f.s|grep timerctl+8
    movl    $1234, timerctl+8
    movl    $2345, timerctl+8

用7个nop代替这些指令

排除对齐问题。 ~/Work/learn/os_first_step   dev-timer ●  as --32 timer_f.s -o timer.o ~/Work/learn/os_first_step   dev-timer ●  make run

跳出

reverland commented 9 years ago

出现了很多奇怪的事,把libosdevc.a的链接去掉,window的title栏出现了奇怪的半个关闭按钮现象 在我把所有static数组都变成const后正常

reverland commented 9 years ago

由于不准备使用libosdevc库。关闭该issue 标记为won't fix

但之后会需要sprintf或类似实现,参见 #21