dnsd: fix unaligned access problem
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 26 Apr 2010 12:25:33 +0000 (14:25 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 26 Apr 2010 12:25:33 +0000 (14:25 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/dnsd.c

index c76a54f9e53fd7d79dc879e2e0cc01b5b8693c3e..1a99040ac203c999f82efa4531b99038fb79919a 100644 (file)
@@ -44,10 +44,15 @@ struct dns_head {
        uint16_t nauth;
        uint16_t nadd;
 };
+/* Structure used to access type and class fields.
+ * They are totally unaligned, but gcc 4.3.4 thinks that pointer of type uint16_t*
+ * is 16-bit aligned and replaces 16-bit memcpy (in move_from_unaligned16 macro)
+ * with aligned halfword access on arm920t!
+ * Oh well. Slapping PACKED everywhere seems to help: */
 struct type_and_class {
-       uint16_t type;
-       uint16_t class;
-};
+       uint16_t type PACKED;
+       uint16_t class PACKED;
+} PACKED;
 /* element of known name, ip address and reversed ip address */
 struct dns_entry {
        struct dns_entry *next;