Date: Sun, 8 Jul 2001 09:53:10 -0700 (PDT) From: John Polstra <jdp@polstra.com> To: alpha@freebsd.org Cc: mjacob@feral.com Subject: Re: this a gcc bug? Message-ID: <200107081653.f68GrAJ24108@vashon.polstra.com> In-Reply-To: <Pine.BSF.4.21.0107062130090.48822-100000@beppo> References: <Pine.BSF.4.21.0107062130090.48822-100000@beppo>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <Pine.BSF.4.21.0107062130090.48822-100000@beppo>, Matthew Jacob <mjacob@feral.com> wrote: > > I was tracking down unaligned faults in ping... > > They come from an unaligned reference in that: > > struct sockaddr whereto; > ... > bzero((char *)&whereto, sizeof(struct sockaddr)); > to = (struct sockaddr_in *)&whereto; > ... > (void)printf("PING %s (%s)", hostname, > inet_ntoa(to->sin_addr)); > > ... > pid 528 (ping): unaligned access: va=0x120017ad3 pc=0x120003850 ra=0x12000335c > op=ldl > > Why? > > Well, in test compiling ping.c I found: > > yorp.feral.com > nm /tmp/ping |grep where > 0000000120027b0f B whereto > > But was it the linker? > > > No. Assembler output shows: > ... > .comm options,4,4 > .comm rcvd_tbl,128,1 > .comm whereto,16,1 > ... > > > Say &what&? Here we have a structure (struct sockaddr) that has only > byte required alignment? > > Structs, no matter what there contents, have been ALDOUBLE since Portable C > compiler days- or so I thought. Maybe I'm just showing my ignorance/age. Have > I > gone nuts? Well, that's for you and your shrink to decide. But you are wrong about struct alignment. The compiler aligns a struct such that all of its members are properly aligned. In the case of struct sockaddr, every member is a signed or unsigned char, or an array of char. Chars don't have to be aligned at all, so neither does struct sockaddr. I bet that if "whereto" were declared as a struct sockaddr_in, this problem would go away. John -- John Polstra jdp@polstra.com John D. Polstra & Co., Inc. Seattle, Washington USA "Disappointment is a good sign of basic intelligence." -- Chögyam Trungpa To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200107081653.f68GrAJ24108>