Date: Fri, 6 Jul 2001 22:01:06 -0700 (PDT) From: Matt Jacob <mjacob@FreeBSD.org> To: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sbin/ping ping.c Message-ID: <200107070501.f67516U79958@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
mjacob 2001/07/06 22:01:06 PDT
Modified files:
sbin/ping ping.c
Log:
Fix unaligned access faults on alpha.
This one is strange and goes against my rusty compiler knowledge.
The global declaration
struct sockaddr whereto;
produces for both i386 && alpha:
.comm whereto,16,1
which means common storage, byte aligned. Ahem. I though structs
were supposed to be ALDOUBLE always? I mean, w/o pragma packed?
Later on, this address is coerced to:
to = (struct sockaddr_in *)&whereto;
Up until now, we've been fine on alpha because the address
just ended up aligned to a 4 byte boundary. Lately, though,
it end up as:
0000000120027b0f B whereto
And, tra la, you get unaligned access faults. The solution I picked, in
lieu of understanding what the compiler was doing, is to put whereto
as a union of a sockaddr and sockaddr_in. That's more formally correct
if somewhat awkward looking.
Revision Changes Path
1.58 +10 -2 src/sbin/ping/ping.c
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200107070501.f67516U79958>
