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