Artifact 5d3bf2d613e383e66966fbc67d728936e671f7ea:


0000: 2e 54 48 20 56 41 43 41 4c 4c 20 33 20 22 31 34  .TH VACALL 3 "14
0010: 20 4a 61 6e 75 61 72 79 20 32 30 30 31 22 0a 2e   January 2001"..
0020: 53 48 20 4e 41 4d 45 0a 76 61 63 61 6c 6c 20 5c  SH NAME.vacall \
0030: 2d 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  - C functions ca
0040: 6c 6c 65 64 20 77 69 74 68 20 76 61 72 69 61 62  lled with variab
0050: 6c 65 20 61 72 67 75 6d 65 6e 74 73 0a 2e 53 48  le arguments..SH
0060: 20 53 59 4e 4f 50 53 49 53 0a 2e 42 20 23 69 6e   SYNOPSIS..B #in
0070: 63 6c 75 64 65 20 3c 76 61 63 61 6c 6c 2e 68 3e  clude <vacall.h>
0080: 0a 2e 4c 50 0a 2e 42 20 65 78 74 65 72 6e 20 76  ..LP..B extern v
0090: 6f 69 64 2a 20 76 61 63 61 6c 6c 5f 66 75 6e 63  oid* vacall_func
00a0: 74 69 6f 6e 3b 0a 2e 4c 50 0a 2e 6e 66 0a 2e 42  tion;..LP..nf..B
00b0: 49 20 22 76 6f 69 64 20 22 20 66 75 6e 63 74 69  I "void " functi
00c0: 6f 6e 20 22 20 28 22 20 61 6c 69 73 74 20 22 29  on " (" alist ")
00d0: 22 0a 2e 42 49 20 22 20 20 76 61 5f 61 6c 69 73  "..BI "  va_alis
00e0: 74 20 22 20 61 6c 69 73 74 20 22 3b 22 0a 2e 42  t " alist ";"..B
00f0: 49 20 22 7b 22 0a 2e 42 49 20 22 20 20 76 61 5f  I "{"..BI "  va_
0100: 73 74 61 72 74 5f 22 20 74 79 70 65 20 22 28 22  start_" type "("
0110: 20 61 6c 69 73 74 20 22 5b 2c 20 22 20 72 65 74   alist "[, " ret
0120: 75 72 6e 5f 74 79 70 65 20 22 5d 29 3b 22 0a 2e  urn_type "]);"..
0130: 42 49 20 22 20 20 22 20 61 72 67 20 22 20 3d 20  BI "  " arg " = 
0140: 76 61 5f 61 72 67 5f 22 20 74 79 70 65 20 22 28  va_arg_" type "(
0150: 22 20 61 6c 69 73 74 20 22 5b 2c 20 22 20 61 72  " alist "[, " ar
0160: 67 5f 74 79 70 65 20 22 5d 29 3b 22 0a 2e 42 49  g_type "]);"..BI
0170: 20 22 20 20 76 61 5f 72 65 74 75 72 6e 5f 22 20   "  va_return_" 
0180: 74 79 70 65 20 22 28 22 20 61 6c 69 73 74 20 22  type "(" alist "
0190: 5b 5b 2c 20 22 20 72 65 74 75 72 6e 5f 74 79 70  [[, " return_typ
01a0: 65 20 22 5d 2c 20 22 20 72 65 74 75 72 6e 5f 76  e "], " return_v
01b0: 61 6c 75 65 20 22 5d 29 3b 22 0a 2e 42 49 20 22  alue "]);"..BI "
01c0: 7d 22 0a 2e 66 69 0a 2e 4c 50 0a 2e 42 49 20 22  }"..fi..LP..BI "
01d0: 76 61 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e 20  vacall_function 
01e0: 3d 20 22 20 22 26 66 75 6e 63 74 69 6f 6e 22 20  = " "&function" 
01f0: 22 3b 22 0a 2e 4c 50 0a 2e 49 42 20 22 76 61 6c  ";"..LP..IB "val
0200: 22 20 22 20 3d 20 28 28 22 20 72 65 74 75 72 6e  " " = ((" return
0210: 5f 74 79 70 65 20 22 20 28 2a 29 20 28 29 29 20  _type " (*) ()) 
0220: 76 61 63 61 6c 6c 29 20 28 22 20 61 72 67 31 20  vacall) (" arg1 
0230: 2c 20 61 72 67 32 20 2c 20 2e 2e 2e 20 22 29 3b  , arg2 , ... ");
0240: 22 0a 2e 53 48 20 44 45 53 43 52 49 50 54 49 4f  "..SH DESCRIPTIO
0250: 4e 0a 54 68 69 73 20 73 65 74 20 6f 66 20 6d 61  N.This set of ma
0260: 63 72 6f 73 20 70 65 72 6d 69 74 20 61 20 43 20  cros permit a C 
0270: 66 75 6e 63 74 69 6f 6e 0a 2e 49 20 66 75 6e 63  function..I func
0280: 74 69 6f 6e 0a 74 6f 20 62 65 20 63 61 6c 6c 65  tion.to be calle
0290: 64 20 77 69 74 68 20 76 61 72 69 61 62 6c 65 20  d with variable 
02a0: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 74 6f  arguments and to
02b0: 20 72 65 74 75 72 6e 20 76 61 72 69 61 62 6c 65   return variable
02c0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 2e 0a   return values..
02d0: 54 68 69 73 20 69 73 20 6d 75 63 68 20 6c 69 6b  This is much lik
02e0: 65 20 74 68 65 0a 2e 42 52 20 76 61 72 61 72 67  e the..BR vararg
02f0: 73 20 28 33 29 0a 66 61 63 69 6c 69 74 79 2c 20  s (3).facility, 
0300: 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  but also allows 
0310: 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
0320: 20 74 6f 20 62 65 20 73 70 65 63 69 66 69 65 64   to be specified
0330: 20 61 74 20 72 75 6e 20 74 69 6d 65 2e 0a 0a 46   at run time...F
0340: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20  unction calling 
0350: 63 6f 6e 76 65 6e 74 69 6f 6e 73 20 64 69 66 66  conventions diff
0360: 65 72 20 63 6f 6e 73 69 64 65 72 61 62 6c 79 20  er considerably 
0370: 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63  on different mac
0380: 68 69 6e 65 73 2c 20 61 6e 64 0a 2e 49 20 76 61  hines, and..I va
0390: 63 61 6c 6c 0a 61 74 74 65 6d 70 74 73 20 74 6f  call.attempts to
03a0: 20 70 72 6f 76 69 64 65 20 73 6f 6d 65 20 64 65   provide some de
03b0: 67 72 65 65 20 6f 66 20 69 73 6f 6c 61 74 69 6f  gree of isolatio
03c0: 6e 20 66 72 6f 6d 20 73 75 63 68 20 61 72 63 68  n from such arch
03d0: 69 74 65 63 74 75 72 65 0a 64 65 70 65 6e 64 65  itecture.depende
03e0: 6e 63 69 65 73 2e 0a 0a 54 68 65 20 66 75 6e 63  ncies...The func
03f0: 74 69 6f 6e 20 74 68 61 74 20 63 61 6e 20 62 65  tion that can be
0400: 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 6e 79   called with any
0410: 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 79 70 65   number and type
0420: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 0a 61 6e   of arguments.an
0430: 64 20 77 68 69 63 68 20 77 69 6c 6c 20 72 65 74  d which will ret
0440: 75 72 6e 20 61 6e 79 20 74 79 70 65 20 6f 66 20  urn any type of 
0450: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 0a  return value is.
0460: 2e 42 52 20 76 61 63 61 6c 6c 20 2e 0a 49 74 20  .BR vacall ..It 
0470: 77 69 6c 6c 20 64 6f 20 73 6f 6d 65 20 6d 61 67  will do some mag
0480: 69 63 20 61 6e 64 20 63 61 6c 6c 20 74 68 65 20  ic and call the 
0490: 66 75 6e 63 74 69 6f 6e 20 73 74 6f 72 65 64 20  function stored 
04a0: 69 6e 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  in the variable.
04b0: 2e 42 52 20 76 61 63 61 6c 6c 5f 66 75 6e 63 74  .BR vacall_funct
04c0: 69 6f 6e 20 2e 0a 49 66 20 79 6f 75 20 77 61 6e  ion ..If you wan
04d0: 74 20 74 6f 20 6d 61 6b 65 20 6d 6f 72 65 20 74  t to make more t
04e0: 68 61 6e 20 6f 6e 65 20 75 73 65 20 6f 66 0a 2e  han one use of..
04f0: 49 52 20 76 61 63 61 6c 6c 20 2c 0a 75 73 65 20  IR vacall ,.use 
0500: 74 68 65 0a 2e 49 52 20 74 72 61 6d 70 6f 6c 69  the..IR trampoli
0510: 6e 65 20 28 33 29 0a 66 61 63 69 6c 69 74 79 20  ne (3).facility 
0520: 74 6f 20 73 74 6f 72 65 0a 2e 49 20 26 66 75 6e  to store..I &fun
0530: 63 74 69 6f 6e 0a 69 6e 74 6f 0a 2e 42 20 76 61  ction.into..B va
0540: 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e 0a 6a 75  call_function.ju
0550: 73 74 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 6e  st before callin
0560: 67 0a 2e 42 52 20 76 61 63 61 6c 6c 20 2e 0a 0a  g..BR vacall ...
0570: 57 69 74 68 69 6e 0a 2e 49 52 20 66 75 6e 63 74  Within..IR funct
0580: 69 6f 6e 20 2c 0a 74 68 65 20 66 6f 6c 6c 6f 77  ion ,.the follow
0590: 69 6e 67 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ing macros can b
05a0: 65 20 75 73 65 64 20 74 6f 20 77 61 6c 6b 20 74  e used to walk t
05b0: 68 72 6f 75 67 68 20 74 68 65 20 61 72 67 75 6d  hrough the argum
05c0: 65 6e 74 20 6c 69 73 74 20 61 6e 64 0a 73 70 65  ent list and.spe
05d0: 63 69 66 79 20 61 20 72 65 74 75 72 6e 20 76 61  cify a return va
05e0: 6c 75 65 3a 0a 2e 52 53 20 30 0a 2e 54 50 0a 2e  lue:..RS 0..TP..
05f0: 42 49 20 22 76 61 5f 73 74 61 72 74 5f 22 20 74  BI "va_start_" t
0600: 79 70 65 20 22 28 22 20 61 6c 69 73 74 20 22 5b  ype "(" alist "[
0610: 2c 20 22 20 72 65 74 75 72 6e 5f 74 79 70 65 20  , " return_type 
0620: 22 5d 29 3b 22 0a 73 74 61 72 74 73 20 74 68 65  "]);".starts the
0630: 20 77 61 6c 6b 20 74 68 72 6f 75 67 68 20 74 68   walk through th
0640: 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 20  e argument list 
0650: 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 74 68  and specifies th
0660: 65 20 72 65 74 75 72 6e 20 74 79 70 65 2e 0a 2e  e return type...
0670: 54 50 0a 2e 49 42 20 61 72 67 20 22 20 3d 20 76  TP..IB arg " = v
0680: 61 5f 61 72 67 5f 22 20 74 79 70 65 20 22 28 22  a_arg_" type "("
0690: 20 61 6c 69 73 74 20 22 5b 2c 20 22 20 61 72 67   alist "[, " arg
06a0: 5f 74 79 70 65 20 22 5d 29 3b 22 0a 66 65 74 63  _type "]);".fetc
06b0: 68 65 73 20 74 68 65 20 6e 65 78 74 20 61 72 67  hes the next arg
06c0: 75 6d 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 61  ument from the a
06d0: 72 67 75 6d 65 6e 74 20 6c 69 73 74 2e 0a 2e 54  rgument list...T
06e0: 50 0a 2e 42 49 20 22 76 61 5f 72 65 74 75 72 6e  P..BI "va_return
06f0: 5f 22 20 74 79 70 65 20 22 28 22 20 61 6c 69 73  _" type "(" alis
0700: 74 20 22 5b 5b 2c 20 22 20 72 65 74 75 72 6e 5f  t "[[, " return_
0710: 74 79 70 65 20 22 5d 2c 20 22 20 72 65 74 75 72  type "], " retur
0720: 6e 5f 76 61 6c 75 65 20 22 5d 29 3b 22 0a 65 6e  n_value "]);".en
0730: 64 73 20 74 68 65 20 77 61 6c 6b 20 74 68 72 6f  ds the walk thro
0740: 75 67 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ugh the argument
0750: 20 6c 69 73 74 20 61 6e 64 20 73 70 65 63 69 66   list and specif
0760: 69 65 73 20 74 68 65 20 72 65 74 75 72 6e 20 76  ies the return v
0770: 61 6c 75 65 2e 0a 2e 52 45 0a 0a 54 68 65 0a 2e  alue...RE..The..
0780: 49 20 74 79 70 65 0a 69 6e 0a 2e 42 49 20 76 61  I type.in..BI va
0790: 5f 73 74 61 72 74 5f 20 74 79 70 65 0a 61 6e 64  _start_ type.and
07a0: 0a 2e 42 49 20 76 61 5f 72 65 74 75 72 6e 5f 20  ..BI va_return_ 
07b0: 74 79 70 65 0a 73 68 61 6c 6c 20 62 65 20 6f 6e  type.shall be on
07c0: 65 20 6f 66 0a 2e 42 52 20 76 6f 69 64 20 22 2c  e of..BR void ",
07d0: 20 22 20 69 6e 74 20 22 2c 20 22 20 75 69 6e 74   " int ", " uint
07e0: 20 22 2c 20 22 20 6c 6f 6e 67 20 22 2c 20 22 20   ", " long ", " 
07f0: 75 6c 6f 6e 67 20 22 2c 20 22 20 6c 6f 6e 67 6c  ulong ", " longl
0800: 6f 6e 67 20 22 2c 20 22 20 75 6c 6f 6e 67 6c 6f  ong ", " ulonglo
0810: 6e 67 20 22 2c 20 22 20 64 6f 75 62 6c 65 20 22  ng ", " double "
0820: 2c 20 22 20 73 74 72 75 63 74 20 22 2c 20 22 20  , " struct ", " 
0830: 70 74 72 0a 6f 72 20 28 66 6f 72 20 41 4e 53 49  ptr.or (for ANSI
0840: 20 43 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65   C calling conve
0850: 6e 74 69 6f 6e 73 20 6f 6e 6c 79 29 0a 2e 42 52  ntions only)..BR
0860: 20 63 68 61 72 20 22 2c 20 22 20 73 63 68 61 72   char ", " schar
0870: 20 22 2c 20 22 20 75 63 68 61 72 20 22 2c 20 22   ", " uchar ", "
0880: 20 73 68 6f 72 74 20 22 2c 20 22 20 75 73 68 6f   short ", " usho
0890: 72 74 20 22 2c 20 22 20 66 6c 6f 61 74 20 2c 0a  rt ", " float ,.
08a0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
08b0: 20 63 6c 61 73 73 20 6f 66 0a 2e 49 52 20 72 65   class of..IR re
08c0: 74 75 72 6e 5f 74 79 70 65 20 2e 0a 0a 54 68 65  turn_type ...The
08d0: 0a 2e 49 20 74 79 70 65 0a 73 70 65 63 69 66 69  ..I type.specifi
08e0: 65 72 73 20 69 6e 0a 2e 42 49 20 76 61 5f 73 74  ers in..BI va_st
08f0: 61 72 74 5f 20 74 79 70 65 0a 61 6e 64 0a 2e 42  art_ type.and..B
0900: 49 20 76 61 5f 72 65 74 75 72 6e 5f 20 74 79 70  I va_return_ typ
0910: 65 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  e.must be the sa
0920: 6d 65 2e 0a 54 68 65 0a 2e 49 20 72 65 74 75 72  me..The..I retur
0930: 6e 5f 74 79 70 65 0a 73 70 65 63 69 66 69 65 72  n_type.specifier
0940: 73 20 70 61 73 73 65 64 20 74 6f 0a 2e 42 49 20  s passed to..BI 
0950: 76 61 5f 73 74 61 72 74 5f 20 74 79 70 65 0a 61  va_start_ type.a
0960: 6e 64 0a 2e 42 49 20 76 61 5f 72 65 74 75 72 6e  nd..BI va_return
0970: 5f 20 74 79 70 65 0a 6d 75 73 74 20 62 65 20 74  _ type.must be t
0980: 68 65 20 73 61 6d 65 2e 0a 0a 54 68 65 0a 2e 49  he same...The..I
0990: 20 74 79 70 65 0a 69 6e 0a 2e 42 49 20 76 61 5f   type.in..BI va_
09a0: 61 72 67 5f 20 74 79 70 65 0a 73 68 61 6c 6c 20  arg_ type.shall 
09b0: 62 65 20 6f 6e 65 20 6f 66 0a 2e 42 52 20 69 6e  be one of..BR in
09c0: 74 20 22 2c 20 22 20 75 69 6e 74 20 22 2c 20 22  t ", " uint ", "
09d0: 20 6c 6f 6e 67 20 22 2c 20 22 20 75 6c 6f 6e 67   long ", " ulong
09e0: 20 22 2c 20 22 20 6c 6f 6e 67 6c 6f 6e 67 20 22   ", " longlong "
09f0: 2c 20 22 20 75 6c 6f 6e 67 6c 6f 6e 67 20 22 2c  , " ulonglong ",
0a00: 20 22 20 64 6f 75 62 6c 65 20 22 2c 20 22 20 73   " double ", " s
0a10: 74 72 75 63 74 20 22 2c 20 22 20 70 74 72 0a 6f  truct ", " ptr.o
0a20: 72 20 28 66 6f 72 20 41 4e 53 49 20 43 20 63 61  r (for ANSI C ca
0a30: 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  lling convention
0a40: 73 20 6f 6e 6c 79 29 0a 2e 42 52 20 63 68 61 72  s only)..BR char
0a50: 20 22 2c 20 22 20 73 63 68 61 72 20 22 2c 20 22   ", " schar ", "
0a60: 20 75 63 68 61 72 20 22 2c 20 22 20 73 68 6f 72   uchar ", " shor
0a70: 74 20 22 2c 20 22 20 75 73 68 6f 72 74 20 22 2c  t ", " ushort ",
0a80: 20 22 20 66 6c 6f 61 74 20 2c 0a 64 65 70 65 6e   " float ,.depen
0a90: 64 69 6e 67 20 6f 6e 20 74 68 65 20 63 6c 61 73  ding on the clas
0aa0: 73 20 6f 66 0a 2e 49 52 20 61 72 67 5f 74 79 70  s of..IR arg_typ
0ab0: 65 20 2e 0a 0a 49 6e 0a 2e 42 49 20 22 76 61 5f  e ...In..BI "va_
0ac0: 73 74 61 72 74 5f 73 74 72 75 63 74 28 22 20 61  start_struct(" a
0ad0: 6c 69 73 74 20 22 2c 20 22 20 72 65 74 75 72 6e  list ", " return
0ae0: 5f 74 79 70 65 20 22 2c 20 22 20 73 70 6c 69 74  _type ", " split
0af0: 74 61 62 6c 65 20 29 3b 0a 74 68 65 0a 2e 49 20  table );.the..I 
0b00: 73 70 6c 69 74 74 61 62 6c 65 0a 66 6c 61 67 20  splittable.flag 
0b10: 73 70 65 63 69 66 69 65 73 20 77 68 65 74 68 65  specifies whethe
0b20: 72 20 74 68 65 20 73 74 72 75 63 74 0a 2e 49 20  r the struct..I 
0b30: 72 65 74 75 72 6e 5f 74 79 70 65 0a 63 61 6e 20  return_type.can 
0b40: 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 72  be returned in r
0b50: 65 67 69 73 74 65 72 73 20 73 75 63 68 20 74 68  egisters such th
0b60: 61 74 20 65 76 65 72 79 20 73 74 72 75 63 74 20  at every struct 
0b70: 66 69 65 6c 64 20 66 69 74 73 20 65 6e 74 69 72  field fits entir
0b80: 65 6c 79 20 69 6e 0a 61 20 73 69 6e 67 6c 65 20  ely in.a single 
0b90: 72 65 67 69 73 74 65 72 2e 20 54 68 69 73 20 6e  register. This n
0ba0: 65 65 64 73 20 74 6f 20 62 65 20 73 70 65 63 69  eeds to be speci
0bb0: 66 69 65 64 20 66 6f 72 20 73 74 72 75 63 74 73  fied for structs
0bc0: 20 6f 66 20 73 69 7a 65 0a 32 2a 73 69 7a 65 6f   of size.2*sizeo
0bd0: 66 28 6c 6f 6e 67 29 2e 20 46 6f 72 20 73 74 72  f(long). For str
0be0: 75 63 74 73 20 6f 66 20 73 69 7a 65 20 3c 3d 20  ucts of size <= 
0bf0: 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 2c 0a 2e 49  sizeof(long),..I
0c00: 20 73 70 6c 69 74 74 61 62 6c 65 0a 69 73 20 69   splittable.is i
0c10: 67 6e 6f 72 65 64 20 61 6e 64 20 61 73 73 75 6d  gnored and assum
0c20: 65 64 20 74 6f 20 62 65 20 31 2e 20 46 6f 72 20  ed to be 1. For 
0c30: 73 74 72 75 63 74 73 20 6f 66 20 73 69 7a 65 20  structs of size 
0c40: 3e 20 32 2a 73 69 7a 65 6f 66 28 6c 6f 6e 67 29  > 2*sizeof(long)
0c50: 2c 0a 2e 49 20 73 70 6c 69 74 74 61 62 6c 65 0a  ,..I splittable.
0c60: 69 73 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 61  is ignored and a
0c70: 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 20  ssumed to be 0. 
0c80: 54 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 68  There are some h
0c90: 61 6e 64 79 20 6d 61 63 72 6f 73 20 66 6f 72 20  andy macros for 
0ca0: 74 68 69 73 3a 0a 2e 6e 66 0a 2e 42 49 20 22 76  this:..nf..BI "v
0cb0: 61 5f 77 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c  a_word_splittabl
0cc0: 65 5f 31 20 28 22 20 74 79 70 65 31 20 29 0a 2e  e_1 (" type1 )..
0cd0: 42 49 20 22 76 61 5f 77 6f 72 64 5f 73 70 6c 69  BI "va_word_spli
0ce0: 74 74 61 62 6c 65 5f 32 20 28 22 20 74 79 70 65  ttable_2 (" type
0cf0: 31 20 22 2c 20 22 20 74 79 70 65 32 20 29 0a 2e  1 ", " type2 )..
0d00: 42 49 20 22 76 61 5f 77 6f 72 64 5f 73 70 6c 69  BI "va_word_spli
0d10: 74 74 61 62 6c 65 5f 33 20 28 22 20 74 79 70 65  ttable_3 (" type
0d20: 31 20 22 2c 20 22 20 74 79 70 65 32 20 22 2c 20  1 ", " type2 ", 
0d30: 22 20 74 79 70 65 33 20 29 0a 2e 42 49 20 22 76  " type3 )..BI "v
0d40: 61 5f 77 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c  a_word_splittabl
0d50: 65 5f 34 20 28 22 20 74 79 70 65 31 20 22 2c 20  e_4 (" type1 ", 
0d60: 22 20 74 79 70 65 32 20 22 2c 20 22 20 74 79 70  " type2 ", " typ
0d70: 65 33 20 22 2c 20 22 20 74 79 70 65 34 20 29 0a  e3 ", " type4 ).
0d80: 2e 66 69 0a 46 6f 72 20 61 20 73 74 72 75 63 74  .fi.For a struct
0d90: 20 77 69 74 68 20 74 68 72 65 65 20 73 6c 6f 74   with three slot
0da0: 73 0a 2e 6e 66 0a 2e 42 49 20 22 73 74 72 75 63  s..nf..BI "struc
0db0: 74 20 7b 20 22 20 22 74 79 70 65 31 20 69 64 31  t { " "type1 id1
0dc0: 22 20 22 3b 20 22 20 22 74 79 70 65 32 20 69 64  " "; " "type2 id
0dd0: 32 22 20 22 3b 20 22 20 22 74 79 70 65 33 20 69  2" "; " "type3 i
0de0: 64 33 22 20 22 3b 20 7d 22 0a 2e 66 69 0a 79 6f  d3" "; }"..fi.yo
0df0: 75 20 63 61 6e 20 73 70 65 63 69 66 79 0a 2e 49  u can specify..I
0e00: 20 73 70 6c 69 74 74 61 62 6c 65 0a 61 73 0a 2e   splittable.as..
0e10: 42 49 20 22 76 61 5f 77 6f 72 64 5f 73 70 6c 69  BI "va_word_spli
0e20: 74 74 61 62 6c 65 5f 33 20 28 22 20 74 79 70 65  ttable_3 (" type
0e30: 31 20 22 2c 20 22 20 74 79 70 65 32 20 22 2c 20  1 ", " type2 ", 
0e40: 22 20 74 79 70 65 33 20 29 0a 2e 52 42 20 2e 0a  " type3 )..RB ..
0e50: 0a 2e 53 48 20 4e 4f 54 45 53 0a 0a 46 75 6e 63  ..SH NOTES..Func
0e60: 74 69 6f 6e 73 20 77 68 69 63 68 20 77 61 6e 74  tions which want
0e70: 20 74 6f 20 65 6d 75 6c 61 74 65 20 4b 65 72 6e   to emulate Kern
0e80: 69 67 68 61 6e 20 26 20 52 69 74 63 68 69 65 20  ighan & Ritchie 
0e90: 73 74 79 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  style functions 
0ea0: 28 69 2e 65 2e 2c 0a 69 6e 20 41 4e 53 49 20 43  (i.e.,.in ANSI C
0eb0: 2c 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68  , functions with
0ec0: 6f 75 74 20 61 20 74 79 70 65 64 20 61 72 67 75  out a typed argu
0ed0: 6d 65 6e 74 20 6c 69 73 74 29 20 63 61 6e 6e 6f  ment list) canno
0ee0: 74 20 75 73 65 20 74 68 65 0a 2e 49 20 74 79 70  t use the..I typ
0ef0: 65 0a 76 61 6c 75 65 73 0a 2e 42 52 20 63 68 61  e.values..BR cha
0f00: 72 20 22 2c 20 22 20 73 63 68 61 72 20 22 2c 20  r ", " schar ", 
0f10: 22 20 75 63 68 61 72 20 22 2c 20 22 20 73 68 6f  " uchar ", " sho
0f20: 72 74 20 22 2c 20 22 20 75 73 68 6f 72 74 20 22  rt ", " ushort "
0f30: 2c 20 22 20 66 6c 6f 61 74 20 2e 0a 41 73 20 70  , " float ..As p
0f40: 72 65 73 63 72 69 62 65 64 20 62 79 20 74 68 65  rescribed by the
0f50: 20 64 65 66 61 75 6c 74 20 4b 26 52 20 43 20 65   default K&R C e
0f60: 78 70 72 65 73 73 69 6f 6e 20 70 72 6f 6d 6f 74  xpression promot
0f70: 69 6f 6e 73 2c 20 74 68 65 79 20 68 61 76 65 0a  ions, they have.
0f80: 74 6f 20 75 73 65 0a 2e 42 20 69 6e 74 0a 69 6e  to use..B int.in
0f90: 73 74 65 61 64 20 6f 66 0a 2e 42 52 20 63 68 61  stead of..BR cha
0fa0: 72 20 22 2c 20 22 20 73 63 68 61 72 20 22 2c 20  r ", " schar ", 
0fb0: 22 20 75 63 68 61 72 20 22 2c 20 22 20 73 68 6f  " uchar ", " sho
0fc0: 72 74 20 22 2c 20 22 20 75 73 68 6f 72 74 0a 61  rt ", " ushort.a
0fd0: 6e 64 0a 2e 42 20 64 6f 75 62 6c 65 0a 69 6e 73  nd..B double.ins
0fe0: 74 65 61 64 20 6f 66 0a 2e 42 52 20 66 6c 6f 61  tead of..BR floa
0ff0: 74 20 2e 0a 0a 54 68 65 20 6d 61 63 72 6f 73 0a  t ...The macros.
1000: 2e 42 52 20 76 61 5f 73 74 61 72 74 5f 6c 6f 6e  .BR va_start_lon
1010: 67 6c 6f 6e 67 28 5c 7c 29 20 2c 0a 2e 42 52 20  glong(\|) ,..BR 
1020: 76 61 5f 73 74 61 72 74 5f 75 6c 6f 6e 67 6c 6f  va_start_ulonglo
1030: 6e 67 28 5c 7c 29 20 2c 0a 2e 42 52 20 76 61 5f  ng(\|) ,..BR va_
1040: 72 65 74 75 72 6e 5f 6c 6f 6e 67 6c 6f 6e 67 28  return_longlong(
1050: 5c 7c 29 20 2c 0a 2e 42 52 20 76 61 5f 72 65 74  \|) ,..BR va_ret
1060: 75 72 6e 5f 75 6c 6f 6e 67 6c 6f 6e 67 28 5c 7c  urn_ulonglong(\|
1070: 29 20 2c 0a 2e 42 20 76 61 5f 61 72 67 5f 6c 6f  ) ,..B va_arg_lo
1080: 6e 67 6c 6f 6e 67 28 5c 7c 29 0a 61 6e 64 0a 2e  nglong(\|).and..
1090: 42 20 76 61 5f 61 72 67 5f 75 6c 6f 6e 67 6c 6f  B va_arg_ulonglo
10a0: 6e 67 28 5c 7c 29 0a 77 6f 72 6b 20 6f 6e 6c 79  ng(\|).work only
10b0: 20 69 66 20 74 68 65 20 43 20 63 6f 6d 70 69 6c   if the C compil
10c0: 65 72 20 68 61 73 20 61 20 77 6f 72 6b 69 6e 67  er has a working
10d0: 0a 2e 42 20 6c 6f 6e 67 20 6c 6f 6e 67 0a 36 34  ..B long long.64
10e0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 74 79 70  -bit integer typ
10f0: 65 2e 0a 0a 54 68 65 20 73 74 72 75 63 74 20 74  e...The struct t
1100: 79 70 65 73 20 75 73 65 64 20 69 6e 0a 2e 42 20  ypes used in..B 
1110: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 28  va_start_struct(
1120: 5c 7c 29 0a 61 6e 64 0a 2e 42 20 76 61 5f 73 74  \|).and..B va_st
1130: 72 75 63 74 28 5c 7c 29 0a 6d 75 73 74 20 6f 6e  ruct(\|).must on
1140: 6c 79 20 63 6f 6e 74 61 69 6e 20 28 73 69 67 6e  ly contain (sign
1150: 65 64 20 6f 72 20 75 6e 73 69 67 6e 65 64 29 20  ed or unsigned) 
1160: 69 6e 74 2c 20 6c 6f 6e 67 2c 20 6c 6f 6e 67 20  int, long, long 
1170: 6c 6f 6e 67 20 6f 72 20 70 6f 69 6e 74 65 72 20  long or pointer 
1180: 66 69 65 6c 64 73 2e 0a 53 74 72 75 63 74 20 74  fields..Struct t
1190: 79 70 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ypes containing 
11a0: 28 73 69 67 6e 65 64 20 6f 72 20 75 6e 73 69 67  (signed or unsig
11b0: 6e 65 64 29 20 63 68 61 72 2c 20 73 68 6f 72 74  ned) char, short
11c0: 2c 20 66 6c 6f 61 74 2c 20 64 6f 75 62 6c 65 20  , float, double 
11d0: 6f 72 0a 6f 74 68 65 72 20 73 74 72 75 63 74 73  or.other structs
11e0: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
11f0: 65 64 2e 0a 0a 2e 53 48 20 45 58 41 4d 50 4c 45  ed....SH EXAMPLE
1200: 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 2c 20  ..This example, 
1210: 61 20 70 6f 73 73 69 62 6c 65 20 69 6d 70 6c 65  a possible imple
1220: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2e 42 52  mentation of..BR
1230: 20 65 78 65 63 6c 20 28 33 29 0a 6f 6e 20 74 6f   execl (3).on to
1240: 70 20 6f 66 0a 2e 42 52 20 65 78 65 63 76 20 28  p of..BR execv (
1250: 32 29 0a 75 73 69 6e 67 0a 2e 42 52 20 76 61 72  2).using..BR var
1260: 61 72 67 73 20 28 33 29 2c 0a 0a 2e 6e 66 0a 2e  args (3),...nf..
1270: 66 74 20 42 0a 23 69 6e 63 6c 75 64 65 20 3c 76  ft B.#include <v
1280: 61 72 61 72 67 73 2e 68 3e 0a 23 64 65 66 69 6e  arargs.h>.#defin
1290: 65 20 4d 41 58 41 52 47 53 20 31 30 30 0a 2f 2a  e MAXARGS 100./*
12a0: 20 65 78 65 63 6c 20 69 73 20 63 61 6c 6c 65 64   execl is called
12b0: 20 62 79 20 65 78 65 63 6c 28 66 69 6c 65 2c 20   by execl(file, 
12c0: 61 72 67 31 2c 20 61 72 67 32 2c 20 2e 2e 2e 2c  arg1, arg2, ...,
12d0: 20 28 63 68 61 72 20 2a 29 30 29 3b 20 2a 2f 0a   (char *)0); */.
12e0: 69 6e 74 20 65 78 65 63 6c 20 28 76 61 5f 61 6c  int execl (va_al
12f0: 69 73 74 29 0a 20 20 76 61 5f 64 63 6c 0a 7b 0a  ist).  va_dcl.{.
1300: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
1310: 63 68 61 72 2a 20 66 69 6c 65 3b 0a 20 20 63 68  char* file;.  ch
1320: 61 72 2a 20 61 72 67 73 5b 4d 41 58 41 52 47 53  ar* args[MAXARGS
1330: 5d 3b 0a 20 20 69 6e 74 20 61 72 67 6e 6f 20 3d  ];.  int argno =
1340: 20 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 20 28   0;.  va_start (
1350: 61 70 29 3b 0a 20 20 66 69 6c 65 20 3d 20 76 61  ap);.  file = va
1360: 5f 61 72 67 28 61 70 2c 20 63 68 61 72 2a 29 3b  _arg(ap, char*);
1370: 0a 20 20 77 68 69 6c 65 20 28 28 61 72 67 73 5b  .  while ((args[
1380: 61 72 67 6e 6f 5d 20 3d 20 76 61 5f 61 72 67 28  argno] = va_arg(
1390: 61 70 2c 20 63 68 61 72 2a 29 29 20 21 3d 20 28  ap, char*)) != (
13a0: 63 68 61 72 20 2a 29 30 29 0a 20 20 20 20 61 72  char *)0).    ar
13b0: 67 6e 6f 2b 2b 3b 0a 20 20 76 61 5f 65 6e 64 20  gno++;.  va_end 
13c0: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 65  (ap);.  return e
13d0: 78 65 63 76 28 66 69 6c 65 2c 20 61 72 67 73 29  xecv(file, args)
13e0: 3b 0a 7d 0a 2e 66 74 0a 2e 66 69 0a 0a 6c 6f 6f  ;.}..ft..fi..loo
13f0: 6b 73 20 6c 69 6b 65 20 74 68 69 73 20 75 73 69  ks like this usi
1400: 6e 67 0a 2e 42 52 20 76 61 63 61 6c 6c 20 28 33  ng..BR vacall (3
1410: 29 3a 0a 0a 2e 6e 66 0a 2e 66 74 20 42 0a 23 69  ):...nf..ft B.#i
1420: 6e 63 6c 75 64 65 20 3c 76 61 63 61 6c 6c 2e 68  nclude <vacall.h
1430: 3e 0a 23 64 65 66 69 6e 65 20 4d 41 58 41 52 47  >.#define MAXARG
1440: 53 20 31 30 30 0a 2f 2a 20 65 78 65 63 6c 20 69  S 100./* execl i
1450: 73 20 63 61 6c 6c 65 64 20 62 79 20 76 61 63 61  s called by vaca
1460: 6c 6c 28 66 69 6c 65 2c 20 61 72 67 31 2c 20 61  ll(file, arg1, a
1470: 72 67 32 2c 20 2e 2e 2e 2c 20 28 63 68 61 72 20  rg2, ..., (char 
1480: 2a 29 30 29 3b 20 2a 2f 0a 76 6f 69 64 20 65 78  *)0); */.void ex
1490: 65 63 6c 20 28 61 70 29 0a 20 20 76 61 5f 61 6c  ecl (ap).  va_al
14a0: 69 73 74 20 61 70 3b 0a 7b 0a 20 20 63 68 61 72  ist ap;.{.  char
14b0: 2a 20 66 69 6c 65 3b 0a 20 20 63 68 61 72 2a 20  * file;.  char* 
14c0: 61 72 67 73 5b 4d 41 58 41 52 47 53 5d 3b 0a 20  args[MAXARGS];. 
14d0: 20 69 6e 74 20 61 72 67 6e 6f 20 3d 20 30 3b 0a   int argno = 0;.
14e0: 20 20 69 6e 74 20 72 65 74 76 61 6c 3b 0a 20 20    int retval;.  
14f0: 76 61 5f 73 74 61 72 74 5f 69 6e 74 20 28 61 70  va_start_int (ap
1500: 29 3b 0a 20 20 66 69 6c 65 20 3d 20 76 61 5f 61  );.  file = va_a
1510: 72 67 5f 70 74 72 28 61 70 2c 20 63 68 61 72 2a  rg_ptr(ap, char*
1520: 29 3b 0a 20 20 77 68 69 6c 65 20 28 28 61 72 67  );.  while ((arg
1530: 73 5b 61 72 67 6e 6f 5d 20 3d 20 76 61 5f 61 72  s[argno] = va_ar
1540: 67 5f 70 74 72 28 61 70 2c 20 63 68 61 72 2a 29  g_ptr(ap, char*)
1550: 29 20 21 3d 20 28 63 68 61 72 20 2a 29 30 29 0a  ) != (char *)0).
1560: 20 20 20 20 61 72 67 6e 6f 2b 2b 3b 0a 20 20 72      argno++;.  r
1570: 65 74 76 61 6c 20 3d 20 65 78 65 63 76 28 66 69  etval = execv(fi
1580: 6c 65 2c 20 61 72 67 73 29 3b 0a 20 20 76 61 5f  le, args);.  va_
1590: 72 65 74 75 72 6e 5f 69 6e 74 20 28 61 70 2c 20  return_int (ap, 
15a0: 72 65 74 76 61 6c 29 3b 0a 7d 0a 76 61 63 61 6c  retval);.}.vacal
15b0: 6c 5f 66 75 6e 63 74 69 6f 6e 20 3d 20 26 65 78  l_function = &ex
15c0: 65 63 6c 3b 0a 2e 66 74 0a 2e 66 69 0a 0a 2e 53  ecl;..ft..fi...S
15d0: 48 20 53 45 45 20 41 4c 53 4f 0a 2e 42 52 20 76  H SEE ALSO..BR v
15e0: 61 72 61 72 67 73 20 28 33 29 2c 0a 2e 42 52 20  arargs (3),..BR 
15f0: 74 72 61 6d 70 6f 6c 69 6e 65 20 28 33 29 2c 0a  trampoline (3),.
1600: 2e 42 52 20 63 61 6c 6c 62 61 63 6b 20 28 33 29  .BR callback (3)
1610: 2e 0a 0a 2e 53 48 20 42 55 47 53 0a 0a 54 68 65  ....SH BUGS..The
1620: 20 63 75 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65   current impleme
1630: 6e 74 61 74 69 6f 6e 73 20 68 61 76 65 20 62 65  ntations have be
1640: 65 6e 20 74 65 73 74 65 64 20 6f 6e 20 61 20 73  en tested on a s
1650: 65 6c 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6d 6d  election of comm
1660: 6f 6e 0a 63 61 73 65 73 20 62 75 74 20 74 68 65  on.cases but the
1670: 72 65 20 61 72 65 20 70 72 6f 62 61 62 6c 79 20  re are probably 
1680: 73 74 69 6c 6c 20 6d 61 6e 79 20 62 75 67 73 2e  still many bugs.
1690: 0a 0a 54 68 65 72 65 20 61 72 65 20 74 79 70 69  ..There are typi
16a0: 63 61 6c 6c 79 20 62 75 69 6c 74 2d 69 6e 20 6c  cally built-in l
16b0: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 73 69 7a  imits on the siz
16c0: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
16d0: 74 2d 6c 69 73 74 2c 0a 77 68 69 63 68 20 6d 61  t-list,.which ma
16e0: 79 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65 20 74  y also include t
16f0: 68 65 20 73 69 7a 65 20 6f 66 20 61 6e 79 20 73  he size of any s
1700: 74 72 75 63 74 75 72 65 20 61 72 67 75 6d 65 6e  tructure argumen
1710: 74 73 2e 0a 0a 54 68 65 20 64 65 63 69 73 69 6f  ts...The decisio
1720: 6e 20 77 68 65 74 68 65 72 20 61 20 73 74 72 75  n whether a stru
1730: 63 74 20 69 73 20 74 6f 20 62 65 20 72 65 74 75  ct is to be retu
1740: 72 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  rned in register
1750: 73 20 6f 72 20 69 6e 20 6d 65 6d 6f 72 79 0a 63  s or in memory.c
1760: 6f 6e 73 69 64 65 72 73 20 6f 6e 6c 79 20 74 68  onsiders only th
1770: 65 20 73 74 72 75 63 74 27 73 20 73 69 7a 65 20  e struct's size 
1780: 61 6e 64 20 61 6c 69 67 6e 6d 65 6e 74 2e 20 54  and alignment. T
1790: 68 69 73 20 69 73 20 69 6e 61 63 63 75 72 61 74  his is inaccurat
17a0: 65 3a 20 66 6f 72 0a 65 78 61 6d 70 6c 65 2c 20  e: for.example, 
17b0: 67 63 63 20 6f 6e 20 6d 36 38 6b 2d 6e 65 78 74  gcc on m68k-next
17c0: 20 72 65 74 75 72 6e 73 0a 2e 42 20 22 73 74 72   returns..B "str
17d0: 75 63 74 20 7b 20 63 68 61 72 20 61 2c 62 2c 63  uct { char a,b,c
17e0: 3b 20 7d 22 0a 69 6e 20 72 65 67 69 73 74 65 72  ; }".in register
17f0: 73 20 61 6e 64 0a 2e 42 20 22 73 74 72 75 63 74  s and..B "struct
1800: 20 7b 20 63 68 61 72 20 61 5b 33 5d 3b 20 7d 22   { char a[3]; }"
1810: 0a 69 6e 20 6d 65 6d 6f 72 79 2c 20 61 6c 74 68  .in memory, alth
1820: 6f 75 67 68 20 62 6f 74 68 20 74 79 70 65 73 20  ough both types 
1830: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 73 69  have the same si
1840: 7a 65 20 61 6e 64 20 74 68 65 20 73 61 6d 65 20  ze and the same 
1850: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 0a 2e 42 20 3c  alignment....B <
1860: 76 61 63 61 6c 6c 2e 68 3e 0a 63 61 6e 6e 6f 74  vacall.h>.cannot
1870: 20 62 65 20 69 6e 63 6c 75 64 65 64 20 77 68 65   be included whe
1880: 6e 0a 2e 42 20 3c 76 61 72 61 72 67 73 2e 68 3e  n..B <varargs.h>
1890: 0a 6f 72 0a 2e 42 20 3c 73 74 64 61 72 67 2e 68  .or..B <stdarg.h
18a0: 3e 0a 69 73 20 69 6e 63 6c 75 64 65 64 2e 0a 28  >.is included..(
18b0: 4e 61 6d 65 20 63 6c 61 73 68 20 66 6f 72 0a 2e  Name clash for..
18c0: 42 52 20 76 61 5f 61 6c 69 73 74 20 22 2e 29 22  BR va_alist ".)"
18d0: 0a 0a 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6c  ..The argument l
18e0: 69 73 74 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ist can only be 
18f0: 77 61 6c 6b 65 64 20 6f 6e 63 65 2e 0a 0a 54 68  walked once...Th
1900: 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 6c 6f  e use of the glo
1910: 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2e 42 20  bal variable..B 
1920: 76 61 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e 0a  vacall_function.
1930: 69 73 20 6e 6f 74 20 72 65 65 6e 74 72 61 6e 74  is not reentrant
1940: 2e 20 54 68 69 73 20 69 73 20 66 69 78 65 64 20  . This is fixed 
1950: 69 6e 20 74 68 65 0a 2e 42 52 20 63 61 6c 6c 62  in the..BR callb
1960: 61 63 6b 20 28 33 29 0a 70 61 63 6b 61 67 65 2e  ack (3).package.
1970: 0a 0a 2e 53 48 20 50 4f 52 54 49 4e 47 0a 0a 4b  ...SH PORTING..K
1980: 6e 6f 77 6c 65 64 67 65 20 61 62 6f 75 74 20 61  nowledge about a
1990: 72 67 75 6d 65 6e 74 20 70 61 73 73 69 6e 67 20  rgument passing 
19a0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 20 63 61 6e 20  conventions can 
19b0: 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  be found in the 
19c0: 67 63 63 0a 73 6f 75 72 63 65 2c 20 66 69 6c 65  gcc.source, file
19d0: 0a 2e 52 49 20 67 63 63 2d 32 2e 36 2e 33 2f 63  ..RI gcc-2.6.3/c
19e0: 6f 6e 66 69 67 2f 20 63 70 75 20 2f 20 63 70 75  onfig/ cpu / cpu
19f0: 20 2e 68 2c 0a 73 65 63 74 69 6f 6e 20 22 53 74   .h,.section "St
1a00: 61 63 6b 20 6c 61 79 6f 75 74 3b 20 66 75 6e 63  ack layout; func
1a10: 74 69 6f 6e 20 65 6e 74 72 79 2c 20 65 78 69 74  tion entry, exit
1a20: 20 61 6e 64 20 63 61 6c 6c 69 6e 67 2e 22 0a 0a   and calling."..
1a30: 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
1a40: 6f 6e 20 6f 66 20 76 61 72 61 72 67 73 20 66 6f  on of varargs fo
1a50: 72 20 67 63 63 20 63 61 6e 20 62 65 20 66 6f 75  r gcc can be fou
1a60: 6e 64 20 69 6e 20 74 68 65 20 67 63 63 20 73 6f  nd in the gcc so
1a70: 75 72 63 65 2c 20 66 69 6c 65 73 0a 67 63 63 2d  urce, files.gcc-
1a80: 32 2e 36 2e 33 2f 67 69 6e 63 6c 75 64 65 2f 76  2.6.3/ginclude/v
1a90: 61 2a 2e 68 2e 0a 0a 67 63 63 27 73 20 5f 5f 62  a*.h...gcc's __b
1aa0: 75 69 6c 74 69 6e 5f 73 61 76 65 72 65 67 73 28  uiltin_saveregs(
1ab0: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  ) function is de
1ac0: 66 69 6e 65 64 20 69 6e 20 74 68 65 20 67 63 63  fined in the gcc
1ad0: 20 73 6f 75 72 63 65 2c 20 66 69 6c 65 0a 67 63   source, file.gc
1ae0: 63 2d 32 2e 36 2e 33 2f 6c 69 62 67 63 63 32 2e  c-2.6.3/libgcc2.
1af0: 63 2e 0a 0a 2e 53 48 20 41 55 54 48 4f 52 0a 0a  c....SH AUTHOR..
1b00: 42 72 75 6e 6f 20 48 61 69 62 6c 65 20 3c 62 72  Bruno Haible <br
1b10: 75 6e 6f 40 63 6c 69 73 70 2e 6f 72 67 3e 0a 0a  uno@clisp.org>..
1b20: 2e 53 48 20 41 43 4b 4e 4f 57 4c 45 44 47 45 4d  .SH ACKNOWLEDGEM
1b30: 45 4e 54 53 0a 0a 4d 61 6e 79 20 69 64 65 61 73  ENTS..Many ideas
1b40: 20 61 6e 64 20 61 20 6c 6f 74 20 6f 66 20 63 6f   and a lot of co
1b50: 64 65 20 77 65 72 65 20 63 72 69 62 62 65 64 20  de were cribbed 
1b60: 66 72 6f 6d 20 74 68 65 20 67 63 63 20 73 6f 75  from the gcc sou
1b70: 72 63 65 2e 0a 0a                                rce...