github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libgo/runtime/go-nosys.c (about) 1 /* go-nosys.c -- functions missing from system. 2 3 Copyright 2012 The Go Authors. All rights reserved. 4 Use of this source code is governed by a BSD-style 5 license that can be found in the LICENSE file. */ 6 7 /* This file exists to provide definitions for functions that are 8 missing from libc, according to the configure script. This permits 9 the Go syscall package to not worry about whether the functions 10 exist or not. */ 11 12 #include "config.h" 13 14 #include <errno.h> 15 #include <fcntl.h> 16 #include <math.h> 17 #include <stdint.h> 18 #include <sys/types.h> 19 #include <sys/socket.h> 20 #include <sys/stat.h> 21 #include <sys/time.h> 22 #include <time.h> 23 #include <unistd.h> 24 25 #ifndef HAVE_OFF64_T 26 typedef signed int off64_t __attribute__ ((mode (DI))); 27 #endif 28 29 #ifndef HAVE_LOFF_T 30 typedef off64_t loff_t; 31 #endif 32 33 #ifndef HAVE_ACCEPT4 34 struct sockaddr; 35 int 36 accept4 (int sockfd __attribute__ ((unused)), 37 struct sockaddr *addr __attribute__ ((unused)), 38 socklen_t *addrlen __attribute__ ((unused)), 39 int flags __attribute__ ((unused))) 40 { 41 errno = ENOSYS; 42 return -1; 43 } 44 #endif 45 46 #ifndef HAVE_DUP3 47 int 48 dup3 (int oldfd __attribute__ ((unused)), 49 int newfd __attribute__ ((unused)), 50 int flags __attribute__ ((unused))) 51 { 52 errno = ENOSYS; 53 return -1; 54 } 55 #endif 56 57 #ifndef HAVE_EPOLL_CREATE1 58 int 59 epoll_create1 (int flags __attribute__ ((unused))) 60 { 61 errno = ENOSYS; 62 return -1; 63 } 64 #endif 65 66 #ifndef HAVE_FACCESSAT 67 int 68 faccessat (int fd __attribute__ ((unused)), 69 const char *pathname __attribute__ ((unused)), 70 int mode __attribute__ ((unused)), 71 int flags __attribute__ ((unused))) 72 { 73 errno = ENOSYS; 74 return -1; 75 } 76 #endif 77 78 #ifndef HAVE_FALLOCATE 79 int 80 fallocate (int fd __attribute__ ((unused)), 81 int mode __attribute__ ((unused)), 82 off_t offset __attribute__ ((unused)), 83 off_t len __attribute__ ((unused))) 84 { 85 errno = ENOSYS; 86 return -1; 87 } 88 #endif 89 90 #ifndef HAVE_FCHMODAT 91 int 92 fchmodat (int dirfd __attribute__ ((unused)), 93 const char *pathname __attribute__ ((unused)), 94 mode_t mode __attribute__ ((unused)), 95 int flags __attribute__ ((unused))) 96 { 97 errno = ENOSYS; 98 return -1; 99 } 100 #endif 101 102 #ifndef HAVE_FCHOWNAT 103 int 104 fchownat (int dirfd __attribute__ ((unused)), 105 const char *pathname __attribute__ ((unused)), 106 uid_t owner __attribute__ ((unused)), 107 gid_t group __attribute__ ((unused)), 108 int flags __attribute__ ((unused))) 109 { 110 errno = ENOSYS; 111 return -1; 112 } 113 #endif 114 115 #ifndef HAVE_FUTIMESAT 116 int 117 futimesat (int dirfd __attribute__ ((unused)), 118 const char *pathname __attribute__ ((unused)), 119 const struct timeval times[2] __attribute__ ((unused))) 120 { 121 errno = ENOSYS; 122 return -1; 123 } 124 #endif 125 126 #ifndef HAVE_GETXATTR 127 ssize_t 128 getxattr (const char *path __attribute__ ((unused)), 129 const char *name __attribute__ ((unused)), 130 void *value __attribute__ ((unused)), 131 size_t size __attribute__ ((unused))) 132 { 133 errno = ENOSYS; 134 return -1; 135 } 136 #endif 137 138 #ifndef HAVE_INOTIFY_ADD_WATCH 139 int 140 inotify_add_watch (int fd __attribute__ ((unused)), 141 const char* pathname __attribute__ ((unused)), 142 uint32_t mask __attribute__ ((unused))) 143 { 144 errno = ENOSYS; 145 return -1; 146 } 147 #endif 148 149 #ifndef HAVE_INOTIFY_INIT 150 int 151 inotify_init (void) 152 { 153 errno = ENOSYS; 154 return -1; 155 } 156 #endif 157 158 #ifndef HAVE_INOTIFY_INIT1 159 int 160 inotify_init1 (int flags __attribute__ ((unused))) 161 { 162 errno = ENOSYS; 163 return -1; 164 } 165 #endif 166 167 #ifndef HAVE_INOTIFY_RM_WATCH 168 int 169 inotify_rm_watch (int fd __attribute__ ((unused)), 170 uint32_t wd __attribute__ ((unused))) 171 { 172 errno = ENOSYS; 173 return -1; 174 } 175 #endif 176 177 #ifndef HAVE_LISTXATTR 178 ssize_t 179 listxattr (const char *path __attribute__ ((unused)), 180 char *list __attribute__ ((unused)), 181 size_t size __attribute__ ((unused))) 182 { 183 errno = ENOSYS; 184 return -1; 185 } 186 #endif 187 188 #ifndef HAVE_MKDIRAT 189 int 190 mkdirat (int dirfd __attribute__ ((unused)), 191 const char *pathname __attribute__ ((unused)), 192 mode_t mode __attribute__ ((unused))) 193 { 194 errno = ENOSYS; 195 return -1; 196 } 197 #endif 198 199 #ifndef HAVE_MKNODAT 200 int 201 mknodat (int dirfd __attribute__ ((unused)), 202 const char *pathname __attribute__ ((unused)), 203 mode_t mode __attribute__ ((unused)), 204 dev_t dev __attribute__ ((unused))) 205 { 206 errno = ENOSYS; 207 return -1; 208 } 209 #endif 210 211 #ifndef HAVE_OPENAT 212 int 213 openat (int dirfd __attribute__ ((unused)), 214 const char *pathname __attribute__ ((unused)), 215 int oflag __attribute__ ((unused)), 216 ...) 217 { 218 errno = ENOSYS; 219 return -1; 220 } 221 #endif 222 223 #ifndef HAVE_PIPE2 224 int 225 pipe2 (int pipefd[2] __attribute__ ((unused)), 226 int flags __attribute__ ((unused))) 227 { 228 errno = ENOSYS; 229 return -1; 230 } 231 #endif 232 233 #ifndef HAVE_REMOVEXATTR 234 int 235 removexattr (const char *path __attribute__ ((unused)), 236 const char *name __attribute__ ((unused))) 237 { 238 errno = ENOSYS; 239 return -1; 240 } 241 #endif 242 243 #ifndef HAVE_RENAMEAT 244 int 245 renameat (int olddirfd __attribute__ ((unused)), 246 const char *oldpath __attribute__ ((unused)), 247 int newdirfd __attribute__ ((unused)), 248 const char *newpath __attribute__ ((unused))) 249 { 250 errno = ENOSYS; 251 return -1; 252 } 253 #endif 254 255 #ifndef HAVE_SETXATTR 256 int 257 setxattr (const char *path __attribute__ ((unused)), 258 const char *name __attribute__ ((unused)), 259 const void *value __attribute__ ((unused)), 260 size_t size __attribute__ ((unused)), 261 int flags __attribute__ ((unused))) 262 { 263 errno = ENOSYS; 264 return -1; 265 } 266 #endif 267 268 #ifndef HAVE_SPLICE 269 int 270 splice (int fd __attribute__ ((unused)), 271 loff_t *off_in __attribute__ ((unused)), 272 int fd_out __attribute__ ((unused)), 273 loff_t *off_out __attribute__ ((unused)), 274 size_t len __attribute__ ((unused)), 275 unsigned int flags __attribute__ ((unused))) 276 { 277 errno = ENOSYS; 278 return -1; 279 } 280 #endif 281 282 #ifndef HAVE_SYNC_FILE_RANGE 283 int 284 sync_file_range (int fd __attribute__ ((unused)), 285 off64_t offset __attribute__ ((unused)), 286 off64_t nbytes __attribute__ ((unused)), 287 unsigned int flags __attribute__ ((unused))) 288 { 289 errno = ENOSYS; 290 return -1; 291 } 292 #endif 293 294 #ifndef HAVE_TEE 295 int 296 tee (int fd_in __attribute__ ((unused)), 297 int fd_out __attribute__ ((unused)), 298 size_t len __attribute__ ((unused)), 299 unsigned int flags __attribute__ ((unused))) 300 { 301 errno = ENOSYS; 302 return -1; 303 } 304 #endif 305 306 #ifndef HAVE_UNLINKAT 307 int 308 unlinkat (int dirfd __attribute__ ((unused)), 309 const char *pathname __attribute__ ((unused)), 310 int flags __attribute__ ((unused))) 311 { 312 errno = ENOSYS; 313 return -1; 314 } 315 #endif 316 317 #ifndef HAVE_UNSHARE 318 int 319 unshare (int flags __attribute__ ((unused))) 320 { 321 errno = ENOSYS; 322 return -1; 323 } 324 #endif 325 326 #ifndef HAVE_UTIMENSAT 327 struct timespec; 328 int 329 utimensat(int dirfd __attribute__ ((unused)), 330 const char *pathname __attribute__ ((unused)), 331 const struct timespec times[2] __attribute__ ((unused)), 332 int flags __attribute__ ((unused))) 333 { 334 errno = ENOSYS; 335 return -1; 336 } 337 #endif 338 339 /* Long double math functions. These are needed on old i386 systems 340 that don't have them in libm. The compiler translates calls to 341 these functions on float64 to call an 80-bit floating point 342 function instead, because when optimizing that function can be 343 executed as an x87 instructure. However, when not optimizing, this 344 translates into a call to the math function. So on systems that 345 don't provide these functions, we provide a version that just calls 346 the float64 version. */ 347 348 #ifndef HAVE_COSL 349 long double 350 cosl (long double a) 351 { 352 return (long double) cos ((double) a); 353 } 354 #endif 355 356 #ifndef HAVE_EXPL 357 long double 358 expl (long double a) 359 { 360 return (long double) exp ((double) a); 361 } 362 #endif 363 364 #ifndef HAVE_LOGL 365 long double 366 logl (long double a) 367 { 368 return (long double) log ((double) a); 369 } 370 #endif 371 372 #ifndef HAVE_SINL 373 long double 374 sinl (long double a) 375 { 376 return (long double) sin ((double) a); 377 } 378 #endif 379 380 #ifndef HAVE_TANL 381 long double 382 tanl (long double a) 383 { 384 return (long double) tan ((double) a); 385 } 386 #endif 387 388 #ifndef HAVE_ACOSL 389 long double 390 acosl (long double a) 391 { 392 return (long double) acos ((double) a); 393 } 394 #endif 395 396 #ifndef HAVE_ASINL 397 long double 398 asinl (long double a) 399 { 400 return (long double) asin ((double) a); 401 } 402 #endif 403 404 #ifndef HAVE_ATANL 405 long double 406 atanl (long double a) 407 { 408 return (long double) atan ((double) a); 409 } 410 #endif 411 412 #ifndef HAVE_ATAN2L 413 long double 414 atan2l (long double a, long double b) 415 { 416 return (long double) atan2 ((double) a, (double) b); 417 } 418 #endif 419 420 #ifndef HAVE_EXPM1L 421 long double 422 expm1l (long double a) 423 { 424 return (long double) expm1 ((double) a); 425 } 426 #endif 427 428 #ifndef HAVE_LDEXPL 429 long double 430 ldexpl (long double a, int exp) 431 { 432 return (long double) ldexp ((double) a, exp); 433 } 434 #endif 435 436 #ifndef HAVE_LOG10L 437 long double 438 log10l (long double a) 439 { 440 return (long double) log10 ((double) a); 441 } 442 #endif 443 444 #ifndef HAVE_LOG1PL 445 long double 446 log1pl (long double a) 447 { 448 return (long double) log1p ((double) a); 449 } 450 #endif