about summary refs log tree commit diff homepage
path: root/runtime
diff options
context:
space:
mode:
authorGleb Popov <6yearold@gmail.com>2019-03-30 16:34:03 +0400
committerMartinNowack <martin.nowack@gmail.com>2019-04-02 09:12:56 +0100
commit0b33d74f465991e94d8dafb6eeaf4b69af0a1887 (patch)
tree3d01d954d2b7f00d55d0a695c22d67698f68dc5a /runtime
parentf0aa7d884697597a717361a82976d181abaf245a (diff)
downloadklee-0b33d74f465991e94d8dafb6eeaf4b69af0a1887.tar.gz
POSIX runtime fixes for FreeBSD.
Diffstat (limited to 'runtime')
-rw-r--r--runtime/POSIX/FreeBSD.h419
-rw-r--r--runtime/POSIX/fd.c15
-rw-r--r--runtime/POSIX/fd.h7
-rw-r--r--runtime/POSIX/fd_32.c8
-rw-r--r--runtime/POSIX/fd_64.c2
-rw-r--r--runtime/POSIX/stubs.c27
6 files changed, 476 insertions, 2 deletions
diff --git a/runtime/POSIX/FreeBSD.h b/runtime/POSIX/FreeBSD.h
new file mode 100644
index 00000000..9ba79ae7
--- /dev/null
+++ b/runtime/POSIX/FreeBSD.h
@@ -0,0 +1,419 @@
+#ifndef _FREEBSD_SHIMS_H
+#define _FREEBSD_SHIMS_H
+
+// termios maps
+#define TCGETS  TIOCGETA
+#define TCSETS  TIOCSETA
+#define TCSETSW TIOCSETAW
+#define TCSETSF TIOCSETAF
+
+// for stubs.c, define gnu_dev_type
+#define __GLIBC_PREREQ(x,y) 1
+
+// for various typedefs inside FreeBSD headers
+#define __BSD_VISIBLE   1
+
+#define stat64 stat
+
+struct rlimit64;
+
+#define	__NR_syscall	SYS_syscall
+#define	__NR_exit	SYS_exit
+#define	__NR_fork	SYS_fork
+#define	__NR_read	SYS_read
+#define	__NR_write	SYS_write
+#define	__NR_open	SYS_open
+#define	__NR_close	SYS_close
+#define	__NR_wait4	SYS_wait4
+#define	__NR_link	SYS_link
+#define	__NR_unlink	SYS_unlink
+#define	__NR_chdir	SYS_chdir
+#define	__NR_fchdir	SYS_fchdir
+#define	__NR_mknod	SYS_mknod
+#define	__NR_chmod	SYS_chmod
+#define	__NR_chown	SYS_chown
+#define	__NR_break	SYS_break
+#define	__NR_getpid	SYS_getpid
+#define	__NR_mount	SYS_mount
+#define	__NR_unmount	SYS_unmount
+#define	__NR_setuid	SYS_setuid
+#define	__NR_getuid	SYS_getuid
+#define	__NR_geteuid	SYS_geteuid
+#define	__NR_ptrace	SYS_ptrace
+#define	__NR_recvmsg	SYS_recvmsg
+#define	__NR_sendmsg	SYS_sendmsg
+#define	__NR_recvfrom	SYS_recvfrom
+#define	__NR_accept	SYS_accept
+#define	__NR_getpeername	SYS_getpeername
+#define	__NR_getsockname	SYS_getsockname
+#define	__NR_access	SYS_access
+#define	__NR_chflags	SYS_chflags
+#define	__NR_fchflags	SYS_fchflags
+#define	__NR_sync	SYS_sync
+#define	__NR_kill	SYS_kill
+#define	__NR_getppid	SYS_getppid
+#define	__NR_dup	SYS_dup
+#define	__NR_freebsd10_pipe	SYS_freebsd10_pipe
+#define	__NR_getegid	SYS_getegid
+#define	__NR_profil	SYS_profil
+#define	__NR_ktrace	SYS_ktrace
+#define	__NR_getgid	SYS_getgid
+#define	__NR_getlogin	SYS_getlogin
+#define	__NR_setlogin	SYS_setlogin
+#define	__NR_acct	SYS_acct
+#define	__NR_sigaltstack	SYS_sigaltstack
+#define	__NR_ioctl	SYS_ioctl
+#define	__NR_reboot	SYS_reboot
+#define	__NR_revoke	SYS_revoke
+#define	__NR_symlink	SYS_symlink
+#define	__NR_readlink	SYS_readlink
+#define	__NR_execve	SYS_execve
+#define	__NR_umask	SYS_umask
+#define	__NR_chroot	SYS_chroot
+#define	__NR_msync	SYS_msync
+#define	__NR_vfork	SYS_vfork
+#define	__NR_sbrk	SYS_sbrk
+#define	__NR_sstk	SYS_sstk
+#define	__NR_vadvise	SYS_vadvise
+#define	__NR_munmap	SYS_munmap
+#define	__NR_mprotect	SYS_mprotect
+#define	__NR_madvise	SYS_madvise
+#define	__NR_mincore	SYS_mincore
+#define	__NR_getgroups	SYS_getgroups
+#define	__NR_setgroups	SYS_setgroups
+#define	__NR_getpgrp	SYS_getpgrp
+#define	__NR_setpgid	SYS_setpgid
+#define	__NR_setitimer	SYS_setitimer
+#define	__NR_swapon	SYS_swapon
+#define	__NR_getitimer	SYS_getitimer
+#define	__NR_getdtablesize	SYS_getdtablesize
+#define	__NR_dup2	SYS_dup2
+#define	__NR_fcntl	SYS_fcntl
+#define	__NR_select	SYS_select
+#define	__NR_fsync	SYS_fsync
+#define	__NR_setpriority	SYS_setpriority
+#define	__NR_socket	SYS_socket
+#define	__NR_connect	SYS_connect
+#define	__NR_getpriority	SYS_getpriority
+#define	__NR_bind	SYS_bind
+#define	__NR_setsockopt	SYS_setsockopt
+#define	__NR_listen	SYS_listen
+#define	__NR_gettimeofdaySYS_gettimeofday
+#define	__NR_getrusage	SYS_getrusage
+#define	__NR_getsockopt	SYS_getsockopt
+#define	__NR_readv	SYS_readv
+#define	__NR_writev	SYS_writev
+#define	__NR_settimeofdaySYS_settimeofday
+#define	__NR_fchown	SYS_fchown
+#define	__NR_fchmod	SYS_fchmod
+#define	__NR_setreuid	SYS_setreuid
+#define	__NR_setregid	SYS_setregid
+#define	__NR_rename	SYS_rename
+#define	__NR_flock	SYS_flock
+#define	__NR_mkfifo	SYS_mkfifo
+#define	__NR_sendto	SYS_sendto
+#define	__NR_shutdown	SYS_shutdown
+#define	__NR_socketpair	SYS_socketpair
+#define	__NR_mkdir	SYS_mkdir
+#define	__NR_rmdir	SYS_rmdir
+#define	__NR_utimes	SYS_utimes
+#define	__NR_adjtime	SYS_adjtime
+#define	__NR_setsid	SYS_setsid
+#define	__NR_quotactl	SYS_quotactl
+#define	__NR_nlm_syscall	SYS_nlm_syscall
+#define	__NR_nfssvc	SYS_nfssvc
+#define	__NR_lgetfh	SYS_lgetfh
+#define	__NR_getfh	SYS_getfh
+#define	__NR_sysarch	SYS_sysarch
+#define	__NR_rtprio	SYS_rtprio
+#define	__NR_semsys	SYS_semsys
+#define	__NR_msgsys	SYS_msgsys
+#define	__NR_shmsys	SYS_shmsys
+#define	__NR_setfib	SYS_setfib
+#define	__NR_ntp_adjtime	SYS_ntp_adjtime
+#define	__NR_setgid	SYS_setgid
+#define	__NR_setegid	SYS_setegid
+#define	__NR_seteuid	SYS_seteuid
+#define	__NR_stat	SYS_stat
+#define	__NR_fstat	SYS_fstat
+#define	__NR_lstat	SYS_lstat
+#define	__NR_pathconf	SYS_pathconf
+#define	__NR_fpathconf	SYS_fpathconf
+#define	__NR_getrlimit	SYS_getrlimit
+#define	__NR_setrlimit	SYS_setrlimit
+#define	__NR_getdirentries	SYS_getdirentries
+#define	__NR___syscall	SYS___syscall
+#define	__NR___sysctl	SYS___sysctl
+#define	__NR_mlock	SYS_mlock
+#define	__NR_munlock	SYS_munlock
+#define	__NR_undelete	SYS_undelete
+#define	__NR_futimes	SYS_futimes
+#define	__NR_getpgid	SYS_getpgid
+#define	__NR_poll	SYS_poll
+#define	__NR_freebsd7___semctl	SYS_freebsd7___semctl
+#define	__NR_semget	SYS_semget
+#define	__NR_semop	SYS_semop
+#define	__NR_freebsd7_msgctl	SYS_freebsd7_msgctl
+#define	__NR_msgget	SYS_msgget
+#define	__NR_msgsnd	SYS_msgsnd
+#define	__NR_msgrcv	SYS_msgrcv
+#define	__NR_shmat	SYS_shmat
+#define	__NR_freebsd7_shmctl	SYS_freebsd7_shmctl
+#define	__NR_shmdt	SYS_shmdt
+#define	__NR_shmget	SYS_shmget
+#define	__NR_clock_gettime	SYS_clock_gettime
+#define	__NR_clock_settime	SYS_clock_settime
+#define	__NR_clock_getres	SYS_clock_getres
+#define	__NR_ktimer_create	SYS_ktimer_create
+#define	__NR_ktimer_delete	SYS_ktimer_delete
+#define	__NR_ktimer_settime	SYS_ktimer_settime
+#define	__NR_ktimer_gettime	SYS_ktimer_gettime
+#define	__NR_ktimer_getoverrun	SYS_ktimer_getoverrun
+#define	__NR_nanosleep	SYS_nanosleep
+#define	__NR_ffclock_getcounter	SYS_ffclock_getcounter
+#define	__NR_ffclock_setestimate	SYS_ffclock_setestimate
+#define	__NR_ffclock_getestimate	SYS_ffclock_getestimate
+#define	__NR_clock_getcpuclockid2SYS_clock_getcpuclockid2
+#define	__NR_ntp_gettime	SYS_ntp_gettime
+#define	__NR_minherit	SYS_minherit
+#define	__NR_rfork	SYS_rfork
+#define	__NR_openbsd_pollSYS_openbsd_poll
+#define	__NR_issetugid	SYS_issetugid
+#define	__NR_lchown	SYS_lchown
+#define	__NR_aio_read	SYS_aio_read
+#define	__NR_aio_write	SYS_aio_write
+#define	__NR_lio_listio	SYS_lio_listio
+#define	__NR_getdents	SYS_getdents
+#define	__NR_getdents64	SYS_getdents
+#define	__NR_lchmod	SYS_lchmod
+#define	__NR_netbsd_lchown	SYS_netbsd_lchown
+#define	__NR_lutimes	SYS_lutimes
+#define	__NR_netbsd_msync	SYS_netbsd_msync
+#define	__NR_nstat	SYS_nstat
+#define	__NR_nfstat	SYS_nfstat
+#define	__NR_nlstat	SYS_nlstat
+#define	__NR_preadv	SYS_preadv
+#define	__NR_pwritev	SYS_pwritev
+#define	__NR_fhopen	SYS_fhopen
+#define	__NR_fhstat	SYS_fhstat
+#define	__NR_modnext	SYS_modnext
+#define	__NR_modstat	SYS_modstat
+#define	__NR_modfnext	SYS_modfnext
+#define	__NR_modfind	SYS_modfind
+#define	__NR_kldload	SYS_kldload
+#define	__NR_kldunload	SYS_kldunload
+#define	__NR_kldfind	SYS_kldfind
+#define	__NR_kldnext	SYS_kldnext
+#define	__NR_kldstat	SYS_kldstat
+#define	__NR_kldfirstmod	SYS_kldfirstmod
+#define	__NR_getsid	SYS_getsid
+#define	__NR_setresuid	SYS_setresuid
+#define	__NR_setresgid	SYS_setresgid
+#define	__NR_aio_return	SYS_aio_return
+#define	__NR_aio_suspend	SYS_aio_suspend
+#define	__NR_aio_cancel	SYS_aio_cancel
+#define	__NR_aio_error	SYS_aio_error
+#define	__NR_yield	SYS_yield
+#define	__NR_mlockall	SYS_mlockall
+#define	__NR_munlockall	SYS_munlockall
+#define	__NR_getcwd	SYS___getcwd
+#define	__NR_sched_setparam	SYS_sched_setparam
+#define	__NR_sched_getparam	SYS_sched_getparam
+#define	__NR_sched_setscheduler	SYS_sched_setscheduler
+#define	__NR_sched_getscheduler	SYS_sched_getscheduler
+#define	__NR_sched_yield	331SYS_sched_yield	331
+#define	__NR_sched_get_priority_max	SYS_sched_get_priority_max
+#define	__NR_sched_get_priority_min	SYS_sched_get_priority_min
+#define	__NR_sched_rr_get_interval	SYS_sched_rr_get_interval
+#define	__NR_utrace	SYS_utrace
+#define	__NR_kldsym	SYS_kldsym
+#define	__NR_jail	SYS_jail
+#define	__NR_nnpfs_syscall	SYS_nnpfs_syscall
+#define	__NR_sigprocmask	SYS_sigprocmask
+#define	__NR_sigsuspend	SYS_sigsuspend
+#define	__NR_sigpending	SYS_sigpending
+#define	__NR_sigtimedwait	SYS_sigtimedwait
+#define	__NR_sigwaitinfo	SYS_sigwaitinfo
+#define	__NR___acl_get_file	SYS___acl_get_file
+#define	__NR___acl_set_file	SYS___acl_set_file
+#define	__NR___acl_get_fd	SYS___acl_get_fd
+#define	__NR___acl_set_fd	SYS___acl_set_fd
+#define	__NR___acl_delete_file	SYS___acl_delete_file
+#define	__NR___acl_delete_fd	SYS___acl_delete_fd
+#define	__NR___acl_aclcheck_file	SYS___acl_aclcheck_file
+#define	__NR___acl_aclcheck_fd	SYS___acl_aclcheck_fd
+#define	__NR_extattrctl	355SYS_extattrctl	355
+#define	__NR_extattr_set_file	SYS_extattr_set_file
+#define	__NR_extattr_get_file	SYS_extattr_get_file
+#define	__NR_extattr_delete_file	SYS_extattr_delete_file
+#define	__NR_aio_waitcomplete	SYS_aio_waitcomplete
+#define	__NR_getresuid	SYS_getresuid
+#define	__NR_getresgid	SYS_getresgid
+#define	__NR_kqueue	SYS_kqueue
+#define	__NR_kevent	SYS_kevent
+#define	__NR_extattr_set_fd	SYS_extattr_set_fd
+#define	__NR_extattr_get_fd	SYS_extattr_get_fd
+#define	__NR_extattr_delete_fd	SYS_extattr_delete_fd
+#define	__NR___setugid	SYS___setugid
+#define	__NR_eaccess	SYS_eaccess
+#define	__NR_afs3_syscall	SYS_afs3_syscall
+#define	__NR_nmount	SYS_nmount
+#define	__NR___mac_get_proc	SYS___mac_get_proc
+#define	__NR___mac_set_proc	SYS___mac_set_proc
+#define	__NR___mac_get_fd	SYS___mac_get_fd
+#define	__NR___mac_get_file	SYS___mac_get_file
+#define	__NR___mac_set_fd	SYS___mac_set_fd
+#define	__NR___mac_set_file	SYS___mac_set_file
+#define	__NR_kenv	SYS_kenv
+#define	__NR_lchflags	SYS_lchflags
+#define	__NR_uuidgen	SYS_uuidgen
+#define	__NR_sendfile	SYS_sendfile
+#define	__NR_mac_syscall	SYS_mac_syscall
+#define	__NR_getfsstat	SYS_getfsstat
+#define	__NR_statfs	SYS_statfs
+#define	__NR_fstatfs	SYS_fstatfs
+#define	__NR_fhstatfs	SYS_fhstatfs
+#define	__NR_ksem_close	SYS_ksem_close
+#define	__NR_ksem_post	SYS_ksem_post
+#define	__NR_ksem_wait	SYS_ksem_wait
+#define	__NR_ksem_trywait	SYS_ksem_trywait
+#define	__NR_ksem_init	SYS_ksem_init
+#define	__NR_ksem_open	SYS_ksem_open
+#define	__NR_ksem_unlink	SYS_ksem_unlink
+#define	__NR_ksem_getvalue	SYS_ksem_getvalue
+#define	__NR_ksem_destroy	SYS_ksem_destroy
+#define	__NR___mac_get_pid	SYS___mac_get_pid
+#define	__NR___mac_get_link	SYS___mac_get_link
+#define	__NR___mac_set_link	SYS___mac_set_link
+#define	__NR_extattr_set_link	SYS_extattr_set_link
+#define	__NR_extattr_get_link	SYS_extattr_get_link
+#define	__NR_extattr_delete_link	SYS_extattr_delete_link
+#define	__NR___mac_execve	SYS___mac_execve
+#define	__NR_sigaction	SYS_sigaction
+#define	__NR_sigreturn	SYS_sigreturn
+#define	__NR_getcontext	SYS_getcontext
+#define	__NR_setcontext	SYS_setcontext
+#define	__NR_swapcontext	SYS_swapcontext
+#define	__NR_swapoff	SYS_swapoff
+#define	__NR___acl_get_link	SYS___acl_get_link
+#define	__NR___acl_set_link	SYS___acl_set_link
+#define	__NR___acl_delete_link	SYS___acl_delete_link
+#define	__NR___acl_aclcheck_link	SYS___acl_aclcheck_link
+#define	__NR_sigwait	SYS_sigwait
+#define	__NR_thr_create	SYS_thr_create
+#define	__NR_thr_exit	SYS_thr_exit
+#define	__NR_thr_self	SYS_thr_self
+#define	__NR_thr_kill	SYS_thr_kill
+#define	__NR_jail_attach	SYS_jail_attach
+#define	__NR_extattr_list_fd	SYS_extattr_list_fd
+#define	__NR_extattr_list_file	SYS_extattr_list_file
+#define	__NR_extattr_list_link	SYS_extattr_list_link
+#define	__NR_ksem_timedwait	SYS_ksem_timedwait
+#define	__NR_thr_suspend	SYS_thr_suspend
+#define	__NR_thr_wake	SYS_thr_wake
+#define	__NR_kldunloadf	SYS_kldunloadf
+#define	__NR_audit	SYS_audit
+#define	__NR_auditon	SYS_auditon
+#define	__NR_getauid	SYS_getauid
+#define	__NR_setauid	SYS_setauid
+#define	__NR_getaudit	SYS_getaudit
+#define	__NR_setaudit	SYS_setaudit
+#define	__NR_getaudit_addr	SYS_getaudit_addr
+#define	__NR_setaudit_addr	SYS_setaudit_addr
+#define	__NR_auditctl	SYS_auditctl
+#define	__NR__umtx_op	SYS__umtx_op
+#define	__NR_thr_new	SYS_thr_new
+#define	__NR_sigqueue	SYS_sigqueue
+#define	__NR_kmq_open	SYS_kmq_open
+#define	__NR_kmq_setattr	SYS_kmq_setattr
+#define	__NR_kmq_timedreceive	SYS_kmq_timedreceive
+#define	__NR_kmq_timedsend	SYS_kmq_timedsend
+#define	__NR_kmq_notify	SYS_kmq_notify
+#define	__NR_kmq_unlink	SYS_kmq_unlink
+#define	__NR_abort2	SYS_abort2
+#define	__NR_thr_set_name	SYS_thr_set_name
+#define	__NR_aio_fsync	SYS_aio_fsync
+#define	__NR_rtprio_thread	SYS_rtprio_thread
+#define	__NR_sctp_peeloff	SYS_sctp_peeloff
+#define	__NR_sctp_generic_sendmsg	SYS_sctp_generic_sendmsg
+#define	__NR_sctp_generic_sendmsg_iov	SYS_sctp_generic_sendmsg_iov
+#define	__NR_sctp_generic_recvmsg	SYS_sctp_generic_recvmsg
+#define	__NR_pread	SYS_pread	SYS_sctp_generic_recvmsg
+#define	__NR_pread64	SYS_pread
+#define	__NR_pwrite	SYS_pwrite
+#define	__NR_pwrite64	SYS_pwrite
+#define	__NR_mmap	SYS_mmap
+#define	__NR_lseek	SYS_lseek
+#define	__NR_truncate	SYS_truncate
+#define	__NR_ftruncate	SYS_ftruncate
+#define	__NR_thr_kill2	SYS_thr_kill2
+#define	__NR_shm_open	SYS_shm_open
+#define	__NR_shm_unlink	SYS_shm_unlink
+#define	__NR_cpuset	SYS_cpuset
+#define	__NR_cpuset_setid	SYS_cpuset_setid
+#define	__NR_cpuset_getid	SYS_cpuset_getid
+#define	__NR_cpuset_getaffinity	SYS_cpuset_getaffinity
+#define	__NR_cpuset_setaffinity	SYS_cpuset_setaffinity
+#define	__NR_faccessat	SYS_faccessat
+#define	__NR_fchmodat	SYS_fchmodat
+#define	__NR_fchownat	SYS_fchownat
+#define	__NR_fexecve	SYS_fexecve
+#define	__NR_fstatat	SYS_fstatat
+#define	__NR_fstatat64	SYS_fstatat
+#define	__NR_futimesat	SYS_futimesat
+#define	__NR_linkat	SYS_linkat
+#define	__NR_mkdirat	SYS_mkdirat
+#define	__NR_mkfifoat	SYS_mkfifoat
+#define	__NR_mknodat	SYS_mknodat
+#define	__NR_openat	SYS_openat
+#define	__NR_readlinkat	SYS_readlinkat
+#define	__NR_renameat	SYS_renameat
+#define	__NR_symlinkat	SYS_symlinkat
+#define	__NR_unlinkat	SYS_unlinkat
+#define	__NR_posix_openpt	SYS_posix_openpt
+#define	__NR_gssd_syscall	SYS_gssd_syscall
+#define	__NR_jail_get	SYS_jail_get
+#define	__NR_jail_set	SYS_jail_set
+#define	__NR_jail_remove	SYS_jail_remove
+#define	__NR_closefrom	SYS_closefrom
+#define	__NR___semctl	SYS___semctl
+#define	__NR_msgctl	SYS_msgctl
+#define	__NR_shmctl	SYS_shmctl
+#define	__NR_lpathconf	SYS_lpathconf
+#define	__NR___cap_rights_get	SYS___cap_rights_get
+#define	__NR_cap_enter	SYS_cap_enter
+#define	__NR_cap_getmode	SYS_cap_getmode
+#define	__NR_pdfork	SYS_pdfork
+#define	__NR_pdkill	SYS_pdkill
+#define	__NR_pdgetpid	SYS_pdgetpid
+#define	__NR_pselect	SYS_pselect
+#define	__NR_getloginclass	SYS_getloginclass
+#define	__NR_setloginclass	SYS_setloginclass
+#define	__NR_rctl_get_racct	SYS_rctl_get_racct
+#define	__NR_rctl_get_rules	SYS_rctl_get_rules
+#define	__NR_rctl_get_limits	SYS_rctl_get_limits
+#define	__NR_rctl_add_rule	SYS_rctl_add_rule
+#define	__NR_rctl_remove_rule	SYS_rctl_remove_rule
+#define	__NR_posix_fallocate	SYS_posix_fallocate
+#define	__NR_posix_fadvise	SYS_posix_fadvise
+#define	__NR_wait6	SYS_wait6
+#define	__NR_cap_rights_limit	SYS_cap_rights_limit
+#define	__NR_cap_ioctls_limit	SYS_cap_ioctls_limit
+#define	__NR_cap_ioctls_get	SYS_cap_ioctls_get
+#define	__NR_cap_fcntls_limit	SYS_cap_fcntls_limit
+#define	__NR_cap_fcntls_get	SYS_cap_fcntls_get
+#define	__NR_bindat	SYS_bindat
+#define	__NR_connectat	SYS_connectat
+#define	__NR_chflagsat	SYS_chflagsat
+#define	__NR_accept4	SYS_accept4
+#define	__NR_pipe2	SYS_pipe2
+#define	__NR_aio_mlock	SYS_aio_mlock
+#define	__NR_procctl	SYS_procctl
+#define	__NR_ppoll	SYS_ppoll
+#define	__NR_futimens	SYS_futimens
+#define	__NR_utimensat	SYS_utimensat
+#define	__NR_numa_getaffinity	SYS_numa_getaffinity
+#define	__NR_numa_setaffinity	SYS_numa_setaffinity
+#define	__NR_MAXSYSCALL	SYS_MAXSYSCALL
+
+#endif //_FREEBSD_SHIMS_H
\ No newline at end of file
diff --git a/runtime/POSIX/fd.c b/runtime/POSIX/fd.c
index 84d0bdc5..5a3faa16 100644
--- a/runtime/POSIX/fd.c
+++ b/runtime/POSIX/fd.c
@@ -20,7 +20,9 @@
 #include <fcntl.h>
 #include <stdarg.h>
 #include <assert.h>
