]> sourceware.org Git - systemtap.git/commitdiff
Rename CONTEXT regflags to probe_flags. Now simply indicates user mode.
authorMark Wielaard <mjw@redhat.com>
Thu, 8 Sep 2011 11:57:21 +0000 (13:57 +0200)
committerMark Wielaard <mjw@redhat.com>
Thu, 8 Sep 2011 11:57:21 +0000 (13:57 +0200)
Renamed common_probe_context.h regflags to probe_flags, rename constant
from _STP_REGS_USER_FLAG to _STP_PROBE_STATE_USER_MODE and use throughout
tapsets to check whether in user_mode() or not.

15 files changed:
runtime/common_probe_context.h
runtime/regs.h
runtime/runtime_defines.h
runtime/stack.c
tapset-itrace.cxx
tapset-perfmon.cxx
tapset-timers.cxx
tapset-utrace.cxx
tapset/arm/registers.stp
tapset/context-symbols.stp
tapset/context.stp
tapset/i386/registers.stp
tapset/s390/registers.stp
tapset/utrace.stp
tapsets.cxx

index bab4fb2b9ebe81947e5324dcb11879a6f9996cc1..fff16d2ba9e20c2c8df043a7c6f2d56428c44e90 100644 (file)
@@ -29,6 +29,9 @@ const char *probe_name;
    and what information it gets passed.  */
 int probe_type;
 
+/* Common status of probe.  _STP_PROBE_STATE_ flags.  */
+int probe_flags;
+
 /* Number of "actions" this probe handler is still allowed to do.
    Setup in common_probe_entryfn_prologue to either MAXACTION or
    Checked by code generated by c_unparser::record_actions (), which will
@@ -60,10 +63,8 @@ const char *last_error;
 /* Last statement (token) executed. Often set together with last_error. */
 const char *last_stmt;
 
-/* status of pt_regs regs field.  _STP_REGS_ flags.  */
-int regflags;
 /* Set when probe handler gets pt_regs handed to it. This can be either
-   the kernel registers or the user space registers.  The regflags field
+   the kernel registers or the user space registers.  The probe_flags field
    will indicate which and whether the user registers are complete.  */
 struct pt_regs *regs;
 
index ca98c3126a0855d625f2d98853dded407239204b..08449aa6afb4c6f3b8eaa1013f8056465cc67c58 100644 (file)
 #ifndef _REGS_H_ /* -*- linux-c -*- */
 #define _REGS_H_
 
-/* Defines for the struct context regsflags field.
-   _STP_REGS_USER regsflags bit to indicate regs fully from user.  */
-#define _STP_REGS_USER_FLAG 1
-
 #if defined  (STAPCONF_X86_UNIREGS) && (defined (__x86_64__) || defined (__i386__))
 
 #define REG_IP(regs) regs->ip
index ed0288bccdbff42ecddbd3e9e36f6f7614c8434c..6a31d2fcea024a1ced281c5be41a08c137afa61f 100644 (file)
@@ -57,6 +57,7 @@ typedef char string_t[MAXSTRINGLEN];
 #define STP_OVERLOAD
 #endif
 
+/* Defines for CONTEXT probe_type. */
 /* begin, end or never probe, triggered by stap module itself. */
 #define _STP_PROBE_HANDLER_BEEN            1
 /* user space instruction probe, trigger by utrace signal report. */
@@ -94,3 +95,7 @@ typedef char string_t[MAXSTRINGLEN];
 #define _STP_PROBE_HANDLER_HWBKPT         15
 /* kernel tracepoint probe, triggered by tracepoint event call. */
 #define _STP_PROBE_HANDLER_TRACEPOINT     16
