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.
This commit is contained in:
parent
ffd13a8c6d
commit
6bfcf96505
7
crypto/external/bsd/openssh/dist/umac.c
vendored
7
crypto/external/bsd/openssh/dist/umac.c
vendored
@ -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, const UINT8 *buf, UINT32 nbytes)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
#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. */
|
||||
|
14
doc/HACKS
14
doc/HACKS
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user