Module Name: src Committed By: mrg Date: Wed Jun 15 02:12:14 UTC 2016
Modified Files: src/crypto/external/bsd/openssh/dist: umac.c src/doc: HACKS Log Message: build convert_endian() with "no-strict-aliases" optimiser attribute to avoid some unknown miscompilation in endian_convert() that causes ssh to exit on some output (for me, "cc -v".) note in HACKS. we should investigate this further if possible as this seems to indicate a strict aliasing violation. there certainly are 32 and 64 bit object arrays being accessed with 8 bit accessors, but i don't have time currently. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/crypto/external/bsd/openssh/dist/umac.c cvs rdiff -u -r1.168 -r1.169 src/doc/HACKS Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/crypto/external/bsd/openssh/dist/umac.c diff -u src/crypto/external/bsd/openssh/dist/umac.c:1.9 src/crypto/external/bsd/openssh/dist/umac.c:1.10 --- src/crypto/external/bsd/openssh/dist/umac.c:1.9 Fri Apr 3 23:58:19 2015 +++ src/crypto/external/bsd/openssh/dist/umac.c Wed Jun 15 02:12:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: umac.c,v 1.9 2015/04/03 23:58:19 christos Exp $ */ +/* $NetBSD: umac.c,v 1.10 2016/06/15 02:12:14 mrg Exp $ */ /* $OpenBSD: umac.c,v 1.11 2014/07/22 07:13:42 guenther Exp $ */ /* ----------------------------------------------------------------------- * @@ -67,7 +67,7 @@ /* ---------------------------------------------------------------------- */ #include "includes.h" -__RCSID("$NetBSD: umac.c,v 1.9 2015/04/03 23:58:19 christos Exp $"); +__RCSID("$NetBSD: umac.c,v 1.10 2016/06/15 02:12:14 mrg Exp $"); #include <sys/types.h> #include <sys/endian.h> #include <string.h> @@ -566,6 +566,9 @@ static void nh_transform(nh_ctx *hc, con /* ---------------------------------------------------------------------- */ #if (__LITTLE_ENDIAN__) +#if __GNUC_PREREQ__(5, 3) && defined(__arm__) +__attribute__((__optimize__("no-strict-aliasing"))) +#endif static void endian_convert(void *buf, UWORD bpw, UINT32 num_bytes) /* We endian convert the keys on little-endian computers to */ /* compensate for the lack of big-endian memory reads during hashing. */ Index: src/doc/HACKS diff -u src/doc/HACKS:1.168 src/doc/HACKS:1.169 --- src/doc/HACKS:1.168 Sat Jun 4 11:25:43 2016 +++ src/doc/HACKS Wed Jun 15 02:12:14 2016 @@ -1,4 +1,4 @@ -# $NetBSD: HACKS,v 1.168 2016/06/04 11:25:43 joerg Exp $ +# $NetBSD: HACKS,v 1.169 2016/06/15 02:12:14 mrg Exp $ # # This file is intended to document workarounds for currently unsolved # (mostly) compiler bugs. @@ -635,6 +635,18 @@ port arm is broken. kcah + hack gcc-5.3 arm and openssh and -fstrict-aliases + cdate Tue Jun 14 19:05:51 PDT 2016 + who mrg + file crypto/external/bsd/openssh/dist/umac.c : 1.10 + pr + descr GCC has some yet-unknown code-gen problem on ARM with this + file that leads to SSH giving errors and dropping connections. + The bpw=8 path of endian_convert(), if compiled with + "no-strict-aliases" optimiser attribite, works. The same + problem exist with GCC 5.3 and 5.4. + kcah + port sh3 hack gcc4-sh3-bz2