Skip site navigation (1)Skip section navigation (2)
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>