例外レベルをel2 64ビットからel1 64ビットに変更する単純なefiアプリケーションを作成しようとしていますが、成功しません。
void entry_el1(void){
Print (L"running in el1.\n\r");
}
EFI_STATUS
EFIAPI
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
__asm__ volatile (
"mov x0, #(1 << 31)\n\t"
"msr hcr_el2, x0\n\t"
"mov x0, #0x0800\n\t"
"movk x0, #0x30d0, lsl #16\n\t"
"msr sctlr_el1, x0\n\t"
"mov x0, #0x33ff\n\t"
"msr cptr_el2, x0\n\t"
"msr hstr_el2, xzr\n\t"
"mov x0, #0x3c5\n\t"
"msr spsr_el2, x0\n\t"
"mov x0, %0\n\t"
"msr elr_el2, x0\n\t"
"eret" : : "r" (entry_el1) :
);
return EFI_SUCCESS;
}
これを実行した後、何も起こりません!これは例外レベルを変更するための正しい手順ですか?