From 1090f1a60c730cd589f65047e105a22a0445721d Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 12 Aug 2024 11:17:26 +1000 Subject: [PATCH] shared/runtime/semihosting_arm: Add mp_semihosting_exit. Signed-off-by: Damien George --- shared/runtime/semihosting_arm.c | 8 ++++++++ shared/runtime/semihosting_arm.h | 1 + 2 files changed, 9 insertions(+) diff --git a/shared/runtime/semihosting_arm.c b/shared/runtime/semihosting_arm.c index d44124faab..f4d168f79b 100644 --- a/shared/runtime/semihosting_arm.c +++ b/shared/runtime/semihosting_arm.c @@ -36,6 +36,7 @@ #define SYS_WRITE 0x05 #define SYS_READ 0x06 #define SYS_READC 0x07 +#define SYS_EXIT 0x18 // Constants: #define OPEN_MODE_READ (0) // mode "r" @@ -88,6 +89,13 @@ void mp_semihosting_init() { mp_semihosting_stdout = mp_semihosting_open_console(OPEN_MODE_WRITE); } +void mp_semihosting_exit(int status) { + if (status == 0) { + status = 0x20026; + } + mp_semihosting_call(SYS_EXIT, (void *)(uintptr_t)status); +} + int mp_semihosting_rx_char() { return mp_semihosting_call(SYS_READC, NULL); } diff --git a/shared/runtime/semihosting_arm.h b/shared/runtime/semihosting_arm.h index 1faaae7fec..08fb66578a 100644 --- a/shared/runtime/semihosting_arm.h +++ b/shared/runtime/semihosting_arm.h @@ -46,6 +46,7 @@ If mp_semihosting_rx_char() doesn't work then try mp_semihosting_rx_chars(str, 1 #include void mp_semihosting_init(); +void mp_semihosting_exit(int status); int mp_semihosting_rx_char(); int mp_semihosting_rx_chars(char *str, size_t len); uint32_t mp_semihosting_tx_strn(const char *str, size_t len);