From owner-svn-src-head@FreeBSD.ORG Wed Jun 15 23:22:36 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5A20E106564A; Wed, 15 Jun 2011 23:22:36 +0000 (UTC) (envelope-from rodrigc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 30D768FC13; Wed, 15 Jun 2011 23:22:36 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5FNMa9j002690; Wed, 15 Jun 2011 23:22:36 GMT (envelope-from rodrigc@svn.freebsd.org) Received: (from rodrigc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5FNMafx002688; Wed, 15 Jun 2011 23:22:36 GMT (envelope-from rodrigc@svn.freebsd.org) Message-Id: <201106152322.p5FNMafx002688@svn.freebsd.org> From: Craig Rodrigues Date: Wed, 15 Jun 2011 23:22:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r223128 - head/lib/libstand X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jun 2011 23:22:36 -0000 Author: rodrigc Date: Wed Jun 15 23:22:35 2011 New Revision: 223128 URL: http://svn.freebsd.org/changeset/base/223128 Log: Bring back following change which was undone in previous commit: ------------------------------------------------------------------------ r172854 | marius | 2007-10-21 10:03:18 -0700 (Sun, 21 Oct 2007) | 16 lines Changed paths: M /head/lib/libstand/tftp.c - Given that we tell the compiler that struct ip is packed and 32-bit aligned, GCC 4.2.1 also generates code for sendudp() that assumes this alignment. GCC 4.2.1 however doesn't 32-bit align wbuf, causing the loader to crash due to an unaligned access of wbuf in sendudp() when netbooting sparc64. Solve this by specifying wbuf as packed and 32-bit aligned, too. As for lastdata and readudp() this currently is no issue when compiled with GCC 4.2.1, though give lastdata the same treatment as wbuf for consistency and possibility of being affected in the future. [1] - Sprinkle const on a lookup table. ------------------------------------------------------------------------ Modified: head/lib/libstand/tftp.c Modified: head/lib/libstand/tftp.c ============================================================================== --- head/lib/libstand/tftp.c Wed Jun 15 23:19:09 2011 (r223127) +++ head/lib/libstand/tftp.c Wed Jun 15 23:22:35 2011 (r223128) @@ -118,10 +118,10 @@ struct tftp_handle { u_char header[HEADER_SIZE]; struct tftphdr t; u_char space[TFTP_MAX_BLKSIZE]; - } lastdata; + } __packed __aligned(4) lastdata; }; -static int tftperrors[8] = { +static const int tftperrors[8] = { 0, /* ??? */ ENOENT, EPERM, @@ -208,7 +208,7 @@ tftp_makereq(struct tftp_handle *h) u_char header[HEADER_SIZE]; struct tftphdr t; u_char space[FNAME_SIZE + 6]; - } wbuf; + } __packed __aligned(4) wbuf; char *wtail; int l; ssize_t res; @@ -286,7 +286,7 @@ tftp_getnextblock(struct tftp_handle *h) struct { u_char header[HEADER_SIZE]; struct tftphdr t; - } wbuf; + } __packed __aligned(4) wbuf; char *wtail; int res; struct tftphdr *t;