On 27/06/2017 10:46, Tim Deegan wrote:
At 10:33 +0100 on 27 Jun (1498559600), Julien Grall wrote:
The current implementation of {G,M}FN_INVALID cannot be used to
initialize global variable because the initializer element is not a
constant.
Due to a bug in GCC 4.9 and older ([1]), it is not easy to find a common
value to initialize a variable and directly passed as an argument.
Introduce 2 news define {G,M}FN_INVALID_INITIALIZER to be used for
initializing a variable.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64856
Signed-off-by: Julien Grall <julien.gr...@arm.com>
Acked-by: Tim Deegan <t...@xen.org> (and Ack for the revert too)
but please choose either { ~0UL } or {~0UL} and use it for both.
Whoops. Sorry for that. I will stick to {~0UL} unless someone prefer the
{ ~0UL }.
Cheers,
---
Build tested it with:
* ARM: GCC 4.9.4, 5.1, 4.3, 6.1.1, 7.1.0
* x86: Clang 3.5.0, 3.6.0, 3.6.2, 3.8.0, 3.9.0, 4.0.0
With introducing a dummy global variable common/mm.c:
mfn_t foo = INVALID_MFN_INITIALIZER
---
xen/include/xen/mm.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 0050fba498..251db4ffa1 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -57,6 +57,11 @@
TYPE_SAFE(unsigned long, mfn);
#define PRI_mfn "05lx"
#define INVALID_MFN _mfn(~0UL)
+/*
+ * To be used for global variable initialization. This workaround a bug
+ * in GCC < 5.0.
+ */
+#define INVALID_MFN_INITIALIZER {~0UL}
#ifndef mfn_t
#define mfn_t /* Grep fodder: mfn_t, _mfn() and mfn_x() are defined above */
@@ -90,6 +95,11 @@ static inline bool_t mfn_eq(mfn_t x, mfn_t y)
TYPE_SAFE(unsigned long, gfn);
#define PRI_gfn "05lx"
#define INVALID_GFN _gfn(~0UL)
+/*
+ * To be used for global variable initialization. This workaround a bug
+ * in GCC < 5.0 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64856
+ */
+#define INVALID_GFN_INITIALIZER { ~0UL }
#ifndef gfn_t
#define gfn_t /* Grep fodder: gfn_t, _gfn() and gfn_x() are defined above */
--
2.11.0
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel