darwin-xnu/osfmk/sys/varargs.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
   3 *
   4 * @APPLE_LICENSE_HEADER_START@
   5 * 
   6 * The contents of this file constitute Original Code as defined in and
   7 * are subject to the Apple Public Source License Version 1.1 (the
   8 * "License").  You may not use this file except in compliance with the
   9 * License.  Please obtain a copy of the License at
  10 * http://www.apple.com/publicsource and read it before using this file.
  11 * 
  12 * This Original Code and all software distributed under the License are
  13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17 * License for the specific language governing rights and limitations
  18 * under the License.
  19 * 
  20 * @APPLE_LICENSE_HEADER_END@
  21 */
  22/*
  23 * @OSF_COPYRIGHT@
  24 */
  25/*
  26 * HISTORY
  27 * 
  28 * Revision 1.1.1.1  1998/09/22 21:05:49  wsanchez
  29 * Import of Mac OS X kernel (~semeria)
  30 *
  31 * Revision 1.1.1.1  1998/03/07 02:25:59  wsanchez
  32 * Import of OSF Mach kernel (~mburg)
  33 *
  34 * Revision 1.2.28.1  1996/11/29  16:59:53  stephen
  35 *      nmklinux_1.0b3_shared into pmk1.1
  36 *      Added powerpc special case
  37 *      [1996/11/29  16:34:18  stephen]
  38 *
  39 * Revision 1.2.15.2  1996/01/09  19:23:16  devrcs
  40 *      Added alpha varargs.h
  41 *      [1995/12/01  20:39:10  jfraser]
  42 * 
  43 *      Merged '64-bit safe' changes from DEC alpha port.
  44 *      [1995/11/21  18:10:39  jfraser]
  45 * 
  46 * Revision 1.2.15.1  1994/09/23  03:13:46  ezf
  47 *      change marker to not FREE
  48 *      [1994/09/22  21:59:07  ezf]
  49 * 
  50 * Revision 1.2.4.3  1993/08/03  18:30:40  gm
  51 *      CR9596: Change KERNEL to MACH_KERNEL.
  52 *      [1993/08/02  19:03:10  gm]
  53 * 
  54 * Revision 1.2.4.2  1993/06/09  02:55:42  gm
  55 *      Added to OSF/1 R1.3 from NMK15.0.
  56 *      [1993/06/02  21:31:11  jeffc]
  57 * 
  58 * Revision 1.2  1993/04/19  17:17:26  devrcs
  59 *      correct endif tags for ansi
  60 *      [1993/02/25  17:56:02  david]
  61 * 
  62 * Revision 1.1  1992/09/30  02:37:05  robert
  63 *      Initial revision
  64 * 
  65 * $EndLog$
  66 */
  67/* CMU_HIST */
  68/*
  69 * Revision 2.10  91/12/10  16:32:53  jsb
  70 *      Fixes from Intel
  71 *      [91/12/10  15:52:01  jsb]
  72 * 
  73 * Revision 2.9  91/09/12  16:54:22  debo
  74 *      Added mac2.
  75 *      [91/09/11  17:22:52  debo]
  76 * 
  77 * Revision 2.8  91/07/09  23:23:50  danner
  78 *      Added luna88k support.
  79 *      [91/06/24            danner]
  80 * 
  81 * Revision 2.7  91/06/18  20:53:02  jsb
  82 *      Moved i860 varargs code here from i860/i860_varargs.h, thanks to
  83 *      new copyright from Intel.
  84 *      [91/06/18  19:15:02  jsb]
  85 * 
  86 * Revision 2.6  91/05/14  17:40:46  mrt
  87 *      Correcting copyright
  88 * 
  89 * Revision 2.5  91/02/05  17:57:12  mrt
  90 *      Changed to new Mach copyright
  91 *      [91/02/01  17:49:51  mrt]
  92 * 
  93 * Revision 2.4  90/11/25  17:48:50  jsb
  94 *      Added i860 support.
  95 *      [90/11/25  16:54:09  jsb]
  96 * 
  97 * Revision 2.3  90/05/03  15:51:29  dbg
  98 *      Added i386.
  99 *      [90/02/08            dbg]
 100 * 
 101 * Revision 2.2  89/11/29  14:16:44  af
 102 *      RCS-ed, added mips case.  Mips also needs it in Mach standalone
 103 *      programs.
 104 *      [89/10/28  10:39:14  af]
 105 * 
 106 */
 107/* CMU_ENDHIST */
 108/* 
 109 * Mach Operating System
 110 * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
 111 * All Rights Reserved.
 112 * 
 113 * Permission to use, copy, modify and distribute this software and its
 114 * documentation is hereby granted, provided that both the copyright
 115 * notice and this permission notice appear in all copies of the
 116 * software, derivative works or modified versions, and any portions
 117 * thereof, and that both notices appear in supporting documentation.
 118 * 
 119 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 120 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
 121 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 122 * 
 123 * Carnegie Mellon requests users of this software to return to
 124 *
 125 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 126 *  School of Computer Science
 127 *  Carnegie Mellon University
 128 *  Pittsburgh PA 15213-3890
 129 *
 130 * any improvements or extensions that they make and grant Carnegie Mellon rights
 131 * to redistribute these changes.
 132 */
 133/*
 134 */
 135
 136#ifndef _SYS_VARARGS_H_
 137#define _SYS_VARARGS_H_
 138
 139#if     defined(vax) || defined(sun3) || defined(mips) || defined(i386) || defined(mac2)
 140#define va_dcl  int     va_alist;
 141typedef char *  va_list;
 142
 143#define va_start(pvar)  (pvar) = (va_list)&va_alist
 144#define va_end(pvar)
 145#ifdef  mips
 146# define va_arg(pvar, type) ((type *)(pvar = \
 147                (va_list) (sizeof(type) > 4 ? ((int)pvar + 2*8 - 1) & -8 \
 148                                   : ((int)pvar + 2*4 - 1) & -4)))[-1]
 149#else   /* mips */
 150#define va_arg(pvar,type)       (               \
 151                (pvar) += ((sizeof(type)+3) & ~0x3),    \
 152                *((type *)((pvar) - ((sizeof(type)+3) & ~0x3))) )
 153#endif  /* mips */
 154#endif  /* vax */
 155
 156/*
 157 * Try to make varargs work for the Multimax so that _doprnt can be
 158 * declared as
 159 *      _doprnt(file, fmt, list)
 160 *      FILE    *file;
 161 *      char    *fmt;
 162 *      va_list *list;
 163 * and use
 164 *
 165 *      n = va_arg(*list, type)
 166 *
 167 * without needing to drag in extra declarations
 168 *
 169 * and printf becomes
 170 *
 171 * printf(fmt, va_alist)
 172 *      char    *fmt;
 173 *      va_dcl
 174 * {
 175 *      va_list listp;
 176 *      va_start(listp);
 177 *      _doprnt((FILE *)0, fmt, &listp);
 178 *      va_end(listp);
 179 * }
 180 */
 181
 182#if     defined(multimax) && defined(MACH_KERNEL)
 183
 184/*
 185 * the vararglist pointer is an elaborate structure (ecch)
 186 */
 187typedef struct va_list {
 188        char    *va_item;       /* current item */
 189        int     *va_ptr1,       /* arglist pointers for 1, 2, n */
 190                *va_ptr2,
 191                *va_ptrn;
 192        int     va_ct;          /* current argument number */
 193} va_list;
 194
 195#define va_alist        va_arg1, va_arg2, va_argn
 196#define va_dcl          int     va_arg1, va_arg2, va_argn;
 197
 198#define va_start(pvar)  (               \
 199        (pvar).va_ptr1 = &va_arg1,      \
 200        (pvar).va_ptr2 = &va_arg2,      \
 201        (pvar).va_ptrn = &va_argn,      \
 202        (pvar).va_ct = 0 )
 203
 204#define va_end(pvar)
 205
 206#define va_arg(pvar, type)      (       \
 207        (pvar).va_ct++,                 \
 208        (pvar).va_item = (char *)       \
 209          ( ((pvar).va_ct == 1)         \
 210            ? (pvar).va_ptr1            \
 211            : ((pvar).va_ct == 2)       \
 212              ? (pvar).va_ptr2          \
 213              : (pvar).va_ptrn++ ) ,    \
 214        *((type *)((pvar).va_item)) )
 215
 216/* what a mess! */
 217#endif  /* defined(multimax) && defined(MACH_KERNEL) */
 218
 219#if i860
 220#include <i860/varargs.h>       /* PGI vs. Greenhills */
 221#endif
 222
 223#ifdef luna88k
 224#include <luna88k/varargs.h> /* How nice */
 225#endif
 226
 227#if defined (__PPC__) && defined (_CALL_SYSV)
 228#include <ppc/va-ppc.h> /* care of gcc compiler - TEMPORARY 2.7.1 TODO NMGS*/
 229#endif
 230
 231#if defined(__alpha)
 232#  include <varargs.h>
 233#endif /* defined(__alpha) */
 234
 235#endif /* _SYS_VARARGS_H_ */
 236
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.