1
2
3
4
5
6
7
8
9
10#ifndef __GNUC_VA_LIST
11#define __GNUC_VA_LIST
12
13
14
15#ifdef __VMS__
16typedef char *__gnuc_va_list;
17#else
18
19typedef struct {
20 char *__base;
21 int __offset;
22} __gnuc_va_list;
23#endif
24
25#endif
26
27
28
29
30#if !defined(__GNUC_VA_LIST_1) && (defined (_STDARG_H) || defined (_VARARGS_H))
31#define __GNUC_VA_LIST_1
32
33#define _VA_LIST
34#define _VA_LIST_
35
36typedef __gnuc_va_list va_list;
37
38#if !defined(_STDARG_H)
39
40
41#define va_alist __builtin_va_alist
42#define va_dcl int __builtin_va_alist;...
43#ifdef __VMS__
44#define va_start(pvar) ((pvar) = __builtin_saveregs ())
45#else
46#define va_start(pvar) ((pvar) = * (__gnuc_va_list *) __builtin_saveregs ())
47#endif
48
49#else
50
51
52
53
54
55
56#ifdef __VMS__
57#define va_start(pvar, firstarg) \
58 (__builtin_next_arg (firstarg), \
59 (pvar) = __builtin_saveregs ())
60#else
61#define va_start(pvar, firstarg) \
62 (__builtin_next_arg (firstarg), \
63 (pvar) = *(__gnuc_va_list *) __builtin_saveregs ())
64#endif
65
66#endif
67
68#define va_end(__va) ((void) 0)
69
70
71
72enum {
73 __no_type_class = -1,
74 __void_type_class,
75 __integer_type_class,
76 __char_type_class,
77 __enumeral_type_class,
78 __boolean_type_class,
79 __pointer_type_class,
80 __reference_type_class,
81 __offset_type_class,
82 __real_type_class,
83 __complex_type_class,
84 __function_type_class,
85 __method_type_class,
86 __record_type_class,
87 __union_type_class,
88 __array_type_class,
89 __string_type_class,
90 __set_type_class,
91 __file_type_class,
92 __lang_type_class
93};
94
95
96
97
98
99#if __GNUC__ == 1
100#define __extension__
101#endif
102
103
104
105
106#define __va_tsize(__type) \
107 (((sizeof (__type) + __extension__ sizeof (long long) - 1) \
108 / __extension__ sizeof (long long)) * __extension__ sizeof (long long))
109
110#ifdef __VMS__
111#define va_arg(__va, __type) \
112(*(((__va) += __va_tsize (__type)), \
113 (__type *)(void *)((__va) - __va_tsize (__type))))
114
115#else
116
117#define va_arg(__va, __type) \
118(*(((__va).__offset += __va_tsize (__type)), \
119 (__type *)(void *)((__va).__base + (__va).__offset \
120 - (((__builtin_classify_type (* (__type *) 0) \
121 == __real_type_class) && (__va).__offset <= (6 * 8)) \
122 ? (6 * 8) + 8 : __va_tsize (__type)))))
123#endif
124
125
126#define __va_copy(dest, src) (dest) = (src)
127
128#endif
129