From owner-freebsd-arm@FreeBSD.ORG Wed Feb 17 15:16:18 2010 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2A977106566B for ; Wed, 17 Feb 2010 15:16:18 +0000 (UTC) (envelope-from ticso@cicely7.cicely.de) Received: from raven.bwct.de (raven.bwct.de [85.159.14.73]) by mx1.freebsd.org (Postfix) with ESMTP id C3C7B8FC0A for ; Wed, 17 Feb 2010 15:16:17 +0000 (UTC) Received: from mail.cicely.de ([10.1.1.37]) by raven.bwct.de (8.13.4/8.13.4) with ESMTP id o1HFGFfT025500 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 17 Feb 2010 16:16:16 +0100 (CET) (envelope-from ticso@cicely7.cicely.de) Received: from cicely7.cicely.de (cicely7.cicely.de [10.1.1.9]) by mail.cicely.de (8.14.3/8.14.3) with ESMTP id o1HFG8ZX096249 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 17 Feb 2010 16:16:08 +0100 (CET) (envelope-from ticso@cicely7.cicely.de) Received: from cicely7.cicely.de (localhost [127.0.0.1]) by cicely7.cicely.de (8.14.2/8.14.2) with ESMTP id o1HFG8EA078654; Wed, 17 Feb 2010 16:16:08 +0100 (CET) (envelope-from ticso@cicely7.cicely.de) Received: (from ticso@localhost) by cicely7.cicely.de (8.14.2/8.14.2/Submit) id o1HFG79n078653; Wed, 17 Feb 2010 16:16:07 +0100 (CET) (envelope-from ticso) Date: Wed, 17 Feb 2010 16:16:07 +0100 From: Bernd Walter To: Rui Paulo Message-ID: <20100217151607.GU43625@cicely7.cicely.de> References: <4B7BFAA4.4040607@semihalf.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: FreeBSD cicely7.cicely.de 7.0-STABLE i386 User-Agent: Mutt/1.5.11 X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED=-1.8, BAYES_00=-2.599 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on spamd.cicely.de Cc: freebsd-arm@freebsd.org Subject: Re: kdump on ARM X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ticso@cicely.de List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Feb 2010 15:16:18 -0000 On Wed, Feb 17, 2010 at 02:54:05PM +0000, Rui Paulo wrote: > > On 17 Feb 2010, at 14:18, Grzegorz Bernacki wrote: > > > Hi, > > > > I've noticed that kdump on ARM doesn't work properly, it generates bus error. The problem is that structures dumped into ktrace.out are not aligned. Processing such a structure causes Aligment Fault. One solution is to copy structure into local variable and then process it, please see patch below. But I am not sure if this is the best solution and maybe someone has a better idea. Excellent! > > grzesiek > > > > > > diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c > > index 386221e..5a15886 100644 > > --- a/usr.bin/kdump/kdump.c > > +++ b/usr.bin/kdump/kdump.c > > @@ -1325,6 +1325,10 @@ ktrstat(struct stat *statp) > > void > > ktrstruct(char *buf, size_t buflen) > > { > > +#if defined(__arm__) > > + struct stat stat; > > + struct sockaddr sockaddr; > > +#endif > > char *name, *data; > > size_t namelen, datalen; > > int i; > > @@ -1348,12 +1352,22 @@ ktrstruct(char *buf, size_t buflen) > > if (strcmp(name, "stat") == 0) { > > if (datalen != sizeof(struct stat)) > > goto invalid; > > +#if defined(__arm__) > > + memcpy(&stat, data, sizeof(struct stat)); > > + ktrstat(&stat); > > +#else > > ktrstat((struct stat *)data); > > +#endif > > } else if (strcmp(name, "sockaddr") == 0) { > > if (datalen < sizeof(struct sockaddr) || > > datalen != ((struct sockaddr *)(data))->sa_len) > > goto invalid; > > +#if defined(__arm__) > > + memcpy(&sockaddr, data, sizeof(struct sockaddr)); > > + ktrsockaddr(&sockaddr); > > +#else > > ktrsockaddr((struct sockaddr *)data); > > +#endif > > } else { > > printf("unknown structure\n"); > > } > > I wonder if this can't be made non arm conditional? Either this struct is properly aligned or not. So why should this be made conditional? Non strict alignment architecturs also have problems with this, but it is usualy just speed penalties. There is one ARM sepcific struct missalignment problem. In this case we usually add __packed macro to structure definition. For most structures this usually means no change on other archtitectures and we only declare the struct to forcibly be what the programmer already expected. Only a few programmers are aware that they expect something from structures, which is not garantied. -- B.Walter http://www.bwct.de Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.