/*
 * routines that must be linked into the core for Lisp to work
 *
 * but note this is only the BSD version, as per the FIXME
 *
 * FIXME: It's tedious and error-prone having to edit both this file and
 * the analogous ldso-stubs.S file when we change the references to
 * functions, enough so that it would probably be good to rewrite
 * both files in terms of a shared list of function names.
 * E.g. the function names could be in shared-function-names.h
 *   SHARED_FUNCTION(cos)
 *   SHARED_FUNCTION(sinh)
 *   SHARED_FUNCTION(strlen)
 * etc. and the per-OS files could look like
 *   #define SHARED_FUNCTION(f) ....
 *   #include "shared-function-names.h"
 *   ...then going on to do OS-specific things
 * "Once and only once."
 */

/*
 * This software is part of the SBCL system. See the README file for
 * more information.
 *
 * This software is derived from the CMU CL system, which was
 * written at Carnegie Mellon University and released into the
 * public domain. The software is in the public domain and is
 * provided with absolutely no warranty. See the COPYING and CREDITS
 * files for more information.
 */

/* Pick up all the syscalls. */
F(accept)
F(access)
F(acct)
F(bind)
F(brk)
#if defined(hpux) \
     || defined(SVR4) \
     || defined(LISP_FEATURE_FREEBSD) \
     || defined(__OpenBSD__) \
     || defined(__NetBSD__) \
     || defined(__DragonFly__)
F(cfgetospeed)
F(cfsetospeed)
F(cfgetispeed)
F(cfsetispeed)
#endif
F(chdir)
F(chmod)
F(chown)
F(chroot)
F(close)
F(connect)
F(creat)
F(dup)
F(dup2)
F(execve)
F(exit)
F(_exit)
F(fchmod)
F(fchown)
F(fcntl)
#if !defined(hpux) && !defined(SVR4)
F(flock)
#endif
F(fork)
F(fstat)
F(fsync)
F(ftruncate)
#if !defined(hpux) && !defined(SVR4) || defined(SOLARIS25) || defined(irix)
F(getdtablesize)
#endif
F(getegid)
F(geteuid)
F(getgid)
F(getgroups)
F(gethostname)
F(getitimer)
#if !defined(hpux) && !defined(SVR4) || defined(SOLARIS25)
F(getpagesize)
#endif
F(getpeername)
F(getpgrp)
F(getpid)
F(getppid)
#if !defined(SVR4)  ||  defined(SOLARIS25)
F(getpriority)
#endif
F(getrlimit)
#if !defined(SOLARIS) ||  defined(SOLARIS25)
F(getrusage)
#endif
F(getsockname)
F(getsockopt)
F(gettimeofday)
F(getuid)
F(ioctl)
F(kill)
#if !defined(SOLARIS) || defined(SOLARIS25)
F(killpg)
#endif
F(link)
F(listen)
F(lseek)
F(lstat)
F(mkdir)
F(mknod)
F(mmap)
F(mount)
F(munmap)
F(open)
F(pipe)
F(profil)
F(ptrace)
#ifdef mach
F(quota)
#endif
F(read)
F(readlink)
F(readv)
#ifndef SVR4
F(reboot)
#endif
F(recv)
F(recvfrom)
F(recvmsg)
F(rename)
F(rmdir)
F(sbrk)
F(select)
F(send)
F(sendmsg)
F(sendto)
F(setgroups)
#if !defined(SUNOS) && !(defined(SOLARIS) ||  defined(SOLARIS25))
F(sethostid)
#endif
#if !defined(SVR4) ||  defined(SOLARIS25)
F(sethostname)
#endif
F(setitimer)
F(setpgrp)
F(setsid)
#if !defined(SVR4) ||  defined(SOLARIS25)
F(setpriority)
#endif
F(setrlimit)
F(setsockopt)
F(settimeofday)
F(shutdown)
#if !defined(hpux) && !defined(SVR4) && !defined(LISP_FEATURE_X86)
F(sigreturn)
#endif
#if !defined(SVR4) && !defined(LISP_FEATURE_FREEBSD) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
F(sigstack)
F(sigvec)
#endif
F(socket)
F(socketpair)
F(stat)
#if !defined(SVR4) && !defined(__OpenBSD__)
F(swapon)
#endif
F(symlink)
F(sync)
F(syscall)
#if defined(hpux) || defined(SVR4) || defined(__linux__)
F(closedir)
F(opendir)
#if defined(readdir)
#undef reddir
#endif
F(readdir)
#endif
#if defined(hpux) \
     || defined(SVR4) \
     || defined(LISP_FEATURE_FREEBSD) \
     || defined(__OpenBSD__) \
     || defined(__NetBSD__) \
     || defined(__DragonFly__) \
     || defined(__linux__)
F(tcgetattr)
F(tcsetattr)
F(tcsendbreak)
F(tcdrain)
F(tcflush)
F(tcflow)
#endif
#if defined(SOLARIS)
F(times)
#endif
F(truncate)
F(umask)
#if !defined(SUNOS) \
     && !defined(parisc) \
     && !defined(SOLARIS) \
     && !defined(__OpenBSD__) \
     && !defined(LISP_FEATURE_FREEBSD) \
     && !defined(__DragonFly__) \
     && !defined(__NetBSD__)
F(umount)
#endif
F(unlink)
#ifndef hpux
F(utimes)
#endif
#ifndef irix
F(vfork)
#endif
#if !defined(osf1) && !defined(LISP_FEATURE_FREEBSD) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
F(vhangup)
#endif
F(wait)
F(waitpid)
#if !defined(SOLARIS) ||  defined(SOLARIS25)
F(wait3)
#endif
F(write)
F(writev)

/* math routines */
F(cos)
F(sin)
F(tan)
F(acos)
F(asin)
F(atan)
F(atan2)
F(sinh)
F(cosh)
F(tanh)
F(asinh)
F(acosh)
F(atanh)
F(exp)
#ifndef hpux
F(expm1)
#endif
F(log)
F(log10)
#ifndef hpux
F(log1p)
#endif
F(pow)
#ifndef hpux
F(cbrt)
#endif
#ifndef LISP_FEATURE_X86
F(sqrt)
#endif
F(hypot)

/* string things */
F(strlen)

/* network support */
F(gethostbyname)
F(gethostbyaddr)

/* other miscellaneous things */
/* FIXME: NetBSD plays some renaming games, and so cannot simply
   reference symbols here.  "NetBSD needs to get fixed here too PEM
   2004-03-27" */
#if defined(SVR4) || defined(LISP_FEATURE_FREEBSD)
F(setpgid)
F(getpgid)
D(timezone)
#if !defined(LISP_FEATURE_FREEBSD)
D(altzone)
D(daylight)
#endif
D(tzname)
#endif
F(getcwd)
F(ttyname)

#ifdef irix
F(_getpty)
#endif

F(dlopen)
F(dlsym)
F(dlclose)
F(dlerror)
