Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Aug 2002 20:00:56 -0700 (PDT)
From:      Peter Wemm <peter@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sbin/ping ping.c
Message-ID:  <200208100300.g7A30umV031588@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
peter       2002/08/09 20:00:56 PDT

  Modified files:
    sbin/ping            ping.c 
  Log:
  Fix the broken "avoid unaligned data" fix.  The problem is that the builtin
  gcc memcpy "knows" about types that are supposed to be actually already
  aligned and triggers alignment errors doing the memcpy itself.
  "Fix" this by changing it to a bcopy().  In this case, we had:
    struct timeval *tp;
    struct timeval tv1;
    memcpy(&tv1,tp,sizeof(tv1));
  .. and since gcc *knows* that a pointer to a timeval is longword aligned
  and that tv1 is longword aligned, then it can use an inline that assumes
  alignment.  The following works too:
    cp = (char *)tp;
    memcpy(&tv1,cp,sizeof(tv1));
  Simply casting (char *)tp  for the memcpy doesn't work. :-(
  This affected different 64 bit platforms in different ways and depends
  a lot on gcc as well.  I've seen this on alpha and ia64 at least, although
  alpha isn't doing it right now.
  
  Revision  Changes    Path
  1.69      +2 -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?200208100300.g7A30umV031588>