Package: gtk-gnutella Version: 0.96.1svn12109-1 Severity: serious Tags: patch Justification: no longer builds from source
Build fails on ARM with STATIC_ASSERT failures. The ARM ABI padds structudes to 4-byte boundaries by default. The attached patch adds __attribute__((packed)) to inhibit this on structures that need to be a funny size. Paul -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable') Architecture: arm (armv5tejl) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-rc7 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
diff -ur gtk-gnutella-clean/src/core/gnutella.h gtk-gnutella-0.96.1svn12109/src/core/gnutella.h --- gtk-gnutella-clean/src/core/gnutella.h 2006-10-16 00:01:09.000000000 +0100 +++ gtk-gnutella-0.96.1svn12109/src/core/gnutella.h 2006-11-04 15:07:19.000000000 +0000 @@ -48,25 +48,25 @@ struct gnutella_msg_init { struct gnutella_header header; /**< GGEP data may follow */ -}; +} __attribute__((packed)); struct gnutella_init_response { guchar host_port[2]; guchar host_ip[4]; guchar files_count[4]; guchar kbytes_count[4]; -}; +} __attribute__((packed)); struct gnutella_msg_init_response { struct gnutella_header header; struct gnutella_init_response response; /**< GGEP data may follow */ -}; +} __attribute__((packed)); struct gnutella_search { guchar speed[2]; /**< query string follows */ -}; +} __attribute__((packed)); struct gnutella_search_results { guchar num_recs; @@ -76,41 +76,41 @@ /* record data follows */ /* Last 16 bytes = client_id */ -}; +} __attribute__((packed)); struct gnutella_msg_search { struct gnutella_header header; struct gnutella_search search; -}; +} __attribute__((packed)); struct gnutella_push_request { guchar guid[16]; guchar file_id[4]; guchar host_ip[4]; guchar host_port[2]; -}; +} __attribute__((packed)); struct gnutella_msg_push_request { struct gnutella_header header; struct gnutella_push_request request; /**< GGEP data may follow */ -}; +} __attribute__((packed)); struct gnutella_bye { guchar code[2]; /**< message string follows */ -}; +} __attribute__((packed)); struct gnutella_qrp_reset { guchar variant; /**< 0x00 */ guchar table_length[4]; /**< little endian */ guchar infinity; -}; +} __attribute__((packed)); struct gnutella_msg_qrp_reset { struct gnutella_header header; struct gnutella_qrp_reset data; -}; +} __attribute__((packed)); struct gnutella_qrp_patch { guchar variant; /**< 0x01 */ @@ -118,29 +118,29 @@ guchar seq_size; guchar compressor; guchar entry_bits; -}; +} __attribute__((packed)); struct gnutella_msg_qrp_patch { struct gnutella_header header; struct gnutella_qrp_patch data; -}; +} __attribute__((packed)); struct gnutella_vendor { guchar vendor[4]; /**< For example, "GTKG" */ guchar selector_id[2]; /**< Message selector ID, little endian */ guchar version[2]; /**< Message version number, little endian */ /* payload follows */ -}; +} __attribute__((packed)); struct gnutella_msg_vendor { struct gnutella_header header; struct gnutella_vendor data; -}; +} __attribute__((packed)); struct gnutella_msg_hsep_data { struct gnutella_header header; guchar triple[3 * sizeof(guint64)]; -}; +} __attribute__((packed)); #endif /* _core_gnutella_h_ */ diff -ur gtk-gnutella-clean/src/core/qhit.c gtk-gnutella-0.96.1svn12109/src/core/qhit.c --- gtk-gnutella-clean/src/core/qhit.c 2006-10-16 00:01:09.000000000 +0100 +++ gtk-gnutella-0.96.1svn12109/src/core/qhit.c 2006-11-04 16:16:38.000000000 +0000 @@ -677,7 +677,7 @@ struct { gchar ipv4[4]; gchar port[2]; - } alt; + } __attribute__((packed)) alt; STATIC_ASSERT(sizeof alt == 6); poke_be32(alt.ipv4, host_addr_ipv4(hvec[i].addr)); diff -ur gtk-gnutella-clean/src/if/core/gnutella.h gtk-gnutella-0.96.1svn12109/src/if/core/gnutella.h --- gtk-gnutella-clean/src/if/core/gnutella.h 2006-10-16 00:01:09.000000000 +0100 +++ gtk-gnutella-0.96.1svn12109/src/if/core/gnutella.h 2006-11-04 15:03:09.000000000 +0000 @@ -62,7 +62,7 @@ guchar ttl; guchar hops; guchar size[4]; -}; +} __attribute__((packed)); #define GTA_HEADER_SIZE sizeof(struct gnutella_header)