--- /dev/null
+Date: Wed, 14 Sep 2011 21:10:53 +0200
+From: Julien Cristau <jcristau@debian.org>
+Subject: Re: Bug#641488: bup: FTBFS on sparc (bus error in bloom test)
+
+With the following patch, the package builds fine on smetana. This
+avoids 4-byte accesses to unaligned buffers:
+
+--- bup-0.24b.orig/lib/bup/_helpers.c
++++ bup-0.24b/lib/bup/_helpers.c
+@@ -137,59 +137,58 @@ static PyObject *firstword(PyObject *sel
+
+ #define BLOOM2_HEADERLEN 16
+
+-typedef struct {
+- uint32_t high;
+- unsigned char low;
+-} bits40_t;
+-
+-static void to_bloom_address_bitmask4(const bits40_t *buf,
++static void to_bloom_address_bitmask4(const unsigned char *buf,
+ const int nbits, uint64_t *v, unsigned char *bitmask)
+ {
+ int bit;
++ uint32_t high;
+ uint64_t raw, mask;
+
++ memcpy(&high, buf, 4);
+ mask = (1<<nbits) - 1;
+- raw = (((uint64_t)ntohl(buf->high)) << 8) | buf->low;
++ raw = (((uint64_t)ntohl(high) << 8) | buf[4]);
+ bit = (raw >> (37-nbits)) & 0x7;
+ *v = (raw >> (40-nbits)) & mask;
+ *bitmask = 1 << bit;
+ }
+
+-static void to_bloom_address_bitmask5(const uint32_t *buf,
++static void to_bloom_address_bitmask5(const unsigned char *buf,
+ const int nbits, uint32_t *v, unsigned char *bitmask)
+ {
+ int bit;
++ uint32_t high;
+ uint32_t raw, mask;
+
++ memcpy(&high, buf, 4);
+ mask = (1<<nbits) - 1;
+- raw = ntohl(*buf);
++ raw = ntohl(high);
+ bit = (raw >> (29-nbits)) & 0x7;
+ *v = (raw >> (32-nbits)) & mask;
+ *bitmask = 1 << bit;
+ }
+
+-#define BLOOM_SET_BIT(name, address, itype, otype) \
+-static void name(unsigned char *bloom, const void *buf, const int nbits)\
++#define BLOOM_SET_BIT(name, address, otype) \
++static void name(unsigned char *bloom, const unsigned char *buf, const int nbits)\
+ {\
+ unsigned char bitmask;\
+ otype v;\
+- address((itype *)buf, nbits, &v, &bitmask);\
++ address(buf, nbits, &v, &bitmask);\
+ bloom[BLOOM2_HEADERLEN+v] |= bitmask;\
+ }
+-BLOOM_SET_BIT(bloom_set_bit4, to_bloom_address_bitmask4, bits40_t, uint64_t)
+-BLOOM_SET_BIT(bloom_set_bit5, to_bloom_address_bitmask5, uint32_t, uint32_t)
++BLOOM_SET_BIT(bloom_set_bit4, to_bloom_address_bitmask4, uint64_t)
++BLOOM_SET_BIT(bloom_set_bit5, to_bloom_address_bitmask5, uint32_t)
+
+
+-#define BLOOM_GET_BIT(name, address, itype, otype) \
+-static int name(const unsigned char *bloom, const void *buf, const int nbits)\
++#define BLOOM_GET_BIT(name, address, otype) \
++static int name(const unsigned char *bloom, const unsigned char *buf, const int nbits)\
+ {\
+ unsigned char bitmask;\
+ otype v;\
+- address((itype *)buf, nbits, &v, &bitmask);\
++ address(buf, nbits, &v, &bitmask);\
+ return bloom[BLOOM2_HEADERLEN+v] & bitmask;\
+ }
+-BLOOM_GET_BIT(bloom_get_bit4, to_bloom_address_bitmask4, bits40_t, uint64_t)
+-BLOOM_GET_BIT(bloom_get_bit5, to_bloom_address_bitmask5, uint32_t, uint32_t)
++BLOOM_GET_BIT(bloom_get_bit4, to_bloom_address_bitmask4, uint64_t)
++BLOOM_GET_BIT(bloom_get_bit5, to_bloom_address_bitmask5, uint32_t)
+
+
+ static PyObject *bloom_add(PyObject *self, PyObject *args)
+