+#ifndef __FreeBSD__
 #include <sys/vfs.h>
+#endif
 #include <unistd.h>
 #include <dirent.h>
 #include <sys/ioctl.h>
@@ -784,7 +786,9 @@ int __fd_getdents(unsigned int fd, struct dirent64 *dirp, unsigned int count) {
         dirp->d_type = IFTODT(df->stat->st_mode);
         dirp->d_name[0] = 'A' + i;
         dirp->d_name[1] = '\0';
+#ifdef _DIRENT_HAVE_D_OFF
         dirp->d_off = (i+1) * sizeof(*dirp);
+#endif
         bytes += dirp->d_reclen;
         ++dirp;
       }
@@ -795,7 +799,9 @@ int __fd_getdents(unsigned int fd, struct dirent64 *dirp, unsigned int count) {
       dirp->d_reclen = pad - bytes;
       dirp->d_type = DT_UNKNOWN;
       dirp->d_name[0] = '\0';
+#ifdef _DIRENT_HAVE_D_OFF
       dirp->d_off = 4096;
+#endif
       bytes += dirp->d_reclen;
       f->off = pad;
 
@@ -825,7 +831,9 @@ int __fd_getdents(unsigned int fd, struct dirent64 *dirp, unsigned int count) {
         /* Patch offsets */
         while (pos < res) {
           struct dirent64 *dp = (struct dirent64*) ((char*) dirp + pos);
+#ifdef _DIRENT_HAVE_D_OFF
           dp->d_off += 4096;
+#endif
           pos += dp->d_reclen;
         }
       }
@@ -872,7 +880,9 @@ int ioctl(int fd, unsigned long request, ...) {
         ts->c_oflag = 5;
         ts->c_cflag = 1215;
         ts->c_lflag = 35287;
+#ifdef __GLIBC__
         ts->c_line = 0;
+#endif
         ts->c_cc[0] = '\x03';
         ts->c_cc[1] = '\x1c';
         ts->c_cc[2] = '\x7f';
@@ -989,9 +999,12 @@ int fcntl(int fd, int cmd, ...) {
     errno = EBADF;
     return -1;
   }
-  
+#ifdef F_GETSIG
   if (cmd==F_GETFD || cmd==F_GETFL || cmd==F_GETOWN || cmd==F_GETSIG ||
       cmd==F_GETLEASE || cmd==F_NOTIFY) {
+#else
+   if (cmd==F_GETFD || cmd==F_GETFL || cmd==F_GETOWN) {
+#endif
     arg = 0;
   } else {
     va_start(ap, cmd);
diff --git a/runtime/POSIX/fd.h b/runtime/POSIX/fd.h
index 4c07ac9a..067f217e 100644
--- a/runtime/POSIX/fd.h
+++ b/runtime/POSIX/fd.h
@@ -23,8 +23,13 @@
 #include <sys/statfs.h>
 #endif
 
-#if defined(__APPLE__)
+#ifdef __APPLE__
 #include <sys/dtrace.h>
+#endif
+#ifdef __FreeBSD__
+#include "FreeBSD.h"
+#endif
+#if defined(__APPLE__) || defined(__FreeBSD__)
 #include <sys/mount.h>
 #include <sys/param.h>
 #if !defined(dirent64)
diff --git a/runtime/POSIX/fd_32.c b/runtime/POSIX/fd_32.c
index 36c5d41f..efd10404 100644
--- a/runtime/POSIX/fd_32.c
+++ b/runtime/POSIX/fd_32.c
@@ -29,7 +29,9 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/time.h>
+#ifndef __FreeBSD__
 #include <sys/vfs.h>
+#endif
 #include <fcntl.h>
 #include <stdarg.h>
 #include <assert.h>
@@ -165,7 +167,11 @@ int statfs(const char *path, struct statfs *buf32) {
 
 /* Based on uclibc version. We use getdents64 and then rewrite the
    results over themselves, as dirent32s. */
+#ifndef __FreeBSD__
 ssize_t getdents(int fd, struct dirent *dirp, size_t nbytes) {
+#else
+int getdents(int fd, char *dirp, int nbytes) {
+#endif
   struct dirent64 *dp64 = (struct dirent64*) dirp;
   ssize_t res = __fd_getdents(fd, dp64, nbytes);
 
@@ -176,7 +182,9 @@ ssize_t getdents(int fd, struct dirent *dirp, size_t nbytes) {
       size_t name_len = (dp64->d_reclen - 
                            (size_t) &((struct dirent64*) 0)->d_name);
       dp->d_ino = dp64->d_ino;
+#ifdef _DIRENT_HAVE_D_OFF
       dp->d_off = dp64->d_off;
+#endif
       dp->d_reclen = dp64->d_reclen;
       dp->d_type = dp64->d_type;
       memmove(dp->d_name, dp64->d_name, name_len);
diff --git a/runtime/POSIX/fd_64.c b/runtime/POSIX/fd_64.c
index 03fccc49..05bef394 100644
--- a/runtime/POSIX/fd_64.c
+++ b/runtime/POSIX/fd_64.c
@@ -31,7 +31,9 @@
 #include <fcntl.h>
 #include <stdarg.h>
 #include <assert.h>
+#ifndef __FreeBSD__
 #include <sys/vfs.h>
+#endif
 #include <unistd.h>
 #include <dirent.h>
 #include <sys/ioctl.h>
diff --git a/runtime/POSIX/stubs.c b/runtime/POSIX/stubs.c
index 6b87ad8d..ddbcc1fd 100644
--- a/runtime/POSIX/stubs.c
+++ b/runtime/POSIX/stubs.c
@@ -7,6 +7,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifdef __FreeBSD__
+#include "FreeBSD.h"
+#endif
 #include <errno.h>
 #include <limits.h>
 #include <signal.h>
@@ -20,6 +23,7 @@
 #include <sys/mman.h>
 #include <sys/resource.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/times.h>
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -184,6 +188,7 @@ clock_t times(struct tms *buf) {
   return 0;
 }
 
+#ifndef __FreeBSD__
 struct utmpx *getutxent(void) __attribute__((weak));
 struct utmpx *getutxent(void) {
   return (struct utmpx*) getutent();
@@ -204,6 +209,7 @@ int utmpxname(const char *file) {
   utmpname(file);
   return 0;
 }
+#endif
 
 int euidaccess(const char *pathname, int mode) __attribute__((weak));
 int euidaccess(const char *pathname, int mode) {
@@ -409,8 +415,14 @@ int umount2(const char *target, int flags) {
   return -1;
 }
 
+#ifndef __FreeBSD__
 int swapon(const char *path, int swapflags) __attribute__((weak));
 int swapon(const char *path, int swapflags) {
+#else
+int swapon(const char *path)__attribute__((weak));
+int swapon(const char *path)
+{
+#endif
   klee_warning("ignoring (EPERM)");
   errno = EPERM;
   return -1;
@@ -429,15 +441,25 @@ int setgid(gid_t gid) {
   return 0;
 }
 
+#ifndef __FreeBSD__
 int setgroups(size_t size, const gid_t *list) __attribute__((weak));
 int setgroups(size_t size, const gid_t *list) {
+#else
+int setgroups(int size, const gid_t *list) __attribute__((weak));
+int setgroups(int size, const gid_t *list) {
+#endif
   klee_warning("ignoring (EPERM)");
   errno = EPERM;
   return -1;
 }
 
+#ifndef __FreeBSD__
 int sethostname(const char *name, size_t len) __attribute__((weak));
 int sethostname(const char *name, size_t len) {
+#else
+int sethostname(const char *name, int len) __attribute__((weak));
+int sethostname(const char *name, int len) {
+#endif
   klee_warning("ignoring (EPERM)");
   errno = EPERM;
   return -1;
@@ -450,8 +472,13 @@ int setpgid(pid_t pid, pid_t pgid) {
   return -1;
 }
 
+#ifndef __FreeBSD__
 int setpgrp(void) __attribute__((weak));
 int setpgrp(void) {
+#else
+int setpgrp(pid_t a, pid_t b) __attribute__((weak));
+int setpgrp(pid_t a, pid_t b) {
+#endif
   klee_warning("ignoring (EPERM)");
   errno = EPERM;
   return -1;