aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand Marc <beberking@gmail.com>2012-08-01 22:10:21 +0200
committerBertrand Marc <beberking@gmail.com>2012-08-01 22:10:21 +0200
commit1086271ff9c59adec8da95f948d637bc1f4a63e4 (patch)
tree86a550e70c8a91e9644b525bc0e9f8ea29ba5159
parentac634a4debd4e86b75a26f9b74375088f274174e (diff)
Fix "gcc-4.6: [sparc] compiler fails to align stack-allocated struct, with array of uint32-values to 32-bit boundary"
-rw-r--r--debian/changelog10
-rw-r--r--debian/patches/series1
-rw-r--r--debian/patches/sparc_alignment.patch55
3 files changed, 64 insertions, 2 deletions
diff --git a/debian/changelog b/debian/changelog
index 2cee909..1eea35c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,8 +7,14 @@ gnunet (0.9.3-3) unstable; urgency=low
and upgrade properly depending on the previous version (Closes: #673301).
* Rewrite gnunet-server.init based on /etc/init.d/skeleton and make
gnunet-server depend on lsb-base to use LSB logging.
-
- -- Bertrand Marc <beberking@gmail.com> Fri, 13 Jul 2012 22:13:55 +0200
+ * Fix "gcc-4.6: [sparc] compiler fails to align stack-allocated
+ struct, with array of uint32-values to 32-bit boundary":
+ new patch sparc_alignment.patch, taken from upstream:
+ https://lists.gnu.org/archive/html/gnunet-svn/2012-07/msg00548.html
+ Thanks to Jurij Smakov for the analysis.
+ (Closes: #670578)
+
+ -- Bertrand Marc <beberking@gmail.com> Wed, 01 Aug 2012 22:09:49 +0200
gnunet (0.9.3-2) unstable; urgency=low
diff --git a/debian/patches/series b/debian/patches/series
index f5b7ca3..0eecbb2 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
support_GNU_hurd.patch
+sparc_alignment.patch
diff --git a/debian/patches/sparc_alignment.patch b/debian/patches/sparc_alignment.patch
new file mode 100644
index 0000000..8707ad1
--- /dev/null
+++ b/debian/patches/sparc_alignment.patch
@@ -0,0 +1,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