Date: Wed, 17 Feb 2010 15:42:35 +0100 From: Hans Petter Selasky <hselasky@c2i.net> To: freebsd-arm@freebsd.org Subject: Re: kdump on ARM Message-ID: <201002171542.35757.hselasky@c2i.net> In-Reply-To: <4B7BFAA4.4040607@semihalf.com>
index | next in thread | previous in thread | raw e-mail
On Wednesday 17 February 2010 15:18:12 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.
>
> 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 think more than ARM is affected by this.
--HPS
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002171542.35757.hselasky>
