Source code for vtrace.platforms.solaris
"""
Solaris Platform Module (Incomplete)
"""
# Copyright (C) 2007 Invisigoth - See LICENSE file for details
import os
import struct
import array
# Control codes (long values) for messages written to ctl and lwpctl files.
PCNULL = 0L# null request, advance to next message */
PCSTOP = 1L# direct process or lwp to stop and wait for stop */
PCDSTOP = 2L# direct process or lwp to stop */
PCWSTOP = 3L# wait for process or lwp to stop, no timeout */
PCTWSTOP = 4L# wait for stop, with long millisecond timeout arg */
PCRUN = 5L# make process/lwp runnable, w/ long flags argument */
PCCSIG = 6L# clear current signal from lwp */
PCCFAULT = 7L# clear current fault from lwp */
PCSSIG = 8L# set current signal from siginfo_t argument */
PCKILL = 9L# post a signal to process/lwp, long argument */
PCUNKILL = 10L# delete a pending signal from process/lwp, long arg */
PCSHOLD = 11L# set lwp signal mask from sigset_t argument */
PCSTRACE = 12L# set traced signal set from sigset_t argument */
PCSFAULT = 13L# set traced fault set from fltset_t argument */
PCSENTRY = 14L# set traced syscall entry set from sysset_t arg */
PCSEXIT = 15L# set traced syscall exit set from sysset_t arg */
PCSET = 16L# set modes from long argument */
PCUNSET = 17L# unset modes from long argument */
PCSREG = 18L# set lwp general registers from prgregset_t arg */
PCSFPREG = 19L# set lwp floating-point registers from prfpregset_t */
PCSXREG = 20L# set lwp extra registers from prxregset_t arg */
PCNICE = 21L# set nice priority from long argument */
PCSVADDR = 22L# set %pc virtual address from long argument */
PCWATCH = 23L# set/unset watched memory area from prwatch_t arg */
PCAGENT = 24L# create agent lwp with regs from prgregset_t arg */
PCREAD = 25L# read from the address space via priovec_t arg */
PCWRITE = 26L# write to the address space via priovec_t arg */
PCSCRED = 27L# set process credentials from prcred_t argument */
PCSASRS = 28L# set ancillary state registers from asrset_t arg */
PCSPRIV = 29L# set process privileges from prpriv_t argument */
PCSZONE = 30L# set zoneid from zoneid_t argument */
PCSCREDX = 31L# as PCSCRED but with supplemental groups */
# PCRUN long operand flags.
PRCSIG = 0x01# clear current signal, if any */
PRCFAULT = 0x02# clear current fault, if any */
PRSTEP = 0x04# direct the lwp to single-step */
PRSABORT = 0x08# abort syscall, if in syscall */
PRSTOP = 0x10# set directed stop request */
# Status flags
PR_STOPPED = 0x00000001# lwp is stopped */
PR_ISTOP = 0x00000002# lwp is stopped on an event of interest */
PR_DSTOP = 0x00000004# lwp has a stop directive in effect */
PR_STEP = 0x00000008# lwp has a single-step directive in effect */
PR_ASLEEP = 0x00000010# lwp is sleeping in a system call */
PR_PCINVAL = 0x00000020# contents of pr_instr undefined */
PR_ASLWP = 0x00000040# obsolete flag; never set */
PR_AGENT = 0x00000080# this lwp is the /proc agent lwp */
PR_DETACH = 0x00000100# this is a detached lwp */
PR_DAEMON = 0x00000200# this is a daemon lwp */
# The following flags apply to the process, not to an individual lwp */
PR_ISSYS = 0x00001000# this is a system process */
PR_VFORKP = 0x00002000# process is the parent of a vfork()d child */
PR_ORPHAN = 0x00004000# process's process group is orphaned */
# The following process flags are modes settable by PCSET/PCUNSET */
PR_FORK = 0x00100000# inherit-on-fork is in effect */
PR_RLC = 0x00200000# run-on-last-close is in effect */
PR_KLC = 0x00400000# kill-on-last-close is in effect */
PR_ASYNC = 0x00800000# asynchronous-stop is in effect */
PR_MSACCT = 0x01000000# micro-state usage accounting is in effect */
PR_BPTADJ = 0x02000000# breakpoint trap pc adjustment is in effect */
PR_PTRACE = 0x04000000# ptrace-compatibility mode is in effect */
PR_MSFORK = 0x08000000# micro-state accounting inherited on fork */
PR_IDLE = 0x10000000# lwp is a cpu's idle thread */
# Permissions...
MA_READ = 0x04# readable by the traced process */
MA_WRITE = 0x02# writable by the traced process */
MA_EXEC = 0x01# executable by the traced process */
MA_SHARED = 0x08# changes are shared by mapped object */
MA_ANON = 0x40# anonymous memory (e.g. /dev/zero) */
MA_ISM = 0x80# intimate shared mem (shared MMU resources) */
MA_NORESERVE = 0x100# mapped with MAP_NORESERVE */
MA_SHM = 0x200# System V shared memory */
MA_RESERVED1 = 0x400# reserved for future use */
[docs]class SolarisMixin:
[docs] def initMixin(self):
#import sunprocfs
self.ctl = None
[docs] def writeCtl(self, bytes):
os.write(self.ctl.fileno(), bytes)
[docs]class SolarisIntelMixin:
"""
Handle register formats for the intel solaris stuff
"""
[docs] def getRegisterNames(self):
return []