Revision: 959 Author: teawater Date: Sat Mar 3 23:51:31 2012 Log: Adding actionx http://code.google.com/p/kgtp/source/detail?r=959 Modified: /branches/actionx/gtp.c ======================================= --- /branches/actionx/gtp.c Sat Mar 3 23:20:48 2012 +++ /branches/actionx/gtp.c Sat Mar 3 23:51:31 2012 @@ -2841,32 +2841,38 @@ case 0x02: top += stack[--sp]; break; + case op_check_add: if (sp) top += stack[--sp]; else goto code_error_out; break; + /* sub */ case 0x03: top = stack[--sp] - top; break; + case op_check_sub: if (sp) top = stack[--sp] - top; else goto code_error_out; break; + /* mul */ case 0x04: top *= stack[--sp]; break; + case op_check_mul: if (sp) top *= stack[--sp]; else goto code_error_out; break; + #ifndef CONFIG_MIPS /* div_signed */ case 0x05: @@ -2877,6 +2883,7 @@ } else goto code_error_out; break; + case op_check_div_signed: if (top && sp) { LONGEST l = (LONGEST) stack[--sp]; @@ -2885,6 +2892,7 @@ } else goto code_error_out; break; + /* div_unsigned */ case 0x06: if (top) { @@ -2894,6 +2902,7 @@ } else goto code_error_out; break; + case op_check_div_unsigned: if (top && sp) { ULONGEST ul = stack[--sp]; @@ -2902,6 +2911,7 @@ } else goto code_error_out; break; + /* rem_signed */ case 0x07: if (top) { @@ -2911,6 +2921,7 @@ } else goto code_error_out; break; + case op_check_rem_signed: if (top && sp) { LONGEST l1 = (LONGEST) stack[--sp]; @@ -2919,6 +2930,7 @@ } else goto code_error_out; break; + /* rem_unsigned */ case 0x08: if (top) { @@ -2928,6 +2940,7 @@ } else goto code_error_out; break; + case op_check_rem_unsigned: if (top && sp) { ULONGEST ul1 = stack[--sp]; @@ -2937,36 +2950,43 @@ goto code_error_out; break; #endif + /* lsh */ case 0x09: top = stack[--sp] << top; break; + case op_check_lsh: if (sp) top = stack[--sp] << top; else goto code_error_out; break; + /* rsh_signed */ case 0x0a: top = ((LONGEST) stack[--sp]) >> top; break; + case op_check_rsh_signed: if (sp) top = ((LONGEST) stack[--sp]) >> top; else goto code_error_out; break; + /* rsh_unsigned */ case 0x0b: top = stack[--sp] >> top; break; + case op_check_rsh_unsigned: if (sp) top = stack[--sp] >> top; else goto code_error_out; break; + /* trace */ case 0x0c: --sp; @@ -2979,6 +2999,7 @@ } top = stack[--sp]; break; + case op_check_trace: if (sp > 1) { if (gtp_action_memory_read @@ -2993,6 +3014,7 @@ } else goto code_error_out; break; + /* trace_printk */ case op_trace_printk: if (gtp_action_printk(gts, @@ -3001,6 +3023,7 @@ goto out; top = stack[--sp]; break; + /* trace_quick */ case 0x0d: if (!gts->tpe->have_printk) { @@ -3011,65 +3034,78 @@ } pc++; break; + /* trace_quick_printk */ case op_trace_quick_printk: if (gtp_action_printk(gts, (ULONGEST) top, (size_t) ebuf[pc++])) goto out; break; + /* log_not */ case 0x0e: top = !top; break; + /* bit_and */ case 0x0f: top &= stack[--sp]; break; + case op_check_bit_and: if (sp) top &= stack[--sp]; else goto code_error_out; break; + /* bit_or */ case 0x10: top |= stack[--sp]; break; + case op_check_bit_or: if (sp) top |= stack[--sp]; else goto code_error_out; break; + /* bit_xor */ case 0x11: top ^= stack[--sp]; break; + case op_check_bit_xor: if (sp) top ^= stack[--sp]; else goto code_error_out; break; + /* bit_not */ case 0x12: top = ~top; break; + /* equal */ case 0x13: top = (stack[--sp] == top); break; + case op_check_equal: if (sp) top = (stack[--sp] == top); else goto code_error_out; break; + /* less_signed */ case 0x14: top = (((LONGEST) stack[--sp]) < ((LONGEST) top)); break; + case op_check_less_signed: if (sp) top = (((LONGEST) stack[--sp]) @@ -3077,16 +3113,19 @@ else goto code_error_out; break; + /* less_unsigned */ case 0x15: top = (stack[--sp] < top); break; + case op_check_less_unsigned: if (sp) top = (stack[--sp] < top); else goto code_error_out; break; + /* ext */ case 0x16: arg = ebuf[pc++]; @@ -3096,6 +3135,7 @@ top = (top ^ mask) - mask; } break; + /* ref8 */ case 0x17: if (probe_kernel_read @@ -3104,6 +3144,7 @@ goto code_error_out; top = (ULONGEST) cnv.u8.val; break; + /* ref16 */ case 0x18: if (probe_kernel_read @@ -3112,6 +3153,7 @@ goto code_error_out; top = (ULONGEST) cnv.u16.val; break; + /* ref32 */ case 0x19: if (probe_kernel_read @@ -3120,6 +3162,7 @@ goto code_error_out; top = (ULONGEST) cnv.u32.val; break; + /* ref64 */ case 0x1a: if (probe_kernel_read @@ -3128,6 +3171,7 @@ goto code_error_out; top = (ULONGEST) cnv.u64.val; break; + /* if_goto */ case 0x20: if (top) @@ -3138,6 +3182,7 @@ /* pop */ top = stack[--sp]; break; + case op_check_if_goto: if (top) pc = (ebuf[pc] << 8) @@ -3150,21 +3195,25 @@ else goto code_error_out; break; + /* goto */ case 0x21: pc = (ebuf[pc] << 8) + (ebuf[pc + 1]); break; + /* const8 */ case 0x22: stack[sp++] = top; top = ebuf[pc++]; break; + /* const16 */ case 0x23: stack[sp++] = top; top = ebuf[pc++]; top = (top << 8) + ebuf[pc++]; break; + /* const32 */ case 0x24: stack[sp++] = top; @@ -3173,6 +3222,7 @@ top = (top << 8) + ebuf[pc++]; top = (top << 8) + ebuf[pc++]; break; + /* const64 */ case 0x25: stack[sp++] = top; @@ -3185,6 +3235,7 @@ top = (top << 8) + ebuf[pc++]; top = (top << 8) + ebuf[pc++]; break; + /* reg */ case 0x26: stack[sp++] = top; @@ -3195,38 +3246,45 @@ if (gts->tpe->reason != gtp_stop_normal) goto error_out; break; + /* end */ case 0x27: if (gts->run) *(gts->run) = (int)top; goto out; break; + /* dup */ case 0x28: stack[sp++] = top; break; + /* pop */ case 0x29: top = stack[--sp]; break; + case op_check_pop: if (sp) top = stack[--sp]; else goto code_error_out; break; + /* zero_ext */ case 0x2a: arg = ebuf[pc++]; if (arg < (sizeof(LONGEST)*8)) top &= ((LONGEST) 1 << arg) - 1; break; + /* swap */ case 0x2b: stack[sp] = top; top = stack[sp - 1]; stack[sp - 1] = stack[sp]; break; + case op_check_swap: if (sp) { stack[sp] = top; @@ -3235,21 +3293,17 @@ } else goto code_error_out; break; + /* getv */ - case 0x2c: { - struct gtp_var *tve; - - arg = ebuf[pc++]; - arg = (arg << 8) + ebuf[pc++]; - - tve = gtp_gtp_var_array_find(arg); - if (!tve) - goto code_error_out; - stack[sp++] = top; - - top = gtp_get_var(gts, tve); - } + case 0x2c: + arg = ebuf[pc++]; + arg = (arg << 8) + ebuf[pc++]; + + stack[sp++] = top; + + top = gtp_get_var(gts, gtp_gtp_var_array_find(arg)); break; + /* getv_sepecial */ case op_special_getv: arg = ebuf[pc++]; @@ -3257,6 +3311,7 @@ stack[sp++] = top; top = gtp_get_var_special(gts, arg); break; + /* setv */ case 0x2d: { struct gtp_var *tve; @@ -3265,8 +3320,6 @@ arg = (arg << 8) + ebuf[pc++]; tve = gtp_gtp_var_array_find(arg); - if (!tve) - goto code_error_out; #ifdef GTP_PERF_EVENTS if (tve->ptid == pe_tv_en) gtp_pe_set_en(tve->pts, (int)top); @@ -3277,54 +3330,48 @@ tve->val = (uint64_t)top; } break; + /* setv_sepecial */ case op_special_setv: arg = ebuf[pc++]; arg = (arg << 8) + ebuf[pc++]; gtp_set_var_special(gts, arg, top); break; + /* tracev */ case 0x2e: arg = ebuf[pc++]; arg = (arg << 8) + ebuf[pc++]; - if (!gts->tpe->have_printk) { - struct gtp_var *tve; - - tve = gtp_gtp_var_array_find(arg); - if (!tve) - goto code_error_out; - - if (gtp_collect_var(gts, tve)) { - /* gtp_collect_var will set error - status with itself if it got - error. */ - goto out; - } + if (gtp_collect_var(gts, gtp_gtp_var_array_find(arg))) { + /* gtp_collect_var will set error + status with itself if it got error. */ + goto out; } break; + /* tracev_special */ 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: { - struct gtp_var *tve; - + uint64_t u64; arg = ebuf[pc++]; arg = (arg << 8) + ebuf[pc++]; - tve = gtp_gtp_var_array_find(arg); - if (!tve) - goto code_error_out; - - if (gtp_action_printk(gts, - gtp_get_var(gts, tve), - 0)) { + if (!GTP_VAR_IS_SPECIAL(arg)) + u64 = gtp_get_var(gts, + gtp_gtp_var_array_find + (arg)); + else + u64 = gtp_get_var_special(gts, arg); + if (gtp_action_printk(gts, u64, 0)) { /* gtp_collect_var will set error status - with itself if it got error. */ + with itself if it got error. */ goto out; } } @@ -4779,6 +4826,9 @@ case 0x2e: ebuf[last_trace_pc] = op_tracev_printk; break; + case op_special_tracev: + ebuf[last_trace_pc] = op_tracev_printk; + break; } }