#
# CDDL HEADER START
#
# The contents of this file are subject to the terms
# of the Common Development and Distribution License
# (the "License").  You may not use this file except
# in compliance with the License.
#
# You can obtain a copy of the license at
# src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing
# permissions and limitations under the License.
#
# When distributing Covered Code, include this CDDL
# HEADER in each file and include the License file at
# usr/src/OPENSOLARIS.LICENSE.  If applicable,
# add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your
# own identifying information: Portions Copyright [yyyy]
# [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#


ALL=				\
		atomic		\
		bind		\
		cachetocache	\
		cascade_mutex	\
		cascade_cond	\
		cascade_lockf	\
		cascade_fcntl	\
		cascade_flock	\
		chdir		\
		close		\
		close_tcp	\
		connection	\
		dup		\
		exec		\
		exit		\
		exp		\
		fcntl		\
		fcntl_ndelay	\
		file_lock	\
		fork		\
		getcontext	\
		getenv		\
		gettimeofday	\
		getpeername	\
		getpid		\
		getrusage	\
		getsockname	\
		isatty		\
		listen		\
		localtime_r	\
		log		\
		longjmp		\
		lrand48		\
		lseek		\
		malloc		\
		memcpy		\
		memmove		\
		memrand		\
		memset		\
		mktime		\
		mprotect	\
		mmap		\
		msync		\
		munmap		\
		mutex		\
		nop		\
		open		\
		pipe		\
		poll		\
		pread		\
		pthread_create	\
		pwrite		\
		read		\
		realpath	\
		recurse		\
		select		\
		semop		\
		setcontext	\
		setsockopt	\
		sigaction	\
		siglongjmp	\
		signal		\
		sigprocmask	\
		socket		\
		socketpair	\
		stat		\
		strcasecmp	\
		strchr		\
		strcmp		\
		strcpy		\
		strftime	\
		strlen		\
		strtol		\
		system		\
		time		\
		times		\
		write		\
		writev


