diff options
Diffstat (limited to 'usr/src/cmd/truss')
| -rw-r--r-- | usr/src/cmd/truss/codes.c | 16 | ||||
| -rw-r--r-- | usr/src/cmd/truss/listopts.c | 31 | ||||
| -rw-r--r-- | usr/src/cmd/truss/print.c | 41 | ||||
| -rw-r--r-- | usr/src/cmd/truss/print.h | 7 | ||||
| -rw-r--r-- | usr/src/cmd/truss/systable.c | 146 |
5 files changed, 205 insertions, 36 deletions
diff --git a/usr/src/cmd/truss/codes.c b/usr/src/cmd/truss/codes.c index 55dea4c7c7..c7d036a4a4 100644 --- a/usr/src/cmd/truss/codes.c +++ b/usr/src/cmd/truss/codes.c @@ -18,8 +18,9 @@ * * CDDL HEADER END */ + /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ @@ -1894,9 +1895,12 @@ openarg(private_t *pri, int arg) { char *str = pri->code_buf; - switch (arg & ~ALL_O_FLAGS) { + if ((arg & ~(O_ACCMODE | ALL_O_FLAGS)) != 0) + return (NULL); + + switch (arg & O_ACCMODE) { default: - return ((char *)NULL); + return (NULL); case O_RDONLY: (void) strcpy(str, "O_RDONLY"); break; @@ -1906,6 +1910,12 @@ openarg(private_t *pri, int arg) case O_RDWR: (void) strcpy(str, "O_RDWR"); break; + case O_SEARCH: + (void) strcpy(str, "O_SEARCH"); + break; + case O_EXEC: + (void) strcpy(str, "O_EXEC"); + break; } if (arg & O_NDELAY) diff --git a/usr/src/cmd/truss/listopts.c b/usr/src/cmd/truss/listopts.c index 0d32d15561..17d9a50ecc 100644 --- a/usr/src/cmd/truss/listopts.c +++ b/usr/src/cmd/truss/listopts.c @@ -20,8 +20,7 @@ */ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ @@ -226,26 +225,42 @@ syslist(char *str, /* string of syscall names */ sysx = SYS_renameat; goto def; - case SYS_unlink: /* set both */ - sysx = SYS_unlinkat; + case SYS_link: /* set both */ + sysx = SYS_linkat; goto def; + case SYS_unlink: /* set both */ case SYS_rmdir: /* set both */ sysx = SYS_unlinkat; goto def; - case SYS_chown: /* set both */ - sysx = SYS_fchownat; + case SYS_symlink: /* set both */ + sysx = SYS_symlinkat; goto def; - case SYS_lchown: /* set both */ - sysx = SYS_fchownat; + case SYS_readlink: /* set both */ + sysx = SYS_readlinkat; goto def; + case SYS_chmod: /* set both */ + case SYS_fchmod: /* set both */ + sysx = SYS_fchmodat; + goto def; + + case SYS_chown: /* set both */ + case SYS_lchown: /* set both */ case SYS_fchown: /* set both */ sysx = SYS_fchownat; goto def; + case SYS_mkdir: /* set both */ + sysx = SYS_mkdirat; + goto def; + + case SYS_mknod: /* set both */ + sysx = SYS_mknodat; + goto def; + case SYS_access: /* set both */ sysx = SYS_faccessat; goto def; diff --git a/usr/src/cmd/truss/print.c b/usr/src/cmd/truss/print.c index 1a92777c28..d676afa56e 100644 --- a/usr/src/cmd/truss/print.c +++ b/usr/src/cmd/truss/print.c @@ -18,6 +18,7 @@ * * CDDL HEADER END */ + /* * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -2619,15 +2620,45 @@ prt_fxf(private_t *pri, int raw, long val) } /* - * Print utimensat() flag + * Print faccessat() flag + */ +void +prt_fat(private_t *pri, int raw, long val) +{ + if (val == 0) + outstring(pri, "0"); + else if (!raw && val == AT_EACCESS) + outstring(pri, "AT_EACCESS"); + else + prt_hex(pri, 0, val); +} + +/* + * Print unlinkat() flag + */ +void +prt_uat(private_t *pri, int raw, long val) +{ + if (val == 0) + outstring(pri, "0"); + else if (!raw && val == AT_REMOVEDIR) + outstring(pri, "AT_REMOVEDIR"); + else + prt_hex(pri, 0, val); +} + +/* + * Print AT_SYMLINK_NOFOLLOW / AT_SYMLINK_FOLLOW flag */ void -prt_utf(private_t *pri, int raw, long val) +prt_snf(private_t *pri, int raw, long val) { if (val == 0) outstring(pri, "0"); else if (!raw && val == AT_SYMLINK_NOFOLLOW) outstring(pri, "AT_SYMLINK_NOFOLLOW"); + else if (!raw && val == AT_SYMLINK_FOLLOW) + outstring(pri, "AT_SYMLINK_FOLLOW"); else prt_hex(pri, 0, val); } @@ -2648,14 +2679,14 @@ void (* const Print[])() = { prt_uts, /* UTS -- print utssys code */ prt_opn, /* OPN -- print open code */ prt_sig, /* SIG -- print signal name plus flags */ - prt_nov, /* Was ACT, now available for reuse */ + prt_uat, /* UAT -- print unlinkat() flag */ prt_msc, /* MSC -- print msgsys command */ prt_msf, /* MSF -- print msgsys flags */ prt_smc, /* SMC -- print semsys command */ prt_sef, /* SEF -- print semsys flags */ prt_shc, /* SHC -- print shmsys command */ prt_shf, /* SHF -- print shmsys flags */ - prt_nov, /* Was PLK, now available for reuse */ + prt_fat, /* FAT -- print faccessat( flag */ prt_sfs, /* SFS -- print sysfs code */ prt_rst, /* RST -- print string returned by syscall */ prt_smf, /* SMF -- print streams message flags */ @@ -2733,7 +2764,7 @@ void (* const Print[])() = { prt_spf, /* SPF -- print rctlsys_projset() flags */ prt_un1, /* UN1 -- as prt_uns except for -1 */ prt_mob, /* MOB -- print mmapobj() flags */ - prt_utf, /* UTF -- print utimensat() flag */ + prt_snf, /* SNF -- print AT_SYMLINK_[NO]FOLLOW flag */ prt_skc, /* SKC -- print sockconfig() subcode */ prt_dec, /* HID -- hidden argument, make this the last one */ }; diff --git a/usr/src/cmd/truss/print.h b/usr/src/cmd/truss/print.h index 7a190f9cab..98c2223052 100644 --- a/usr/src/cmd/truss/print.h +++ b/usr/src/cmd/truss/print.h @@ -18,6 +18,7 @@ * * CDDL HEADER END */ + /* * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -48,14 +49,14 @@ extern "C" { #define UTS 9 /* print utssys code */ #define OPN 10 /* print open code */ #define SIG 11 /* print signal name plus flags */ -/* Number 12 now available for reuse */ +#define UAT 12 /* print unlinkat() flag */ #define MSC 13 /* print msgsys command */ #define MSF 14 /* print msgsys flags */ #define SMC 15 /* print semsys command */ #define SEF 16 /* print semsys flags */ #define SHC 17 /* print shmsys command */ #define SHF 18 /* print shmsys flags */ -/* Number 19 now available for reuse */ +#define FAT 19 /* print faccessat() flag */ #define SFS 20 /* print sysfs code */ #define RST 21 /* print string returned by sys call */ #define SMF 22 /* print streams message flags */ @@ -133,7 +134,7 @@ extern "C" { #define SPF 94 /* print rctlsys_projset flags */ #define UN1 95 /* unsigned except for -1 */ #define MOB 96 /* print mmapobj() flags */ -#define UTF 97 /* print utimensat() flag */ +#define SNF 97 /* print AT_SYMLINK_[NO]FOLLOW flag */ #define SKC 98 /* print sockconfig subcode */ #define HID 99 /* hidden argument, don't print */ /* make sure HID is always the last member */ diff --git a/usr/src/cmd/truss/systable.c b/usr/src/cmd/truss/systable.c index b8bdbe6af5..66ae2525f4 100644 --- a/usr/src/cmd/truss/systable.c +++ b/usr/src/cmd/truss/systable.c @@ -223,11 +223,11 @@ const struct systable systable[] = { {"write", 3, DEC, NOV, DEC, IOB, UNS}, /* 4 */ {"open", 3, DEC, NOV, STG, OPN, OCT}, /* 5 */ {"close", 1, DEC, NOV, DEC}, /* 6 */ -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF}, /* 7 */ { NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, {"link", 2, DEC, NOV, STG, STG}, /* 9 */ {"unlink", 1, DEC, NOV, STG}, /* 10 */ -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"symlinkat", 3, DEC, NOV, STG, ATC, STG}, /* 11 */ {"chdir", 1, DEC, NOV, STG}, /* 12 */ {"time", 0, DEC, NOV}, /* 13 */ {"mknod", 3, DEC, NOV, STG, OCT, HEX}, /* 14 */ @@ -238,7 +238,7 @@ const struct systable systable[] = { {"lseek", 3, DEC, NOV, DEC, DEX, WHN}, /* 19 */ {"getpid", 0, DEC, DEC}, /* 20 */ {"mount", 8, DEC, NOV, STG, STG, MTF, MFT, HEX, DEC, HEX, DEC}, /* 21 */ -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS}, /* 22 */ {"setuid", 1, DEC, NOV, UNS}, /* 23 */ {"getuid", 0, UNS, UNS}, /* 24 */ {"stime", 1, DEC, NOV, DEC}, /* 25 */ @@ -261,10 +261,10 @@ const struct systable systable[] = { {"pipe", 0, DEC, DEC}, /* 42 */ {"times", 1, DEC, NOV, HEX}, /* 43 */ {"profil", 4, DEC, NOV, HEX, UNS, HEX, OCT}, /* 44 */ -{"faccessat", 4, DEC, NOV, ATC, STG, ACC, DEC}, /* 45 */ +{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT}, /* 45 */ {"setgid", 1, DEC, NOV, UNS}, /* 46 */ {"getgid", 0, UNS, UNS}, /* 47 */ -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX}, /* 48 */ {"msgsys", 6, DEC, NOV, DEC, DEC, DEC, DEC, DEC, DEC}, /* 49 */ {"sysi86", 4, HEX, NOV, S86, HEX, HEX, HEX, DEC, DEC}, /* 50 */ {"acct", 1, DEC, NOV, STG}, /* 51 */ @@ -272,7 +272,7 @@ const struct systable systable[] = { {"semsys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 53 */ {"ioctl", 3, DEC, NOV, DEC, IOC, IOA}, /* 54 */ {"uadmin", 3, DEC, NOV, DEC, DEC, DEC}, /* 55 */ -{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, UTF}, /* 56 */ +{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF}, /* 56 */ {"utssys", 4, DEC, NOV, HEX, DEC, UTS, HEX}, /* 57 */ {"fdsync", 2, DEC, NOV, DEC, FFG}, /* 58 */ {"execve", 3, DEC, NOV, STG, HEX, HEX}, /* 59 */ @@ -281,9 +281,9 @@ const struct systable systable[] = { {"fcntl", 3, DEC, NOV, DEC, FCN, HEX}, /* 62 */ {"ulimit", 2, DEX, NOV, ULM, DEC}, /* 63 */ {"renameat", 4, DEC, NOV, ATC, STG, ATC, STG}, /* 64 */ -{"unlinkat", 3, DEC, NOV, ATC, STG, DEC}, /* 65 */ -{"fstatat", 4, DEC, NOV, ATC, STG, HEX, UTF}, /* 66 */ -{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, UTF}, /* 67 */ +{"unlinkat", 3, DEC, NOV, ATC, STG, UAT}, /* 65 */ +{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 66 */ +{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 67 */ {"openat", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 68 */ {"openat64", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 69 */ {"tasksys", 5, DEC, NOV, DEC, DEC, DEC, HEX, DEC}, /* 70 */ @@ -317,8 +317,8 @@ const struct systable systable[] = { {"sigaction", 3, DEC, NOV, SIG, HEX, HEX}, /* 98 */ {"sigpendsys", 2, DEC, NOV, DEC, HEX}, /* 99 */ {"context", 2, DEC, NOV, DEC, HEX}, /* 100 */ -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, -{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 101 */ +{"mkdirat", 3, DEC, NOV, ATC, STG, OCT}, /* 102 */ {"statvfs", 2, DEC, NOV, STG, HEX}, /* 103 */ {"fstatvfs", 2, DEC, NOV, DEC, HEX}, /* 104 */ {"getloadavg", 2, DEC, NOV, HEX, DEC}, /* 105 */ @@ -484,34 +484,72 @@ const struct systable systable[] = { */ const struct systable faccessattable[] = { -{"faccessat", 4, DEC, NOV, ATC, STG, ACC, DEC}, /* 0 */ +{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT}, /* 0 */ {"access", 3, DEC, NOV, HID, STG, ACC}, /* 1 */ }; #define NACCESSCODE (sizeof (faccessattable) / sizeof (struct systable)) +const struct systable fchmodattable[] = { +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 0 */ +{"chmod", 3, DEC, NOV, HID, STG, OCT}, /* 1 */ +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 2 */ +{"fchmod", 3, DEC, NOV, DEC, HID, OCT}, /* 3 */ +}; +#define NCHMODCODE (sizeof (fchmodattable) / sizeof (struct systable)) + const struct systable fchownattable[] = { -{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, UTF}, /* 0 */ +{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF}, /* 0 */ {"chown", 4, DEC, NOV, HID, STG, DEC, DEC}, /* 1 */ {"lchown", 4, DEC, NOV, HID, STG, DEC, DEC}, /* 2 */ {"fchown", 4, DEC, NOV, DEC, HID, DEC, DEC}, /* 3 */ }; #define NCHOWNCODE (sizeof (fchownattable) / sizeof (struct systable)) +const struct systable mkdiratattable[] = { +{"mkdirat", 3, DEC, NOV, ATC, STG, OCT}, /* 0 */ +{"mkdir", 3, DEC, NOV, HID, STG, OCT}, /* 1 */ +}; +#define NMKDIRCODE (sizeof (mkdiratattable) / sizeof (struct systable)) + +const struct systable mknodatattable[] = { +{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX}, /* 0 */ +{"mknod", 4, DEC, NOV, HID, STG, OCT, HEX}, /* 1 */ +}; +#define NMKMODCODE (sizeof (mknodatattable) / sizeof (struct systable)) + const struct systable renameattable[] = { {"renameat", 4, DEC, NOV, ATC, STG, ATC, STG}, /* 0 */ {"rename", 4, DEC, NOV, HID, STG, HID, STG}, /* 1 */ }; #define NRENAMECODE (sizeof (renameattable) / sizeof (struct systable)) +const struct systable linkattable[] = { +{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF}, /* 0 */ +{"link", 4, DEC, NOV, HID, STG, HID, STG}, /* 1 */ +}; +#define NLINKATCODE (sizeof (linkattable) / sizeof (struct systable)) + const struct systable unlinkattable[] = { -{"unlinkat", 3, DEC, NOV, ATC, STG, DEC}, /* 0 */ +{"unlinkat", 3, DEC, NOV, ATC, STG, UAT}, /* 0 */ {"unlink", 2, DEC, NOV, HID, STG}, /* 1 */ {"rmdir", 2, DEC, NOV, HID, STG}, /* 2 */ }; #define NUNLINKCODE (sizeof (unlinkattable) / sizeof (struct systable)) +const struct systable symlinkattable[] = { +{"symlinkat", 3, DEC, NOV, STG, ATC, STG}, /* 0 */ +{"symlink", 3, DEC, NOV, STG, HID, STG}, /* 1 */ +}; +#define NSYMLINKCODE (sizeof (symlinkattable) / sizeof (struct systable)) + +const struct systable readlinkattable[] = { +{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS}, /* 0 */ +{"readlink", 4, DEC, NOV, HID, STG, RLK, UNS}, /* 1 */ +}; +#define NREADLINKCODE (sizeof (readlinkattable) / sizeof (struct systable)) + const struct systable fstatattable[] = { -{"fstatat", 4, DEC, NOV, ATC, STG, HEX, UTF}, /* 0 */ +{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 0 */ {"stat", 3, DEC, NOV, HID, STG, HEX}, /* 1 */ {"lstat", 3, DEC, NOV, HID, STG, HEX}, /* 2 */ {"fstat", 3, DEC, NOV, DEC, HID, HEX}, /* 3 */ @@ -519,7 +557,7 @@ const struct systable fstatattable[] = { #define NSTATCODE (sizeof (fstatattable) / sizeof (struct systable)) const struct systable fstatat64table[] = { -{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, UTF}, /* 0 */ +{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 0 */ {"stat64", 3, DEC, NOV, HID, STG, HEX}, /* 1 */ {"lstat64", 3, DEC, NOV, HID, STG, HEX}, /* 2 */ {"fstat64", 3, DEC, NOV, DEC, HID, HEX}, /* 3 */ @@ -868,7 +906,7 @@ const struct systable sidsystable[] = { const struct systable utimesystable[] = { {"futimens", 3, DEC, NOV, HID, DEC, HEX}, /* 0 */ -{"utimensat", 5, DEC, NOV, HID, ATC, STG, HEX, UTF}, /* 1 */ +{"utimensat", 5, DEC, NOV, HID, ATC, STG, HEX, SNF}, /* 1 */ }; #define NUTIMESYSCODE (sizeof (utimesystable) / sizeof (struct systable)) @@ -1051,18 +1089,42 @@ subsys(int syscall, int subcode) if ((unsigned)subcode < NACCESSCODE) stp = &faccessattable[subcode]; break; + case SYS_fchmodat: + if ((unsigned)subcode < NCHMODCODE) + stp = &fchmodattable[subcode]; + break; case SYS_fchownat: if ((unsigned)subcode < NCHOWNCODE) stp = &fchownattable[subcode]; break; + case SYS_mkdirat: + if ((unsigned)subcode < NMKDIRCODE) + stp = &mkdiratattable[subcode]; + break; + case SYS_mknodat: + if ((unsigned)subcode < NMKMODCODE) + stp = &mknodatattable[subcode]; + break; case SYS_renameat: if ((unsigned)subcode < NRENAMECODE) stp = &renameattable[subcode]; break; + case SYS_linkat: + if ((unsigned)subcode < NLINKATCODE) + stp = &linkattable[subcode]; + break; case SYS_unlinkat: if ((unsigned)subcode < NUNLINKCODE) stp = &unlinkattable[subcode]; break; + case SYS_symlinkat: + if ((unsigned)subcode < NSYMLINKCODE) + stp = &symlinkattable[subcode]; + break; + case SYS_readlinkat: + if ((unsigned)subcode < NREADLINKCODE) + stp = &readlinkattable[subcode]; + break; case SYS_fstatat: if ((unsigned)subcode < NSTATCODE) stp = &fstatattable[subcode]; @@ -1299,6 +1361,20 @@ getsubcode(private_t *pri) subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && Lsp->pr_sysarg[3] == 0)? 1 : 0; break; + case SYS_fchmodat: + if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { + subcode = 3; + break; + } + if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) { + subcode = 0; + break; + } + if (nsysarg > 3) + subcode = (Lsp->pr_sysarg[3] == 0)? 1 : + (Lsp->pr_sysarg[3] == AT_SYMLINK_NOFOLLOW)? + 2 : 0; + break; case SYS_fchownat: if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { subcode = 3; @@ -1313,11 +1389,24 @@ getsubcode(private_t *pri) (Lsp->pr_sysarg[4] == AT_SYMLINK_NOFOLLOW)? 2 : 0; break; + case SYS_mkdirat: + case SYS_mknodat: + case SYS_readlinkat: + if (nsysarg > 0) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD)? + 1 : 0; + break; case SYS_renameat: if (nsysarg > 2) subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && (int)Lsp->pr_sysarg[2] == AT_FDCWD)? 1 : 0; break; + case SYS_linkat: + if (nsysarg > 4) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && + (int)Lsp->pr_sysarg[2] == AT_FDCWD && + Lsp->pr_sysarg[4] == 0)? 1 : 0; + break; case SYS_unlinkat: if (nsysarg > 2) subcode = @@ -1325,6 +1414,11 @@ getsubcode(private_t *pri) (Lsp->pr_sysarg[2] == AT_REMOVEDIR)? 2 : (Lsp->pr_sysarg[2] == 0)? 1 : 0; break; + case SYS_symlinkat: + if (nsysarg > 1) + subcode = ((int)Lsp->pr_sysarg[1] == AT_FDCWD)? + 1 : 0; + break; case SYS_fstatat: case SYS_fstatat64: if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { @@ -1426,9 +1520,15 @@ maxsyscalls() { return (PRMAXSYS + 1 + NACCESSCODE - 1 + + NCHMODCODE - 1 + NCHOWNCODE - 1 + + NMKDIRCODE - 1 + + NMKMODCODE - 1 + NRENAMECODE - 1 + + NLINKATCODE - 1 + NUNLINKCODE - 1 + + NSYMLINKCODE - 1 + + NREADLINKCODE - 1 + NSTATCODE - 1 + NSTAT64CODE - 1 + NOPENATCODE - 1 @@ -1478,12 +1578,24 @@ nsubcodes(int syscall) switch (syscall) { case SYS_faccessat: return (NACCESSCODE); + case SYS_fchmodat: + return (NCHMODCODE); case SYS_fchownat: return (NCHOWNCODE); + case SYS_mkdirat: + return (NMKDIRCODE); + case SYS_mknodat: + return (NMKMODCODE); case SYS_renameat: return (NRENAMECODE); + case SYS_linkat: + return (NLINKATCODE); case SYS_unlinkat: return (NUNLINKCODE); + case SYS_symlinkat: + return (NSYMLINKCODE); + case SYS_readlinkat: + return (NREADLINKCODE); case SYS_fstatat: return (NSTATCODE); case SYS_fstatat64: |
