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); +} | 
