summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproc/common
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libproc/common')
-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
3 files changed, 44 insertions, 3 deletions
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);
+}