va_list.h revision 135e56f22e13a5d0057a31c742b8c7d8324c4af3
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/*
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * CDDL HEADER START
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * The contents of this file are subject to the terms of the
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * Common Development and Distribution License, Version 1.0 only
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * (the "License"). You may not use this file except in compliance
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * with the License.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * or http://www.opensolaris.org/os/licensing.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * See the License for the specific language governing permissions
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * and limitations under the License.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * When distributing Covered Code, include this CDDL HEADER in each
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * If applicable, add the following below this CDDL HEADER, with the
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * fields enclosed by brackets "[]" replaced with your own identifying
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * information: Portions Copyright [yyyy] [name of copyright owner]
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * CDDL HEADER END
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright */
f96bd5c800e73e351b0b6e4bd7f00b578dad29bbAlan Wright/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/* All Rights Reserved */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/*
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * Use is subject to license terms.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#ifndef _SYS_VA_LIST_H
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define _SYS_VA_LIST_H
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/*
b1352070d318187b41b088da3533692976f3f225Alan Wright * An application should not include this header directly. Instead it
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * should be included only through the inclusion of other Sun headers.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * The purpose of this header is to provide the type definitions for
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * the va_list argument used by a number of printf and printf like
b1352070d318187b41b088da3533692976f3f225Alan Wright * functions. The headers that define these various function prototypes
b1352070d318187b41b088da3533692976f3f225Alan Wright * #include this header directly. These include but are not necessarily
b1352070d318187b41b088da3533692976f3f225Alan Wright * limited to <stdio.h>, <stdio_iso.h>, <wchar_iso.h>, <strlog.h> and
b1352070d318187b41b088da3533692976f3f225Alan Wright * <syslog.h>. The type definitions included in this header are for
b1352070d318187b41b088da3533692976f3f225Alan Wright * the benefit of consumers of va_list.
b1352070d318187b41b088da3533692976f3f225Alan Wright *
b1352070d318187b41b088da3533692976f3f225Alan Wright * Any application that accepts variable argument lists must as documented,
b1352070d318187b41b088da3533692976f3f225Alan Wright * include either <varargs.h> or the preferred <stdarg.h>. Doing so will
b1352070d318187b41b088da3533692976f3f225Alan Wright * pull in the appropriate compiler protocols defined in <sys/va_impl.h>
b1352070d318187b41b088da3533692976f3f225Alan Wright * which is in turn is included by <varargs.h> and <stdarg.h>. See comments
b1352070d318187b41b088da3533692976f3f225Alan Wright * in <sys/va_impl.h> for more detailed information regarding implementation
b1352070d318187b41b088da3533692976f3f225Alan Wright * and compiler specific protocols.
b1352070d318187b41b088da3533692976f3f225Alan Wright */
b1352070d318187b41b088da3533692976f3f225Alan Wright
b1352070d318187b41b088da3533692976f3f225Alan Wright/*
b1352070d318187b41b088da3533692976f3f225Alan Wright * The common definitions exported by this header or compilers using
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * this header are:
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * the identifier __builtin_va_alist for the variable list pseudo parameter
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * the type __va_alist_type for the variable list pseudo parameter
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * the type __va_list defining the type of the variable list iterator
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright *
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * The feature macros (e.g. __BUILTIN_VA_STRUCT) and compiler macros
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * (__GNUC__) and processor macros (e.g. __amd64) are intended to be
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * defined by the compilation system, not the user of the system.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#include <sys/isa_defs.h> /* sys/isa_defs needed for _LP64. */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#ifdef __cplusplus
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wrightextern "C" {
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#if defined(_LP64)
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_alist_type long
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#else
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_alist_type int
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#if defined(__STDC__) /* source language is ISO C or C++ */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_void(expr) ((void)expr)
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_ptr_base void
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#else /* source language is K&R C */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_void(expr) expr
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __va_ptr_base char
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif /* __STDC__ */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#if defined(__BUILTIN_VA_STRUCT) && !defined(__lint) /* -------- protocol */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#if defined(__amd64) /* processor */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wrighttypedef struct __va_list_element {
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright unsigned int __va_gp_offset;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright unsigned int __va_fp_offset;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright void *__va_overflow_arg_area;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright void *__va_reg_sve_area;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright} __va_list[1];
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/* Other ISA __va_list structures added here under #elif */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#else /* processor */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#error("No __va_list structure defined for ISA")
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif /* processor */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#elif (defined(__GNUC__) && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || \
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright (__GNUC__ >= 3))) && !defined(__lint) /* ---------------- protocol */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#define __GNUC_VA_LIST
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wrighttypedef __builtin_va_list __gnuc_va_list;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright/*
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * XX64 This seems unnecessary .. but is needed because vcmn_err is
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * defined with __va_list instead of plain old va_list.
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright * Perhaps that should be fixed!
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wrighttypedef __builtin_va_list __va_list;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#else /* default */ /* ---------------- protocol */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wrighttypedef __va_ptr_base *__va_list;
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif /* -------------------------------------------------------- protocol */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#ifdef __cplusplus
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright}
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright#endif /* _SYS_VA_LIST_H */
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright