簡體   English   中英

內聯asm中cmpxchg的分割錯誤

[英]segmentation fault with cmpxchg in inline asm

我正在使用嵌入式asm編寫my_simple_mutex。 下面的代碼部分被注釋掉可以正常工作,但是,帶有cmpxchg的版本以segfault結尾。 我在cygwin中使用g ++ 4.8.2。

void simple_mutex::spin_lock(){
        /*asm ("spin_lock:\n\t"
             "rep; nop;\n\t"
             "lock; bts $0x00, %0;\n\t"
             "jc spin_lock;\n\t"
             :"=m"(lock)
             :"m"(lock)
             :
             );
             */

        asm ("spin_lock:\n\t"
             "rep; nop;\n\t"
             "movl $0x00, %%eax\n\t"
             "movl $0x01, %%edx\n\t"
             "lock; cmpxchg %%edx, %0\n\t"
             "jnz spin_lock;\n\t"
             :"=m"(lock)
             :"m"(lock)
             :
             );

}

變量lock的類型為int 有什么想法我做錯了嗎?

由於您忘記告訴編譯器您修改了eaxedx ,因此故障可能出在其他地方。 解決方法是將它們列為“ clobbers”(在第三個冒號之后的部分)。 除非您被迫使用內聯匯編,否則請使用原子內置函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM