From 4bf1b5e3301cc71b8e7befd72ba3e23b6f5037cb Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Mon, 8 Jan 2018 10:28:10 +0000 Subject: More compiler portability headers. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11238 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/portability/GHS/ccportab.h | 129 +++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 os/common/portability/GHS/ccportab.h (limited to 'os/common/portability/GHS/ccportab.h') diff --git a/os/common/portability/GHS/ccportab.h b/os/common/portability/GHS/ccportab.h new file mode 100644 index 000000000..9c043bb49 --- /dev/null +++ b/os/common/portability/GHS/ccportab.h @@ -0,0 +1,129 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file GHS/ccportab.h + * @brief Compiler portability layer. + * + * @defgroup CC_PORTAB Compiler portability. + * @{ + */ + +#ifndef CCPORTAB_H +#define CCPORTAB_H + +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +/** + * @name Compiler abstraction macros + * @{ + */ +/** + * @brief Allocates a variable or function to a specific section. + * @note If the compiler does not support such a feature then this macro + * must not be defined or it could originate errors. + */ +#define CC_SECTION(s) __attribute__((section(s))) + +/** + * @brief Marks a function or variable as a weak symbol. + * @note If the compiler does not support such a feature then this macro + * must not be defined or it could originate errors. + */ +#define CC_WEAK __attribute__((weak)) + +/** + * @brief Marks a function or variable as used. + * @details The compiler or linker shall not remove the marked function or + * variable regardless if it is referred or not in the code. + * @note If the compiler does not support such a feature then this macro + * must not be defined or it could originate errors. + */ +#define CC_USED __attribute__((used)) + +/** + * @brief Enforces alignment of the variable or function declared afterward. + * @note If the compiler does not support such a feature then this macro + * must not be defined or it could originate errors. + */ +#define CC_ALIGN(n) __attribute__((aligned(n))) + +/** + * @brief Enforces packing of the structure declared afterward. + * @note If the compiler does not support such a feature then this macro + * must not be defined or it could originate errors. + */ +#define CC_PACK __attribute__((packed)) + +/** + * @brief Marks a function as not inlineable. + * @note Can be implemented as an empty macro if not supported by the + * compiler. + */ +#define CC_NO_INLINE __noinline + +/** + * @brief Enforces a function inline. + * @note Can be implemented as an empty macro if not supported by the + * compiler. + */ +#define CC_FORCE_INLINE + +/** + * @brief Marks a function as non-returning. + * @note Can be implemented as an empty macro if not supported by the + * compiler. + */ +#define CC_NO_RETURN __attribute__((noreturn)) +/** @} */ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ + +#endif /* CCPORTAB_H */ + +/** @} */ -- cgit v1.2.3