diff --git a/Kconfig.zephyr b/Kconfig.zephyr index 49530f48502..e48c77f315f 100644 --- a/Kconfig.zephyr +++ b/Kconfig.zephyr @@ -257,6 +257,28 @@ config COMPILER_OPT endmenu +choice + prompt "Error checking behavior for CHECK macro" + default RUNTIME_ERROR_CHECKS + +config ASSERT_ON_ERRORS + bool "Assert on all errors" + help + Assert on errors covered with the CHECK macro. + +config NO_RUNTIME_CHECKS + bool "No runtime error checks" + help + Do not do any runtime checks or asserts when using the CHECK macro. + +config RUNTIME_ERROR_CHECKS + bool "Enable runtime error checks" + help + Always perform runtime checks covered with the CHECK macro. This + option is the default and the only option used during testing. + +endchoice + menu "Build Options" config KERNEL_BIN_NAME diff --git a/arch/Kconfig b/arch/Kconfig index 1d087f9c584..049053ba3bc 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -172,6 +172,7 @@ config HW_STACK_PROTECTION config USERSPACE bool "User mode threads" depends on ARCH_HAS_USERSPACE + depends on RUNTIME_ERROR_CHECKS help When enabled, threads may be created or dropped down to user mode, which has significantly restricted permissions and must interact diff --git a/include/sys/check.h b/include/sys/check.h new file mode 100644 index 00000000000..d0aa6a28dc2 --- /dev/null +++ b/include/sys/check.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2019 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + + +#ifndef ZEPHYR_INCLUDE_SYS_CHECK_H_ +#define ZEPHYR_INCLUDE_SYS_CHECK_H_ + +#include + +#if defined(CONFIG_ASSERT_ON_ERRORS) +#define CHECKIF(expr) \ + __ASSERT_NO_MSG(!(expr)); \ + if (0) +#elif defined(CONFIG_NO_RUNTIME_CHECKS) +#define CHECKIF(...) \ + if (0) +#else +#define CHECKIF(expr) \ + if (expr) +#endif + + +#endif /* ZEPHYR_INCLUDE_SYS_CHECK_H_ */