函数逻辑报告 | 
Source Code:kernel\trace\trace_kprobe.c | 
Create Date:2022-07-27 13:50:13 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:trace_kprobe_create
函数原型:static int trace_kprobe_create(int argc, const char *argv[])
返回类型:int
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| int | argc | |
| const char * | argv | 
| 736 | struct trace_kprobe * tk = NULL | 
| 737 | ret等于0 | 
| 738 | bool is_return = false | 
| 740 | event等于NULL, group等于KPROBE_EVENT_SYSTEM | 
| 741 | maxactive等于0 | 
| 742 | offset等于0 | 
| 743 | void * addr = NULL | 
| 745 | flags等于TPARG_FL_KERNEL | 
| 753 | 退出 | 
| 754 | 默认 | 
| 755 | 返回:负ECANCELED | 
| 760 | trace_probe_log_init("trace_kprobe", argc, argv) | 
| 762 | event等于strchr - Find the first occurrence of the character c in the string s.*@s: the string to be searched*@c: the character to search for | 
| 766 | 如果是数字则 | 
| 767 | 如果非is_return则 | 
| 768 | trace_probe_log_err(1, MAXACT_NO_KPROBE) | 
| 769 | 转到:parse_error | 
| 775 | 如果len大于MAX_EVENT_NAME_LEN减1则 | 
| 776 | trace_probe_log_err(1, BAD_MAXACT) | 
| 777 | 转到:parse_error | 
| 783 | trace_probe_log_err(1, BAD_MAXACT) | 
| 784 | 转到:parse_error | 
| 789 | 如果maxactive大于KRETPROBE_MAXACTIVE_MAX则 | 
| 790 | trace_probe_log_err(1, MAXACT_TOO_BIG) | 
| 791 | 转到:parse_error | 
| 798 | trace_probe_log_set_index(1) | 
| 805 | symbol等于kstrdup(argv[1], GFP_KERNEL) | 
| 809 | ret等于traceprobe_split_symbol_offset(symbol, & offset) | 
| 811 | trace_probe_log_err(0, BAD_PROBE_ADDR) | 
| 812 | 转到:parse_error | 
| 814 | 如果kprobe_on_func_entry(NULL, symbol, offset)则flags或等于TPARG_FL_FENTRY | 
| 816 | 如果offset且is_return且非flags按位与TPARG_FL_FENTRY的值则 | 
| 817 | trace_probe_log_err(0, BAD_RETPROBE) | 
| 818 | 转到:parse_error | 
| 822 | trace_probe_log_set_index(0) | 
| 823 | 如果event则 | 
| 826 | 如果ret则转到:parse_error | 
| 828 | 否则 | 
| 843 | 如果是错误则 | 
| 849 | argc减等于2 | 
| 849 | argv加等于2 | 
| 852 | 以i小于argc且i小于MAX_TRACE_ARGS循环 | 
| 866 | ret等于traceprobe_set_print_fmt( & tp, is_return) | 
| 871 | 如果ret则 | 
| 872 | trace_probe_log_set_index(1) | 
| 873 | 如果ret恒等于负EILSEQ则trace_probe_log_err(0, BAD_INSN_BNDRY) | 
| 875 | 否则如果ret恒等于负ENOENT则trace_probe_log_err(0, BAD_PROBE_ADDR) | 
| 877 | 否则如果ret不等于负ENOMEM且ret不等于负EEXIST则trace_probe_log_err(0, FAIL_REG_PROBE) | 
| 879 | 转到:error | 
| 882 | out : | 
| 883 | trace_probe_log_clear() | 
| 885 | 返回:ret | 
| 887 | parse_error : | 
| 889 | error : | 
| 890 | free_trace_kprobe(tk) | 
| 891 | 转到:out | 
| 名称 | 描述 | 
|---|---|
| create_or_delete_trace_kprobe | 
| 源代码转换工具 开放的插件接口  | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码  |