Print this page
3946 ::gcore
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>

*** 20,29 **** --- 20,32 ---- */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ + /* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ #include <stdlib.h> #include <libelf.h> #include <libgen.h> #include <string.h>
*** 32,43 **** #include <sys/sysmacros.h> #include "libproc.h" #include "Pcontrol.h" static ssize_t ! Pread_idle(struct ps_prochandle *P, void *buf, size_t n, uintptr_t addr) { size_t resid = n; while (resid > 0) { map_info_t *mp; --- 35,48 ---- #include <sys/sysmacros.h> #include "libproc.h" #include "Pcontrol.h" + /*ARGSUSED*/ static ssize_t ! Pread_idle(struct ps_prochandle *P, void *buf, size_t n, uintptr_t addr, ! void *data) { size_t resid = n; while (resid > 0) { map_info_t *mp;
*** 63,81 **** return (n - resid); } /*ARGSUSED*/ static ssize_t ! Pwrite_idle(struct ps_prochandle *P, const void *buf, size_t n, uintptr_t addr) { errno = EIO; return (-1); } ! static const ps_rwops_t P_idle_ops = { ! Pread_idle, ! Pwrite_idle }; static int idle_add_mapping(struct ps_prochandle *P, GElf_Phdr *php, file_info_t *fp) { --- 68,126 ---- return (n - resid); } /*ARGSUSED*/ static ssize_t ! Pwrite_idle(struct ps_prochandle *P, const void *buf, size_t n, uintptr_t addr, ! void *data) { errno = EIO; return (-1); } ! /*ARGSUSED*/ ! static int ! Ppriv_idle(struct ps_prochandle *P, prpriv_t **pprv, void *data) ! { ! prpriv_t *pp; ! ! pp = proc_get_priv(P->pid); ! if (pp == NULL) { ! return (-1); ! } ! ! *pprv = pp; ! return (0); ! } ! ! /* Default operations for the idl ops vector. */ ! static void * ! Pidle_voidp() ! { ! errno = ENODATA; ! return (NULL); ! } ! ! static int ! Pidle_int() ! { ! errno = ENODATA; ! return (-1); ! } ! ! static const ps_ops_t P_idle_ops = { ! .pop_pread = Pread_idle, ! .pop_pwrite = Pwrite_idle, ! .pop_cred = (pop_cred_t)Pidle_int, ! .pop_priv = Ppriv_idle, ! .pop_psinfo = (pop_psinfo_t)Pidle_voidp, ! .pop_platform = (pop_platform_t)Pidle_voidp, ! .pop_uname = (pop_uname_t)Pidle_int, ! .pop_zonename = (pop_zonename_t)Pidle_voidp, ! #if defined(__i386) || defined(__amd64) ! .pop_ldt = (pop_ldt_t)Pidle_int ! #endif }; static int idle_add_mapping(struct ps_prochandle *P, GElf_Phdr *php, file_info_t *fp) {
*** 141,151 **** P->ctlfd = -1; P->statfd = -1; P->agentctlfd = -1; P->agentstatfd = -1; P->info_valid = -1; ! P->ops = &P_idle_ops; Pinitsym(P); if ((elf = elf_begin(fd, ELF_C_READ, NULL)) == NULL) { *perr = G_ELF; return (NULL); --- 186,196 ---- P->ctlfd = -1; P->statfd = -1; P->agentctlfd = -1; P->agentstatfd = -1; P->info_valid = -1; ! Pinit_ops(&P->ops, &P_idle_ops); Pinitsym(P); if ((elf = elf_begin(fd, ELF_C_READ, NULL)) == NULL) { *perr = G_ELF; return (NULL);