diff options
author | Carlos Neira <cneirabustos@gmail.com> | 2019-02-14 17:47:36 -0300 |
---|---|---|
committer | Richard Lowe <richlowe@richlowe.net> | 2019-03-14 21:16:28 +0000 |
commit | 542a7b7f5ccc44e3c95d6dce4ec0566f60bd9ff4 (patch) | |
tree | 2de0dce7fce79ebbce133dc0aa1c3b802e14696e /usr/src | |
parent | 2f7dba3e6747cbaaf1deb86e6ca1e2a5c96332ac (diff) | |
download | illumos-joyent-542a7b7f5ccc44e3c95d6dce4ec0566f60bd9ff4.tar.gz |
7780 mdb could extract NT_PRPSINFO information from core files
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gergo Doma <domag02@gmail.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/mdb/Makefile.module | 4 | ||||
-rw-r--r-- | usr/src/cmd/mdb/common/modules/libc/libc.c | 221 | ||||
-rw-r--r-- | usr/src/lib/libproc/common/libproc.h | 4 | ||||
-rw-r--r-- | usr/src/lib/libproc/common/mapfile-vers | 3 | ||||
-rw-r--r-- | usr/src/lib/libproc/common/proc_names.c | 40 | ||||
-rw-r--r-- | usr/src/man/man3lib/libproc.3lib | 31 | ||||
-rw-r--r-- | usr/src/man/man3proc/Makefile | 5 | ||||
-rw-r--r-- | usr/src/man/man3proc/proc_fltname.3proc | 24 | ||||
-rw-r--r-- | usr/src/pkg/manifests/system-library.man3proc.inc | 3 |
9 files changed, 310 insertions, 25 deletions
diff --git a/usr/src/cmd/mdb/Makefile.module b/usr/src/cmd/mdb/Makefile.module index 3b4c8db69f..6f6bd14e7d 100644 --- a/usr/src/cmd/mdb/Makefile.module +++ b/usr/src/cmd/mdb/Makefile.module @@ -24,6 +24,8 @@ # # Copyright (c) 2013 by Delphix. All rights reserved. # Copyright (c) 2018, Joyent, Inc. +# Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> +# Copyright 2019 OmniOS Community Edition (OmniOSce) Association. # .KEEP_STATE: @@ -171,7 +173,7 @@ lint: $$(LINTFILES) $(MODFILE): dmod .WAIT $(MODOBJS) $$(MAPFILE-EXT) $(LINK.c) $(ZDEFS) $(ZIGNORE) $(MAPFILE-EXT:%=-M%) $(GSHARED) \ - $(MODOBJS) -o $@ $(LDLIBS) -lc + $(MODOBJS) -o $@ $(LDLIBS) -lc -lproc $(CTFMERGE) -L VERSION -o $@ $(MODOBJS) $(POST_PROCESS_SO) diff --git a/usr/src/cmd/mdb/common/modules/libc/libc.c b/usr/src/cmd/mdb/common/modules/libc/libc.c index 1f704926fe..4e2aabf061 100644 --- a/usr/src/cmd/mdb/common/modules/libc/libc.c +++ b/usr/src/cmd/mdb/common/modules/libc/libc.c @@ -23,6 +23,8 @@ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012 by Delphix. All rights reserved. * Copyright 2017, Joyent, Inc. + * Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> + * Copyright 2019 OmniOS Community Edition (OmniOSce) Association. */ #include <sys/mdb_modapi.h> @@ -36,6 +38,7 @@ #include <string.h> #include <thr_uberdata.h> #include "findstack.h" +#include <libproc.h> static const char * stack_flags(const stack_t *sp) @@ -1149,6 +1152,222 @@ d_tsd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) return (DCMD_OK); } +/* + * Print percent from 16-bit binary fraction [0 .. 1] + * Round up .01 to .1 to indicate some small percentage (the 0x7000 below). + * + * Note: This routine was copied from elfdump/common/corenote.c and modified. + * + */ +static uint_t +pct_value(ushort_t pct) +{ + uint_t value = pct; + + value = ((value * 1000) + 0x7000) >> 15; /* [0 .. 1000] */ + if (value >= 1000) + value = 999; + + return (value); +} + +static void +psinfo_raw(psinfo_t psinfo) +{ + const int minspaces = 2; + const int spbcols = 20; + char sysname[SYS2STR_MAX]; + uint_t cpu, mem; + char buff[32]; + int bufflen; + + mdb_printf("[ NT_PRPSINFO ]\n"); + + mdb_printf("\tpr_state: %d\t\t\tpr_sname: %c\n", + psinfo.pr_lwp.pr_state, psinfo.pr_lwp.pr_sname); + + mdb_printf("\tpr_zomb: %d\t\t\tpr_nice: %d\n", + psinfo.pr_nzomb, psinfo.pr_lwp.pr_nice); + + mdb_printf("\tpr_uid: %u\t\t\tpr_gid: %u\n", + psinfo.pr_uid, psinfo.pr_gid); + + mdb_snprintf(buff, sizeof (buff), + "%d", psinfo.pr_pid); + + bufflen = strlen(buff); + mdb_printf("\tpr_pid: %s%*spr_ppid: %d\n", + buff, strlen(buff) > spbcols ? minspaces : (spbcols - bufflen), " ", + psinfo.pr_ppid); + + mdb_printf("\tpr_pgid: %u\t\t\tpr_sid: %d\n", + psinfo.pr_gid, psinfo.pr_sid); + + mdb_snprintf(buff, sizeof (buff), + "0x%lx", (ulong_t)psinfo.pr_addr); + + bufflen = strlen(buff); + + mdb_printf("\tpr_addr: %s%*spr_size: %#x\n", + buff, strlen(buff) > spbcols ? minspaces : (spbcols - bufflen), " ", + (ulong_t)psinfo.pr_size); + + mdb_printf("\tpr_rssize: %#lx\t\tpr_wchan: %#lx\n", + (ulong_t)psinfo.pr_rssize, (ulong_t)psinfo.pr_lwp.pr_wchan); + + mdb_printf("\tpr_start:\n\t tv_sec: %ld\t\ttv_nsec: %ld\n", + psinfo.pr_start.tv_sec, psinfo.pr_start.tv_nsec); + + mdb_printf("\tpr_time:\n\t tv_sec: %ld\t\t\ttv_nsec: %ld\n", + psinfo.pr_time.tv_sec, psinfo.pr_time.tv_nsec); + + mdb_printf("\tpr_pri: %d\t\t\tpr_oldpri: %d\n", + psinfo.pr_lwp.pr_pri, psinfo.pr_lwp.pr_oldpri); + + mdb_printf("\tpr_cpu: %d\n", psinfo.pr_lwp.pr_cpu); + + mdb_printf("\tpr_clname: %s\n", psinfo.pr_lwp.pr_clname); + + mdb_printf("\tpr_fname: %s\n", psinfo.pr_fname); + + mdb_printf("\tpr_psargs: %s\n", psinfo.pr_psargs); + + + mdb_printf("\tpr_syscall: [ %s ]\n", + proc_sysname(psinfo.pr_lwp.pr_syscall, sysname, + sizeof (sysname))); + + mdb_printf("\tpr_ctime:\n\t tv_sec: %ld\t\t\ttv_nsec: %ld\n", + psinfo.pr_ctime.tv_sec, psinfo.pr_ctime.tv_nsec); + + mdb_printf("\tpr_argc: %d\t\t\tpr_argv: 0x%lx\n", + psinfo.pr_argc, (ulong_t)psinfo.pr_argv); + + mdb_snprintf(buff, sizeof (buff), "0x%lx", (ulong_t)psinfo.pr_envp); + + bufflen = strlen(buff); + + mdb_printf("\tpr_envp: %s%*spr_wstat: %d\n", + buff, strlen(buff) > spbcols ? minspaces : (spbcols - bufflen), " ", + psinfo.pr_wstat); + + cpu = pct_value(psinfo.pr_pctcpu); + mem = pct_value(psinfo.pr_pctmem); + + mdb_printf("\tpr_pctcpu: %u.%u%%\t\tpr_pctmem: %u.%u%%\n", + cpu / 10, cpu % 10, mem / 10, mem % 10); + + mdb_printf("\tpr_euid: %u\t\t\tpr_egid: %u\n", + psinfo.pr_euid, psinfo.pr_egid); + + mdb_printf("\tpr_dmodel: [%s]\n", + proc_dmodelname(psinfo.pr_dmodel, buff, sizeof (buff))); +} + +static void +psinfo_sum(psinfo_t psinfo) +{ + const int minspaces = 2; + const int spbcols = 23; + char buff[64]; + int bufflen; + int ms; + + mdb_printf("PID: %6d (process id)\t\t" + "UID: %4u (real user id)\n", + psinfo.pr_pid, psinfo.pr_uid); + + mdb_printf("PPID: %6d (parent process id)\tEUID: %4d" + " (effective user id)\n", psinfo.pr_ppid, psinfo.pr_euid); + + mdb_printf("PGID: %6d (process group id)\tGID: %4u" + " (real group id)\n", psinfo.pr_pgid, psinfo.pr_gid); + + mdb_printf("SID: %6d (session id)\t\tEGID: %4u" + " (effective group id)\n", + psinfo.pr_sid, psinfo.pr_egid); + + mdb_printf("ZONEID: %6d\t\t\t\tCONTRACT:%4d\n", + psinfo.pr_zoneid, psinfo.pr_contract); + + mdb_printf("PROJECT:%6d \t\t\t\tTASK: %4d\n\n", + psinfo.pr_projid, psinfo.pr_taskid); + + mdb_printf("START: %Y (wall timestamp when the process started)\n", + psinfo.pr_start); + + ms = NSEC2MSEC(psinfo.pr_time.tv_nsec); + + mdb_snprintf(buff, sizeof (buff), "%ld.%d seconds", + psinfo.pr_time.tv_sec, ms); + + bufflen = strlen(buff); + + mdb_printf("TIME: %s%*s" + "(CPU time used by this process)\n", + buff, bufflen > spbcols ? minspaces : (spbcols - bufflen), " "); + + ms = NSEC2MSEC(psinfo.pr_ctime.tv_nsec); + + mdb_snprintf(buff, sizeof (buff), "%ld.%d seconds", + psinfo.pr_ctime.tv_sec, ms); + + mdb_printf("CTIME: %s%*s" + "(CPU time used by child processes)\n", + buff, bufflen > spbcols ? minspaces : (spbcols - bufflen), " "); + + mdb_snprintf(buff, sizeof (buff), "%s", psinfo.pr_fname); + bufflen = strlen(buff); + + mdb_printf("FNAME: %s%*s(name of the program executed)\n", + buff, bufflen > spbcols ? minspaces : (spbcols - bufflen), " "); + + mdb_printf("PSARGS: \"%s\"\n", psinfo.pr_psargs); +} + +void +d_psinfo_dcmd_help(void) +{ + mdb_printf( + "Prints relevant fields from psinfo_t data and\n" + "most fields from NT_PRPSINFO note section\n\n" + "Usage: ::psinfo [-v]\n" + "Options:\n" + " -v verbose output\n"); +} + +static int +d_psinfo(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) +{ + psinfo_t psinfo; + uint_t opt_v = FALSE; + ssize_t nbytes; + + if (mdb_getopts(argc, argv, 'v', + MDB_OPT_SETBITS, TRUE, &opt_v, NULL) != argc) + return (DCMD_USAGE); + + nbytes = mdb_get_xdata("psinfo", NULL, 0); + + if (nbytes <= 0) { + mdb_warn("information not available for analysis"); + return (DCMD_ERR); + } + + if (mdb_get_xdata("psinfo", &psinfo, nbytes) != nbytes) { + mdb_warn("failed to read psinfo information"); + return (DCMD_ERR); + } + + if (opt_v) { + psinfo_raw(psinfo); + } else { + psinfo_sum(psinfo); + } + + return (DCMD_OK); +} + static const mdb_dcmd_t dcmds[] = { { "jmp_buf", ":", "print jmp_buf contents", d_jmp_buf, NULL }, { "sigjmp_buf", ":", "print sigjmp_buf contents", d_sigjmp_buf, NULL }, @@ -1160,6 +1379,8 @@ static const mdb_dcmd_t dcmds[] = { { "ulwp", ":", "print ulwp_t structure", d_ulwp, NULL }, { "uberdata", ":", "print uberdata_t structure", d_uberdata, NULL }, { "tsd", ":-k key", "print tsd for this thread", d_tsd, NULL }, + { "psinfo", "[-v]", "prints relevant psinfo_t data", d_psinfo, + d_psinfo_dcmd_help }, { NULL } }; diff --git a/usr/src/lib/libproc/common/libproc.h b/usr/src/lib/libproc/common/libproc.h index eb73039a21..dd7bd9f99b 100644 --- a/usr/src/lib/libproc/common/libproc.h +++ b/usr/src/lib/libproc/common/libproc.h @@ -27,6 +27,8 @@ * Copyright 2012 DEY Storage Systems, Inc. All rights reserved. * Copyright 2018, Joyent, Inc. * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2019, Carlos Neira <cneirabustos@gmail.com> + * Copyright 2019 OmniOS Community Edition (OmniOSce) Association. */ /* @@ -710,10 +712,12 @@ extern int proc_get_secflags(pid_t, prsecflags_t **); */ #define FLT2STR_MAX 32 /* max. string length of faults (like SIG2STR_MAX) */ #define SYS2STR_MAX 32 /* max. string length of syscalls (like SIG2STR_MAX) */ +#define DMODELSTR_MAX 32 /* max. string length of data model names */ extern char *proc_fltname(int, char *, size_t); extern char *proc_signame(int, char *, size_t); extern char *proc_sysname(int, char *, size_t); +extern char *proc_dmodelname(int, char *, size_t); /* * Utility functions for debugging tools to convert fault, signal, and system diff --git a/usr/src/lib/libproc/common/mapfile-vers b/usr/src/lib/libproc/common/mapfile-vers index 3b2fe58812..6e5ff2c21a 100644 --- a/usr/src/lib/libproc/common/mapfile-vers +++ b/usr/src/lib/libproc/common/mapfile-vers @@ -23,6 +23,8 @@ # Copyright 2012 DEY Storage Systems, Inc. All rights reserved. # Copyright 2018 Joyent, Inc. # Copyright (c) 2013 by Delphix. All rights reserved. +# Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> +# Copyright 2019 OmniOS Community Edition (OmniOSce) Association. # # @@ -204,6 +206,7 @@ SYMBOL_VERSION SUNWprivate_1.1 { proc_arg_xgrab; proc_arg_xpsinfo; proc_content2str; + proc_dmodelname; proc_finistdio; proc_fltname; proc_fltset2str; diff --git a/usr/src/lib/libproc/common/proc_names.c b/usr/src/lib/libproc/common/proc_names.c index 634a79b312..314b01fbcd 100644 --- a/usr/src/lib/libproc/common/proc_names.c +++ b/usr/src/lib/libproc/common/proc_names.c @@ -22,6 +22,8 @@ /* * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, Joyent, Inc. All rights reserved. + * Copyright 2019, Carlos Neira <cneirabustos@gmail.com> + * Copyright 2019 OmniOS Community Edition (OmniOSce) Association. */ #include <stdio.h> @@ -31,6 +33,7 @@ #include <signal.h> #include <errno.h> #include "libproc.h" +#include <sys/procfs_isa.h> static const char * rawfltname(int flt) @@ -482,7 +485,7 @@ proc_str2sys(const char *str, int *sysnum) */ char * proc_fltset2str(const fltset_t *set, const char *delim, int m, - char *buf, size_t len) + char *buf, size_t len) { char name[FLT2STR_MAX], *p = buf; size_t n; @@ -522,7 +525,7 @@ proc_fltset2str(const fltset_t *set, const char *delim, int m, */ char * proc_sigset2str(const sigset_t *set, const char *delim, int m, - char *buf, size_t len) + char *buf, size_t len) { char name[SIG2STR_MAX], *p = buf; size_t n; @@ -568,7 +571,7 @@ proc_sigset2str(const sigset_t *set, const char *delim, int m, */ char * proc_sysset2str(const sysset_t *set, const char *delim, int m, - char *buf, size_t len) + char *buf, size_t len) { char name[SYS2STR_MAX], *p = buf; size_t n; @@ -703,3 +706,34 @@ proc_str2sysset(const char *s, const char *delim, int m, sysset_t *set) } return (NULL); } + +/* + * Returns a string representation of a process data model. + * See <sys/procfs_isa.h> for possible values. + */ +char * +proc_dmodelname(int dmodel, char *buf, size_t bufsz) +{ + static const char *const dmdls[] = { + "PR_MODEL_UNKNOWN", + "PR_MODEL_ILP32", + "PR_MODEL_LP64", + NULL + }; + size_t len; + + if (bufsz == 0) + return (NULL); + + if (dmodel > PR_MODEL_LP64 || dmodel < PR_MODEL_UNKNOWN) { + len = snprintf(buf, bufsz, "DMODEL#%d", dmodel); + } else { + len = strlen(dmdls[dmodel]); + (void) strncpy(buf, dmdls[dmodel], bufsz); + } + + if (len >= bufsz) + buf[bufsz-1] = '\0'; + + return (buf); +} diff --git a/usr/src/man/man3lib/libproc.3lib b/usr/src/man/man3lib/libproc.3lib index 15b69e52d4..94ddc8b558 100644 --- a/usr/src/man/man3lib/libproc.3lib +++ b/usr/src/man/man3lib/libproc.3lib @@ -10,8 +10,10 @@ .\" .\" .\" Copyright 2018 Joyent, Inc. +.\" Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> +.\" Copyright 2019 OmniOS Community Edition (OmniOSce) Association. .\" -.Dd September 15, 2018 +.Dd February 22, 2019 .Dt LIBPROC 3LIB .Os .Sh NAME @@ -306,19 +308,19 @@ library. .It Sy Perror_printf Ta Sy proc_arg_grab .It Sy proc_arg_psinfo Ta Sy proc_arg_xgrab .It Sy proc_arg_xpsinfo Ta Sy proc_content2str -.It Sy proc_finistdio Ta Sy proc_fltname -.It Sy proc_fltset2str Ta Sy proc_flushstdio -.It Sy proc_get_auxv Ta Sy proc_get_cred -.It Sy proc_get_priv Ta Sy proc_get_psinfo -.It Sy proc_get_status Ta Sy proc_initstdio -.It Sy proc_lwp_in_set Ta Sy proc_lwp_range_valid -.It Sy proc_signame Ta Sy proc_sigset2str -.It Sy proc_str2content Ta Sy proc_str2flt -.It Sy proc_str2fltset Ta Sy proc_str2sig -.It Sy proc_str2sigset Ta Sy proc_str2sys -.It Sy proc_str2sysset Ta Sy proc_sysname -.It Sy proc_sysset2str Ta Sy proc_unctrl_psinfo -.It Sy proc_walk Ta "" +.It Sy proc_dmodelname Ta Sy proc_finistdio +.It Sy proc_fltname Ta Sy proc_fltset2str +.It Sy proc_flushstdio Ta Sy proc_proc_get_auxv +.It Sy proc_get_cred Ta Sy proc_get_priv +.It Sy proc_get_psinfo Ta Sy proc_get_status +.It Sy proc_get_initstdio Ta Sy proc_lwp_in_set +.It Sy proc_lwp_range_valid Ta Sy proc_signame +.It Sy proc_sigset2str Ta Sy proc_str2content +.It Sy proc_str2flt Ta Sy proc_str2fltset +.It Sy proc_str2sig Ta Sy proc_str2sigset +.It Sy proc_str2sys Ta Sy proc_str2sysset +.It Sy proc_sysname Ta Sy proc_sysset2str +.It Sy proc_unctrl_psinfo Ta "" .El .Ss x86 Specific Routines The following routines are specific to the x86, 32-bit and 64-bit, @@ -1218,6 +1220,7 @@ changes may occur which break both source and binary compatibility. .Xr proc_arg_xgrab 3PROC , .Xr proc_arg_xpsinfo 3PROC , .Xr proc_content2str 3PROC , +.Xr proc_dmodelname 3PROC , .Xr proc_finistdio 3PROC , .Xr proc_fltname 3PROC , .Xr proc_fltset2str 3PROC , diff --git a/usr/src/man/man3proc/Makefile b/usr/src/man/man3proc/Makefile index e59e81fbf3..00403a19fa 100644 --- a/usr/src/man/man3proc/Makefile +++ b/usr/src/man/man3proc/Makefile @@ -13,7 +13,8 @@ # Copyright 2011, Richard Lowe # Copyright 2013 Nexenta Systems, Inc. All rights reserved. # Copyright 2018 Joyent, Inc. -# +# Copyright 2019, Carlos Neira <cneirabustos@gmail.com> +# Copyright 2019 OmniOS Community Edition (OmniOSce) Association. include $(SRC)/Makefile.master @@ -220,6 +221,7 @@ MANLINKS= \ Pread_string.3proc \ proc_arg_xgrab.3proc \ proc_arg_xpsinfo.3proc \ + proc_dmodelname.3proc \ proc_finistdio.3proc \ proc_flushstdio.3proc \ proc_free_priv.3proc \ @@ -395,6 +397,7 @@ proc_str2content.3proc := LINKSRC = proc_content2str.3proc proc_flushstdio.3proc := LINKSRC = proc_initstdio.3proc proc_finistdio.3proc := LINKSRC = proc_initstdio.3proc +proc_dmodelname.3proc := LINKSRC = proc_fltname.3proc proc_signame.3proc := LINKSRC = proc_fltname.3proc proc_sysname.3proc := LINKSRC = proc_fltname.3proc diff --git a/usr/src/man/man3proc/proc_fltname.3proc b/usr/src/man/man3proc/proc_fltname.3proc index 1dc563b714..f3f4a45aa0 100644 --- a/usr/src/man/man3proc/proc_fltname.3proc +++ b/usr/src/man/man3proc/proc_fltname.3proc @@ -10,6 +10,8 @@ .\" .\" .\" Copyright 2015 Joyent, Inc. +.\" Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> +.\" Copyright 2019 OmniOS Community Edition (OmniOSce) Association. .\" .Dd May 11, 2016 .Dt PROC_FLTNAME 3PROC @@ -17,8 +19,9 @@ .Sh NAME .Nm proc_fltname , .Nm proc_signame , -.Nm proc_sysname -.Nd convert a fault, signal, and system call to a name +.Nm proc_sysname , +.Nm proc_dmodelname +.Nd convert a fault, signal, system call and data model to a name .Sh SYNOPSIS .Lb libproc .In libproc.h @@ -40,17 +43,25 @@ .Fa "char *buf" .Fa "size_t bufsz" .Fc +.Ft "char *" +.Fo proc_dmodelname +.Fa "int dmodel" +.Fa "char *buf" +.Fa "size_t bufsz" +.Fc .Sh DESCRIPTION The .Fn proc_fltname , .Fn proc_signame , -and .Fn proc_sysname -functions respectively convert the fault, signal, and system call in +and +.Fn proc_dmodelname +functions respectively convert the fault, signal, system call and data model in .Fa flt , .Fa sig , -and .Fa sys +and +.Fa dmodel to a human-readable name and place the corresponding string in .Fa buf . Up to @@ -61,8 +72,9 @@ characters, including the null terminator, will be written into Upon successful completion, the .Fn proc_fltname , .Fn proc_signame , -and .Fn proc_sysname +and +.Fn proc_dmodelname functions return a pointer to .Fa buf . The contents of diff --git a/usr/src/pkg/manifests/system-library.man3proc.inc b/usr/src/pkg/manifests/system-library.man3proc.inc index 8528acca7b..0119a81518 100644 --- a/usr/src/pkg/manifests/system-library.man3proc.inc +++ b/usr/src/pkg/manifests/system-library.man3proc.inc @@ -11,6 +11,8 @@ # # Copyright 2018 Joyent, Inc. +# Copyright (c) 2019 Carlos Neira <cneirabustos@gmail.com> +# Copyright 2019 OmniOS Community Edition (OmniOSce) Association. # file path=usr/share/man/man3proc/proc_service.3proc @@ -229,6 +231,7 @@ link path=usr/share/man/man3proc/pr_stat64.3proc target=pr_stat.3proc link path=usr/share/man/man3proc/Pread_string.3proc target=Pread.3proc link path=usr/share/man/man3proc/proc_arg_xgrab.3proc target=proc_arg_grab.3proc link path=usr/share/man/man3proc/proc_arg_xpsinfo.3proc target=proc_arg_psinfo.3proc +link path=usr/share/man/man3proc/proc_dmodelname.3proc target=proc_fltname.3proc link path=usr/share/man/man3proc/proc_finistdio.3proc target=proc_initstdio.3proc link path=usr/share/man/man3proc/proc_flushstdio.3proc target=proc_initstdio.3proc link path=usr/share/man/man3proc/proc_free_priv.3proc target=proc_get_priv.3proc |