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

Reply via email to