FreeBSD src
Go to file
Peter Wemm a9a0bbad19 Copy the va_list in sbuf_vprintf() before passing it to vsnprintf(),
because we could fail due to a small buffer and loop and rerun.  If this
happens, then the vsnprintf() will have already taken the arguments off
the va_list.  For i386 and others, this doesn't matter because the
va_list type is a passed as a copy.  But on powerpc and amd64, this is
fatal because the va_list is a reference to an external structure that
keeps the vararg state due to the more complicated argument passing system.
On amd64, arguments can be passed as follows:
First 6 int/pointer type arguments go in registers, the rest go on
  the memory stack.
Float and double are similar, except using SSE registers.
long double (80 bit precision) are similar except using the x87 stack.
Where the 'next argument' comes from depends on how many have been
processed so far and what type it is.  For amd64, gcc keeps this state
somewhere that is referenced by the va_list.

I found a description that showed the va_copy was required here:
http://mirrors.ccs.neu.edu/cgi-bin/unixhelp/man-cgi?va_end+9
The single unix spec doesn't mention va_copy() at all.

Anyway, the problem was that the sysctl kern.geom.conf* nodes would panic
due to walking off the end of the va_arg lists in vsnprintf.  A better fix
would be to have sbuf_vprintf() use a single pass and call kvprintf()
with a callback function that stored the results and grew the buffer
as needed.

Approved by:	re (scottl)
2003-05-25 19:03:08 +00:00
bin Erase whitspace at EOL. 2003-05-22 13:10:32 +00:00
contrib This commit was generated by cvs2svn to compensate for changes in r115155, 2003-05-19 14:37:41 +00:00
crypto Revert unnecessary part of previous commit. 2003-05-13 10:18:49 +00:00
etc Apparently ldconfig(8) prefers the format as the first argument 2003-05-18 03:39:39 +00:00
games add a NOCRYPT check alongside the NO_OPENSSL check. 2003-05-19 15:52:50 +00:00
gnu Add a temporary indirect patch for gcc when targeting amd64. This is to 2003-05-24 20:58:47 +00:00
include Centralize _PATH_* definitions. 2003-05-05 22:49:23 +00:00
kerberos5 Remove some KRB4 scraps, and allow NOSHARED make worlds to 2003-05-11 18:49:29 +00:00
lib _pthread_cancel() breaks the normal lock order of first locking the 2003-05-25 08:48:11 +00:00
libexec Do not exclude amd64 from rtld-elf builds. 2003-05-24 17:38:45 +00:00
release Add textproc/opensp into $MINIMALDOCPORTS when openjade is used. 2003-05-25 03:41:41 +00:00
sbin mdoc(7) fixes. 2003-05-24 19:53:08 +00:00
secure Turn MAKE_KERBEROS5 into NO_KERBEROS by negating the logic. Some extra 2003-05-05 07:58:44 +00:00
share mdoc(7) fixes. 2003-05-24 19:53:08 +00:00
sys Copy the va_list in sbuf_vprintf() before passing it to vsnprintf(), 2003-05-25 19:03:08 +00:00
tools -lbsdxml lives in lib/libexpat. *Blush* 2003-05-18 00:40:22 +00:00
usr.bin Erase whitspace at EOL. 2003-05-22 13:10:32 +00:00
usr.sbin Add a pretty cheesy hack to avoid a gcc-3.2.2 ICE (internal compiler 2003-05-25 07:39:06 +00:00
COPYRIGHT Update to add the July 22, 1999 addendum. 1999-09-05 21:33:47 +00:00
MAINTAINERS OBE 2003-04-27 05:51:12 +00:00
Makefile Kill upgrade target docs. It too is stale. 2003-04-03 05:34:36 +00:00
Makefile.inc1 Unbreak world build if NO_OPENSSL is defined but NO_KERBEROS is not. 2003-05-21 21:47:20 +00:00
README KerberosIV de-orbit burn continues. Disconnect from "make world". 2003-03-08 10:01:26 +00:00
UPDATING Announce the Kerberos5 changes. 2003-05-05 20:05:37 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The
``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html