Module Name: src
Committed By: christos
Date: Wed Aug 17 10:48:02 UTC 2011
Modified Files:
src/external/bsd/tcpdump/bin: Makefile
src/external/bsd/tcpdump/dist: extract.h print-isakmp.c
Log Message:
fix strict aliasing issues.
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/external/bsd/tcpdump/bin/Makefile
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/tcpdump/dist/extract.h
cvs rdiff -u -r1.2 -r1.3 src/external/bsd/tcpdump/dist/print-isakmp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/tcpdump/bin/Makefile
diff -u src/external/bsd/tcpdump/bin/Makefile:1.6 src/external/bsd/tcpdump/bin/Makefile:1.7
--- src/external/bsd/tcpdump/bin/Makefile:1.6 Tue Jun 21 22:49:43 2011
+++ src/external/bsd/tcpdump/bin/Makefile Wed Aug 17 06:48:02 2011
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.6 2011/06/22 02:49:43 mrg Exp $
+# $NetBSD: Makefile,v 1.7 2011/08/17 10:48:02 christos Exp $
WARNS?= 1 # XXX: need to cleanup later
@@ -89,8 +89,3 @@
cp ${.ALLSRC} ${.TARGET}
.include <bsd.prog.mk>
-
-# XXX
-.if ${HAVE_GCC} == 45
-COPTS+= -fno-strict-aliasing
-.endif
Index: src/external/bsd/tcpdump/dist/extract.h
diff -u src/external/bsd/tcpdump/dist/extract.h:1.1.1.1 src/external/bsd/tcpdump/dist/extract.h:1.2
--- src/external/bsd/tcpdump/dist/extract.h:1.1.1.1 Sat Dec 4 22:15:01 2010
+++ src/external/bsd/tcpdump/dist/extract.h Wed Aug 17 06:48:02 2011
@@ -21,6 +21,97 @@
* @(#) Header: /tcpdump/master/tcpdump/extract.h,v 1.25 2006-01-30 16:20:07 hannes Exp (LBL)
*/
+#ifdef __NetBSD__
+#include <string.h>
+
+/*
+ * Do it the portable way and let the compiler optimize the code
+ */
+static inline uint16_t EXTRACT_16BITS(const void *p)
+{
+ uint16_t t;
+ memcpy(&t, p, sizeof(t));
+ return ntohs(t);
+}
+
+static inline uint32_t EXTRACT_24BITS(const void *p)
+{
+ uint8_t t[3];
+ memcpy(t, p, sizeof(t));
+ return
+ ((uint32_t)t[0] << 16) |
+ ((uint32_t)t[1] << 8) |
+ t[2];
+}
+
+static inline uint32_t EXTRACT_32BITS(const void *p)
+{
+ uint32_t t;
+ memcpy(&t, p, sizeof(t));
+ return ntohl(t);
+}
+
+static inline uint64_t EXTRACT_64BITS(const void *p)
+{
+ uint32_t t[2];
+ memcpy(&t[0], p, sizeof(t[0]));
+ memcpy(&t[1], (const uint8_t *)p + sizeof(t[0]), sizeof(t[1]));
+ return ((uint64_t)ntohl(t[0]) << 32) | ntohl(t[1]);
+}
+
+static inline uint8_t EXTRACT_LE_8BITS(const void *p)
+{
+ uint8_t t[1];
+ memcpy(t, p, sizeof(t));
+ return t[0];
+}
+
+static inline uint16_t EXTRACT_LE_16BITS(const void *p)
+{
+ uint8_t t[2];
+ memcpy(t, p, sizeof(t));
+ return
+ ((uint16_t)t[1] << 8) |
+ t[0];
+}
+
+static inline uint32_t EXTRACT_LE_24BITS(const void *p)
+{
+ uint8_t t[3];
+ memcpy(t, p, sizeof(t));
+ return
+ ((uint32_t)t[2] << 16) |
+ ((uint32_t)t[1] << 8) |
+ t[0];
+}
+
+static inline uint32_t EXTRACT_LE_32BITS(const void *p)
+{
+ uint8_t t[4];
+ memcpy(t, p, sizeof(t));
+ return
+ ((uint32_t)t[3] << 24) |
+ ((uint32_t)t[2] << 16) |
+ ((uint32_t)t[1] << 8) |
+ t[0];
+}
+
+static inline uint64_t EXTRACT_LE_64BITS(const void *p)
+{
+ uint8_t t[8];
+ memcpy(&t, p, sizeof(t));
+ return
+ ((uint64_t)t[7] << 56) |
+ ((uint64_t)t[6] << 48) |
+ ((uint64_t)t[5] << 40) |
+ ((uint64_t)t[4] << 32) |
+ ((uint64_t)t[3] << 24) |
+ ((uint64_t)t[2] << 16) |
+ ((uint64_t)t[1] << 8) |
+ t[0];
+}
+
+#else /* Fast & Loose */
/*
* Macros to extract possibly-unaligned big-endian integral values.
*/
@@ -128,3 +219,4 @@
(u_int64_t)*((const u_int8_t *)(p) + 2) << 16 | \
(u_int64_t)*((const u_int8_t *)(p) + 1) << 8 | \
(u_int64_t)*((const u_int8_t *)(p) + 0)))
+#endif /* __NetBSD__ */
Index: src/external/bsd/tcpdump/dist/print-isakmp.c
diff -u src/external/bsd/tcpdump/dist/print-isakmp.c:1.2 src/external/bsd/tcpdump/dist/print-isakmp.c:1.3
--- src/external/bsd/tcpdump/dist/print-isakmp.c:1.2 Sun Dec 5 00:11:30 2010
+++ src/external/bsd/tcpdump/dist/print-isakmp.c Wed Aug 17 06:48:02 2011
@@ -34,7 +34,7 @@
static const char rcsid[] _U_ =
"@(#) Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.61 2008-02-05 19:34:25 guy Exp (LBL)";
#else
-__RCSID("$NetBSD: print-isakmp.c,v 1.2 2010/12/05 05:11:30 christos Exp $");
+__RCSID("$NetBSD: print-isakmp.c,v 1.3 2011/08/17 10:48:02 christos Exp $");
#endif
#endif
@@ -2229,11 +2229,13 @@
u_char np;
int i;
int phase;
+ uint32_t msgid;
p = (const struct isakmp *)bp;
ep = ndo->ndo_snapend;
- phase = (*(u_int32_t *)base->msgid == 0) ? 1 : 2;
+ memcpy(&msgid, base->msgid, sizeof(msgid));
+ phase = (msgid == 0) ? 1 : 2;
if (phase == 1)
ND_PRINT((ndo," phase %d", phase));
else
@@ -2400,11 +2402,13 @@
const u_char *ep;
u_char np;
int phase;
+ uint32_t msgid;
p = (const struct isakmp *)bp;
ep = ndo->ndo_snapend;
- phase = (*(u_int32_t *)base->msgid == 0) ? 1 : 2;
+ memcpy(&msgid, base->msgid, sizeof(msgid));
+ phase = (msgid == 0) ? 1 : 2;
if (phase == 1)
ND_PRINT((ndo, " parent_sa"));
else