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"