aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Fischofer <bill.fischofer@linaro.org>2015-09-03 13:59:22 -0500
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-09-03 22:57:06 +0300
commit3afd410eaa2e55f47b42508ac0b86390a7b4c711 (patch)
treeaa62d50e24e1cd44f20afabb2de70cdf95127e3c
parentf1bb82d7e74f5f2f6f7973bade0649b000e69d99 (diff)
linux-generic: general: add odp_forward_typedefs to resolve clang issuev1.3.0.0
With the addition of ordered queues, there is a circular typedef relationship between odp_queue_internal.h and odp_buffer_internal.h. The standard forward declaration technique that GCC accepts is strictly not acceptable to C99 and is flagged by clang. The solution is to create a common header file that can contain these forward declarations. Signed-off-by: Bill Fischofer <bill.fischofer@linaro.org> Reviewed-by: Mike Holmes <mike.holmes@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-generic/Makefile.am1
-rw-r--r--platform/linux-generic/include/odp_buffer_internal.h11
-rw-r--r--platform/linux-generic/include/odp_forward_typedefs_internal.h32
-rw-r--r--platform/linux-generic/include/odp_queue_internal.h5
4 files changed, 39 insertions, 10 deletions
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index f2c081a18..4c7973087 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -122,6 +122,7 @@ noinst_HEADERS = \
${srcdir}/include/odp_classification_internal.h \
${srcdir}/include/odp_crypto_internal.h \
${srcdir}/include/odp_debug_internal.h \
+ ${srcdir}/include/odp_forward_typedefs_internal.h \
${srcdir}/include/odp_internal.h \
${srcdir}/include/odp_packet_internal.h \
${srcdir}/include/odp_packet_io_internal.h \
diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h
index 6badebabf..4cacca10b 100644
--- a/platform/linux-generic/include/odp_buffer_internal.h
+++ b/platform/linux-generic/include/odp_buffer_internal.h
@@ -29,7 +29,7 @@ extern "C" {
#include <odp/byteorder.h>
#include <odp/thread.h>
#include <odp/event.h>
-
+#include <odp_forward_typedefs_internal.h>
#define ODP_BITSIZE(x) \
((x) <= 2 ? 1 : \
@@ -101,13 +101,8 @@ typedef union odp_buffer_bits_t {
};
} odp_buffer_bits_t;
-/* forward declaration */
-struct odp_buffer_hdr_t;
-union queue_entry_u;
-typedef union queue_entry_u queue_entry_t;
-
/* Common buffer header */
-typedef struct odp_buffer_hdr_t {
+struct odp_buffer_hdr_t {
struct odp_buffer_hdr_t *next; /* next buf in a list--keep 1st */
union { /* Multi-use secondary link */
struct odp_buffer_hdr_t *prev;
@@ -144,7 +139,7 @@ typedef struct odp_buffer_hdr_t {
queue_entry_t *target_qe; /* ordered queue target */
uint64_t sync; /* for ordered synchronization */
};
-} odp_buffer_hdr_t;
+};
/** @internal Compile time assert that the
* allocator field can handle any allocator id*/
diff --git a/platform/linux-generic/include/odp_forward_typedefs_internal.h b/platform/linux-generic/include/odp_forward_typedefs_internal.h
new file mode 100644
index 000000000..f8832f777
--- /dev/null
+++ b/platform/linux-generic/include/odp_forward_typedefs_internal.h
@@ -0,0 +1,32 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP forward typedefs - implementation internal
+ *
+ * This needs to be a separate file because it is needed by both
+ * odp_queue_internal.h and odp_buffer_internal.h and clang prohibits forward
+ * "redefining" typedefs. Note that this file can be extended with additional
+ * forward typedefs as needed.
+ */
+
+#ifndef ODP_FORWARD_TYPEDEFS_INTERNAL_H_
+#define ODP_FORWARD_TYPEDEFS_INTERNAL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct odp_buffer_hdr_t odp_buffer_hdr_t;
+typedef union queue_entry_u queue_entry_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp_queue_internal.h b/platform/linux-generic/include/odp_queue_internal.h
index 0f30965c1..19a0f0731 100644
--- a/platform/linux-generic/include/odp_queue_internal.h
+++ b/platform/linux-generic/include/odp_queue_internal.h
@@ -19,6 +19,7 @@ extern "C" {
#endif
#include <odp/queue.h>
+#include <odp_forward_typedefs_internal.h>
#include <odp_buffer_internal.h>
#include <odp_align_internal.h>
#include <odp/packet_io.h>
@@ -86,10 +87,10 @@ struct queue_entry_s {
odp_atomic_u64_t sync_out;
};
-typedef union queue_entry_u {
+union queue_entry_u {
struct queue_entry_s s;
uint8_t pad[ODP_CACHE_LINE_SIZE_ROUNDUP(sizeof(struct queue_entry_s))];
-} queue_entry_t;
+};
queue_entry_t *get_qentry(uint32_t queue_id);