Kernel

linux中的死硬是什麼?有模軟嗎?

  • September 1, 2022

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() 後,其餘程式碼會繼續執行嗎?

“死硬”意味著殺死執行緒。與讓它繼續執行(可能通過返回失敗結果)相反,呼叫程式碼可以處理以優雅地退出/繼續。從@don-aman 提到的BUG FAQ 中,

   BUG_ON( condition );

是相同的

  if ( condition )
       BUG();

因此,如果條件為假,則 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)
>>

引用自:https://unix.stackexchange.com/questions/715699