Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Jul 2009 22:43:20 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/sys/cddl/contrib/opensolaris/common/nvpair nvpair.c
Message-ID:  <200907112243.n6BMhZtl084235@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
marcel      2009-07-11 22:43:20 UTC

  FreeBSD src repository

  Modified files:
    sys/cddl/contrib/opensolaris/common/nvpair nvpair.c 
  Log:
  SVN rev 195627 on 2009-07-11 22:43:20Z by marcel
  
  In nvpair_native_embedded_array(), meaningless pointers are zeroed.
  The programmer was aware that alignment was not guaranteed in the
  packed structure and used bzero() to NULL out the pointers.
  However, on ia64, the compiler is quite agressive in finding ILP
  and calls to bzero() are often replaced by simple assignments (i.e.
  stores). Especially when the width or size in question corresponds
  with a store instruction (i.e. st1, st2, st4 or st8).
  
  The problem here is not a compiler bug. The address of the memory
  to zero-out was given by '&packed->nvl_priv' and given the type of
  the 'packed' pointer the compiler could assume proper alignment for
  the replacement of bzero() with an 8-byte wide store to be valid.
  The problem is with the programmer. The programmer knew that the
  address did not have the alignment guarantees needed for a regular
  assignment, but failed to inform the compiler of that fact. In
  fact, the programmer told the compiler the opposite: alignment is
  guaranteed.
  
  The fix is to avoid using a pointer of type "nvlist_t *" and
  instead use a "char *" pointer as the basis for calculating the
  address. This tells the compiler that only 1-byte alignment can
  be assumed and the compiler will either keep the bzero() call
  or instead replace it with a sequence of byte-wise stores. Both
  are valid.
  
  Approved by:    re (kib)
  
  Revision  Changes    Path
  1.5       +6 -3      src/sys/cddl/contrib/opensolaris/common/nvpair/nvpair.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907112243.n6BMhZtl084235>