// context tapset // Copyright (C) 2005-2009 Red Hat Inc. // Copyright (C) 2006 Intel Corporation. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. /** * sfunction print_regs - Print a register dump. */ function print_regs () %{ if (CONTEXT->regs) { _stp_print_regs (CONTEXT->regs); } %} /** * sfunction execname - Execname of current processes * * Return the name of the current process. */ function execname:string () %{ /* pure */ strlcpy (THIS->__retvalue, current->comm, MAXSTRINGLEN); %} /** * sfunction pid - Process ID of current process * * * Return the id of the current process. */ function pid:long () %{ /* pure */ THIS->__retvalue = current->tgid; %} /** * sfunction tid - Thread ID of current process * * Return the id of the current thread. */ function tid:long () %{ /* pure */ THIS->__retvalue = current->pid; %} /** * sfunction ppid - Parent Process ID of current process * * Return the id of the parent process. */ function ppid:long () %{ /* pure */ #if defined(STAPCONF_REAL_PARENT) THIS->__retvalue = current->real_parent->tgid; #else THIS->__retvalue = current->parent->tgid; #endif %} /** * sfunction pexecname - Execname of the parent process. * * Return the name of the parent process. */ function pexecname:string () %{ /* pure */ #if defined(STAPCONF_REAL_PARENT) strlcpy (THIS->__retvalue, current->real_parent->comm, MAXSTRINGLEN); #else strlcpy (THIS->__retvalue, current->parent->comm, MAXSTRINGLEN); #endif %} /** * sfunction gid - Group ID of current process * * Return the gid of the current process. */ function gid:long () %{ /* pure */ #ifdef STAPCONF_TASK_UID THIS->__retvalue = current->gid; #else THIS->__retvalue = current_gid(); #endif %} /** * sfunction egid - Effective gid of the current process. * * Return the effective gid of the current process. */ function egid:long () %{ /* pure */ #ifdef STAPCONF_TASK_UID THIS->__retvalue = current->egid; #else THIS->__retvalue = current_egid(); #endif %} /** * sfunction uid -User ID of the current process. * * Return the uid of the current process. */ function uid:long () %{ /* pure */ #ifdef STAPCONF_TASK_UID THIS->__retvalue = current->uid; #else THIS->__retvalue = current_uid(); #endif %} /** * sfunction euid - Effective User ID of the current process. * * Return the effective uid of the current process. */ function euid:long () %{ /* pure */ #ifdef STAPCONF_TASK_UID THIS->__retvalue = current->euid; #else THIS->__retvalue = current_euid(); #endif %} // cpuid() is not documented function cpuid:long () %{ /* pure */ THIS->__retvalue = smp_processor_id(); %} /** * sfunction cpu - The current cpu number. * * Return the current cpu number. */ function cpu:long () %{ /* pure */ THIS->__retvalue = smp_processor_id(); %} /** * sfunction pp - Current probe point * * Return the probe point associated with the currently running * probe handler, including alias and wildcard expansion effects. */ function pp:string () %{ /* pure */ strlcpy (THIS->__retvalue, CONTEXT->probe_point, MAXSTRINGLEN); %} /** * sfunction registers_valid - Register information valid * * Return 1 if register() and u_register() can be used * in the current context, or 0 otherwise. * For example, registers_valid() returns 0 * when called from a begin or end probe. */ function registers_valid:long () %{ /* pure */ THIS->__retvalue = (CONTEXT->regs != NULL); %} /** * sfunction user_mode - User Mode * * Return 1 if the probe point occurred in user-mode. */ function user_mode:long () %{ /* pure */ /* currently a user-mode address? */ if (CONTEXT->regs) { #if defined(__i386__) || defined(__x86_64__) THIS->__retvalue = (uint64_t) user_mode_vm (CONTEXT->regs); #else THIS->__retvalue = (uint64_t) user_mode (CONTEXT->regs); #endif } else { THIS->__retvalue = 0; } %} /** * sfunction is_return - Is return probe * * Return 1 if the probe point is a return probe. * Deprecated. */ function is_return:long () %{ /* pure */ if (CONTEXT->pi) THIS->__retvalue = 1; else THIS->__retvalue = 0; %} /** * sfunction target - Target pid * * Return the pid of the target process. */ function target:long () %{ /* pure */ THIS->__retvalue = _stp_target; %} /// /// module_name:string() /// module_name /// /// FIXME: need description. /// /// function module_name:string () %{ /* pure */ strlcpy(THIS->__retvalue, THIS_MODULE->name, MAXSTRINGLEN); %} /// /// stp_pid:long() /// stp_pid /// /// FIXME: need description. /// /// function stp_pid:long () %{ /* pure */ THIS->__retvalue = _stp_pid; %} /** * sfunction stack_size - Size of kernel stack * * Return the size of the kernel stack. */ function stack_size:long () %{ /* pure */ THIS->__retvalue = THREAD_SIZE; %} /** * sfunction stack_used - Current amount of kernel stack used * * Return how many bytes are currently used in the kernel stack. */ function stack_used:long () %{ /* pure */ char a; THIS->__retvalue = THREAD_SIZE - ((long)&a & (THREAD_SIZE-1)); %} /** * sfunction stack_unused - Amount of kernel stack currently available * * Return how many bytes are currently available in the kernel stack. */ function stack_unused:long () %{ /* pure */ char a; THIS->__retvalue = (long)&a & (THREAD_SIZE-1); %}