刚修复了集成盘在gcc 4.3下无法工作的问题。
启动是只是显示“Loading System ...”
1. 原因
gcc 4.3对内存拷贝优化时出错,当然,glibc里头的memcpy是没有问题的,因为glibc中的memcpy实现方式不一样,但是linux-0.11里头的memcpy有问题。类似的 *p1=*p2 操作在gcc 4.3中会自动优化,而在4.3之前的版本会自动调用memcpy,所以这里我们把类似的 *p1=*p2 操作修改为 memcpy,但是编译时不能用优化选项,否则gcc 4.3还是会对memcpy优化,直接把代码嵌套到使用memcpy的代码,而不会调用,这种优化的结果并不正确,所以就导致了问题。
2. 修复办法
把kernel/blk_drv/ramdisk.c中的如下行:
*((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data);
修改为:
memcpy(((struct d_super_block *) &s), /
((struct d_super_block *) bh->b_data), /
sizeof(struct d_super_block));
另外编译时,去掉-O1选项,即确保kernel/blk_drv/Makefile中的CFLAGS没有-O1选项
3. 修改后的源代码
本文解决了一个在GCC4.3环境下集成盘无法正常工作的问题。问题出现在内存拷贝过程中,gcc4.3对该操作进行了不当优化。通过将*p1=*p2操作替换为memcpy,并去除编译时的优化选项,成功解决了该问题。
4294

被折叠的 条评论
为什么被折叠?



