[kgtp] r950 committed - Adding actionx

  • From: kgtp@xxxxxxxxxxxxxx
  • To: kgtp@xxxxxxxxxxxxx
  • Date: Sat, 03 Mar 2012 10:02:31 +0000

Revision: 950
Author:   teawater
Date:     Sat Mar  3 02:01:37 2012
Log:      Adding actionx

http://code.google.com/p/kgtp/source/detail?r=950

Modified:
 /branches/actionx/gtp.c

=======================================
--- /branches/actionx/gtp.c     Fri Mar  2 06:19:08 2012
+++ /branches/actionx/gtp.c     Sat Mar  3 02:01:37 2012
@@ -249,12 +249,70 @@

 #define INT2CHAR(h)            ((h) > 9 ? (h) + 'a' - 10 : (h) + '0')

-#define OP_SPECIAL_GETV                0xfa
-#define OP_SPECIAL_SETV                0xfb
-#define OP_SPECIAL_TRACEV      0xfc
-#define OP_TRACE_PRINTK                0xfd
-#define OP_TRACE_QUICK_PRINTK  0xfe
-#define OP_TRACEV_PRINTK       0xff
+#define OP_CHECK_ADD
+#define OP_CHECK_SUB
+#define OP_CHECK_MUL
+#ifndef CONFIG_MIPS
+#define OP_CHECK_DIV_SIGNED
+#define OP_CHECK_DIV_UNSIGNED
+#define OP_CHECK_REM_SIGNED
+#define OP_CHECK_REM_UNSIGNED
+#endif
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+#define OP_CHECK_
+
+enum {
+       op_check_add = 0xe6,
+       op_check_sub,
+       op_check_mul,
+       op_check_div_signed,
+       op_check_div_unsigned,
+       op_check_rem_signed,
+       op_check_rem_unsigned,
+       op_check_lsh,
+       op_check_rsh_signed,
+       op_check_rsh_unsigned,
+       op_check_trace,
+       op_check_bit_and,
+       op_check_bit_or,
+       op_check_bit_xor,
+       op_check_equal,
+       op_check_less_signed,
+       op_check_less_unsigned,
+       op_check_pop,
+       op_check_swap,
+       op_check_printf,
+
+       op_special_getv = 0xfa,
+       op_special_setv,
+       op_special_tracev,
+
+       op_trace_printk = 0xfd,
+       op_trace_quick_printk,
+       op_tracev_printk,
+};

 struct action_agent_exp {
        unsigned int    size;
@@ -2978,7 +3036,7 @@
                                top = stack[--sp];
                                break;
                        /* trace_printk */
-                       case OP_TRACE_PRINTK:
+                       case op_trace_printk:
                                if (gtp_action_printk(gts,
                                                      (ULONGEST)stack[--sp],
                                                      (size_t) top))
@@ -2996,7 +3054,7 @@
                                pc++;
                                break;
                        /* trace_quick_printk */
-                       case OP_TRACE_QUICK_PRINTK:
+                       case op_trace_printk:
                                if (gtp_action_printk(gts, (ULONGEST) top,
                                                      (size_t) ebuf[pc++]))
                                        goto out;
@@ -3159,7 +3217,7 @@
                                gtp_action_x_getv;
                                break;
                        /* getv_sepecial */
-                       case OP_SPECIAL_GETV:
+                       case op_special_getv:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                stack[sp++] = top;
@@ -3172,7 +3230,7 @@
                                gtp_action_x_setv;
                                break;
                        /* setv_sepecial */
-                       case OP_SPECIAL_SETV:
+                       case op_special_setv:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                gtp_set_var_special(gts, arg, top);
@@ -3184,13 +3242,13 @@
                                gtp_action_x_tracev;
                                break;
                        /* tracev_special */
-                       case OP_SPECIAL_TRACEV:
+                       case op_special_tracev:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                gtp_collect_var_special(gts, arg);
                                break;
                        /* tracev_printk */
-                       case OP_TRACEV_PRINTK:
+                       case op_tracev_printk:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                gtp_action_x_tracev_printk;
@@ -3523,7 +3581,7 @@
                                gtp_action_x_getv;
                                break;
                        /* getv_sepecial */
-                       case OP_SPECIAL_GETV:
+                       case op_special_getv:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                stack[sp++] = top;
@@ -3536,7 +3594,7 @@
                                gtp_action_x_setv;
                                break;
                        /* setv_sepecial */
-                       case OP_SPECIAL_SETV:
+                       case op_special_setv:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                gtp_set_var_special(gts, arg, top);
@@ -3548,7 +3606,7 @@
                                gtp_action_x_tracev;
                                break;
                        /* tracev_special */
-                       case OP_SPECIAL_TRACEV:
+                       case op_special_tracev:
                                arg = ebuf[pc++];
                                arg = (arg << 8) + ebuf[pc++];
                                gtp_collect_var_special(gts, arg);
@@ -4602,7 +4660,8 @@
        struct gtp_x_var        *vlist = NULL, *vtmp;
        uint8_t                 *ebuf = ae->u.exp.buf;
        int                     last_trace_pc = -1;
-       unsigned int            stack_size = 0;
+       unsigned int            sp_max = 0;
+       int                     need_op_check = 0;

 reswitch:
        while (pc < ae->u.exp.size) {
@@ -4684,8 +4743,8 @@
                case 0x28:
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                        break;

@@ -4693,8 +4752,8 @@
                case 0x22:
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                /* ext */
                case 0x16:
@@ -4724,8 +4783,8 @@
                        pc += 2;
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                        break;

@@ -4736,8 +4795,8 @@
                        pc += 4;
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                        break;

@@ -4748,8 +4807,8 @@
                        pc += 8;
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                        break;

@@ -4828,13 +4887,13 @@
                                        else if (arg == GTP_VAR_COOKED_RDTSC_ID)
                                                gtp_access_cooked_rdtsc = 1;
 #endif
-                                       ebuf[pc - 3] = OP_SPECIAL_GETV;
+                                       ebuf[pc - 3] = op_special_getv;
                                }
                        }
                        if (ae->type == 'X') {
                                sp++;
-                               if (stack_size < sp)
-                                       stack_size = sp;
+                               if (sp_max < sp)
+                                       sp_max = sp;
                        }
                        break;