+
+/* Defines for CONTEXT probe_flags. */
+/* Probe occured in user space, also indicate regs fully from user. */
+#define _STP_PROBE_STATE_USER_MODE  1
index 3fb6a673e597d4831bbcd01e1659b72967cf3371..4dfb4b2198b62855f9380f63b2ad99055358a90d 100644 (file)
@@ -167,7 +167,8 @@ static void _stp_stack_print(struct context *c, int sym_flags, int stack_flags)
                ri = NULL;
 
        if (stack_flags == _STP_STACK_KERNEL) {
-               if (! c->regs || (c->regflags & _STP_REGS_USER_FLAG)) {
+               if (! c->regs
+                   || (c->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
                        /* For the kernel we can use an inexact fallback.
                           When compiled with frame pointers we can do
                           a pretty good guess at the stack value,
@@ -201,7 +202,7 @@ static void _stp_stack_print(struct context *c, int sym_flags, int stack_flags)
                }
        } else if (stack_flags == _STP_STACK_USER) {
                /* use task_pt_regs, regs might be kernel regs, or not set. */
-               if (c->regs && (c->regflags & _STP_REGS_USER_FLAG)) {
+               if (c->regs && (c->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
                        regs = c->regs;
                        uregs_valid = 1;
                } else {
index 77a285524ba174d35a0d175de281874dc953c2f8..b576b1de04308d736990ce921f1a7d3f7aace857 100644 (file)
@@ -192,7 +192,7 @@ itrace_derived_probe_group::emit_module_decls (systemtap_session& s)
   common_probe_entryfn_prologue (s.op, "STAP_SESSION_RUNNING", "p->probe",
                                 "_STP_PROBE_HANDLER_ITRACE");
   s.op->newline() << "c->regs = regs;";
-  s.op->newline() << "c->regflags |= _STP_REGS_USER_FLAG;";
+  s.op->newline() << "c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
   // call probe function
   s.op->newline() << "(*p->probe->ph) (c);";
index b7fb80f2781d1641c62e095190ad6ca92401bc34..5bf15236b9f0574083ee94a0d9ce213c91852cf4 100644 (file)
@@ -155,7 +155,7 @@ perf_derived_probe_group::emit_module_decls (systemtap_session& s)
   s.op->newline() << "if ((stp->attr.type == PERF_TYPE_HARDWARE";
   s.op->newline() << "     || stp->attr.type == PERF_TYPE_HW_CACHE)";
   s.op->newline() << "    && user_mode(regs))";
-  s.op->newline(1)<< "c->regflags |= _STP_REGS_USER_FLAG;";
+  s.op->newline(1)<< "c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
   s.op->newline(-1) << "(*stp->probe->ph) (c);";
   common_probe_entryfn_epilogue (s.op);
index 09fc40effca812fd66fb45d529b696afddeac5d3..f0f08ad20a8c102512fd94cd3d09af20f9d9cc77 100644 (file)
@@ -436,7 +436,7 @@ profile_derived_probe_group::emit_module_decls (systemtap_session& s)
   s.op->newline() << "c->regs = regs;";
   // Timer interrupts save all registers, so if the interrupt happened
   // in user space we can rely on it being the full user pt_regs.
-  s.op->newline() << "if (user_mode(regs)) c->regflags |= _STP_REGS_USER_FLAG;";
+  s.op->newline() << "if (user_mode(regs)) c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
   for (unsigned i=0; i<probes.size(); i++)
     {
index edd006155cc840e1fb33bbe6920597cd46c13abf..97fa5000205ab580d854acddc3896765e3418ea2 100644 (file)
@@ -862,7 +862,7 @@ utrace_derived_probe_group::emit_module_decls (systemtap_session& s)
       common_probe_entryfn_prologue (s.op, "STAP_SESSION_RUNNING", "p->probe",
                                     "_STP_PROBE_HANDLER_UTRACE_SYSCALL");
       s.op->newline() << "c->regs = regs;";
-      s.op->newline() << "c->regflags |= _STP_REGS_USER_FLAG;";
+      s.op->newline() << "c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
       // call probe function
       s.op->newline() << "(*p->probe->ph) (c);";
index 1f3087960fecd4dcdc8f04ec898404e1165cf14f..42448b8db91b87cf4034041e1f73dd0307031e2c 100644 (file)
@@ -43,9 +43,9 @@ function _stp_get_register_by_offset:long (offset:long) %{ /* pure */
        THIS->__retvalue = value;
 %}
 
-function _stp_probing_kernel:long () %{ /* pure */
-       THIS->__retvalue = !user_mode(CONTEXT->regs);
-%}
+function _stp_probing_kernel:long () {
+       return !user_mode();
+}
 
 /* Return the named register value as a signed value. */
 function register:long (name:string) {
index 64401f69f2890d4873507e4336934797ac536c42..9b2869059a2fc7cbe8a9106c915b49964c86a707 100644 (file)
@@ -103,7 +103,7 @@ function probefunc:string () %{ /* pure */ /* pragma:symbols */
                _stp_snprint_addr(THIS->__retvalue, MAXSTRINGLEN,
                                  REG_IP(CONTEXT->regs),
                                  _STP_SYM_SYMBOL,
-                                 (CONTEXT->regflags & _STP_REGS_USER_FLAG
+                                 (CONTEXT->probe_flags & _STP_PROBE_STATE_USER_MODE
                                   ? current : NULL));
                         if (THIS->__retvalue[0] == '.')  /* powerpc symbol has a dot*/
                                strlcpy(THIS->__retvalue,THIS->__retvalue + 1,MAXSTRINGLEN);
@@ -131,7 +131,7 @@ function probemod:string () %{ /* pure */
                        *dst++ = *ptr++;
                *dst = 0;
        } else if (CONTEXT->regs
-                  && ! (CONTEXT->regflags & _STP_REGS_USER_FLAG)) {
+                  && ! (CONTEXT->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
                struct _stp_module *m;
                m = _stp_kmod_sec_lookup (REG_IP(CONTEXT->regs), NULL);
                if (m && m->name)
index 478696c6ee35d882bdb6c23072a3c3c4a27420e2..2b7611ae64f9cdec912dfe33d2920d92c21250e7 100644 (file)
@@ -242,11 +242,8 @@ function registers_valid:long ()
  */
 function user_mode:long ()
 %{ /* pure */ /* unprivileged */
-  if (CONTEXT->regs && (CONTEXT->regflags & _STP_REGS_USER_FLAG)) {
-    THIS->__retvalue = 1;
-  } else {
-    THIS->__retvalue = 0;
-  }
+  THIS->__retvalue = (CONTEXT->probe_flags
+                     & _STP_PROBE_STATE_USER_MODE) ? 1 : 0;
 %}
 
 /**
index 5646caa297fe592f1237c042dcd4694b0ea2d00d..730f078cdadb2bce2f63feb3d4a61d8d0ce02de6 100644 (file)
@@ -61,9 +61,9 @@ function _stp_get_register_by_offset:long (offset:long) %{ /* pure */
        THIS->__retvalue = value;
 %}
 
-function _stp_probing_kernel:long () %{ /* pure */
-       THIS->__retvalue = !user_mode(CONTEXT->regs);
-%}
+function _stp_probing_kernel:long () {
+       return !user_mode();
+}
 
 /*
  * esp and ss aren't saved on a breakpoint in kernel mode, so
index df49229b0e93315ba34f049e60656f55e0ce8315..d608cf81df5a4488af5ea5bd9838974a1970fcf9 100644 (file)
@@ -50,9 +50,9 @@ function probing_32bit_app() %{ /* pure */
                THIS->__retvalue = 0;
 %}
 
-function _stp_probing_kernel: long () %{ /* pure */
-       THIS->__retvalue = !user_mode(CONTEXT->regs);
-%}
+function _stp_probing_kernel: long () {
+       return !user_mode();
+}
 
 function _stp_get_register_by_offset:long (offset:long) %{ /* pure */
        long value;
index f32af9210b951f403b6f7337c2e70499dad219b1..6c6d91cffb6a46ca9c739c46fff7432272b8ac09 100644 (file)
@@ -5,7 +5,8 @@
 %}
 
 function _utrace_syscall_nr:long () %{         /* pure */ /* myproc-unprivileged */
-    if (! CONTEXT->regs || ! (CONTEXT->regflags & _STP_REGS_USER_FLAG)) {
+    if (! CONTEXT->regs
+        || ! (CONTEXT->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
        CONTEXT->last_error = "invalid call without context registers";
     } else {
        THIS->__retvalue = syscall_get_nr(current, CONTEXT->regs);
@@ -14,7 +15,8 @@ function _utrace_syscall_nr:long () %{                /* pure */ /* myproc-unprivileged */
 
 function _utrace_syscall_arg:long (n:long) %{  /* pure */ /* myproc-unprivileged */
     unsigned long arg = 0;
-    if (! CONTEXT->regs || ! (CONTEXT->regflags & _STP_REGS_USER_FLAG)) {
+    if (! CONTEXT->regs
+        || ! (CONTEXT->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
        CONTEXT->last_error = "invalid call without context registers";
     } else {
        syscall_get_arguments(current, CONTEXT->regs, (int)THIS->n, 1, &arg);
@@ -29,7 +31,8 @@ function _utrace_syscall_return:long () %{    /* pure */ /* myproc-unprivileged */
      * getting sign extended.  This caused return values to not match
      * up with the same values passes as arguments.
      */
-    if (! CONTEXT->regs || ! (CONTEXT->regflags & _STP_REGS_USER_FLAG)) {
+    if (! CONTEXT->regs
+        || ! (CONTEXT->probe_flags & _STP_PROBE_STATE_USER_MODE)) {
        CONTEXT->last_error = "invalid call without context registers";
     } else {
        THIS->__retvalue = (unsigned long)syscall_get_return_value(current,
index fd5a6aafcd62d543e87e86782697dde08b6f8a34..633597ae1fff3f93e3ca1fd92cf48c6541ac92c2 100644 (file)
@@ -160,7 +160,7 @@ common_probe_entryfn_prologue (translator_output* o, string statestr,
   o->newline() << "c->probe_type = " << probe_type << ";";
   // reset Individual Probe State union
   o->newline() << "memset(&c->ips, 0, sizeof(c->ips));";
-  o->newline() << "c->regflags = 0;";
+  o->newline() << "c->probe_flags = 0;";
   o->newline() << "#ifdef STAP_NEED_REGPARM"; // i386 or x86_64 register.stp
   o->newline() << "c->regparm = 0;";
   o->newline() << "#endif";
@@ -6917,7 +6917,7 @@ uprobe_derived_probe_group::emit_module_decls (systemtap_session& s)
   s.op->newline() << "goto probe_epilogue;";
   s.op->newline(-1) << "}";
   s.op->newline() << "c->regs = regs;";
-  s.op->newline() << "c->regflags |= _STP_REGS_USER_FLAG;";
+  s.op->newline() << "c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
   // Make it look like the IP is set as it would in the actual user
   // task when calling real probe handler. Reset IP regs on return, so
@@ -6948,7 +6948,7 @@ uprobe_derived_probe_group::emit_module_decls (systemtap_session& s)
   s.op->newline(-1) << "}";
 
   s.op->newline() << "c->regs = regs;";
-  s.op->newline() << "c->regflags |= _STP_REGS_USER_FLAG;";
+  s.op->newline() << "c->probe_flags |= _STP_PROBE_STATE_USER_MODE;";
 
   // Make it look like the IP is set as it would in the actual user
   // task when calling real probe handler. Reset IP regs on return, so
This page took 0.045145 seconds and 5 git commands to generate.