aboutsummaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2017-10-31 14:56:42 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2017-10-31 14:56:42 +0000
commitcbd8fd3f9675164ce3e95c09ac0f94df313644a1 (patch)
tree1f0629315a941f195033e81c2a958b170b004a5e /os
parent9dfc1ba2f6095616e3225adae775aae8f02a6b68 (diff)
downloadChibiOS-cbd8fd3f9675164ce3e95c09ac0f94df313644a1.tar.gz
ChibiOS-cbd8fd3f9675164ce3e95c09ac0f94df313644a1.tar.bz2
ChibiOS-cbd8fd3f9675164ce3e95c09ac0f94df313644a1.zip
Added an header for compiler portability.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10924 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os')
-rw-r--r--os/common/portability/GCC/ccportab.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/os/common/portability/GCC/ccportab.h b/os/common/portability/GCC/ccportab.h
new file mode 100644
index 000000000..336bb720f
--- /dev/null
+++ b/os/common/portability/GCC/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 ARMCMx/compilers/GCC/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 __attribute__((noinline))
+
+/**
+ * @brief Marks a function as not inlineable.
+ * @note Can be implemented as an empty macro if not supported by the
+ * compiler.
+ */
+#define CC_FORCE_INLINE __attribute__((always_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 */
+
+/** @} */