1 1.54 ozaki /* $NetBSD: rumpuser_port.h,v 1.54 2024/10/16 09:09:07 ozaki-r Exp $ */ 2 1.1 pooka 3 1.1 pooka #ifndef _LIB_LIBRUMPUSER_RUMPUSER_PORT_H_ 4 1.1 pooka #define _LIB_LIBRUMPUSER_RUMPUSER_PORT_H_ 5 1.1 pooka 6 1.37 pooka /* 7 1.37 pooka * Define things found by autoconf. buildrump.sh defines RUMPUSER_CONFIG, 8 1.37 pooka * the NetBSD build does not run autoconf during build and supplies the 9 1.37 pooka * necessary values here. To update the NetBSD values, run ./configure 10 1.37 pooka * for an up-to-date NetBSD installation and insert rumpuser_config.h 11 1.37 pooka * in the space below, e.g. with ":r !sed -ne '/^\#/p' rumpuser_config.h" 12 1.37 pooka */ 13 1.37 pooka #if !defined(RUMPUSER_CONFIG) 14 1.2 pooka 15 1.47 nros #define HAVE_ALIGNED_ALLOC 1 16 1.37 pooka #define HAVE_ARC4RANDOM_BUF 1 17 1.37 pooka #define HAVE_CHFLAGS 1 18 1.37 pooka #define HAVE_CLOCKID_T 1 19 1.37 pooka #define HAVE_CLOCK_GETTIME 1 20 1.38 pooka #define HAVE_CLOCK_NANOSLEEP 1 21 1.37 pooka #define HAVE_DLINFO 1 22 1.37 pooka #define HAVE_FSYNC_RANGE 1 23 1.37 pooka #define HAVE_GETENV_R 1 24 1.37 pooka #define HAVE_GETPROGNAME 1 25 1.37 pooka #define HAVE_GETSUBOPT 1 26 1.37 pooka #define HAVE_INTTYPES_H 1 27 1.37 pooka #define HAVE_KQUEUE 1 28 1.37 pooka #define HAVE_MEMORY_H 1 29 1.37 pooka #define HAVE_PATHS_H 1 30 1.37 pooka #define HAVE_POSIX_MEMALIGN 1 31 1.54 ozaki #define HAVE_PREADV 1 32 1.37 pooka #define HAVE_PTHREAD_SETNAME3 1 33 1.54 ozaki #define HAVE_PWRITEV 1 34 1.37 pooka #define HAVE_SETPROGNAME 1 35 1.37 pooka #define HAVE_STDINT_H 1 36 1.37 pooka #define HAVE_STDLIB_H 1 37 1.37 pooka #define HAVE_STRINGS_H 1 38 1.37 pooka #define HAVE_STRING_H 1 39 1.37 pooka #define HAVE_STRSUFTOLL 1 40 1.37 pooka #define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1 41 1.37 pooka #define HAVE_SYS_ATOMIC_H 1 42 1.37 pooka #define HAVE_SYS_CDEFS_H 1 43 1.37 pooka #define HAVE_SYS_DISKLABEL_H 1 44 1.37 pooka #define HAVE_SYS_DISK_H 1 45 1.37 pooka #define HAVE_SYS_DKIO_H 1 46 1.37 pooka #define HAVE_SYS_PARAM_H 1 47 1.37 pooka #define HAVE_SYS_STAT_H 1 48 1.37 pooka #define HAVE_SYS_SYSCTL_H 1 49 1.37 pooka #define HAVE_SYS_TYPES_H 1 50 1.37 pooka #define HAVE_UNISTD_H 1 51 1.49 sevan #define HAVE_UTIMENSAT 1 52 1.37 pooka #define HAVE___QUOTACTL 1 53 1.53 lukem #define PACKAGE_BUGREPORT "https://github.com/rumpkernel/" 54 1.37 pooka #define PACKAGE_NAME "rumpuser-posix" 55 1.37 pooka #define PACKAGE_STRING "rumpuser-posix 999" 56 1.37 pooka #define PACKAGE_TARNAME "rumpuser-posix" 57 1.37 pooka #define PACKAGE_URL "" 58 1.37 pooka #define PACKAGE_VERSION "999" 59 1.37 pooka #define STDC_HEADERS 1 60 1.37 pooka #ifndef _DARWIN_USE_64_BIT_INODE 61 1.37 pooka # define _DARWIN_USE_64_BIT_INODE 1 62 1.37 pooka #endif 63 1.21 pooka 64 1.37 pooka #else /* RUMPUSER_CONFIG */ 65 1.37 pooka #include "rumpuser_config.h" 66 1.2 pooka #endif 67 1.2 pooka 68 1.45 pooka #if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 69 1.37 pooka #define _GNU_SOURCE 70 1.18 pooka #endif 71 1.18 pooka 72 1.37 pooka #if defined(HAVE_SYS_CDEFS_H) 73 1.37 pooka #include <sys/cdefs.h> 74 1.37 pooka #endif 75 1.42 pooka 76 1.42 pooka /* 77 1.42 pooka * Some versions of FreeBSD (e.g. 9.2) contain C11 stuff without 78 1.42 pooka * any obvious way to expose the protos. Kludge around it. 79 1.42 pooka */ 80 1.42 pooka #ifdef __FreeBSD__ 81 1.42 pooka #if __ISO_C_VISIBLE < 2011 82 1.42 pooka #undef __ISO_C_VISIBLE 83 1.42 pooka #define __ISO_C_VISIBLE 2011 84 1.42 pooka #endif 85 1.42 pooka #endif 86 1.42 pooka 87 1.37 pooka #if defined(HAVE_SYS_PARAM_H) 88 1.37 pooka #include <sys/param.h> 89 1.37 pooka #endif 90 1.18 pooka 91 1.32 justin #ifndef MIN 92 1.32 justin #define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b)) 93 1.32 justin #endif 94 1.32 justin #ifndef MAX 95 1.32 justin #define MAX(a,b) ((/*CONSTCOND*/(a)>(b))?(a):(b)) 96 1.32 justin #endif 97 1.32 justin 98 1.37 pooka #if !defined(HAVE_GETSUBOPT) 99 1.37 pooka static inline int 100 1.37 pooka getsubopt(char **optionp, char * const *tokens, char **valuep) 101 1.37 pooka { 102 1.1 pooka 103 1.37 pooka /* TODO make a definition */ 104 1.37 pooka return -1; 105 1.37 pooka } 106 1.1 pooka #endif 107 1.1 pooka 108 1.40 justin #if !defined(HAVE_CLOCKID_T) 109 1.40 justin typedef int clockid_t; 110 1.40 justin #endif 111 1.40 justin 112 1.32 justin #ifdef __ANDROID__ 113 1.32 justin #include <stdint.h> 114 1.32 justin typedef uint16_t in_port_t; 115 1.32 justin #include <sys/select.h> 116 1.32 justin #define atomic_inc_uint(x) __sync_fetch_and_add(x, 1) 117 1.32 justin #define atomic_dec_uint(x) __sync_fetch_and_sub(x, 1) 118 1.32 justin #endif 119 1.32 justin 120 1.37 pooka /* sunny magic */ 121 1.16 pooka #if defined(__sun__) 122 1.16 pooka # if defined(RUMPUSER_NO_FILE_OFFSET_BITS) 123 1.16 pooka # undef _FILE_OFFSET_BITS 124 1.37 pooka # define _FILE_OFFSET_BITS 32 125 1.16 pooka # endif 126 1.15 pooka #endif 127 1.15 pooka 128 1.37 pooka #if !defined(HAVE_CLOCK_GETTIME) 129 1.22 rmind #include <sys/time.h> 130 1.22 rmind #define CLOCK_REALTIME 0 131 1.22 rmind static inline int 132 1.22 rmind clock_gettime(clockid_t clk, struct timespec *ts) 133 1.22 rmind { 134 1.22 rmind struct timeval tv; 135 1.22 rmind 136 1.22 rmind if (gettimeofday(&tv, 0) == 0) { 137 1.22 rmind ts->tv_sec = tv.tv_sec; 138 1.22 rmind ts->tv_nsec = tv.tv_usec * 1000; 139 1.39 pooka return 0; 140 1.22 rmind } 141 1.22 rmind return -1; 142 1.22 rmind } 143 1.37 pooka #endif 144 1.22 rmind 145 1.37 pooka #if defined(__APPLE__) 146 1.37 pooka #include <libkern/OSAtomic.h> 147 1.37 pooka #define atomic_inc_uint(x) OSAtomicIncrement32((volatile int32_t *)(x)) 148 1.37 pooka #define atomic_dec_uint(x) OSAtomicDecrement32((volatile int32_t *)(x)) 149 1.22 rmind #endif 150 1.22 rmind 151 1.1 pooka #include <sys/types.h> 152 1.1 pooka 153 1.37 pooka #if !defined(HAVE_GETENV_R) 154 1.2 pooka #include <errno.h> 155 1.2 pooka #include <stdlib.h> 156 1.2 pooka #include <string.h> 157 1.22 rmind #include <inttypes.h> 158 1.2 pooka static inline int 159 1.2 pooka getenv_r(const char *name, char *buf, size_t buflen) 160 1.2 pooka { 161 1.2 pooka char *tmp; 162 1.2 pooka 163 1.2 pooka if ((tmp = getenv(name)) != NULL) { 164 1.2 pooka if (strlen(tmp) >= buflen) { 165 1.2 pooka errno = ERANGE; 166 1.2 pooka return -1; 167 1.2 pooka } 168 1.2 pooka strcpy(buf, tmp); 169 1.2 pooka return 0; 170 1.2 pooka } else { 171 1.2 pooka errno = ENOENT; 172 1.2 pooka return -1; 173 1.2 pooka } 174 1.2 pooka } 175 1.2 pooka #endif 176 1.2 pooka 177 1.37 pooka #if !defined(HAVE_POSIX_MEMALIGN) 178 1.37 pooka #if !defined(HAVE_MEMALIGN) 179 1.37 pooka #error method for aligned memory allocation required 180 1.37 pooka #endif 181 1.12 pooka #include <sys/sysmacros.h> 182 1.4 pooka #include <stdlib.h> 183 1.4 pooka static inline int 184 1.4 pooka posix_memalign(void **ptr, size_t align, size_t size) 185 1.4 pooka { 186 1.4 pooka 187 1.4 pooka *ptr = memalign(align, size); 188 1.4 pooka if (*ptr == NULL) 189 1.4 pooka return ENOMEM; 190 1.4 pooka return 0; 191 1.4 pooka } 192 1.37 pooka #endif 193 1.37 pooka 194 1.37 pooka /* 195 1.37 pooka * For NetBSD, use COHERENCY_UNIT as the lock alignment size. 196 1.37 pooka * On other platforms, just guess it to be 64. 197 1.37 pooka */ 198 1.37 pooka #ifdef __NetBSD__ 199 1.37 pooka #define RUMPUSER_LOCKALIGN COHERENCY_UNIT 200 1.37 pooka #else 201 1.37 pooka #define RUMPUSER_LOCKALIGN 64 202 1.37 pooka #endif 203 1.37 pooka 204 1.37 pooka #if !defined(HAVE_ALIGNED_ALLOC) 205 1.37 pooka #include <stdlib.h> 206 1.37 pooka static inline void * 207 1.37 pooka aligned_alloc(size_t alignment, size_t size) 208 1.37 pooka { 209 1.37 pooka void *ptr; 210 1.37 pooka int rv; 211 1.37 pooka 212 1.37 pooka rv = posix_memalign(&ptr, alignment, size); 213 1.37 pooka return rv ? NULL : ptr; 214 1.37 pooka } 215 1.37 pooka #endif 216 1.4 pooka 217 1.1 pooka #ifndef __RCSID 218 1.1 pooka #define __RCSID(a) 219 1.1 pooka #endif 220 1.1 pooka 221 1.48 christos #include <poll.h> 222 1.48 christos 223 1.1 pooka #ifndef INFTIM 224 1.1 pooka #define INFTIM (-1) 225 1.1 pooka #endif 226 1.1 pooka 227 1.1 pooka #ifndef _DIAGASSERT 228 1.1 pooka #define _DIAGASSERT(_p_) 229 1.1 pooka #endif 230 1.1 pooka 231 1.37 pooka #if !defined(HAVE_STRUCT_SOCKADDR_IN_SIN_LEN) 232 1.7 pooka #define SIN_SETLEN(a,b) 233 1.37 pooka #else 234 1.7 pooka #define SIN_SETLEN(_sin_, _len_) _sin_.sin_len = _len_ 235 1.1 pooka #endif 236 1.1 pooka 237 1.1 pooka #ifndef __predict_true 238 1.1 pooka #define __predict_true(a) a 239 1.1 pooka #define __predict_false(a) a 240 1.1 pooka #endif 241 1.1 pooka 242 1.1 pooka #ifndef __dead 243 1.6 pooka #define __dead __attribute__((__noreturn__)) 244 1.1 pooka #endif 245 1.1 pooka 246 1.1 pooka #ifndef __printflike 247 1.29 pooka #ifdef __GNUC__ 248 1.29 pooka #define __printflike(a,b) __attribute__((__format__ (__printf__,a,b))) 249 1.29 pooka #else 250 1.1 pooka #define __printflike(a,b) 251 1.1 pooka #endif 252 1.29 pooka #endif 253 1.1 pooka 254 1.2 pooka #ifndef __noinline 255 1.2 pooka #ifdef __GNUC__ 256 1.2 pooka #define __noinline __attribute__((__noinline__)) 257 1.2 pooka #else 258 1.2 pooka #define __noinline 259 1.2 pooka #endif 260 1.2 pooka #endif 261 1.2 pooka 262 1.1 pooka #ifndef __arraycount 263 1.1 pooka #define __arraycount(_ar_) (sizeof(_ar_)/sizeof(_ar_[0])) 264 1.1 pooka #endif 265 1.1 pooka 266 1.1 pooka #ifndef __UNCONST 267 1.1 pooka #define __UNCONST(_a_) ((void *)(unsigned long)(const void *)(_a_)) 268 1.1 pooka #endif 269 1.1 pooka 270 1.19 pooka #ifndef __CONCAT 271 1.19 pooka #define __CONCAT(x,y) x ## y 272 1.19 pooka #endif 273 1.19 pooka 274 1.19 pooka #ifndef __STRING 275 1.19 pooka #define __STRING(x) #x 276 1.19 pooka #endif 277 1.19 pooka 278 1.2 pooka #ifndef __NetBSD_Prereq__ 279 1.2 pooka #define __NetBSD_Prereq__(a,b,c) 0 280 1.2 pooka #endif 281 1.2 pooka 282 1.4 pooka #include <sys/socket.h> 283 1.4 pooka 284 1.2 pooka #if !defined(__CMSG_ALIGN) 285 1.2 pooka #ifdef CMSG_ALIGN 286 1.2 pooka #define __CMSG_ALIGN(a) CMSG_ALIGN(a) 287 1.2 pooka #endif 288 1.2 pooka #endif 289 1.2 pooka 290 1.4 pooka #ifndef PF_LOCAL 291 1.4 pooka #define PF_LOCAL PF_UNIX 292 1.4 pooka #endif 293 1.4 pooka #ifndef AF_LOCAL 294 1.4 pooka #define AF_LOCAL AF_UNIX 295 1.4 pooka #endif 296 1.4 pooka 297 1.4 pooka /* pfft, but what are you going to do? */ 298 1.4 pooka #ifndef MSG_NOSIGNAL 299 1.4 pooka #define MSG_NOSIGNAL 0 300 1.4 pooka #endif 301 1.4 pooka 302 1.51 simonb #if defined(__NetBSD__) && defined(__mips_n32) /* XXX */ 303 1.51 simonb /* The MIPS N32 ABI has 4 byte longs but uses 8 byte registers */ 304 1.51 simonb #define HAVE_REGISTER_T 1 305 1.51 simonb #define RUMP_REGISTER_T uint64_t 306 1.51 simonb typedef RUMP_REGISTER_T register_t; 307 1.51 simonb #define PRIxREGISTER PRIx64 308 1.51 simonb #endif /* __NetBSD__ && __mips_n32 */ /* XXX */ 309 1.37 pooka #if !defined(HAVE_REGISTER_T) && !defined(RUMP_REGISTER_T) 310 1.5 pooka #define RUMP_REGISTER_T long 311 1.5 pooka typedef RUMP_REGISTER_T register_t; 312 1.50 martin #define PRIxREGISTER "lx" 313 1.5 pooka #endif 314 1.5 pooka 315 1.20 pooka #include <sys/time.h> 316 1.20 pooka 317 1.20 pooka #ifndef TIMEVAL_TO_TIMESPEC 318 1.20 pooka #define TIMEVAL_TO_TIMESPEC(tv, ts) \ 319 1.20 pooka do { \ 320 1.20 pooka (ts)->tv_sec = (tv)->tv_sec; \ 321 1.20 pooka (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 322 1.52 rillig } while (0) 323 1.20 pooka #endif 324 1.20 pooka 325 1.37 pooka #if !defined(HAVE_SETPROGNAME) 326 1.27 pooka #define setprogname(a) 327 1.27 pooka #endif 328 1.27 pooka 329 1.46 pooka /* at least GNU Hurd does not specify various common hardcoded constants */ 330 1.46 pooka #include <limits.h> 331 1.46 pooka #ifndef MAXPATHLEN 332 1.46 pooka #define MAXPATHLEN 4096 333 1.46 pooka #endif 334 1.46 pooka #ifndef PATH_MAX 335 1.46 pooka #define PATH_MAX MAXPATHLEN 336 1.46 pooka #endif 337 1.46 pooka #ifndef MAXHOSTNAMELEN 338 1.46 pooka #define MAXHOSTNAMELEN 256 339 1.46 pooka #endif 340 1.46 pooka 341 1.1 pooka #endif /* _LIB_LIBRUMPUSER_RUMPUSER_PORT_H_ */ 342