리눅스에서 죽음으로부터의 부활이란 무엇입니까? 소프트 모델이 있나요?

리눅스에서 죽음으로부터의 부활이란 무엇입니까? 소프트 모델이 있나요?

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 FAQ에서,

    BUG_ON( condition );

동일합니까?

   if ( condition )
        BUG();

따라서 조건이 false이면 BUG_ON이 트리거되지 않고 코드가 계속 실행될 수 있습니다 if. 따라서 직접 core.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)
>>

관련 정보