我正在使用linux内核(SLES11-SP2)提供的cmpxchg()
它惊慌失措。
它坠毁的确切地点在2005年:

            if (cmpxchg(var, old, new) == old)
2002:       48 89 d8                mov    %rbx,%rax
2005:       f0 4d 0f b1 34 24       lock cmpxchg %r14,(%r12)
200b:       48 39 c3                cmp    %rax,%rbx
200e:       74 27                   je     2037 <atomicPatchFnPtr+0x77>

有什么线索吗,我怎样才能进行调试?发生这种情况是因为锁定变量时的竞争条件吗?
或者我需要把它作为一个bug发布到内核上吗?

最佳答案

如果传递给lock cmpxchg指令的地址(此处为%r12)无效,则该指令可能导致访问冲突。这可能是上面代码行中的变量var。这表明var指向了一些无效的内存。它不是cmpxchg函数中的race,但它可能仍然是调用函数中的race条件。

关于linux - linux提供的cmpxchg调用会崩溃吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16235688/

10-10 13:53