summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorCarlos Neira <cneirabustos@gmail.com>2019-02-14 17:47:36 -0300
committerRichard Lowe <richlowe@richlowe.net>2019-03-14 21:16:28 +0000
commit542a7b7f5ccc44e3c95d6dce4ec0566f60bd9ff4 (patch)
tree2de0dce7fce79ebbce133dc0aa1c3b802e14696e /usr/src
parent2f7dba3e6747cbaaf1deb86e6ca1e2a5c96332ac (diff)
downloadillumos-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.module4
-rw-r--r--usr/src/cmd/mdb/common/modules/libc/libc.c221
-rw-r--r--usr/src/lib/libproc/common/libproc.h4
-rw-r--r--usr/src/lib/libproc/common/mapfile-vers3
-rw-r--r--usr/src/lib/libproc/common/proc_names.c40
-rw-r--r--usr/src/man/man3lib/libproc.3lib31
-rw-r--r--usr/src/man/man3proc/Makefile5
-rw-r--r--usr/src/man/man3proc/proc_fltname.3proc24
-rw-r--r--usr/src/pkg/manifests/system-library.man3proc.inc3
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