forked from Imagelibrary/rtems
2010-06-28 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/include/rtems/error.h, libcsupport/src/error.c: Clean up so rtems_panic() can be a noreturn method. This eliminates some unreachable and thus untestable code.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2010-06-28 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
|
* libcsupport/include/rtems/error.h, libcsupport/src/error.c: Clean up
|
||||||
|
so rtems_panic() can be a noreturn method. This eliminates some
|
||||||
|
unreachable and thus untestable code.
|
||||||
|
|
||||||
2010-06-28 Joel Sherrill <joel.sherrilL@OARcorp.com>
|
2010-06-28 Joel Sherrill <joel.sherrilL@OARcorp.com>
|
||||||
|
|
||||||
* libcsupport/src/termios.c: Formatting.
|
* libcsupport/src/termios.c: Formatting.
|
||||||
|
|||||||
@@ -34,22 +34,19 @@ typedef Internal_errors_t rtems_error_code_t;
|
|||||||
#define RTEMS_ERROR_ABORT (0x10000000) /* err is fatal; panic */
|
#define RTEMS_ERROR_ABORT (0x10000000) /* err is fatal; panic */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RTEMS_ERROR_MASK (RTEMS_ERROR_ERRNO | RTEMS_ERROR_ABORT | \
|
#define RTEMS_ERROR_MASK \
|
||||||
RTEMS_ERROR_PANIC) /* all */
|
(RTEMS_ERROR_ERRNO | RTEMS_ERROR_ABORT | RTEMS_ERROR_PANIC) /* all */
|
||||||
|
|
||||||
const char *rtems_status_text(rtems_status_code);
|
const char *rtems_status_text(rtems_status_code);
|
||||||
int rtems_error(rtems_error_code_t error_code, const char *printf_format, ...);
|
int rtems_error(
|
||||||
#ifdef __GNUC__
|
rtems_error_code_t error_code,
|
||||||
void rtems_panic(const char *printf_format, ...);
|
const char *printf_format,
|
||||||
/*
|
...
|
||||||
* We should be able to use this attribute but gcc complains that
|
);
|
||||||
* rtems_panic does in fact return. :(
|
void rtems_panic(
|
||||||
*
|
const char *printf_format,
|
||||||
* __attribute__ ((__noreturn__));
|
...
|
||||||
*/
|
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
|
||||||
#else
|
|
||||||
void rtems_panic(const char *printf_format, ...);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int rtems_panic_in_progress;
|
extern int rtems_panic_in_progress;
|
||||||
|
|
||||||
|
|||||||
@@ -92,8 +92,7 @@ const rtems_assoc_t rtems_status_assoc[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *rtems_status_text(
|
||||||
rtems_status_text(
|
|
||||||
rtems_status_code status
|
rtems_status_code status
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -111,8 +110,7 @@ static int rtems_verror(
|
|||||||
int chars_written = 0;
|
int chars_written = 0;
|
||||||
rtems_status_code status;
|
rtems_status_code status;
|
||||||
|
|
||||||
if (error_flag & RTEMS_ERROR_PANIC)
|
if (error_flag & RTEMS_ERROR_PANIC) {
|
||||||
{
|
|
||||||
if (rtems_panic_in_progress++)
|
if (rtems_panic_in_progress++)
|
||||||
_Thread_Disable_dispatch(); /* disable task switches */
|
_Thread_Disable_dispatch(); /* disable task switches */
|
||||||
|
|
||||||
@@ -135,10 +133,10 @@ static int rtems_verror(
|
|||||||
chars_written += vfprintf(stderr, printf_format, arglist);
|
chars_written += vfprintf(stderr, printf_format, arglist);
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
|
chars_written +=
|
||||||
|
fprintf(stderr, " (status: %s)", rtems_status_text(status));
|
||||||
|
|
||||||
if (local_errno)
|
if (local_errno) {
|
||||||
{
|
|
||||||
if ((local_errno > 0) && *strerror(local_errno))
|
if ((local_errno > 0) && *strerror(local_errno))
|
||||||
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
|
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
|
||||||
else
|
else
|
||||||
@@ -149,19 +147,6 @@ static int rtems_verror(
|
|||||||
|
|
||||||
(void) fflush(stderr);
|
(void) fflush(stderr);
|
||||||
|
|
||||||
if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT))
|
|
||||||
{
|
|
||||||
if (error_flag & RTEMS_ERROR_PANIC)
|
|
||||||
{
|
|
||||||
rtems_error(0, "fatal error, exiting");
|
|
||||||
_exit(local_errno);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rtems_error(0, "fatal error, aborting");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return chars_written;
|
return chars_written;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +163,7 @@ int rtems_error(
|
|||||||
rtems_error_code_t error_flag,
|
rtems_error_code_t error_flag,
|
||||||
const char *printf_format,
|
const char *printf_format,
|
||||||
...
|
...
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
va_list arglist;
|
va_list arglist;
|
||||||
int chars_written;
|
int chars_written;
|
||||||
@@ -187,6 +172,15 @@ int rtems_error(
|
|||||||
chars_written = rtems_verror(error_flag, printf_format, arglist);
|
chars_written = rtems_verror(error_flag, printf_format, arglist);
|
||||||
va_end(arglist);
|
va_end(arglist);
|
||||||
|
|
||||||
|
if (error_flag & RTEMS_ERROR_PANIC) {
|
||||||
|
rtems_error(0, "fatal error, exiting");
|
||||||
|
_exit(errno);
|
||||||
|
}
|
||||||
|
if (error_flag & RTEMS_ERROR_ABORT) {
|
||||||
|
rtems_error(0, "fatal error, aborting");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
return chars_written;
|
return chars_written;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,11 +191,14 @@ int rtems_error(
|
|||||||
void rtems_panic(
|
void rtems_panic(
|
||||||
const char *printf_format,
|
const char *printf_format,
|
||||||
...
|
...
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
va_list arglist;
|
va_list arglist;
|
||||||
|
|
||||||
va_start(arglist, printf_format);
|
va_start(arglist, printf_format);
|
||||||
(void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist);
|
(void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist);
|
||||||
va_end(arglist);
|
va_end(arglist);
|
||||||
|
|
||||||
|
rtems_error(0, "fatal error, exiting");
|
||||||
|
_exit(errno);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user