// SPDX-License-Identifier: GPL-2.0+ /* * efi_selftest_exception * * Copyright (c) 2018 Heinrich Schuchardt * * Test the handling of exceptions by trying to execute an undefined * instruction. */ #include /** * undefined_instruction() - try to executed an undefined instruction */ static void undefined_instruction(void) { #if defined(CONFIG_ARM) /* * 0xe7f...f. is undefined in ARM mode * 0xde.. is undefined in Thumb mode */ asm volatile (".word 0xe7f7defb\n"); #elif defined(CONFIG_RISCV) asm volatile (".word 0xffffffff\n"); #elif defined(CONFIG_X86) asm volatile (".word 0xffff\n"); #endif } /** * execute() - execute unit test * * Return: EFI_ST_SUCCESS for success */ static int execute(void) { undefined_instruction(); efi_st_error("An undefined instruction exception was not raised\n"); return EFI_ST_FAILURE; } EFI_UNIT_TEST(exception) = { .name = "exception", .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT, .execute = execute, .on_request = true, };