@@ -4868,7 +4927,7 @@
                                        if (arg == GTP_VAR_PRINTK_LEVEL_ID)
                                                tpe->have_printk = 1;

-                                       ebuf[pc - 3] = OP_SPECIAL_SETV;
+                                       ebuf[pc - 3] = op_special_setv;
                                }
                        }
                        break;
@@ -4902,7 +4961,7 @@
                                        else if (arg == GTP_VAR_COOKED_RDTSC_ID)
                                                gtp_access_cooked_rdtsc = 1;
 #endif
-                                       ebuf[pc - 3] = OP_SPECIAL_TRACEV;
+                                       ebuf[pc - 3] = op_special_tracev;
                                }
                        }
                        break;
@@ -4979,15 +5038,17 @@
                gtmp->non_goto_done = 1;
                goto reswitch;
        }
-       if (stack_size >= STACK_MAX) {
-               printk(KERN_WARNING "gtp_check_x: stack overflow.");
+       if (sp_max >= STACK_MAX) {
+               printk(KERN_WARNING "gtp_check_x: stack overflow, "
+                                   "current %d, max %d.\n",
+                      sp_max, STACK_MAX);
                goto release_out;
        }
        ret = 0;
 #ifdef GTP_DEBUG
        printk(GTP_DEBUG "gtp_check_x: Code is OK. sp_checked is %d. "
-                        "stack_size is %d.\n",
-              (ae->type == 'X'), stack_size);
+                        "sp_max is %d.\n",
+              (ae->type == 'X'), sp_max);
 #endif

 release_out:
@@ -5023,15 +5084,15 @@
                switch (ebuf[last_trace_pc]) {
                /* trace */
                case 0x0c:
-                       ebuf[last_trace_pc] = OP_TRACE_PRINTK;
+                       ebuf[last_trace_pc] = op_trace_printk;
                        break;
                /* trace_quick */
                case 0x0d:
-                       ebuf[last_trace_pc] = OP_TRACE_QUICK_PRINTK;
+                       ebuf[last_trace_pc] = op_trace_printk;
                        break;
                /* tracev */
                case 0x2e:
-                       ebuf[last_trace_pc] = OP_TRACEV_PRINTK;
+                       ebuf[last_trace_pc] = op_tracev_printk;
                        break;
                }
        }

Other related posts:

  • » [kgtp] r950 committed - Adding actionx - kgtp