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