Closed reverland closed 9 years ago
确认无任何引用timerctl+8
即using
的程序
~/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
@HalfdogStudio/os-team 为什么会出现这种不能清理掉不使用变量的问题?
仍然没有排查出原因。
检查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->using
(ds: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
回滚dev到之前的数组实现 将链表实现分支到branch timer-dev分支
今天进入了640x480的高分辨率模式,然而鼠标移动的卡顿也愈来越明显。 中断处理这里还是需要加强。
今天回滚到链表以前程序,依然出现多一个语句程序就崩溃的现象。于是做以下检查:
~/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
跳出
出现了很多奇怪的事,把libosdevc.a的链接去掉,window的title栏出现了奇怪的半个关闭按钮现象 在我把所有static数组都变成const后正常
由于不准备使用libosdevc库。关闭该issue 标记为won't fix
但之后会需要sprintf或类似实现,参见 #21
程序中已无其它地方引用该变量。 然而必须保留其定义和在init_pit与inthandler20中对timerctl->using的赋值语句。
否则kernel panic,不断重启或者qemu aborted
检查保留与去掉timerctl->using生成的timer.o,除了赋值语句未见异常。