linux 中什么叫死而复生?有软模吗?

linux 中什么叫死而复生?有软模吗?

https://github.com/torvalds/linux/blob/bf272460d744112bacd4c4d562592decbf0edf64/arch/x86/kernel/cpu/mce/core.c#L1543

    if ((m.cs & 3) == 3) {
        /* If this triggers there is no way to recover. Die hard. */
        BUG_ON(!on_thread_stack() || !user_mode(regs));

如上所述,什么是死而复生?什么是软死?

BUG_ON() 执行后,其余代码会继续运行吗?

答案1

“死而复生”意味着杀死线程。与让它继续运行(可能通过返回失败结果)相反,调用代码可以处理以优雅地退出/继续。从@don-aman提到的BUG常见问题解答中,

    BUG_ON( condition );

是相同的

   if ( condition )
        BUG();

因此,如果条件为 false,则 BUG_ON 不会被触发,并且代码可以继续 - 这就是为什么您可以ifcore.c.另外,您还可以测试一下BUG()自己:

>>cat h.c
#include <stdio.h>

#define BUG() __asm__ __volatile__("ud2\n")

int main()
{
        printf ("hi\n");
        BUG();
        printf ("ho\n");
}
>>cc -o h h.c
>>./h
hi
Illegal instruction (core dumped)
>>

相关内容