summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm64/armv8/exception.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/arch/arm64/armv8/exception.c b/src/arch/arm64/armv8/exception.c
index 15d7e38398..8583fd5172 100644
--- a/src/arch/arm64/armv8/exception.c
+++ b/src/arch/arm64/armv8/exception.c
@@ -101,10 +101,21 @@ enum cb_err exception_handler_unregister(uint64_t vid, struct exception_handler
static void print_exception_info(struct exc_state *state, uint64_t idx)
{
- /* Poor man's sign of life in case printk() is shot. */
+ /*
+ * Sign of life in case printk() is shot. Prints !EXCEPT! to UART
+ * Not using a loop but instead calling __uart_tx_byte separately is intentionally here
+ * because in rare cases it will not print if it needs to access memory addresses
+ */
__uart_tx_byte('\r');
__uart_tx_byte('\n');
__uart_tx_byte('!');
+ __uart_tx_byte('E');
+ __uart_tx_byte('X');
+ __uart_tx_byte('C');
+ __uart_tx_byte('E');
+ __uart_tx_byte('P');
+ __uart_tx_byte('T');
+ __uart_tx_byte('!');
printk(BIOS_DEBUG, "\nexception %s\n",
idx < NUM_EXC_VIDS ? exception_names[idx] : "_unknown");