18fd04b83SRoger A. Faulkner /*
28fd04b83SRoger A. Faulkner  * CDDL HEADER START
38fd04b83SRoger A. Faulkner  *
48fd04b83SRoger A. Faulkner  * The contents of this file are subject to the terms of the
58fd04b83SRoger A. Faulkner  * Common Development and Distribution License (the "License").
68fd04b83SRoger A. Faulkner  * You may not use this file except in compliance with the License.
78fd04b83SRoger A. Faulkner  *
88fd04b83SRoger A. Faulkner  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98fd04b83SRoger A. Faulkner  * or http://www.opensolaris.org/os/licensing.
108fd04b83SRoger A. Faulkner  * See the License for the specific language governing permissions
118fd04b83SRoger A. Faulkner  * and limitations under the License.
128fd04b83SRoger A. Faulkner  *
138fd04b83SRoger A. Faulkner  * When distributing Covered Code, include this CDDL HEADER in each
148fd04b83SRoger A. Faulkner  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158fd04b83SRoger A. Faulkner  * If applicable, add the following below this CDDL HEADER, with the
168fd04b83SRoger A. Faulkner  * fields enclosed by brackets "[]" replaced with your own identifying
178fd04b83SRoger A. Faulkner  * information: Portions Copyright [yyyy] [name of copyright owner]
188fd04b83SRoger A. Faulkner  *
198fd04b83SRoger A. Faulkner  * CDDL HEADER END
208fd04b83SRoger A. Faulkner  */
218fd04b83SRoger A. Faulkner 
228fd04b83SRoger A. Faulkner /*
23*80e2ca85S  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
248fd04b83SRoger A. Faulkner  */
258fd04b83SRoger A. Faulkner 
268fd04b83SRoger A. Faulkner #include <stdio.h>
278fd04b83SRoger A. Faulkner #include <stdlib.h>
288fd04b83SRoger A. Faulkner #include <unistd.h>
298fd04b83SRoger A. Faulkner #include <fcntl.h>
308fd04b83SRoger A. Faulkner #include <utime.h>
318fd04b83SRoger A. Faulkner #include <errno.h>
328fd04b83SRoger A. Faulkner #include <sys/types.h>
338fd04b83SRoger A. Faulkner #include <sys/stat.h>
348fd04b83SRoger A. Faulkner #include <sys/time.h>
358fd04b83SRoger A. Faulkner #include <sys/poll.h>
368fd04b83SRoger A. Faulkner #include <sys/file.h>
378fd04b83SRoger A. Faulkner #include <sys/syscall.h>
388fd04b83SRoger A. Faulkner 
398fd04b83SRoger A. Faulkner #include <s10_brand.h>
40*80e2ca85S #include <brand_misc.h>
418fd04b83SRoger A. Faulkner #include <s10_misc.h>
428fd04b83SRoger A. Faulkner 
438fd04b83SRoger A. Faulkner /*
448fd04b83SRoger A. Faulkner  * This file contains the emulation functions for all of the
458fd04b83SRoger A. Faulkner  * obsolete system call traps that existed in Solaris 10 but
468fd04b83SRoger A. Faulkner  * that have been deleted in the current version of Solaris.
478fd04b83SRoger A. Faulkner  */
488fd04b83SRoger A. Faulkner 
498fd04b83SRoger A. Faulkner static int
508fd04b83SRoger A. Faulkner s10_fstatat(sysret_t *rval,
518fd04b83SRoger A. Faulkner     int fd, const char *path, struct stat *sb, int flags)
528fd04b83SRoger A. Faulkner {
538fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
548fd04b83SRoger A. Faulkner 	    fd, path, sb, flags));
558fd04b83SRoger A. Faulkner }
568fd04b83SRoger A. Faulkner 
578fd04b83SRoger A. Faulkner int
588fd04b83SRoger A. Faulkner s10_stat(sysret_t *rval, const char *path, struct stat *sb)
598fd04b83SRoger A. Faulkner {
608fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
618fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, sb, 0));
628fd04b83SRoger A. Faulkner }
638fd04b83SRoger A. Faulkner 
648fd04b83SRoger A. Faulkner int
658fd04b83SRoger A. Faulkner s10_lstat(sysret_t *rval, const char *path, struct stat *sb)
668fd04b83SRoger A. Faulkner {
678fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
688fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
698fd04b83SRoger A. Faulkner }
708fd04b83SRoger A. Faulkner 
718fd04b83SRoger A. Faulkner int
728fd04b83SRoger A. Faulkner s10_fstat(sysret_t *rval, int filedes, struct stat *sb)
738fd04b83SRoger A. Faulkner {
748fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
758fd04b83SRoger A. Faulkner 	    filedes, NULL, sb, 0));
768fd04b83SRoger A. Faulkner }
778fd04b83SRoger A. Faulkner 
788fd04b83SRoger A. Faulkner #if !defined(_LP64)
798fd04b83SRoger A. Faulkner 
808fd04b83SRoger A. Faulkner static int
818fd04b83SRoger A. Faulkner s10_fstatat64(sysret_t *rval,
828fd04b83SRoger A. Faulkner     int fd, const char *path, struct stat64 *sb, int flags)
838fd04b83SRoger A. Faulkner {
848fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat64 + 1024,
858fd04b83SRoger A. Faulkner 	    fd, path, sb, flags));
868fd04b83SRoger A. Faulkner }
878fd04b83SRoger A. Faulkner 
888fd04b83SRoger A. Faulkner int
898fd04b83SRoger A. Faulkner s10_stat64(sysret_t *rval, const char *path, struct stat64 *sb)
908fd04b83SRoger A. Faulkner {
918fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat64 + 1024,
928fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, sb, 0));
938fd04b83SRoger A. Faulkner }
948fd04b83SRoger A. Faulkner 
958fd04b83SRoger A. Faulkner int
968fd04b83SRoger A. Faulkner s10_lstat64(sysret_t *rval, const char *path, struct stat64 *sb)
978fd04b83SRoger A. Faulkner {
988fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat64 + 1024,
998fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
1008fd04b83SRoger A. Faulkner }
1018fd04b83SRoger A. Faulkner 
1028fd04b83SRoger A. Faulkner int
1038fd04b83SRoger A. Faulkner s10_fstat64(sysret_t *rval, int filedes, struct stat64 *sb)
1048fd04b83SRoger A. Faulkner {
1058fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat64 + 1024,
1068fd04b83SRoger A. Faulkner 	    filedes, NULL, sb, 0));
1078fd04b83SRoger A. Faulkner }
1088fd04b83SRoger A. Faulkner 
1098fd04b83SRoger A. Faulkner #endif	/* !_LP64 */
1108fd04b83SRoger A. Faulkner 
1118fd04b83SRoger A. Faulkner static int
1128fd04b83SRoger A. Faulkner s10_openat(sysret_t *rval, int fd, const char *path, int oflag, mode_t mode)
1138fd04b83SRoger A. Faulkner {
1148fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat + 1024,
1158fd04b83SRoger A. Faulkner 	    fd, path, oflag, mode));
1168fd04b83SRoger A. Faulkner }
1178fd04b83SRoger A. Faulkner 
1188fd04b83SRoger A. Faulkner int
1198fd04b83SRoger A. Faulkner s10_open(sysret_t *rval, char *path, int oflag, mode_t mode)
1208fd04b83SRoger A. Faulkner {
1218fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat + 1024,
1228fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, oflag, mode));
1238fd04b83SRoger A. Faulkner }
1248fd04b83SRoger A. Faulkner 
1258fd04b83SRoger A. Faulkner int
1268fd04b83SRoger A. Faulkner s10_creat(sysret_t *rval, char *path, mode_t mode)
1278fd04b83SRoger A. Faulkner {
1288fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat + 1024,
1298fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, O_WRONLY | O_CREAT | O_TRUNC, mode));
1308fd04b83SRoger A. Faulkner }
1318fd04b83SRoger A. Faulkner 
1328fd04b83SRoger A. Faulkner #if !defined(_LP64)
1338fd04b83SRoger A. Faulkner 
1348fd04b83SRoger A. Faulkner static int
1358fd04b83SRoger A. Faulkner s10_openat64(sysret_t *rval, int fd, const char *path, int oflag, mode_t mode)
1368fd04b83SRoger A. Faulkner {
1378fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat64 + 1024,
1388fd04b83SRoger A. Faulkner 	    fd, path, oflag, mode));
1398fd04b83SRoger A. Faulkner }
1408fd04b83SRoger A. Faulkner 
1418fd04b83SRoger A. Faulkner int
1428fd04b83SRoger A. Faulkner s10_open64(sysret_t *rval, char *path, int oflag, mode_t mode)
1438fd04b83SRoger A. Faulkner {
1448fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat64 + 1024,
1458fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, oflag, mode));
1468fd04b83SRoger A. Faulkner }
1478fd04b83SRoger A. Faulkner 
1488fd04b83SRoger A. Faulkner int
1498fd04b83SRoger A. Faulkner s10_creat64(sysret_t *rval, char *path, mode_t mode)
1508fd04b83SRoger A. Faulkner {
1518fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_openat64 + 1024,
1528fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, O_WRONLY | O_CREAT | O_TRUNC, mode));
1538fd04b83SRoger A. Faulkner }
1548fd04b83SRoger A. Faulkner 
1558fd04b83SRoger A. Faulkner #endif	/* !_LP64 */
1568fd04b83SRoger A. Faulkner 
1578fd04b83SRoger A. Faulkner int
1588fd04b83SRoger A. Faulkner s10_fork1(sysret_t *rval)
1598fd04b83SRoger A. Faulkner {
1608fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_forksys + 1024, 0, 0));
1618fd04b83SRoger A. Faulkner }
1628fd04b83SRoger A. Faulkner 
1638fd04b83SRoger A. Faulkner int
1648fd04b83SRoger A. Faulkner s10_forkall(sysret_t *rval)
1658fd04b83SRoger A. Faulkner {
1668fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_forksys + 1024, 1, 0));
1678fd04b83SRoger A. Faulkner }
1688fd04b83SRoger A. Faulkner 
1698fd04b83SRoger A. Faulkner int
1708fd04b83SRoger A. Faulkner s10_dup(sysret_t *rval, int fd)
1718fd04b83SRoger A. Faulkner {
1728fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fcntl + 1024, fd, F_DUPFD, 0));
1738fd04b83SRoger A. Faulkner }
1748fd04b83SRoger A. Faulkner 
1758fd04b83SRoger A. Faulkner int
1768fd04b83SRoger A. Faulkner s10_poll(sysret_t *rval, struct pollfd *fds, nfds_t nfd, int timeout)
1778fd04b83SRoger A. Faulkner {
1788fd04b83SRoger A. Faulkner 	timespec_t ts;
1798fd04b83SRoger A. Faulkner 	timespec_t *tsp;
1808fd04b83SRoger A. Faulkner 
1818fd04b83SRoger A. Faulkner 	if (timeout < 0)
1828fd04b83SRoger A. Faulkner 		tsp = NULL;
1838fd04b83SRoger A. Faulkner 	else {
1848fd04b83SRoger A. Faulkner 		ts.tv_sec = timeout / MILLISEC;
1858fd04b83SRoger A. Faulkner 		ts.tv_nsec = (timeout % MILLISEC) * MICROSEC;
1868fd04b83SRoger A. Faulkner 		tsp = &ts;
1878fd04b83SRoger A. Faulkner 	}
1888fd04b83SRoger A. Faulkner 
1898fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_pollsys + 1024,
1908fd04b83SRoger A. Faulkner 	    fds, nfd, tsp, NULL));
1918fd04b83SRoger A. Faulkner }
1928fd04b83SRoger A. Faulkner 
1938fd04b83SRoger A. Faulkner int
1948fd04b83SRoger A. Faulkner s10_lwp_mutex_lock(sysret_t *rval, void *mp)
1958fd04b83SRoger A. Faulkner {
1968fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_lwp_mutex_timedlock + 1024,
1978fd04b83SRoger A. Faulkner 	    mp, NULL, 0));
1988fd04b83SRoger A. Faulkner }
1998fd04b83SRoger A. Faulkner 
2008fd04b83SRoger A. Faulkner int
2018fd04b83SRoger A. Faulkner s10_lwp_sema_wait(sysret_t *rval, void *sp)
2028fd04b83SRoger A. Faulkner {
2038fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_lwp_sema_timedwait + 1024,
2048fd04b83SRoger A. Faulkner 	    sp, NULL, 0));
2058fd04b83SRoger A. Faulkner }
2068fd04b83SRoger A. Faulkner 
2078fd04b83SRoger A. Faulkner static int
2088fd04b83SRoger A. Faulkner s10_fchownat(sysret_t *rval,
2098fd04b83SRoger A. Faulkner     int fd, const char *name, uid_t uid, gid_t gid, int flags)
2108fd04b83SRoger A. Faulkner {
2118fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fchownat + 1024,
2128fd04b83SRoger A. Faulkner 	    fd, name, uid, gid, flags));
2138fd04b83SRoger A. Faulkner }
2148fd04b83SRoger A. Faulkner 
2158fd04b83SRoger A. Faulkner int
2168fd04b83SRoger A. Faulkner s10_chown(sysret_t *rval, const char *name, uid_t uid, gid_t gid)
2178fd04b83SRoger A. Faulkner {
2188fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fchownat + 1024,
2198fd04b83SRoger A. Faulkner 	    AT_FDCWD, name, uid, gid, 0));
2208fd04b83SRoger A. Faulkner }
2218fd04b83SRoger A. Faulkner 
2228fd04b83SRoger A. Faulkner int
2238fd04b83SRoger A. Faulkner s10_lchown(sysret_t *rval, const char *name, uid_t uid, gid_t gid)
2248fd04b83SRoger A. Faulkner {
2258fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fchownat + 1024,
2268fd04b83SRoger A. Faulkner 	    AT_FDCWD, name, uid, gid, AT_SYMLINK_NOFOLLOW));
2278fd04b83SRoger A. Faulkner }
2288fd04b83SRoger A. Faulkner 
2298fd04b83SRoger A. Faulkner int
2308fd04b83SRoger A. Faulkner s10_fchown(sysret_t *rval, int filedes, uid_t uid, gid_t gid)
2318fd04b83SRoger A. Faulkner {
2328fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fchownat + 1024,
2338fd04b83SRoger A. Faulkner 	    filedes, NULL, uid, gid, 0));
2348fd04b83SRoger A. Faulkner }
2358fd04b83SRoger A. Faulkner 
2368fd04b83SRoger A. Faulkner static int
2378fd04b83SRoger A. Faulkner s10_unlinkat(sysret_t *rval, int fd, const char *name, int flags)
2388fd04b83SRoger A. Faulkner {
2398fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_unlinkat + 1024,
2408fd04b83SRoger A. Faulkner 	    fd, name, flags));
2418fd04b83SRoger A. Faulkner }
2428fd04b83SRoger A. Faulkner 
2438fd04b83SRoger A. Faulkner int
2448fd04b83SRoger A. Faulkner s10_unlink(sysret_t *rval, const char *name)
2458fd04b83SRoger A. Faulkner {
2468fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_unlinkat + 1024,
2478fd04b83SRoger A. Faulkner 	    AT_FDCWD, name, 0));
2488fd04b83SRoger A. Faulkner }
2498fd04b83SRoger A. Faulkner 
2508fd04b83SRoger A. Faulkner int
2518fd04b83SRoger A. Faulkner s10_rmdir(sysret_t *rval, const char *name)
2528fd04b83SRoger A. Faulkner {
2538fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_unlinkat + 1024,
2548fd04b83SRoger A. Faulkner 	    AT_FDCWD, name, AT_REMOVEDIR));
2558fd04b83SRoger A. Faulkner }
2568fd04b83SRoger A. Faulkner 
2578fd04b83SRoger A. Faulkner static int
2588fd04b83SRoger A. Faulkner s10_renameat(sysret_t *rval,
2598fd04b83SRoger A. Faulkner     int oldfd, const char *oldname, int newfd, const char *newname)
2608fd04b83SRoger A. Faulkner {
2618fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_renameat + 1024,
2628fd04b83SRoger A. Faulkner 	    oldfd, oldname, newfd, newname));
2638fd04b83SRoger A. Faulkner }
2648fd04b83SRoger A. Faulkner 
2658fd04b83SRoger A. Faulkner int
2668fd04b83SRoger A. Faulkner s10_rename(sysret_t *rval, const char *oldname, const char *newname)
2678fd04b83SRoger A. Faulkner {
2688fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_renameat + 1024,
2698fd04b83SRoger A. Faulkner 	    AT_FDCWD, oldname, AT_FDCWD, newname));
2708fd04b83SRoger A. Faulkner }
2718fd04b83SRoger A. Faulkner 
2728fd04b83SRoger A. Faulkner static int
2738fd04b83SRoger A. Faulkner s10_faccessat(sysret_t *rval, int fd, const char *fname, int amode, int flag)
2748fd04b83SRoger A. Faulkner {
2758fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_faccessat + 1024,
2768fd04b83SRoger A. Faulkner 	    fd, fname, amode, flag));
2778fd04b83SRoger A. Faulkner }
2788fd04b83SRoger A. Faulkner 
2798fd04b83SRoger A. Faulkner int
2808fd04b83SRoger A. Faulkner s10_access(sysret_t *rval, const char *fname, int amode)
2818fd04b83SRoger A. Faulkner {
2828fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_faccessat + 1024,
2838fd04b83SRoger A. Faulkner 	    AT_FDCWD, fname, amode, 0));
2848fd04b83SRoger A. Faulkner }
2858fd04b83SRoger A. Faulkner 
2868fd04b83SRoger A. Faulkner int
2878fd04b83SRoger A. Faulkner s10_utime(sysret_t *rval, const char *path, const struct utimbuf *times)
2888fd04b83SRoger A. Faulkner {
2898fd04b83SRoger A. Faulkner 	struct utimbuf ltimes;
2908fd04b83SRoger A. Faulkner 	timespec_t ts[2];
2918fd04b83SRoger A. Faulkner 	timespec_t *tsp;
2928fd04b83SRoger A. Faulkner 
2938fd04b83SRoger A. Faulkner 	if (times == NULL) {
2948fd04b83SRoger A. Faulkner 		tsp = NULL;
2958fd04b83SRoger A. Faulkner 	} else {
296*80e2ca85S 		if (brand_uucopy(times, &ltimes, sizeof (ltimes)) != 0)
2978fd04b83SRoger A. Faulkner 			return (EFAULT);
2988fd04b83SRoger A. Faulkner 		ts[0].tv_sec = ltimes.actime;
2998fd04b83SRoger A. Faulkner 		ts[0].tv_nsec = 0;
3008fd04b83SRoger A. Faulkner 		ts[1].tv_sec = ltimes.modtime;
3018fd04b83SRoger A. Faulkner 		ts[1].tv_nsec = 0;
3028fd04b83SRoger A. Faulkner 		tsp = ts;
3038fd04b83SRoger A. Faulkner 	}
3048fd04b83SRoger A. Faulkner 
3058fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_utimesys + 1024, 1,
3068fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, tsp, 0));
3078fd04b83SRoger A. Faulkner }
3088fd04b83SRoger A. Faulkner 
3098fd04b83SRoger A. Faulkner int
3108fd04b83SRoger A. Faulkner s10_utimes(sysret_t *rval, const char *path, const struct timeval times[2])
3118fd04b83SRoger A. Faulkner {
3128fd04b83SRoger A. Faulkner 	struct timeval ltimes[2];
3138fd04b83SRoger A. Faulkner 	timespec_t ts[2];
3148fd04b83SRoger A. Faulkner 	timespec_t *tsp;
3158fd04b83SRoger A. Faulkner 
3168fd04b83SRoger A. Faulkner 	if (times == NULL) {
3178fd04b83SRoger A. Faulkner 		tsp = NULL;
3188fd04b83SRoger A. Faulkner 	} else {
319*80e2ca85S 		if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0)
3208fd04b83SRoger A. Faulkner 			return (EFAULT);
3218fd04b83SRoger A. Faulkner 		ts[0].tv_sec = ltimes[0].tv_sec;
3228fd04b83SRoger A. Faulkner 		ts[0].tv_nsec = ltimes[0].tv_usec * 1000;
3238fd04b83SRoger A. Faulkner 		ts[1].tv_sec = ltimes[1].tv_sec;
3248fd04b83SRoger A. Faulkner 		ts[1].tv_nsec = ltimes[1].tv_usec * 1000;
3258fd04b83SRoger A. Faulkner 		tsp = ts;
3268fd04b83SRoger A. Faulkner 	}
3278fd04b83SRoger A. Faulkner 
3288fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_utimesys + 1024, 1,
3298fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, tsp, 0));
3308fd04b83SRoger A. Faulkner }
3318fd04b83SRoger A. Faulkner 
3328fd04b83SRoger A. Faulkner static int
3338fd04b83SRoger A. Faulkner s10_futimesat(sysret_t *rval,
3348fd04b83SRoger A. Faulkner     int fd, const char *path, const struct timeval times[2])
3358fd04b83SRoger A. Faulkner {
3368fd04b83SRoger A. Faulkner 	struct timeval ltimes[2];
3378fd04b83SRoger A. Faulkner 	timespec_t ts[2];
3388fd04b83SRoger A. Faulkner 	timespec_t *tsp;
3398fd04b83SRoger A. Faulkner 
3408fd04b83SRoger A. Faulkner 	if (times == NULL) {
3418fd04b83SRoger A. Faulkner 		tsp = NULL;
3428fd04b83SRoger A. Faulkner 	} else {
343*80e2ca85S 		if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0)
3448fd04b83SRoger A. Faulkner 			return (EFAULT);
3458fd04b83SRoger A. Faulkner 		ts[0].tv_sec = ltimes[0].tv_sec;
3468fd04b83SRoger A. Faulkner 		ts[0].tv_nsec = ltimes[0].tv_usec * 1000;
3478fd04b83SRoger A. Faulkner 		ts[1].tv_sec = ltimes[1].tv_sec;
3488fd04b83SRoger A. Faulkner 		ts[1].tv_nsec = ltimes[1].tv_usec * 1000;
3498fd04b83SRoger A. Faulkner 		tsp = ts;
3508fd04b83SRoger A. Faulkner 	}
3518fd04b83SRoger A. Faulkner 
3528fd04b83SRoger A. Faulkner 	if (path == NULL)
3538fd04b83SRoger A. Faulkner 		return (__systemcall(rval, SYS_utimesys + 1024, 0, fd, tsp));
3548fd04b83SRoger A. Faulkner 
3558fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_utimesys + 1024, 1, fd, path, tsp, 0));
3568fd04b83SRoger A. Faulkner }
3578fd04b83SRoger A. Faulkner 
3588fd04b83SRoger A. Faulkner #if defined(__x86)
3598fd04b83SRoger A. Faulkner 
3608fd04b83SRoger A. Faulkner /* ARGSUSED */
3618fd04b83SRoger A. Faulkner int
3628fd04b83SRoger A. Faulkner s10_xstat(sysret_t *rval, int version, const char *path, struct stat *statb)
3638fd04b83SRoger A. Faulkner {
3648fd04b83SRoger A. Faulkner #if defined(__amd64)
3658fd04b83SRoger A. Faulkner 	return (EINVAL);
3668fd04b83SRoger A. Faulkner #else
3678fd04b83SRoger A. Faulkner 	if (version != _STAT_VER)
3688fd04b83SRoger A. Faulkner 		return (EINVAL);
3698fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
3708fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, statb, 0));
3718fd04b83SRoger A. Faulkner #endif
3728fd04b83SRoger A. Faulkner }
3738fd04b83SRoger A. Faulkner 
3748fd04b83SRoger A. Faulkner /* ARGSUSED */
3758fd04b83SRoger A. Faulkner int
3768fd04b83SRoger A. Faulkner s10_lxstat(sysret_t *rval, int version, const char *path, struct stat *statb)
3778fd04b83SRoger A. Faulkner {
3788fd04b83SRoger A. Faulkner #if defined(__amd64)
3798fd04b83SRoger A. Faulkner 	return (EINVAL);
3808fd04b83SRoger A. Faulkner #else
3818fd04b83SRoger A. Faulkner 	if (version != _STAT_VER)
3828fd04b83SRoger A. Faulkner 		return (EINVAL);
3838fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
3848fd04b83SRoger A. Faulkner 	    AT_FDCWD, path, statb, AT_SYMLINK_NOFOLLOW));
3858fd04b83SRoger A. Faulkner #endif
3868fd04b83SRoger A. Faulkner }
3878fd04b83SRoger A. Faulkner 
3888fd04b83SRoger A. Faulkner /* ARGSUSED */
3898fd04b83SRoger A. Faulkner int
3908fd04b83SRoger A. Faulkner s10_fxstat(sysret_t *rval, int version, int fd, struct stat *statb)
3918fd04b83SRoger A. Faulkner {
3928fd04b83SRoger A. Faulkner #if defined(__amd64)
3938fd04b83SRoger A. Faulkner 	return (EINVAL);
3948fd04b83SRoger A. Faulkner #else
3958fd04b83SRoger A. Faulkner 	if (version != _STAT_VER)
3968fd04b83SRoger A. Faulkner 		return (EINVAL);
3978fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_fstatat + 1024,
3988fd04b83SRoger A. Faulkner 	    fd, NULL, statb, 0));
3998fd04b83SRoger A. Faulkner #endif
4008fd04b83SRoger A. Faulkner }
4018fd04b83SRoger A. Faulkner 
4028fd04b83SRoger A. Faulkner /* ARGSUSED */
4038fd04b83SRoger A. Faulkner int
4048fd04b83SRoger A. Faulkner s10_xmknod(sysret_t *rval, int version, const char *path,
4058fd04b83SRoger A. Faulkner     mode_t mode, dev_t dev)
4068fd04b83SRoger A. Faulkner {
4078fd04b83SRoger A. Faulkner #if defined(__amd64)
4088fd04b83SRoger A. Faulkner 	return (EINVAL);
4098fd04b83SRoger A. Faulkner #else
4108fd04b83SRoger A. Faulkner 	if (version != _MKNOD_VER)
4118fd04b83SRoger A. Faulkner 		return (EINVAL);
4128fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_mknod + 1024, path, mode, dev));
4138fd04b83SRoger A. Faulkner #endif
4148fd04b83SRoger A. Faulkner }
4158fd04b83SRoger A. Faulkner 
4168fd04b83SRoger A. Faulkner #endif	/* __x86 */
4178fd04b83SRoger A. Faulkner 
4188fd04b83SRoger A. Faulkner /*
4198fd04b83SRoger A. Faulkner  * This is the fsat() system call trap in s10.
4208fd04b83SRoger A. Faulkner  * It has been removed in the current system.
4218fd04b83SRoger A. Faulkner  */
4228fd04b83SRoger A. Faulkner int
4238fd04b83SRoger A. Faulkner s10_fsat(sysret_t *rval,
4248fd04b83SRoger A. Faulkner     int code, uintptr_t arg1, uintptr_t arg2,
4258fd04b83SRoger A. Faulkner     uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
4268fd04b83SRoger A. Faulkner {
4278fd04b83SRoger A. Faulkner 	switch (code) {
4288fd04b83SRoger A. Faulkner 	case 0:		/* openat */
4298fd04b83SRoger A. Faulkner 		return (s10_openat(rval, (int)arg1,
4308fd04b83SRoger A. Faulkner 		    (const char *)arg2, (int)arg3, (mode_t)arg4));
4318fd04b83SRoger A. Faulkner 	case 1:		/* openat64 */
4328fd04b83SRoger A. Faulkner #if defined(_LP64)
4338fd04b83SRoger A. Faulkner 		return (EINVAL);
4348fd04b83SRoger A. Faulkner #else
4358fd04b83SRoger A. Faulkner 		return (s10_openat64(rval, (int)arg1,
4368fd04b83SRoger A. Faulkner 		    (const char *)arg2, (int)arg3, (mode_t)arg4));
4378fd04b83SRoger A. Faulkner #endif
4388fd04b83SRoger A. Faulkner 	case 2:		/* fstatat64 */
4398fd04b83SRoger A. Faulkner #if defined(_LP64)
4408fd04b83SRoger A. Faulkner 		return (EINVAL);
4418fd04b83SRoger A. Faulkner #else
4428fd04b83SRoger A. Faulkner 		return (s10_fstatat64(rval, (int)arg1,
4438fd04b83SRoger A. Faulkner 		    (const char *)arg2, (struct stat64 *)arg3, (int)arg4));
4448fd04b83SRoger A. Faulkner #endif
4458fd04b83SRoger A. Faulkner 	case 3:		/* fstatat */
4468fd04b83SRoger A. Faulkner 		return (s10_fstatat(rval, (int)arg1,
4478fd04b83SRoger A. Faulkner 		    (const char *)arg2, (struct stat *)arg3, (int)arg4));
4488fd04b83SRoger A. Faulkner 	case 4:		/* fchownat */
4498fd04b83SRoger A. Faulkner 		return (s10_fchownat(rval, (int)arg1, (char *)arg2,
4508fd04b83SRoger A. Faulkner 		    (uid_t)arg3, (gid_t)arg4, (int)arg5));
4518fd04b83SRoger A. Faulkner 	case 5:		/* unlinkat */
4528fd04b83SRoger A. Faulkner 		return (s10_unlinkat(rval, (int)arg1, (char *)arg2,
4538fd04b83SRoger A. Faulkner 		    (int)arg3));
4548fd04b83SRoger A. Faulkner 	case 6:		/* futimesat */
4558fd04b83SRoger A. Faulkner 		return (s10_futimesat(rval, (int)arg1,
4568fd04b83SRoger A. Faulkner 		    (const char *)arg2, (const struct timeval *)arg3));
4578fd04b83SRoger A. Faulkner 	case 7:		/* renameat */
4588fd04b83SRoger A. Faulkner 		return (s10_renameat(rval, (int)arg1, (char *)arg2,
4598fd04b83SRoger A. Faulkner 		    (int)arg3, (char *)arg4));
4608fd04b83SRoger A. Faulkner 	case 8:		/* faccessat */
4618fd04b83SRoger A. Faulkner 		return (s10_faccessat(rval, (int)arg1, (char *)arg2,
4628fd04b83SRoger A. Faulkner 		    (int)arg3, (int)arg4));
4638fd04b83SRoger A. Faulkner 	case 9:		/* openattrdirat */
4648fd04b83SRoger A. Faulkner 		return (s10_openat(rval, (int)arg1,
4658fd04b83SRoger A. Faulkner 		    (const char *)arg2, FXATTRDIROPEN, 0));
4668fd04b83SRoger A. Faulkner 	}
4678fd04b83SRoger A. Faulkner 	return (EINVAL);
4688fd04b83SRoger A. Faulkner }
4698fd04b83SRoger A. Faulkner 
4708fd04b83SRoger A. Faulkner /*
4718fd04b83SRoger A. Faulkner  * Interposition upon SYS_umount
4728fd04b83SRoger A. Faulkner  */
4738fd04b83SRoger A. Faulkner int
4748fd04b83SRoger A. Faulkner s10_umount(sysret_t *rval, const char *path)
4758fd04b83SRoger A. Faulkner {
4768fd04b83SRoger A. Faulkner 	return (__systemcall(rval, SYS_umount2 + 1024, path, 0));
4778fd04b83SRoger A. Faulkner }
478