1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
Author: grothoff
Date: 2012-07-30 09:26:05 +0200 (Mon, 30 Jul 2012)
New Revision: 22960
Modified:
gnunet/src/include/gnunet_common.h
Log:
fix for gcc alginment issue on sparc reported to Debian as #670578
Modified: gnunet/src/include/gnunet_common.h
===================================================================
--- a/src/include/gnunet_common.h
+++ b/src/include/gnunet_common.h
@@ -170,9 +170,13 @@
*/
#define GNUNET_NORETURN __attribute__((noreturn))
+#if MINGW
#if __GNUC__ > 3
/**
- * gcc 4.x-ism to pack structures even on W32 (to be used before structs)
+ * gcc 4.x-ism to pack structures even on W32 (to be used before structs);
+ * Using this would cause structs to be unaligned on the stack on Sparc,
+ * so we *only* use this on W32 (see #670578 from Debian); fortunately,
+ * W32 doesn't run on sparc anyway.
*/
#define GNUNET_NETWORK_STRUCT_BEGIN \
_Pragma("pack(push)") \
@@ -180,19 +184,23 @@
/**
* gcc 4.x-ism to pack structures even on W32 (to be used after structs)
+ * Using this would cause structs to be unaligned on the stack on Sparc,
+ * so we *only* use this on W32 (see #670578 from Debian); fortunately,
+ * W32 doesn't run on sparc anyway.
*/
#define GNUNET_NETWORK_STRUCT_END _Pragma("pack(pop)")
+
#else
-#ifdef MINGW
#error gcc 4.x or higher required on W32 systems
#endif
+#else
/**
- * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ * Define as empty, GNUNET_PACKED should suffice, but this won't work on W32
*/
#define GNUNET_NETWORK_STRUCT_BEGIN
/**
- * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ * Define as empty, GNUNET_PACKED should suffice, but this won't work on W32;
*/
#define GNUNET_NETWORK_STRUCT_END
#endif
|