mirror of
https://github.com/CovidBraceletPrj/CovidBracelet.git
synced 2025-01-09 20:54:26 +01:00
211 lines
7.0 KiB
C
211 lines
7.0 KiB
C
/*
|
|
* Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
/*!
|
|
@addtogroup cc_pal_compiler
|
|
@{
|
|
*/
|
|
|
|
/*!
|
|
@file
|
|
@brief This file contains CryptoCell PAL platform-dependent compiler-related
|
|
definitions.
|
|
*/
|
|
|
|
|
|
#ifndef __CC_PAL_COMPILER_H__
|
|
#define __CC_PAL_COMPILER_H__
|
|
|
|
#ifdef __GNUC__
|
|
|
|
/* *********************** Defines ******************************/
|
|
|
|
/*! Associate a symbol with a link section. */
|
|
#define CC_PAL_COMPILER_SECTION(sectionName) __attribute__((section(sectionName)))
|
|
|
|
/*! Mark symbol as used, that is, prevent the garbage collector from
|
|
dropping it. */
|
|
#define CC_PAL_COMPILER_KEEP_SYMBOL __attribute__((used))
|
|
|
|
/*! Align a given data item in bytes. */
|
|
#define CC_PAL_COMPILER_ALIGN(alignement) __attribute__((aligned(alignement)))
|
|
|
|
/*! Mark a function that never returns. */
|
|
#define CC_PAL_COMPILER_FUNC_NEVER_RETURNS __attribute__((noreturn))
|
|
|
|
/*! Prevent a function from being inlined. */
|
|
#define CC_PAL_COMPILER_FUNC_DONT_INLINE __attribute__((noinline))
|
|
|
|
/*! Given data type might serve as an alias for another data-type pointer. */
|
|
/* (this is used for "superclass" struct casting) */
|
|
#define CC_PAL_COMPILER_TYPE_MAY_ALIAS __attribute__((__may_alias__))
|
|
|
|
/*! Get the size of a structure-type member. */
|
|
#define CC_PAL_COMPILER_SIZEOF_STRUCT_MEMBER(type_name, member_name) \
|
|
sizeof(((type_name *)0)->member_name)
|
|
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT_(a, b) a##b
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT(a, b) CC_ASSERT_CONCAT_(a, b)
|
|
/*! Definition of assertion. */
|
|
#define CC_PAL_COMPILER_ASSERT(cond, message) \
|
|
enum { CC_ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(cond)) }
|
|
|
|
#elif defined(__ARM_DSM__)
|
|
#define inline
|
|
|
|
/*! Associate a symbol with a link section. */
|
|
#define CC_PAL_COMPILER_SECTION(sectionName) __attribute__((section(sectionName)))
|
|
|
|
/*! Mark a symbol as used, that is, prevent garbage collector from
|
|
dropping it. */
|
|
#define CC_PAL_COMPILER_KEEP_SYMBOL __attribute__((used))
|
|
|
|
/*! Align a given data item in bytes. */
|
|
#define CC_PAL_COMPILER_ALIGN(alignement) __attribute__((aligned(alignement)))
|
|
|
|
/*! Mark a function that never returns. */
|
|
#define CC_PAL_COMPILER_FUNC_NEVER_RETURNS __attribute__((noreturn))
|
|
|
|
/*! Prevent a function from being inlined. */
|
|
#define CC_PAL_COMPILER_FUNC_DONT_INLINE __attribute__((noinline))
|
|
|
|
/*! Given data type might serve as an alias for another data-type pointer. */
|
|
/* (this is used for "superclass" struct casting) */
|
|
#define CC_PAL_COMPILER_TYPE_MAY_ALIAS __attribute__((__may_alias__))
|
|
|
|
/*! Get the size of a structure-type member. */
|
|
#define CC_PAL_COMPILER_SIZEOF_STRUCT_MEMBER(type_name, member_name) \
|
|
sizeof(((type_name *)0)->member_name)
|
|
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT_(a, b) a##b
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT(a, b) CC_ASSERT_CONCAT_(a, b)
|
|
/*! Definition of assertion. */
|
|
#define CC_PAL_COMPILER_ASSERT(cond, message) \
|
|
enum { CC_ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(cond)) }
|
|
|
|
|
|
#elif defined(__ARM_DS__)
|
|
#define inline
|
|
|
|
/*! Associate a symbol with a link section. */
|
|
#define CC_PAL_COMPILER_SECTION(sectionName) __attribute__((section(sectionName)))
|
|
|
|
/*! Mark a symbol as used, that is, prevent garbage collector from
|
|
dropping it. */
|
|
#define CC_PAL_COMPILER_KEEP_SYMBOL __attribute__((used))
|
|
|
|
/*! Align a given data item in bytes. */
|
|
#define CC_PAL_COMPILER_ALIGN(alignement) __attribute__((aligned(alignement)))
|
|
|
|
/*! Mark a function that never returns. */
|
|
#define CC_PAL_COMPILER_FUNC_NEVER_RETURNS __attribute__((noreturn))
|
|
|
|
/*! Prevent a function from being inlined. */
|
|
#define CC_PAL_COMPILER_FUNC_DONT_INLINE __attribute__((noinline))
|
|
|
|
/*! Given data type might serve as an alias for another data-type pointer. */
|
|
/* (this is used for "superclass" struct casting) */
|
|
#define CC_PAL_COMPILER_TYPE_MAY_ALIAS
|
|
|
|
/*! Get the size of a structure-type member. */
|
|
#define CC_PAL_COMPILER_SIZEOF_STRUCT_MEMBER(type_name, member_name) \
|
|
sizeof(((type_name *)0)->member_name)
|
|
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT_(a, b) a##b
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT(a, b) CC_ASSERT_CONCAT_(a, b)
|
|
/*! Definition of assertion. */
|
|
#define CC_PAL_COMPILER_ASSERT(cond, message) \
|
|
enum { CC_ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(cond)) }
|
|
|
|
|
|
#elif defined(__ARM_DS5__)
|
|
#define inline __inline
|
|
|
|
|
|
/*! Associate a symbol with a link section. */
|
|
#define CC_PAL_COMPILER_SECTION(sectionName) __attribute__((section(sectionName)))
|
|
|
|
/*! Mark a symbol as used, that is, prevent garbage collector from
|
|
dropping it. */
|
|
#define CC_PAL_COMPILER_KEEP_SYMBOL __attribute__((used))
|
|
|
|
/*! Align a given data item in bytes. */
|
|
#define CC_PAL_COMPILER_ALIGN(alignement) __attribute__((aligned(alignement)))
|
|
|
|
/*! Mark a function that never returns. */
|
|
#define CC_PAL_COMPILER_FUNC_NEVER_RETURNS __attribute__((noreturn))
|
|
|
|
/*! Prevent a function from being inlined. */
|
|
#define CC_PAL_COMPILER_FUNC_DONT_INLINE __attribute__((noinline))
|
|
|
|
/*! Given data type might serve as an alias for another data-type pointer. */
|
|
/* (this is used for "superclass" struct casting) */
|
|
#define CC_PAL_COMPILER_TYPE_MAY_ALIAS
|
|
|
|
/*! Get the size of a structure-type member. */
|
|
#define CC_PAL_COMPILER_SIZEOF_STRUCT_MEMBER(type_name, member_name) \
|
|
sizeof(((type_name *)0)->member_name)
|
|
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT_(a, b) a##b
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT(a, b) CC_ASSERT_CONCAT_(a, b)
|
|
/*! Definition of assertion. */
|
|
#define CC_PAL_COMPILER_ASSERT(cond, message) \
|
|
enum { CC_ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(cond)) }
|
|
|
|
#elif defined(__ICCARM__)
|
|
#define inline __inline
|
|
|
|
|
|
/*! Associate a symbol with a link section. */
|
|
#define CC_PAL_COMPILER_SECTION(sectionName) __attribute__((section(sectionName)))
|
|
|
|
/*! Mark a symbol as used, that is, prevent garbage collector from
|
|
dropping it. */
|
|
#define CC_PAL_COMPILER_KEEP_SYMBOL __attribute__((used))
|
|
|
|
/*! Align a given data item in bytes. */
|
|
#define CC_PAL_COMPILER_ALIGN(alignement) __attribute__((aligned(alignement)))
|
|
|
|
/*! Mark a function that never returns. */
|
|
#define CC_PAL_COMPILER_FUNC_NEVER_RETURNS __attribute__((noreturn))
|
|
|
|
/*! Prevent a function from being inlined. */
|
|
#define CC_PAL_COMPILER_FUNC_DONT_INLINE __attribute__((noinline))
|
|
|
|
/*! Given data type might serve as an alias for another data-type pointer. */
|
|
/* (this is used for "superclass" struct casting) */
|
|
#define CC_PAL_COMPILER_TYPE_MAY_ALIAS
|
|
|
|
/*! Get the size of a structure-type member. */
|
|
#define CC_PAL_COMPILER_SIZEOF_STRUCT_MEMBER(type_name, member_name) \
|
|
sizeof(((type_name *)0)->member_name)
|
|
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT_(a, b) a##b
|
|
/*! Definition of assertion. */
|
|
#define CC_ASSERT_CONCAT(a, b) CC_ASSERT_CONCAT_(a, b)
|
|
/*! Definition of assertion. */
|
|
#define CC_PAL_COMPILER_ASSERT(cond, message) \
|
|
enum { CC_ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(cond)) }
|
|
|
|
#else
|
|
#error Unsupported compiler.
|
|
#endif
|
|
|
|
/*!
|
|
@}
|
|
*/
|
|
|
|
#endif /*__CC_PAL_COMPILER_H__*/
|