qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] softfloat breaks cocoa.m


From: Andreas Färber
Subject: [Qemu-devel] softfloat breaks cocoa.m
Date: Sun, 28 Aug 2011 14:09:40 +0200

Hello,

The unresolved softfloat uint* conversion business bites us again: This time, the previously working Cocoa frontend stopped compiling:

In file included from /Users/andreas/QEMU/qemu/bswap.h:14,
                 from /Users/andreas/QEMU/qemu/qemu-common.h:103,
                 from /Users/andreas/QEMU/qemu/ui/cocoa.m:28:
/Users/andreas/QEMU/qemu/fpu/softfloat.h:60: error: conflicting types for ‘uint16’ /System/Library/Frameworks/Security.framework/Headers/cssmconfig.h:68: error: previous declaration of ‘uint16’ was here
make: *** [ui/cocoa.o] Error 1

Since commit cbbab9226da9572346837466a8770c117e7e65a2 (move unaligned memory access functions to bswap.h) softfloat.h is being #included in bswap.h, which gets pulled into cocoa.m through qemu-common.h. I thought Alex had set up a Darwin buildbot to catch such breakages...

Any thoughts on how to proceed? My previous approach for Haiku, to replace non-standard uint16 with POSIX uint_fast16_t etc., was rejected to avoid system-dependent widths. I'd really like to get rid of the annoyingly conflicting naming though (int vs. long for 32, int vs. short for 16, ...).

A fragile and ugly workaround is to suppress all softfloat usage within bswap.h (below).

Andreas


diff --git a/bswap.h b/bswap.h
index f41bebe..ddef453 100644
--- a/bswap.h
+++ b/bswap.h
@@ -11,7 +11,9 @@
 #include <machine/bswap.h>
 #else

+#ifndef NO_SOFTFLOAT_H
 #include "softfloat.h"
+#endif

 #ifdef CONFIG_BYTESWAP_H
 #include <byteswap.h>
@@ -239,6 +241,7 @@ static inline uint32_t qemu_bswap_len(uint32_t value, int len)
     return bswap32(value) >> (32 - 8 * len);
 }

+#ifndef NO_SOFTFLOAT_H
 typedef union {
     float32 f;
     uint32_t l;
@@ -294,6 +297,7 @@ typedef union {
     } ll;
 #endif
 } CPU_QuadU;
+#endif

 /* unaligned/endian-independent pointer access */

@@ -423,6 +427,7 @@ static inline void stq_le_p(void *ptr, uint64_t v)
     stl_le_p(p + 4, v >> 32);
 }

+#ifndef NO_SOFTFLOAT_H
 /* float access */

 static inline float32 ldfl_le_p(const void *ptr)
@@ -461,6 +466,8 @@ static inline void stfq_le_p(void *ptr, float64 v)
     stl_le_p(ptr + 4, u.l.upper);
 }

+#endif
+
 #else

 static inline int lduw_le_p(const void *ptr)
@@ -498,6 +505,7 @@ static inline void stq_le_p(void *ptr, uint64_t v)
     *(uint64_t *)ptr = v;
 }

+#ifndef NO_SOFTFLOAT_H
 /* float access */

 static inline float32 ldfl_le_p(const void *ptr)
@@ -520,6 +528,7 @@ static inline void stfq_le_p(void *ptr, float64 v)
     *(float64 *)ptr = v;
 }
 #endif
+#endif

 #if !defined(HOST_WORDS_BIGENDIAN) || defined(WORDS_ALIGNED)

@@ -612,6 +621,7 @@ static inline void stq_be_p(void *ptr, uint64_t v)
     stl_be_p((uint8_t *)ptr + 4, v);
 }

+#ifndef NO_SOFTFLOAT_H
 /* float access */

 static inline float32 ldfl_be_p(const void *ptr)
@@ -650,6 +660,8 @@ static inline void stfq_be_p(void *ptr, float64 v)
     stl_be_p((uint8_t *)ptr + 4, u.l.lower);
 }

+#endif
+
 #else

 static inline int lduw_be_p(const void *ptr)
@@ -687,6 +699,7 @@ static inline void stq_be_p(void *ptr, uint64_t v)
     *(uint64_t *)ptr = v;
 }

+#ifndef NO_SOFTFLOAT_H
 /* float access */

 static inline float32 ldfl_be_p(const void *ptr)
@@ -711,4 +724,6 @@ static inline void stfq_be_p(void *ptr, float64 v)

 #endif

+#endif
+
 #endif /* BSWAP_H */
diff --git a/ui/cocoa.m b/ui/cocoa.m
index d9e4e3d..4bd0346 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -25,6 +25,7 @@
 #import <Cocoa/Cocoa.h>
 #include <crt_externs.h>

+#define NO_SOFTFLOAT_H
 #include "qemu-common.h"
 #include "console.h"
 #include "sysemu.h"




reply via email to

[Prev in Thread] Current Thread [Next in Thread]