mirror of https://github.com/ARMmbed/mbed-os.git
Add MBED_NORETURN attributes
Save some ROM space by putting MBED_NORETURN attributes on error functions and failed asserts. mbed_error was documented as returning an error code. It never actually could return, so documentation updated, but return type kept.pull/8328/head
parent
57748bd46e
commit
ea16a6ba1d
|
@ -97,7 +97,7 @@
|
|||
void lwip_mbed_tracef_debug(const char *fmt, ...);
|
||||
void lwip_mbed_tracef_error(const char *fmt, ...);
|
||||
void lwip_mbed_tracef_warn(const char *fmt, ...);
|
||||
void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line);
|
||||
MBED_NORETURN void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line);
|
||||
|
||||
#define LWIP_PLATFORM_DIAG(vars) lwip_mbed_tracef_debug vars
|
||||
#define LWIP_PLATFORM_DIAG_SEVERE(vars) lwip_mbed_tracef_error vars
|
||||
|
@ -109,7 +109,7 @@ void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file,
|
|||
#else // MBED_CONF_LWIP_USE_MBED_TRACE
|
||||
#include <stdio.h>
|
||||
|
||||
void assert_printf(char *msg, int line, char *file);
|
||||
MBED_NORETURN void assert_printf(char *msg, int line, char *file);
|
||||
|
||||
/* Plaform specific diagnostic output */
|
||||
#define LWIP_PLATFORM_DIAG(vars) printf vars
|
||||
|
|
|
@ -589,7 +589,7 @@ void lwip_mbed_tracef_error(const char *fmt, ...)
|
|||
va_end(ap);
|
||||
}
|
||||
|
||||
void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line)
|
||||
MBED_NORETURN void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file, unsigned int line)
|
||||
{
|
||||
mbed_tracef(TRACE_LEVEL_ERROR, "lwIP", "Assertion failed: %s, function %s, file %s, line %u.", msg, func, file, line);
|
||||
exit(EXIT_FAILURE); // XXX how about abort? mbed_assert uses exit, so follow suit
|
||||
|
@ -605,7 +605,7 @@ void lwip_mbed_assert_fail(const char *msg, const char *func, const char *file,
|
|||
\param[in] line Line number in file with error
|
||||
\param[in] file Filename with error
|
||||
*/
|
||||
void assert_printf(char *msg, int line, char *file) {
|
||||
MBED_NORETURN void assert_printf(char *msg, int line, char *file) {
|
||||
if (msg)
|
||||
error("%s:%d in file %s\n", msg, line, file);
|
||||
else
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "platform/mbed_critical.h"
|
||||
#include "platform/mbed_error.h"
|
||||
|
||||
void mbed_assert_internal(const char *expr, const char *file, int line)
|
||||
MBED_NORETURN void mbed_assert_internal(const char *expr, const char *file, int line)
|
||||
{
|
||||
core_util_critical_section_enter();
|
||||
mbed_error(MBED_ERROR_ASSERTION_FAILED, expr, 0, file, line);
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#define MBED_ASSERT_H
|
||||
|
||||
#include "mbed_preprocessor.h"
|
||||
#include "mbed_toolchain.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -37,7 +38,7 @@ extern "C" {
|
|||
* @param file File where assertation failed.
|
||||
* @param line Failing assertation line number.
|
||||
*/
|
||||
void mbed_assert_internal(const char *expr, const char *file, int line);
|
||||
MBED_NORETURN void mbed_assert_internal(const char *expr, const char *file, int line);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "platform/mbed_retarget.h"
|
||||
#include "platform/mbed_critical.h"
|
||||
|
||||
WEAK void mbed_die(void)
|
||||
WEAK MBED_NORETURN void mbed_die(void)
|
||||
{
|
||||
#if !defined (NRF51_H) && !defined(TARGET_EFM32)
|
||||
core_util_critical_section_enter();
|
||||
|
|
|
@ -45,7 +45,7 @@ static mbed_error_hook_t error_hook = NULL;
|
|||
static mbed_error_status_t handle_error(mbed_error_status_t error_status, unsigned int error_value, const char *filename, int line_number, void *caller);
|
||||
|
||||
//Helper function to halt the system
|
||||
static void mbed_halt_system(void)
|
||||
static MBED_NORETURN void mbed_halt_system(void)
|
||||
{
|
||||
// Prevent recursion if halt is called again during halt attempt - try
|
||||
// something simple instead.
|
||||
|
@ -66,7 +66,7 @@ static void mbed_halt_system(void)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
WEAK void error(const char *format, ...)
|
||||
WEAK MBED_NORETURN void error(const char *format, ...)
|
||||
{
|
||||
// Prevent recursion if error is called again during store+print attempt
|
||||
if (!core_util_atomic_flag_test_and_set(&error_in_progress)) {
|
||||
|
@ -169,14 +169,14 @@ int mbed_get_error_count(void)
|
|||
return error_count;
|
||||
}
|
||||
|
||||
//Sets a fatal error
|
||||
//Sets a non-fatal error
|
||||
mbed_error_status_t mbed_warning(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number)
|
||||
{
|
||||
return handle_error(error_status, error_value, filename, line_number, MBED_CALLER_ADDR());
|
||||
}
|
||||
|
||||
//Sets a fatal error, this function is marked WEAK to be able to override this for some tests
|
||||
WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number)
|
||||
WEAK MBED_NORETURN mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number)
|
||||
{
|
||||
// Prevent recursion if error is called again during store+print attempt
|
||||
if (!core_util_atomic_flag_test_and_set(&error_in_progress)) {
|
||||
|
@ -188,8 +188,6 @@ WEAK mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char
|
|||
}
|
||||
|
||||
mbed_halt_system();
|
||||
|
||||
return MBED_ERROR_FAILED_OPERATION;
|
||||
}
|
||||
|
||||
//Register an application defined callback with error handling
|
||||
|
|
|
@ -169,8 +169,7 @@ typedef int mbed_error_status_t;
|
|||
* @param error_status mbed_error_status_t status to be set(See mbed_error_status_t enum above for available error status values).
|
||||
* @param error_msg The error message to be printed out to STDIO/Serial.
|
||||
* @param error_value Value associated with the error status. This would depend on error code/error scenario. Only available with MBED_ERROR1
|
||||
* @return 0 or MBED_SUCCESS.
|
||||
* MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes
|
||||
* @return Does not return
|
||||
*
|
||||
* @code
|
||||
*
|
||||
|
@ -872,7 +871,7 @@ typedef struct _mbed_error_ctx {
|
|||
*
|
||||
*/
|
||||
|
||||
void error(const char *format, ...);
|
||||
MBED_NORETURN void error(const char *format, ...);
|
||||
|
||||
/**
|
||||
* Call this Macro to generate a mbed_error_status_t value for a System error
|
||||
|
@ -979,8 +978,7 @@ int mbed_get_error_count(void);
|
|||
* @param error_value Value associated with the error status. This would depend on error code/error scenario.
|
||||
* @param filename Name of the source file originating the error( Most callers can pass __FILE__ here ).
|
||||
* @param line_number The line number of the source file originating the error( Most callers can pass __LINE__ here ) .
|
||||
* @return 0 or MBED_SUCCESS.
|
||||
* MBED_ERROR_INVALID_ARGUMENT if called with invalid error status/codes
|
||||
* @return Does not return.
|
||||
*
|
||||
* @code
|
||||
*
|
||||
|
@ -990,7 +988,7 @@ int mbed_get_error_count(void);
|
|||
*
|
||||
* @note See MBED_WARNING/MBED_ERROR macros which provides a wrapper on this API
|
||||
*/
|
||||
mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number);
|
||||
MBED_NORETURN mbed_error_status_t mbed_error(mbed_error_status_t error_status, const char *error_msg, unsigned int error_value, const char *filename, int line_number);
|
||||
|
||||
/**
|
||||
* Registers an application defined error callback with the error handling system.
|
||||
|
|
|
@ -121,7 +121,7 @@ void mbed_mac_address(char *mac);
|
|||
|
||||
/** Cause the mbed to flash the BLOD (Blue LEDs Of Death) sequence
|
||||
*/
|
||||
void mbed_die(void);
|
||||
MBED_NORETURN void mbed_die(void);
|
||||
|
||||
/** Print out an error message. This is typically called when
|
||||
* handling a crash.
|
||||
|
|
Loading…
Reference in New Issue