[ARM] Make _kill() a noreturn function.

AngelSWI_Reason_ReportException does not return accoring to the ARM
documentation, so it is valid to mark _kill() as noreturn.  This way,
the compiler does not warn about _exit() returning a value despite
being noreturn.

2018-10-01  Christophe Lyon  <christophe.lyon@linaro.org>

	* libgloss/arm/_exit.c (_exit): Declare _kill() as noreturn.
	* libgloss/arm/_exit.c (_kill): Likewise. Remove the return
	statements.
	* newlib/libc/sys/arm/syscalls.c (_kill): Likewise..
This commit is contained in:
Christophe Lyon 2018-10-01 15:52:42 +00:00 committed by Richard Earnshaw
parent f53ce01125
commit 8a7536e91d
3 changed files with 14 additions and 9 deletions

View File

@ -1,6 +1,6 @@
#include <_ansi.h> #include <_ansi.h>
int _kill (int, int); int _kill (int, int) __attribute__((__noreturn__));
void _exit (int); void _exit (int);
void void

View File

@ -2,7 +2,7 @@
#include <signal.h> #include <signal.h>
#include "swi.h" #include "swi.h"
int _kill (int, int); int _kill (int, int) __attribute__((__noreturn__));
int int
_kill (int pid, int sig) _kill (int pid, int sig)
@ -41,12 +41,14 @@ _kill (int pid, int sig)
#if SEMIHOST_V2 #if SEMIHOST_V2
if (_has_ext_exit_extended ()) if (_has_ext_exit_extended ())
return do_AngelSWI (insn, block); do_AngelSWI (insn, block);
else else
#endif #endif
return do_AngelSWI (insn, (void*)block[0]); do_AngelSWI (insn, (void*)block[0]);
#else #else
asm ("swi %a0" :: "i" (SWI_Exit)); asm ("swi %a0" :: "i" (SWI_Exit));
#endif #endif
__builtin_unreachable();
} }

View File

@ -30,7 +30,7 @@ int _stat (const char *, struct stat *);
int _fstat (int, struct stat *); int _fstat (int, struct stat *);
void * _sbrk (ptrdiff_t); void * _sbrk (ptrdiff_t);
pid_t _getpid (void); pid_t _getpid (void);
int _kill (int, int); int _kill (int, int) __attribute__((__noreturn__));
void _exit (int); void _exit (int);
int _close (int); int _close (int);
int _swiclose (int); int _swiclose (int);
@ -432,15 +432,18 @@ _kill (int pid, int sig)
/* Note: The pid argument is thrown away. */ /* Note: The pid argument is thrown away. */
switch (sig) { switch (sig) {
case SIGABRT: case SIGABRT:
return do_AngelSWI (AngelSWI_Reason_ReportException, do_AngelSWI (AngelSWI_Reason_ReportException,
(void *) ADP_Stopped_RunTimeError); (void *) ADP_Stopped_RunTimeError);
__builtin_unreachable();
default: default:
return do_AngelSWI (AngelSWI_Reason_ReportException, do_AngelSWI (AngelSWI_Reason_ReportException,
(void *) ADP_Stopped_ApplicationExit); (void *) ADP_Stopped_ApplicationExit);
} }
#else #else
asm ("swi %a0" :: "i" (SWI_Exit)); asm ("swi %a0" :: "i" (SWI_Exit));
#endif #endif
__builtin_unreachable();
} }
void void