免费注册 查看新帖 |

Chinaunix

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

调试出SIGSEGV,一段内核代码的问题请教懂汇编的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-17 13:28 |只看该作者 |倒序浏览
调试出SIGSEGV,一段内核代码的问题

C++程序中,子类析构函数正常执行,子类中的类成员的析构也正常执行,但父类析构调用之前,爆出SIGSEGV信号,gdb显示出错位置:

at /usr/include/c++/3.2.3/i386-redhat-linux/bits/atomicity.h:40
40            __asm__  __volatile__  ("lock; xaddl  %0,%2"
Current language:  auto;  currently c++

请问上面的错误是什么意思?

错误应该是在第40行。这行代码所在的函数为:
static inline  _Atomic_word
__attribute__   (__unused__))
__exchange_and_add  (volatile _Atomic_word  *__mem, int  __val)
{
    register  _Atomic_word   __result;
    __asm__   __volatile__  ("lock; xaddl %0,%2"                         //这行就是出错的地方
                                   :  "=r" (__result)
                                   : "0" (__val),  "m" (*__mem)
                                   : "memory" ) ;
       return __result;
}

不知道这个函数是干什么用的。出错的应该是一段内嵌的汇编代码,执行的是lock和xaddl汇编指令??请教。

[ 本帖最后由 joyue 于 2007-1-17 16:08 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-17 15:45 |只看该作者

回复 1楼 joyue 的帖子

__volatile__  
__volatile__或volatile是可选的,你可以用它也可以不用它。如果你用了它,则是向 GCC声明“不要动我所写的Instruction List,我需要原封不动的保留每一条指令”,否则当你使用了优化选项(-O)进行编译时,GCC将会根据自己的判断决定是否将这个内联汇编表达式中的指令优化掉。

检查你的代码,是否有非法内存访问等错误

论坛徽章:
0
3 [报告]
发表于 2007-01-17 16:11 |只看该作者
再顶

[ 本帖最后由 joyue 于 2007-1-17 16:15 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-01-17 17:23 |只看该作者
看下你的__mem指向了哪里,看上去是指向了非法区域。

论坛徽章:
0
5 [报告]
发表于 2007-01-17 17:51 |只看该作者
应该就是指针、内存问题。 ps,这不是内核问题呀

论坛徽章:
0
6 [报告]
发表于 2007-01-17 18:31 |只看该作者
lock 不是指令,只是指令前缀,用来修饰指令
x86 指令不支持两个操作数为内存操作数,所以:
xadd 指令两个操作数必须有一个是 register 操作数.

论坛徽章:
0
7 [报告]
发表于 2007-01-17 23:01 |只看该作者
原帖由 mik 于 2007-1-17 18:31 发表
lock 不是指令,只是指令前缀,用来修饰指令
x86 指令不支持两个操作数为内存操作数,所以:
xadd 指令两个操作数必须有一个是 register 操作数.


如果是那样的话, 编译通不过的
gcc能够编译通过,说明实际生成的汇编代码是有效代码,而不是两个操作数都是mem ,

楼主,这个时候你还是看看各个成员变量正确否, 看看产生这个异常的时候正在访问的是什么地址
这个地址是怎么得来得
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP