diff options
Diffstat (limited to 'usr/src/lib/libproc/common')
-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 |
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); +} |