|
From: openocd-gerrit <ope...@us...> - 2023-03-18 21:58:03
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via e8f376e3c1874ccd14e148164d9695a93c575def (commit)
from 904d58c208ab03f09f8d8e7184d49f42f6e16533 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit e8f376e3c1874ccd14e148164d9695a93c575def
Author: Antonio Borneo <bor...@gm...>
Date: Sat Mar 4 23:56:35 2023 +0100
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 <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7519
Tested-by: jenkins
Reviewed-by: Tomas Vanek <va...@fb...>
diff --git a/src/helper/Makefile.am b/src/helper/Makefile.am
index e9c05cfc5..e0fa331ea 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 000000000..8f6c09950
--- /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 125164e4e..14bd9b028 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);
-----------------------------------------------------------------------
Summary of changes:
src/helper/Makefile.am | 3 ++-
src/helper/compiler.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
src/helper/nvp.h | 6 ++++--
3 files changed, 50 insertions(+), 3 deletions(-)
create mode 100644 src/helper/compiler.h
hooks/post-receive
--
Main OpenOCD repository
|