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:
Joel Sherrill
2010-06-28 22:13:55 +00:00
parent 89b897f020
commit 1d33ecab00
3 changed files with 120 additions and 120 deletions

View File

@@ -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.

View File

@@ -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;

View File

@@ -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);
} }