我使用的是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发布?
发布于 2013-04-26 21:05:07
如果传递给锁cmpxchg指令的地址(此处为%r12 )无效,则锁cmpxchg指令会导致访问冲突。这可能就是上面代码行中的变量var。这表明var指向了一些无效的内存。这不是cmpxchg函数中的竞争,但它可能仍然是调用函数中的竞争条件。
https://stackoverflow.com/questions/16235688
复制相似问题