6dbd190111
The _exit function currently passes -1 as a "sig" to the _kill function as an invalid signal number so that _kill can distinguish between an abort and a standard exit. For boards using the SYS_EXIT_EXTENDED semi-hosting operation to return a status code, this means that the "status" paramter to _exit is ignored and the return code is always -1. https://developer.arm.com/docs/100863/latest/semihosting-operations/sys_exit_extended-0x20 This patch puts shared code between _kill and _exit into a new function _kill_shared that takes the semi-hosting "reason" to use (if semi-hosting is available) as an argument. For semi-hosting _kill_shared provides that "reason". Without the "sig" argument being used to distinguish between a normal and abnormal exit, the _exit function can provide the return code to be used if the SYS_EXIT_EXTENDED operation is available. Hence the exit code can be returned.
17 lines
506 B
C
17 lines
506 B
C
#include <_ansi.h>
|
|
#include "swi.h"
|
|
|
|
int _kill_shared (int, int, int) __attribute__((__noreturn__));
|
|
void _exit (int);
|
|
|
|
void
|
|
_exit (int status)
|
|
{
|
|
/* The same SWI is used for both _exit and _kill.
|
|
For _exit, call the SWI with "reason" set to ADP_Stopped_ApplicationExit
|
|
to mark a standard exit.
|
|
Note: The RDI implementation of _kill_shared throws away all its
|
|
arguments and all implementations ignore the first argument. */
|
|
_kill_shared (-1, status, ADP_Stopped_ApplicationExit);
|
|
}
|