Lines Matching full:code
3 * Common code for probe-based Dynamic events.
5 * This code was copied from kernel/trace/trace_kprobe.c written by
276 struct fetch_insn *code, unsigned int flags, int offs) in parse_probe_vars() argument
284 code->op = FETCH_OP_RETVAL; in parse_probe_vars()
291 code->op = FETCH_OP_STACKP; in parse_probe_vars()
301 code->op = FETCH_OP_STACK; in parse_probe_vars()
302 code->param = (unsigned int)param; in parse_probe_vars()
307 code->op = FETCH_OP_COMM; in parse_probe_vars()
319 code->op = FETCH_OP_ARG; in parse_probe_vars()
320 code->param = (unsigned int)param - 1; in parse_probe_vars()
323 if (code->data) in parse_probe_vars()
325 code->data = kstrdup(arg, GFP_KERNEL); in parse_probe_vars()
326 if (!code->data) in parse_probe_vars()
328 code->op = FETCH_OP_TP_ARG; in parse_probe_vars()
368 struct fetch_insn *code = *pcode; in parse_probe_arg() local
377 ret = parse_probe_vars(arg + 1, type, code, flags, offs); in parse_probe_arg()
383 code->op = FETCH_OP_REG; in parse_probe_arg()
384 code->param = (unsigned int)ret; in parse_probe_arg()
398 code->op = FETCH_OP_IMM; in parse_probe_arg()
399 code->immediate = param; in parse_probe_arg()
412 code->op = FETCH_OP_FOFFS; in parse_probe_arg()
413 code->immediate = (unsigned long)offset; // imm64? in parse_probe_arg()
421 code->op = FETCH_NOP_SYMBOL; in parse_probe_arg()
422 code->data = kstrdup(arg + 1, GFP_KERNEL); in parse_probe_arg()
423 if (!code->data) in parse_probe_arg()
425 if (++code == end) { in parse_probe_arg()
429 code->op = FETCH_OP_IMM; in parse_probe_arg()
430 code->immediate = 0; in parse_probe_arg()
433 if (++code == end) { in parse_probe_arg()
437 *pcode = code; in parse_probe_arg()
438 code->op = FETCH_OP_DEREF; in parse_probe_arg()
439 code->offset = offset; in parse_probe_arg()
473 ret = parse_probe_arg(arg, t2, &code, end, flags, offs); in parse_probe_arg()
476 if (code->op == FETCH_OP_COMM || in parse_probe_arg()
477 code->op == FETCH_OP_DATA) { in parse_probe_arg()
481 if (++code == end) { in parse_probe_arg()
485 *pcode = code; in parse_probe_arg()
487 code->op = deref; in parse_probe_arg()
488 code->offset = offset; in parse_probe_arg()
496 code->op = FETCH_OP_DATA; in parse_probe_arg()
497 code->data = tmp; in parse_probe_arg()
499 ret = str_to_immediate(arg + 1, &code->immediate); in parse_probe_arg()
503 code->op = FETCH_OP_IMM; in parse_probe_arg()
507 if (!ret && code->op == FETCH_OP_NOP) { in parse_probe_arg()
522 struct fetch_insn *code = *pcode; in __parse_bitfield_probe_arg() local
539 code++; in __parse_bitfield_probe_arg()
540 if (code->op != FETCH_OP_NOP) in __parse_bitfield_probe_arg()
542 *pcode = code; in __parse_bitfield_probe_arg()
544 code->op = FETCH_OP_MOD_BF; in __parse_bitfield_probe_arg()
545 code->lshift = BYTES_TO_BITS(t->size) - (bw + bo); in __parse_bitfield_probe_arg()
546 code->rshift = BYTES_TO_BITS(t->size) - bw; in __parse_bitfield_probe_arg()
547 code->basesize = t->size; in __parse_bitfield_probe_arg()
556 struct fetch_insn *code, *scode, *tmp = NULL; in traceprobe_parse_probe_arg_body() local
640 code = tmp = kcalloc(FETCH_INSN_MAX, sizeof(*code), GFP_KERNEL); in traceprobe_parse_probe_arg_body()
641 if (!code) in traceprobe_parse_probe_arg_body()
643 code[FETCH_INSN_MAX - 1].op = FETCH_OP_END; in traceprobe_parse_probe_arg_body()
645 ret = parse_probe_arg(arg, parg->type, &code, &code[FETCH_INSN_MAX - 1], in traceprobe_parse_probe_arg_body()
654 if (code->op != FETCH_OP_DEREF && code->op != FETCH_OP_UDEREF && in traceprobe_parse_probe_arg_body()
655 code->op != FETCH_OP_IMM && code->op != FETCH_OP_COMM && in traceprobe_parse_probe_arg_body()
656 code->op != FETCH_OP_DATA && code->op != FETCH_OP_TP_ARG) { in traceprobe_parse_probe_arg_body()
661 if ((code->op == FETCH_OP_IMM || code->op == FETCH_OP_COMM || in traceprobe_parse_probe_arg_body()
662 code->op == FETCH_OP_DATA) || code->op == FETCH_OP_TP_ARG || in traceprobe_parse_probe_arg_body()
670 code++; in traceprobe_parse_probe_arg_body()
671 if (code->op != FETCH_OP_NOP) { in traceprobe_parse_probe_arg_body()
678 code->op == FETCH_OP_UDEREF) in traceprobe_parse_probe_arg_body()
679 code->op = FETCH_OP_ST_USTRING; in traceprobe_parse_probe_arg_body()
681 code->op = FETCH_OP_ST_STRING; in traceprobe_parse_probe_arg_body()
682 code->size = parg->type->size; in traceprobe_parse_probe_arg_body()
684 } else if (code->op == FETCH_OP_DEREF) { in traceprobe_parse_probe_arg_body()
685 code->op = FETCH_OP_ST_MEM; in traceprobe_parse_probe_arg_body()
686 code->size = parg->type->size; in traceprobe_parse_probe_arg_body()
687 } else if (code->op == FETCH_OP_UDEREF) { in traceprobe_parse_probe_arg_body()
688 code->op = FETCH_OP_ST_UMEM; in traceprobe_parse_probe_arg_body()
689 code->size = parg->type->size; in traceprobe_parse_probe_arg_body()
691 code++; in traceprobe_parse_probe_arg_body()
692 if (code->op != FETCH_OP_NOP) { in traceprobe_parse_probe_arg_body()
696 code->op = FETCH_OP_ST_RAW; in traceprobe_parse_probe_arg_body()
697 code->size = parg->type->size; in traceprobe_parse_probe_arg_body()
699 scode = code; in traceprobe_parse_probe_arg_body()
702 ret = __parse_bitfield_probe_arg(t, parg->type, &code); in traceprobe_parse_probe_arg_body()
718 code++; in traceprobe_parse_probe_arg_body()
719 if (code->op != FETCH_OP_NOP) { in traceprobe_parse_probe_arg_body()
723 code->op = FETCH_OP_LP_ARRAY; in traceprobe_parse_probe_arg_body()
724 code->param = parg->count; in traceprobe_parse_probe_arg_body()
726 code++; in traceprobe_parse_probe_arg_body()
727 code->op = FETCH_OP_END; in traceprobe_parse_probe_arg_body()
730 /* Shrink down the code buffer */ in traceprobe_parse_probe_arg_body()
731 parg->code = kcalloc(code - tmp + 1, sizeof(*code), GFP_KERNEL); in traceprobe_parse_probe_arg_body()
732 if (!parg->code) in traceprobe_parse_probe_arg_body()
735 memcpy(parg->code, tmp, sizeof(*code) * (code - tmp + 1)); in traceprobe_parse_probe_arg_body()
739 for (code = tmp; code < tmp + FETCH_INSN_MAX; code++) in traceprobe_parse_probe_arg_body()
740 if (code->op == FETCH_NOP_SYMBOL || in traceprobe_parse_probe_arg_body()
741 code->op == FETCH_OP_DATA) in traceprobe_parse_probe_arg_body()
742 kfree(code->data); in traceprobe_parse_probe_arg_body()
811 struct fetch_insn *code = arg->code; in traceprobe_free_probe_arg() local
813 while (code && code->op != FETCH_OP_END) { in traceprobe_free_probe_arg()
814 if (code->op == FETCH_NOP_SYMBOL || in traceprobe_free_probe_arg()
815 code->op == FETCH_OP_DATA) in traceprobe_free_probe_arg()
816 kfree(code->data); in traceprobe_free_probe_arg()
817 code++; in traceprobe_free_probe_arg()
819 kfree(arg->code); in traceprobe_free_probe_arg()
827 struct fetch_insn *code = arg->code; in traceprobe_update_arg() local
833 while (code && code->op != FETCH_OP_END) { in traceprobe_update_arg()
834 if (code->op == FETCH_NOP_SYMBOL) { in traceprobe_update_arg()
835 if (code[1].op != FETCH_OP_IMM) in traceprobe_update_arg()
838 tmp = strpbrk(code->data, "+-"); in traceprobe_update_arg()
841 ret = traceprobe_split_symbol_offset(code->data, in traceprobe_update_arg()
846 code[1].immediate = in traceprobe_update_arg()
847 (unsigned long)kallsyms_lookup_name(code->data); in traceprobe_update_arg()
850 if (!code[1].immediate) in traceprobe_update_arg()
852 code[1].immediate += offset; in traceprobe_update_arg()
854 code++; in traceprobe_update_arg()