aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_selftest/efi_selftest_miniapp_exception.c
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2019-08-27 08:16:08 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2019-08-29 05:54:26 +0200
commit53c701720c3d5e5ae107454ea9b9f680bc399006 (patch)
tree905f23af7930b2419da32eae6a0c02356b789a6a /lib/efi_selftest/efi_selftest_miniapp_exception.c
parentce9ad0313c97a77d6c7efe02910e201c4bd2ca5d (diff)
efi_selftest: use standalone UEFI program for exception
To fully demonstrate crash outputs for UEFI images provide a standalone UEFI application that tries to invoke an illegal opcode. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib/efi_selftest/efi_selftest_miniapp_exception.c')
-rw-r--r--lib/efi_selftest/efi_selftest_miniapp_exception.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/efi_selftest/efi_selftest_miniapp_exception.c b/lib/efi_selftest/efi_selftest_miniapp_exception.c
new file mode 100644
index 0000000000..63c63d75f1
--- /dev/null
+++ b/lib/efi_selftest/efi_selftest_miniapp_exception.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * efi_selftest_miniapp_return
+ *
+ * Copyright (c) 2019 Heinrich Schuchardt
+ *
+ * This EFI application triggers an exception.
+ */
+
+#include <common.h>
+#include <efi_api.h>
+
+/*
+ * Entry point of the EFI application.
+ *
+ * @handle handle of the loaded image
+ * @systable system table
+ * @return status code
+ */
+efi_status_t EFIAPI efi_main(efi_handle_t handle,
+ struct efi_system_table *systable)
+{
+ struct efi_simple_text_output_protocol *con_out = systable->con_out;
+
+ con_out->output_string(con_out,
+ L"EFI application triggers exception.\n");
+
+#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
+ con_out->output_string(con_out, L"Exception not triggered.\n");
+ return EFI_ABORTED;
+}