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...