blob: 5febe9d2c23bc2839850a6f38c27261591ff2820 [file] [log] [blame]
/*
* Copyright (c) 2018-2025, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef CDEFS_H
#define CDEFS_H
#define __dead2 __attribute__((__noreturn__))
#define __deprecated __attribute__((__deprecated__))
#define __packed __attribute__((__packed__))
#define __used __attribute__((__used__))
#define __unused __attribute__((__unused__))
#define __maybe_unused __attribute__((__unused__))
#define __aligned(x) __attribute__((__aligned__(x)))
#define __section(x) __attribute__((__section__(x)))
#define __fallthrough __attribute__((__fallthrough__))
#define __noinline __attribute__((__noinline__))
#if RECLAIM_INIT_CODE
/*
* Add each function to a section that is unique so the functions can still
* be garbage collected.
*
* NOTICE: for this to work, these functions will NOT be inlined.
* TODO: the noinline attribute can be removed if RECLAIM_INIT_CODE is made
* platform agnostic and called after bl31_main(). Then, top-level functions
* (those that can't be inlined like bl31_main()) can be annotated with __init
* and noinline can be removed.
*/
#define __init __section(".text.init." __FILE__ "." __XSTRING(__LINE__)) __noinline
#else
#define __init
#endif
#define __printflike(fmtarg, firstvararg) \
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
#define __weak_reference(sym, alias) \
__asm__(".weak alias"); \
__asm__(".equ alias, sym")
#define __STRING(x) #x
#define __XSTRING(x) __STRING(x)
#define __predict_true(exp) (exp)
#define __predict_false(exp) (exp)
#endif /* CDEFS_H */