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 /*
2380e2ca85S * 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>
4080e2ca85S #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
s10_fstatat(sysret_t * rval,int fd,const char * path,struct stat * sb,int flags)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
s10_stat(sysret_t * rval,const char * path,struct stat * sb)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
s10_lstat(sysret_t * rval,const char * path,struct stat * sb)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
s10_fstat(sysret_t * rval,int filedes,struct stat * sb)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
s10_fstatat64(sysret_t * rval,int fd,const char * path,struct stat64 * sb,int flags)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
s10_stat64(sysret_t * rval,const char * path,struct stat64 * sb)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
s10_lstat64(sysret_t * rval,const char * path,struct stat64 * sb)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
s10_fstat64(sysret_t * rval,int filedes,struct stat64 * sb)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
s10_openat(sysret_t * rval,int fd,const char * path,int oflag,mode_t mode)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
s10_open(sysret_t * rval,char * path,int oflag,mode_t mode)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
s10_creat(sysret_t * rval,char * path,mode_t mode)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
s10_openat64(sysret_t * rval,int fd,const char * path,int oflag,mode_t mode)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
s10_open64(sysret_t * rval,char * path,int oflag,mode_t mode)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
s10_creat64(sysret_t * rval,char * path,mode_t mode)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
s10_fork1(sysret_t * rval)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
s10_forkall(sysret_t * rval)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
s10_dup(sysret_t * rval,int fd)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
s10_poll(sysret_t * rval,struct pollfd * fds,nfds_t nfd,int timeout)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
s10_lwp_mutex_lock(sysret_t * rval,void * mp)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
s10_lwp_sema_wait(sysret_t * rval,void * sp)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
207*794f0adbSRoger A. Faulkner int
s10_chmod(sysret_t * rval,const char * name,mode_t mode)208*794f0adbSRoger A. Faulkner s10_chmod(sysret_t *rval, const char *name, mode_t mode)
209*794f0adbSRoger A. Faulkner {
210*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_fchmodat + 1024,
211*794f0adbSRoger A. Faulkner AT_FDCWD, name, mode, 0));
212*794f0adbSRoger A. Faulkner }
213*794f0adbSRoger A. Faulkner
214*794f0adbSRoger A. Faulkner int
s10_fchmod(sysret_t * rval,int filedes,mode_t mode)215*794f0adbSRoger A. Faulkner s10_fchmod(sysret_t *rval, int filedes, mode_t mode)
216*794f0adbSRoger A. Faulkner {
217*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_fchmodat + 1024,
218*794f0adbSRoger A. Faulkner filedes, NULL, mode, 0));
219*794f0adbSRoger A. Faulkner }
220*794f0adbSRoger A. Faulkner
2218fd04b83SRoger A. Faulkner static int
s10_fchownat(sysret_t * rval,int fd,const char * name,uid_t uid,gid_t gid,int flag)2228fd04b83SRoger A. Faulkner s10_fchownat(sysret_t *rval,
223*794f0adbSRoger A. Faulkner int fd, const char *name, uid_t uid, gid_t gid, int flag)
2248fd04b83SRoger A. Faulkner {
2258fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024,
226*794f0adbSRoger A. Faulkner fd, name, uid, gid, flag));
2278fd04b83SRoger A. Faulkner }
2288fd04b83SRoger A. Faulkner
2298fd04b83SRoger A. Faulkner int
s10_chown(sysret_t * rval,const char * name,uid_t uid,gid_t gid)2308fd04b83SRoger A. Faulkner s10_chown(sysret_t *rval, const char *name, uid_t uid, gid_t gid)
2318fd04b83SRoger A. Faulkner {
2328fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024,
2338fd04b83SRoger A. Faulkner AT_FDCWD, name, uid, gid, 0));
2348fd04b83SRoger A. Faulkner }
2358fd04b83SRoger A. Faulkner
2368fd04b83SRoger A. Faulkner int
s10_lchown(sysret_t * rval,const char * name,uid_t uid,gid_t gid)2378fd04b83SRoger A. Faulkner s10_lchown(sysret_t *rval, const char *name, uid_t uid, gid_t gid)
2388fd04b83SRoger A. Faulkner {
2398fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024,
2408fd04b83SRoger A. Faulkner AT_FDCWD, name, uid, gid, AT_SYMLINK_NOFOLLOW));
2418fd04b83SRoger A. Faulkner }
2428fd04b83SRoger A. Faulkner
2438fd04b83SRoger A. Faulkner int
s10_fchown(sysret_t * rval,int filedes,uid_t uid,gid_t gid)2448fd04b83SRoger A. Faulkner s10_fchown(sysret_t *rval, int filedes, uid_t uid, gid_t gid)
2458fd04b83SRoger A. Faulkner {
2468fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024,
2478fd04b83SRoger A. Faulkner filedes, NULL, uid, gid, 0));
2488fd04b83SRoger A. Faulkner }
2498fd04b83SRoger A. Faulkner
250*794f0adbSRoger A. Faulkner int
s10_mkdir(sysret_t * rval,const char * dname,int dmode)251*794f0adbSRoger A. Faulkner s10_mkdir(sysret_t *rval, const char *dname, int dmode)
252*794f0adbSRoger A. Faulkner {
253*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_mkdirat + 1024,
254*794f0adbSRoger A. Faulkner AT_FDCWD, dname, dmode));
255*794f0adbSRoger A. Faulkner }
256*794f0adbSRoger A. Faulkner
257*794f0adbSRoger A. Faulkner int
s10_mknod(sysret_t * rval,const char * fname,int fmode,dev_t dev)258*794f0adbSRoger A. Faulkner s10_mknod(sysret_t *rval, const char *fname, int fmode, dev_t dev)
259*794f0adbSRoger A. Faulkner {
260*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_mknodat + 1024,
261*794f0adbSRoger A. Faulkner AT_FDCWD, fname, fmode, dev));
262*794f0adbSRoger A. Faulkner }
263*794f0adbSRoger A. Faulkner
264*794f0adbSRoger A. Faulkner int
s10_link(sysret_t * rval,const char * path1,const char * path2)265*794f0adbSRoger A. Faulkner s10_link(sysret_t *rval, const char *path1, const char *path2)
266*794f0adbSRoger A. Faulkner {
267*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_linkat + 1024,
268*794f0adbSRoger A. Faulkner AT_FDCWD, path1, AT_FDCWD, path2, 0));
269*794f0adbSRoger A. Faulkner }
270*794f0adbSRoger A. Faulkner
2718fd04b83SRoger A. Faulkner static int
s10_unlinkat(sysret_t * rval,int fd,const char * name,int flags)2728fd04b83SRoger A. Faulkner s10_unlinkat(sysret_t *rval, int fd, const char *name, int flags)
2738fd04b83SRoger A. Faulkner {
2748fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024,
2758fd04b83SRoger A. Faulkner fd, name, flags));
2768fd04b83SRoger A. Faulkner }
2778fd04b83SRoger A. Faulkner
2788fd04b83SRoger A. Faulkner int
s10_unlink(sysret_t * rval,const char * name)2798fd04b83SRoger A. Faulkner s10_unlink(sysret_t *rval, const char *name)
2808fd04b83SRoger A. Faulkner {
2818fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024,
2828fd04b83SRoger A. Faulkner AT_FDCWD, name, 0));
2838fd04b83SRoger A. Faulkner }
2848fd04b83SRoger A. Faulkner
2858fd04b83SRoger A. Faulkner int
s10_rmdir(sysret_t * rval,const char * name)2868fd04b83SRoger A. Faulkner s10_rmdir(sysret_t *rval, const char *name)
2878fd04b83SRoger A. Faulkner {
2888fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024,
2898fd04b83SRoger A. Faulkner AT_FDCWD, name, AT_REMOVEDIR));
2908fd04b83SRoger A. Faulkner }
2918fd04b83SRoger A. Faulkner
2928fd04b83SRoger A. Faulkner static int
s10_renameat(sysret_t * rval,int oldfd,const char * oldname,int newfd,const char * newname)2938fd04b83SRoger A. Faulkner s10_renameat(sysret_t *rval,
2948fd04b83SRoger A. Faulkner int oldfd, const char *oldname, int newfd, const char *newname)
2958fd04b83SRoger A. Faulkner {
2968fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_renameat + 1024,
2978fd04b83SRoger A. Faulkner oldfd, oldname, newfd, newname));
2988fd04b83SRoger A. Faulkner }
2998fd04b83SRoger A. Faulkner
3008fd04b83SRoger A. Faulkner int
s10_rename(sysret_t * rval,const char * oldname,const char * newname)3018fd04b83SRoger A. Faulkner s10_rename(sysret_t *rval, const char *oldname, const char *newname)
3028fd04b83SRoger A. Faulkner {
3038fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_renameat + 1024,
3048fd04b83SRoger A. Faulkner AT_FDCWD, oldname, AT_FDCWD, newname));
3058fd04b83SRoger A. Faulkner }
3068fd04b83SRoger A. Faulkner
307*794f0adbSRoger A. Faulkner int
s10_symlink(sysret_t * rval,const char * path1,const char * path2)308*794f0adbSRoger A. Faulkner s10_symlink(sysret_t *rval, const char *path1, const char *path2)
309*794f0adbSRoger A. Faulkner {
310*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_symlinkat + 1024,
311*794f0adbSRoger A. Faulkner path1, AT_FDCWD, path2));
312*794f0adbSRoger A. Faulkner }
313*794f0adbSRoger A. Faulkner
314*794f0adbSRoger A. Faulkner int
s10_readlink(sysret_t * rval,const char * path,char * buf,size_t bufsize)315*794f0adbSRoger A. Faulkner s10_readlink(sysret_t *rval, const char *path, char *buf, size_t bufsize)
316*794f0adbSRoger A. Faulkner {
317*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_readlinkat + 1024,
318*794f0adbSRoger A. Faulkner AT_FDCWD, path, buf, bufsize));
319*794f0adbSRoger A. Faulkner }
320*794f0adbSRoger A. Faulkner
3218fd04b83SRoger A. Faulkner static int
s10_faccessat(sysret_t * rval,int fd,const char * fname,int amode,int flag)3228fd04b83SRoger A. Faulkner s10_faccessat(sysret_t *rval, int fd, const char *fname, int amode, int flag)
3238fd04b83SRoger A. Faulkner {
3248fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_faccessat + 1024,
3258fd04b83SRoger A. Faulkner fd, fname, amode, flag));
3268fd04b83SRoger A. Faulkner }
3278fd04b83SRoger A. Faulkner
3288fd04b83SRoger A. Faulkner int
s10_access(sysret_t * rval,const char * fname,int amode)3298fd04b83SRoger A. Faulkner s10_access(sysret_t *rval, const char *fname, int amode)
3308fd04b83SRoger A. Faulkner {
3318fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_faccessat + 1024,
3328fd04b83SRoger A. Faulkner AT_FDCWD, fname, amode, 0));
3338fd04b83SRoger A. Faulkner }
3348fd04b83SRoger A. Faulkner
3358fd04b83SRoger A. Faulkner int
s10_utime(sysret_t * rval,const char * path,const struct utimbuf * times)3368fd04b83SRoger A. Faulkner s10_utime(sysret_t *rval, const char *path, const struct utimbuf *times)
3378fd04b83SRoger A. Faulkner {
3388fd04b83SRoger A. Faulkner struct utimbuf ltimes;
3398fd04b83SRoger A. Faulkner timespec_t ts[2];
3408fd04b83SRoger A. Faulkner timespec_t *tsp;
3418fd04b83SRoger A. Faulkner
3428fd04b83SRoger A. Faulkner if (times == NULL) {
3438fd04b83SRoger A. Faulkner tsp = NULL;
3448fd04b83SRoger A. Faulkner } else {
34580e2ca85S if (brand_uucopy(times, <imes, sizeof (ltimes)) != 0)
3468fd04b83SRoger A. Faulkner return (EFAULT);
3478fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes.actime;
3488fd04b83SRoger A. Faulkner ts[0].tv_nsec = 0;
3498fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes.modtime;
3508fd04b83SRoger A. Faulkner ts[1].tv_nsec = 0;
3518fd04b83SRoger A. Faulkner tsp = ts;
3528fd04b83SRoger A. Faulkner }
3538fd04b83SRoger A. Faulkner
3548fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1,
3558fd04b83SRoger A. Faulkner AT_FDCWD, path, tsp, 0));
3568fd04b83SRoger A. Faulkner }
3578fd04b83SRoger A. Faulkner
3588fd04b83SRoger A. Faulkner int
s10_utimes(sysret_t * rval,const char * path,const struct timeval times[2])3598fd04b83SRoger A. Faulkner s10_utimes(sysret_t *rval, const char *path, const struct timeval times[2])
3608fd04b83SRoger A. Faulkner {
3618fd04b83SRoger A. Faulkner struct timeval ltimes[2];
3628fd04b83SRoger A. Faulkner timespec_t ts[2];
3638fd04b83SRoger A. Faulkner timespec_t *tsp;
3648fd04b83SRoger A. Faulkner
3658fd04b83SRoger A. Faulkner if (times == NULL) {
3668fd04b83SRoger A. Faulkner tsp = NULL;
3678fd04b83SRoger A. Faulkner } else {
36880e2ca85S if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0)
3698fd04b83SRoger A. Faulkner return (EFAULT);
3708fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes[0].tv_sec;
3718fd04b83SRoger A. Faulkner ts[0].tv_nsec = ltimes[0].tv_usec * 1000;
3728fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes[1].tv_sec;
3738fd04b83SRoger A. Faulkner ts[1].tv_nsec = ltimes[1].tv_usec * 1000;
3748fd04b83SRoger A. Faulkner tsp = ts;
3758fd04b83SRoger A. Faulkner }
3768fd04b83SRoger A. Faulkner
3778fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1,
3788fd04b83SRoger A. Faulkner AT_FDCWD, path, tsp, 0));
3798fd04b83SRoger A. Faulkner }
3808fd04b83SRoger A. Faulkner
3818fd04b83SRoger A. Faulkner static int
s10_futimesat(sysret_t * rval,int fd,const char * path,const struct timeval times[2])3828fd04b83SRoger A. Faulkner s10_futimesat(sysret_t *rval,
3838fd04b83SRoger A. Faulkner int fd, const char *path, const struct timeval times[2])
3848fd04b83SRoger A. Faulkner {
3858fd04b83SRoger A. Faulkner struct timeval ltimes[2];
3868fd04b83SRoger A. Faulkner timespec_t ts[2];
3878fd04b83SRoger A. Faulkner timespec_t *tsp;
3888fd04b83SRoger A. Faulkner
3898fd04b83SRoger A. Faulkner if (times == NULL) {
3908fd04b83SRoger A. Faulkner tsp = NULL;
3918fd04b83SRoger A. Faulkner } else {
39280e2ca85S if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0)
3938fd04b83SRoger A. Faulkner return (EFAULT);
3948fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes[0].tv_sec;
3958fd04b83SRoger A. Faulkner ts[0].tv_nsec = ltimes[0].tv_usec * 1000;
3968fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes[1].tv_sec;
3978fd04b83SRoger A. Faulkner ts[1].tv_nsec = ltimes[1].tv_usec * 1000;
3988fd04b83SRoger A. Faulkner tsp = ts;
3998fd04b83SRoger A. Faulkner }
4008fd04b83SRoger A. Faulkner
4018fd04b83SRoger A. Faulkner if (path == NULL)
4028fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 0, fd, tsp));
4038fd04b83SRoger A. Faulkner
4048fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1, fd, path, tsp, 0));
4058fd04b83SRoger A. Faulkner }
4068fd04b83SRoger A. Faulkner
4078fd04b83SRoger A. Faulkner #if defined(__x86)
4088fd04b83SRoger A. Faulkner
4098fd04b83SRoger A. Faulkner /* ARGSUSED */
4108fd04b83SRoger A. Faulkner int
s10_xstat(sysret_t * rval,int version,const char * path,struct stat * statb)4118fd04b83SRoger A. Faulkner s10_xstat(sysret_t *rval, int version, const char *path, struct stat *statb)
4128fd04b83SRoger A. Faulkner {
4138fd04b83SRoger A. Faulkner #if defined(__amd64)
4148fd04b83SRoger A. Faulkner return (EINVAL);
4158fd04b83SRoger A. Faulkner #else
4168fd04b83SRoger A. Faulkner if (version != _STAT_VER)
4178fd04b83SRoger A. Faulkner return (EINVAL);
4188fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024,
4198fd04b83SRoger A. Faulkner AT_FDCWD, path, statb, 0));
4208fd04b83SRoger A. Faulkner #endif
4218fd04b83SRoger A. Faulkner }
4228fd04b83SRoger A. Faulkner
4238fd04b83SRoger A. Faulkner /* ARGSUSED */
4248fd04b83SRoger A. Faulkner int
s10_lxstat(sysret_t * rval,int version,const char * path,struct stat * statb)4258fd04b83SRoger A. Faulkner s10_lxstat(sysret_t *rval, int version, const char *path, struct stat *statb)
4268fd04b83SRoger A. Faulkner {
4278fd04b83SRoger A. Faulkner #if defined(__amd64)
4288fd04b83SRoger A. Faulkner return (EINVAL);
4298fd04b83SRoger A. Faulkner #else
4308fd04b83SRoger A. Faulkner if (version != _STAT_VER)
4318fd04b83SRoger A. Faulkner return (EINVAL);
4328fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024,
4338fd04b83SRoger A. Faulkner AT_FDCWD, path, statb, AT_SYMLINK_NOFOLLOW));
4348fd04b83SRoger A. Faulkner #endif
4358fd04b83SRoger A. Faulkner }
4368fd04b83SRoger A. Faulkner
4378fd04b83SRoger A. Faulkner /* ARGSUSED */
4388fd04b83SRoger A. Faulkner int
s10_fxstat(sysret_t * rval,int version,int fd,struct stat * statb)4398fd04b83SRoger A. Faulkner s10_fxstat(sysret_t *rval, int version, int fd, struct stat *statb)
4408fd04b83SRoger A. Faulkner {
4418fd04b83SRoger A. Faulkner #if defined(__amd64)
4428fd04b83SRoger A. Faulkner return (EINVAL);
4438fd04b83SRoger A. Faulkner #else
4448fd04b83SRoger A. Faulkner if (version != _STAT_VER)
4458fd04b83SRoger A. Faulkner return (EINVAL);
4468fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024,
4478fd04b83SRoger A. Faulkner fd, NULL, statb, 0));
4488fd04b83SRoger A. Faulkner #endif
4498fd04b83SRoger A. Faulkner }
4508fd04b83SRoger A. Faulkner
4518fd04b83SRoger A. Faulkner /* ARGSUSED */
4528fd04b83SRoger A. Faulkner int
s10_xmknod(sysret_t * rval,int version,const char * path,mode_t mode,dev_t dev)4538fd04b83SRoger A. Faulkner s10_xmknod(sysret_t *rval, int version, const char *path,
4548fd04b83SRoger A. Faulkner mode_t mode, dev_t dev)
4558fd04b83SRoger A. Faulkner {
4568fd04b83SRoger A. Faulkner #if defined(__amd64)
4578fd04b83SRoger A. Faulkner return (EINVAL);
4588fd04b83SRoger A. Faulkner #else
4598fd04b83SRoger A. Faulkner if (version != _MKNOD_VER)
4608fd04b83SRoger A. Faulkner return (EINVAL);
461*794f0adbSRoger A. Faulkner return (__systemcall(rval, SYS_mknodat + 1024,
462*794f0adbSRoger A. Faulkner AT_FDCWD, path, mode, dev));
4638fd04b83SRoger A. Faulkner #endif
4648fd04b83SRoger A. Faulkner }
4658fd04b83SRoger A. Faulkner
4668fd04b83SRoger A. Faulkner #endif /* __x86 */
4678fd04b83SRoger A. Faulkner
4688fd04b83SRoger A. Faulkner /*
4698fd04b83SRoger A. Faulkner * This is the fsat() system call trap in s10.
4708fd04b83SRoger A. Faulkner * It has been removed in the current system.
4718fd04b83SRoger A. Faulkner */
4728fd04b83SRoger A. Faulkner int
s10_fsat(sysret_t * rval,int code,uintptr_t arg1,uintptr_t arg2,uintptr_t arg3,uintptr_t arg4,uintptr_t arg5)4738fd04b83SRoger A. Faulkner s10_fsat(sysret_t *rval,
4748fd04b83SRoger A. Faulkner int code, uintptr_t arg1, uintptr_t arg2,
4758fd04b83SRoger A. Faulkner uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
4768fd04b83SRoger A. Faulkner {
4778fd04b83SRoger A. Faulkner switch (code) {
4788fd04b83SRoger A. Faulkner case 0: /* openat */
4798fd04b83SRoger A. Faulkner return (s10_openat(rval, (int)arg1,
4808fd04b83SRoger A. Faulkner (const char *)arg2, (int)arg3, (mode_t)arg4));
4818fd04b83SRoger A. Faulkner case 1: /* openat64 */
4828fd04b83SRoger A. Faulkner #if defined(_LP64)
4838fd04b83SRoger A. Faulkner return (EINVAL);
4848fd04b83SRoger A. Faulkner #else
4858fd04b83SRoger A. Faulkner return (s10_openat64(rval, (int)arg1,
4868fd04b83SRoger A. Faulkner (const char *)arg2, (int)arg3, (mode_t)arg4));
4878fd04b83SRoger A. Faulkner #endif
4888fd04b83SRoger A. Faulkner case 2: /* fstatat64 */
4898fd04b83SRoger A. Faulkner #if defined(_LP64)
4908fd04b83SRoger A. Faulkner return (EINVAL);
4918fd04b83SRoger A. Faulkner #else
4928fd04b83SRoger A. Faulkner return (s10_fstatat64(rval, (int)arg1,
4938fd04b83SRoger A. Faulkner (const char *)arg2, (struct stat64 *)arg3, (int)arg4));
4948fd04b83SRoger A. Faulkner #endif
4958fd04b83SRoger A. Faulkner case 3: /* fstatat */
4968fd04b83SRoger A. Faulkner return (s10_fstatat(rval, (int)arg1,
4978fd04b83SRoger A. Faulkner (const char *)arg2, (struct stat *)arg3, (int)arg4));
4988fd04b83SRoger A. Faulkner case 4: /* fchownat */
4998fd04b83SRoger A. Faulkner return (s10_fchownat(rval, (int)arg1, (char *)arg2,
5008fd04b83SRoger A. Faulkner (uid_t)arg3, (gid_t)arg4, (int)arg5));
5018fd04b83SRoger A. Faulkner case 5: /* unlinkat */
5028fd04b83SRoger A. Faulkner return (s10_unlinkat(rval, (int)arg1, (char *)arg2,
5038fd04b83SRoger A. Faulkner (int)arg3));
5048fd04b83SRoger A. Faulkner case 6: /* futimesat */
5058fd04b83SRoger A. Faulkner return (s10_futimesat(rval, (int)arg1,
5068fd04b83SRoger A. Faulkner (const char *)arg2, (const struct timeval *)arg3));
5078fd04b83SRoger A. Faulkner case 7: /* renameat */
5088fd04b83SRoger A. Faulkner return (s10_renameat(rval, (int)arg1, (char *)arg2,
5098fd04b83SRoger A. Faulkner (int)arg3, (char *)arg4));
5108fd04b83SRoger A. Faulkner case 8: /* faccessat */
5118fd04b83SRoger A. Faulkner return (s10_faccessat(rval, (int)arg1, (char *)arg2,
5128fd04b83SRoger A. Faulkner (int)arg3, (int)arg4));
5138fd04b83SRoger A. Faulkner case 9: /* openattrdirat */
5148fd04b83SRoger A. Faulkner return (s10_openat(rval, (int)arg1,
5158fd04b83SRoger A. Faulkner (const char *)arg2, FXATTRDIROPEN, 0));
5168fd04b83SRoger A. Faulkner }
5178fd04b83SRoger A. Faulkner return (EINVAL);
5188fd04b83SRoger A. Faulkner }
5198fd04b83SRoger A. Faulkner
5208fd04b83SRoger A. Faulkner /*
5218fd04b83SRoger A. Faulkner * Interposition upon SYS_umount
5228fd04b83SRoger A. Faulkner */
5238fd04b83SRoger A. Faulkner int
s10_umount(sysret_t * rval,const char * path)5248fd04b83SRoger A. Faulkner s10_umount(sysret_t *rval, const char *path)
5258fd04b83SRoger A. Faulkner {
5268fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_umount2 + 1024, path, 0));
5278fd04b83SRoger A. Faulkner }
528