免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3022 | 回复: 4
打印 上一主题 下一主题

请问这个函数为什么没有编译到正确的指令? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-12 09:51 |只看该作者 |倒序浏览
测试异常用的函数:
void CTrap::test_trap(UNUSED int n)
{
        int a = 3, b = -1;

        *(int *)0x2 = 3;                                 页表中只初始化了3G~4G的项,用bochs模拟32M内存,
        *(int *)0x40000020 = 3;                   但是这两个地址赋值都没有引起异常,为什么?
        b += 1;
        a /= b;                                               除零异常在下面的反汇编中没有看到,被ignore了?
        __asm__ __volatile__("ud2a");        无效指令:正常,可以陷入到异常
}




objdump得到输出:
c0104d8c <_ZN5CTrap9test_trapEi>:
c0104d8c:       c7 05 02 00 00 00 03       movl   $0x3,0x2
c0104d93:       00 00 00
c0104d96:       c7 05 20 00 00 40 03       movl   $0x3,0x40000020
c0104d9d:       00 00 00
c0104da0:       0f 0b                                ud2a   
c0104da2:       c3                                    ret   
c0104da3:       90                                    nop


编译选项如下:
GENERAL_FLAGS = -nostdlib -nostdinc -nostartfiles -nodefaultlibs \
                -fno-rtti -fno-exceptions -fomit-frame-pointer \
                -Wall -Wextra -O2 -D__KERNEL__ -g -ggdb

[ 本帖最后由 jinglexy 于 2007-11-12 09:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-11-12 11:28 |只看该作者
没有缺页异常可以dump出页表内容看,后面那个被优化掉了,因为a,b的内容不再被用到,不需要计算。把a弄成static的应该就可以了。

论坛徽章:
0
3 [报告]
发表于 2007-11-12 19:00 |只看该作者
3x bluster兄,dump看到的结果的确有0页表,0x40000020没有可以引起异常,上午的调试可能是搞错了。
以前用c编译过这段代码,a = a/0是不会被优化掉的,不知g++怎么就优没了。
再次3x。

论坛徽章:
0
4 [报告]
发表于 2007-11-14 19:40 |只看该作者
写内核并使用GCC编译的话,可以使用volatile关键字.

论坛徽章:
0
5 [报告]
发表于 2007-11-17 22:58 |只看该作者
原帖由 jinglexy 于 2007-11-12 09:51 发表
测试异常用的函数:
void CTrap::test_trap(UNUSED int n)
{
        int a = 3, b = -1;

        *(int *)0x2 = 3;                                 页表中只初始化了3G~4G的项,用bochs模拟32M内存, ...



明摆着就是编译正确了吗? 何以得出“没有编译到正确的指令”这种结论?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP