1 // Copyright (c) 2016-2017 Nuxi (https://nuxi.nl/) and contributors.
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions
5 // are met:
6 // 1. Redistributions of source code must retain the above copyright
7 //    notice, this list of conditions and the following disclaimer.
8 // 2. Redistributions in binary form must reproduce the above copyright
9 //    notice, this list of conditions and the following disclaimer in the
10 //    documentation and/or other materials provided with the distribution.
11 //
12 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15 // ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18 // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22 // SUCH DAMAGE.
23 //
24 // This file is automatically generated. Do not edit.
25 //
26 // Source: https://github.com/NuxiNL/cloudabi
27 
28 #ifndef CLOUDABI_TYPES_H
29 #define CLOUDABI_TYPES_H
30 
31 #include "cloudabi_types_common.h"
32 
33 typedef struct {
34   _Alignas(4) cloudabi_auxtype_t a_type;
35   union {
36     size_t a_val;
37     void *a_ptr;
38   };
39 } cloudabi_auxv_t;
40 _Static_assert(offsetof(cloudabi_auxv_t, a_type) == 0, "Incorrect layout");
41 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_auxv_t, a_val) == 4, "Incorrect layout");
42 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_auxv_t, a_val) == 8, "Incorrect layout");
43 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_auxv_t, a_ptr) == 4, "Incorrect layout");
44 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_auxv_t, a_ptr) == 8, "Incorrect layout");
45 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_auxv_t) == 8, "Incorrect layout");
46 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_auxv_t) == 16, "Incorrect layout");
47 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_auxv_t) == 4, "Incorrect layout");
48 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_auxv_t) == 8, "Incorrect layout");
49 
50 typedef struct {
51   const void *buf;
52   size_t buf_len;
53 } cloudabi_ciovec_t;
54 _Static_assert(offsetof(cloudabi_ciovec_t, buf) == 0, "Incorrect layout");
55 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_ciovec_t, buf_len) == 4, "Incorrect layout");
56 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_ciovec_t, buf_len) == 8, "Incorrect layout");
57 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_ciovec_t) == 8, "Incorrect layout");
58 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_ciovec_t) == 16, "Incorrect layout");
59 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_ciovec_t) == 4, "Incorrect layout");
60 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_ciovec_t) == 8, "Incorrect layout");
61 
62 typedef struct {
63   void *buf;
64   size_t buf_len;
65 } cloudabi_iovec_t;
66 _Static_assert(offsetof(cloudabi_iovec_t, buf) == 0, "Incorrect layout");
67 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_iovec_t, buf_len) == 4, "Incorrect layout");
68 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_iovec_t, buf_len) == 8, "Incorrect layout");
69 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_iovec_t) == 8, "Incorrect layout");
70 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_iovec_t) == 16, "Incorrect layout");
71 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_iovec_t) == 4, "Incorrect layout");
72 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_iovec_t) == 8, "Incorrect layout");
73 
74 typedef void cloudabi_processentry_t(const cloudabi_auxv_t *auxv);
75 
76 typedef struct {
77   const cloudabi_iovec_t *ri_data;
78   size_t ri_data_len;
79   cloudabi_fd_t *ri_fds;
80   size_t ri_fds_len;
81   _Alignas(2) cloudabi_riflags_t ri_flags;
82 } cloudabi_recv_in_t;
83 _Static_assert(offsetof(cloudabi_recv_in_t, ri_data) == 0, "Incorrect layout");
84 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_in_t, ri_data_len) == 4, "Incorrect layout");
85 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_in_t, ri_data_len) == 8, "Incorrect layout");
86 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_in_t, ri_fds) == 8, "Incorrect layout");
87 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_in_t, ri_fds) == 16, "Incorrect layout");
88 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_in_t, ri_fds_len) == 12, "Incorrect layout");
89 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_in_t, ri_fds_len) == 24, "Incorrect layout");
90 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_in_t, ri_flags) == 16, "Incorrect layout");
91 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_in_t, ri_flags) == 32, "Incorrect layout");
92 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_recv_in_t) == 20, "Incorrect layout");
93 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_recv_in_t) == 40, "Incorrect layout");
94 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_recv_in_t) == 4, "Incorrect layout");
95 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_recv_in_t) == 8, "Incorrect layout");
96 
97 typedef struct {
98   size_t ro_datalen;
99   size_t ro_fdslen;
100   _Alignas(1) char ro_unused[40];
101   _Alignas(2) cloudabi_roflags_t ro_flags;
102 } cloudabi_recv_out_t;
103 _Static_assert(offsetof(cloudabi_recv_out_t, ro_datalen) == 0, "Incorrect layout");
104 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_out_t, ro_fdslen) == 4, "Incorrect layout");
105 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_out_t, ro_fdslen) == 8, "Incorrect layout");
106 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_out_t, ro_unused) == 8, "Incorrect layout");
107 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_out_t, ro_unused) == 16, "Incorrect layout");
108 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_recv_out_t, ro_flags) == 48, "Incorrect layout");
109 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_recv_out_t, ro_flags) == 56, "Incorrect layout");
110 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_recv_out_t) == 52, "Incorrect layout");
111 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_recv_out_t) == 64, "Incorrect layout");
112 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_recv_out_t) == 4, "Incorrect layout");
113 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_recv_out_t) == 8, "Incorrect layout");
114 
115 typedef struct {
116   const cloudabi_ciovec_t *si_data;
117   size_t si_data_len;
118   const cloudabi_fd_t *si_fds;
119   size_t si_fds_len;
120   _Alignas(2) cloudabi_siflags_t si_flags;
121 } cloudabi_send_in_t;
122 _Static_assert(offsetof(cloudabi_send_in_t, si_data) == 0, "Incorrect layout");
123 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_send_in_t, si_data_len) == 4, "Incorrect layout");
124 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_send_in_t, si_data_len) == 8, "Incorrect layout");
125 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_send_in_t, si_fds) == 8, "Incorrect layout");
126 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_send_in_t, si_fds) == 16, "Incorrect layout");
127 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_send_in_t, si_fds_len) == 12, "Incorrect layout");
128 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_send_in_t, si_fds_len) == 24, "Incorrect layout");
129 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_send_in_t, si_flags) == 16, "Incorrect layout");
130 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_send_in_t, si_flags) == 32, "Incorrect layout");
131 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_send_in_t) == 20, "Incorrect layout");
132 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_send_in_t) == 40, "Incorrect layout");
133 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_send_in_t) == 4, "Incorrect layout");
134 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_send_in_t) == 8, "Incorrect layout");
135 
136 typedef struct {
137   size_t so_datalen;
138 } cloudabi_send_out_t;
139 _Static_assert(offsetof(cloudabi_send_out_t, so_datalen) == 0, "Incorrect layout");
140 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_send_out_t) == 4, "Incorrect layout");
141 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_send_out_t) == 8, "Incorrect layout");
142 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_send_out_t) == 4, "Incorrect layout");
143 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_send_out_t) == 8, "Incorrect layout");
144 
145 typedef struct {
146   _Alignas(8) cloudabi_userdata_t userdata;
147   _Alignas(2) uint16_t unused;
148   _Alignas(1) cloudabi_eventtype_t type;
149   union {
150     struct {
151       _Alignas(8) cloudabi_userdata_t identifier;
152       _Alignas(4) cloudabi_clockid_t clock_id;
153       _Alignas(8) cloudabi_timestamp_t timeout;
154       _Alignas(8) cloudabi_timestamp_t precision;
155       _Alignas(2) cloudabi_subclockflags_t flags;
156     } clock;
157     struct {
158       _Atomic(cloudabi_condvar_t) *condvar;
159       _Atomic(cloudabi_lock_t) *lock;
160       _Alignas(1) cloudabi_scope_t condvar_scope;
161       _Alignas(1) cloudabi_scope_t lock_scope;
162     } condvar;
163     struct {
164       _Alignas(4) cloudabi_fd_t fd;
165       _Alignas(2) cloudabi_subrwflags_t flags;
166     } fd_readwrite;
167     struct {
168       _Atomic(cloudabi_lock_t) *lock;
169       _Alignas(1) cloudabi_scope_t lock_scope;
170     } lock;
171     struct {
172       _Alignas(4) cloudabi_fd_t fd;
173     } proc_terminate;
174   };
175 } cloudabi_subscription_t;
176 _Static_assert(offsetof(cloudabi_subscription_t, userdata) == 0, "Incorrect layout");
177 _Static_assert(offsetof(cloudabi_subscription_t, unused) == 8, "Incorrect layout");
178 _Static_assert(offsetof(cloudabi_subscription_t, type) == 10, "Incorrect layout");
179 _Static_assert(offsetof(cloudabi_subscription_t, clock.identifier) == 16, "Incorrect layout");
180 _Static_assert(offsetof(cloudabi_subscription_t, clock.clock_id) == 24, "Incorrect layout");
181 _Static_assert(offsetof(cloudabi_subscription_t, clock.timeout) == 32, "Incorrect layout");
182 _Static_assert(offsetof(cloudabi_subscription_t, clock.precision) == 40, "Incorrect layout");
183 _Static_assert(offsetof(cloudabi_subscription_t, clock.flags) == 48, "Incorrect layout");
184 _Static_assert(offsetof(cloudabi_subscription_t, condvar.condvar) == 16, "Incorrect layout");
185 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_subscription_t, condvar.lock) == 20, "Incorrect layout");
186 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_subscription_t, condvar.lock) == 24, "Incorrect layout");
187 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_subscription_t, condvar.condvar_scope) == 24, "Incorrect layout");
188 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_subscription_t, condvar.condvar_scope) == 32, "Incorrect layout");
189 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_subscription_t, condvar.lock_scope) == 25, "Incorrect layout");
190 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_subscription_t, condvar.lock_scope) == 33, "Incorrect layout");
191 _Static_assert(offsetof(cloudabi_subscription_t, fd_readwrite.fd) == 16, "Incorrect layout");
192 _Static_assert(offsetof(cloudabi_subscription_t, fd_readwrite.flags) == 20, "Incorrect layout");
193 _Static_assert(offsetof(cloudabi_subscription_t, lock.lock) == 16, "Incorrect layout");
194 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_subscription_t, lock.lock_scope) == 20, "Incorrect layout");
195 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_subscription_t, lock.lock_scope) == 24, "Incorrect layout");
196 _Static_assert(offsetof(cloudabi_subscription_t, proc_terminate.fd) == 16, "Incorrect layout");
197 _Static_assert(sizeof(cloudabi_subscription_t) == 56, "Incorrect layout");
198 _Static_assert(_Alignof(cloudabi_subscription_t) == 8, "Incorrect layout");
199 
200 typedef struct {
201   void *parent;
202 } cloudabi_tcb_t;
203 _Static_assert(offsetof(cloudabi_tcb_t, parent) == 0, "Incorrect layout");
204 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_tcb_t) == 4, "Incorrect layout");
205 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_tcb_t) == 8, "Incorrect layout");
206 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_tcb_t) == 4, "Incorrect layout");
207 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_tcb_t) == 8, "Incorrect layout");
208 
209 typedef void cloudabi_threadentry_t(cloudabi_tid_t tid, void *aux);
210 
211 typedef struct {
212   cloudabi_threadentry_t *entry_point;
213   void *stack;
214   size_t stack_len;
215   void *argument;
216 } cloudabi_threadattr_t;
217 _Static_assert(offsetof(cloudabi_threadattr_t, entry_point) == 0, "Incorrect layout");
218 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_threadattr_t, stack) == 4, "Incorrect layout");
219 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_threadattr_t, stack) == 8, "Incorrect layout");
220 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_threadattr_t, stack_len) == 8, "Incorrect layout");
221 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_threadattr_t, stack_len) == 16, "Incorrect layout");
222 _Static_assert(sizeof(void *) != 4 || offsetof(cloudabi_threadattr_t, argument) == 12, "Incorrect layout");
223 _Static_assert(sizeof(void *) != 8 || offsetof(cloudabi_threadattr_t, argument) == 24, "Incorrect layout");
224 _Static_assert(sizeof(void *) != 4 || sizeof(cloudabi_threadattr_t) == 16, "Incorrect layout");
225 _Static_assert(sizeof(void *) != 8 || sizeof(cloudabi_threadattr_t) == 32, "Incorrect layout");
226 _Static_assert(sizeof(void *) != 4 || _Alignof(cloudabi_threadattr_t) == 4, "Incorrect layout");
227 _Static_assert(sizeof(void *) != 8 || _Alignof(cloudabi_threadattr_t) == 8, "Incorrect layout");
228 
229 #endif
230