From owner-freebsd-arm@FreeBSD.ORG Wed Feb 17 15:19:46 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 E67D81065672 for ; Wed, 17 Feb 2010 15:19:45 +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 72ABA8FC19 for ; Wed, 17 Feb 2010 15:19:45 +0000 (UTC) Received: from mail.cicely.de ([10.1.1.37]) by raven.bwct.de (8.13.4/8.13.4) with ESMTP id o1HFJiIP025800 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 17 Feb 2010 16:19:44 +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 o1HFJffH096308 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 17 Feb 2010 16:19:41 +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 o1HFJfDi078661; Wed, 17 Feb 2010 16:19:41 +0100 (CET) (envelope-from ticso@cicely7.cicely.de) Received: (from ticso@localhost) by cicely7.cicely.de (8.14.2/8.14.2/Submit) id o1HFJfjV078660; Wed, 17 Feb 2010 16:19:41 +0100 (CET) (envelope-from ticso) Date: Wed, 17 Feb 2010 16:19:41 +0100 From: Bernd Walter To: Rui Paulo Message-ID: <20100217151941.GV43625@cicely7.cicely.de> References: <4B7BFAA4.4040607@semihalf.com> <20100217151607.GU43625@cicely7.cicely.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100217151607.GU43625@cicely7.cicely.de> 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:19:46 -0000 On Wed, Feb 17, 2010 at 04:16:07PM +0100, Bernd Walter wrote: > 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? Ups - I'd just recovered from Mr. Sandman's work. So we all agree about. Nevertheless it should be verified if this is just a faulty struct definition. On the other hand I think it is not because someone else wrote it is a brokem on mips as well. > 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.