diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2023-03-04 23:56:35 +0100 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2023-03-18 21:57:27 +0000 |
commit | e8f376e3c1874ccd14e148164d9695a93c575def (patch) | |
tree | 9fdfba47a1719d66e8535d5361670a5d659d8300 /src | |
parent | 904d58c208ab03f09f8d8e7184d49f42f6e16533 (diff) | |
download | riscv-openocd-e8f376e3c1874ccd14e148164d9695a93c575def.zip riscv-openocd-e8f376e3c1874ccd14e148164d9695a93c575def.tar.gz riscv-openocd-e8f376e3c1874ccd14e148164d9695a93c575def.tar.bz2 |
helper: add compiler.h to handle compiler specific workarounds
Not all compilers nor compiler versions supports the attributes
used in OpenOCD code.
Collect in a single file the workaround to handle them.
Change-Id: I92d871337281169134ce8e40b2064591518be71f
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7519
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src')
-rw-r--r-- | src/helper/Makefile.am | 3 | ||||
-rw-r--r-- | src/helper/compiler.h | 44 | ||||
-rw-r--r-- | src/helper/nvp.h | 6 |
3 files changed, 50 insertions, 3 deletions
diff --git a/src/helper/Makefile.am b/src/helper/Makefile.am index e9c05cf..e0fa331 100644 --- a/src/helper/Makefile.am +++ b/src/helper/Makefile.am @@ -34,7 +34,8 @@ noinst_LTLIBRARIES += %D%/libhelper.la %D%/jep106.h \ %D%/jep106.inc \ %D%/jim-nvp.h \ - %D%/nvp.h + %D%/nvp.h \ + %D%/compiler.h STARTUP_TCL_SRCS += %D%/startup.tcl EXTRA_DIST += \ diff --git a/src/helper/compiler.h b/src/helper/compiler.h new file mode 100644 index 0000000..8f6c099 --- /dev/null +++ b/src/helper/compiler.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/* + * This file contains compiler specific workarounds to handle different + * compilers and different compiler versions. + * Inspired by Linux's include/linux/compiler_attributes.h + * and file sys/cdefs.h in libc and newlib. + */ + +#ifndef OPENOCD_HELPER_COMPILER_H +#define OPENOCD_HELPER_COMPILER_H + +/* + * __has_attribute is supported on gcc >= 5, clang >= 2.9 and icc >= 17. + */ +#ifndef __has_attribute +# define __has_attribute(x) 0 +#endif + +/* + * The __returns_nonnull function attribute marks the return type of the function + * as always being non-null. + */ +#ifndef __returns_nonnull +# if __has_attribute(__returns_nonnull__) +# define __returns_nonnull __attribute__((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* + * The __nonnull function attribute marks pointer parameters that + * must not be NULL. + */ +#ifndef __nonnull +# if __has_attribute(__nonnull__) +# define __nonnull(params) __attribute__ ((__nonnull__ params)) +# else +# define __nonnull(params) +# endif +#endif + +#endif /* OPENOCD_HELPER_COMPILER_H */ diff --git a/src/helper/nvp.h b/src/helper/nvp.h index 125164e..14bd9b0 100644 --- a/src/helper/nvp.h +++ b/src/helper/nvp.h @@ -20,6 +20,8 @@ #ifndef OPENOCD_HELPER_NVP_H #define OPENOCD_HELPER_NVP_H +#include <helper/compiler.h> + /** Name Value Pairs, aka: NVP * - Given a string - return the associated int. * - Given a number - return the associated string. @@ -65,9 +67,9 @@ struct command_invocation; /* Name Value Pairs Operations */ const struct nvp *nvp_name2value(const struct nvp *nvp_table, const char *name) - __attribute__((returns_nonnull, nonnull(1))); + __returns_nonnull __nonnull((1)); const struct nvp *nvp_value2name(const struct nvp *nvp_table, int v) - __attribute__((returns_nonnull, nonnull(1))); + __returns_nonnull __nonnull((1)); void nvp_unknown_command_print(struct command_invocation *cmd, const struct nvp *nvp, const char *param_name, const char *param_value); |