函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\trace\trace_events_filter.c Create Date:2022-07-27 13:31:49
Last Modify:2022-05-22 20:19:57 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:Without going into a formal proof, this explains the method that is used in* parsing the logical expressions

函数原型:static struct prog_entry *predicate_parse(const char *str, int nr_parens, int nr_preds, parse_pred_fn parse_pred, void *data, struct filter_parse_error *pe)

返回类型:struct prog_entry

参数:

类型参数名称
const char *str
intnr_parens
intnr_preds
parse_pred_fnparse_pred
void *data
struct filter_parse_error *pe
416  ptr等于str
417  char * inverts = NULL
420  invert等于0
421  ret等于负ENOMEM
423  N等于0
426  nr_preds加等于2
428  op_stack等于分配数组内存
429  如果非op_stack则返回:错误号
431  prog_stack等于分配数组内存并置零
432  如果非prog_stack
433  parse_error(pe, - ENOMEM, 0)
434  转到:out_free
436  inverts等于分配数组内存
437  如果非inverts
438  parse_error(pe, - ENOMEM, 0)
439  转到:out_free
442  top等于op_stack
443  prog等于prog_stack
444  top等于0
447 ptr循环
448  next等于ptr自加
450  如果Note: isspace() must return false for %NUL-terminator ( * next)则继续下一循环
454  :next恒等于'('
455  如果topop_stack大于nr_parens
456  ret等于负EINVAL
457  转到:out_free
459  *top先自加等于invert
460  继续下一循环
461  :next恒等于'!'
464  invert等于非invert
465  继续下一循环
468  如果N大于等于nr_preds
470  转到:out_free
473  inverts[N]等于invert
474  target等于N减1
476  len等于parse_pred(next, data, ptr - str, pe, & pred)
477  如果len小于0则
478  ret等于len
479  转到:out_free
481  ptr等于nextlen
483  N自加
485  ret等于负1
486  当1循环
487  next等于ptr自加
488  如果Note: isspace() must return false for %NUL-terminator ( * next)则继续下一循环
492  :next恒等于')'
493  :next恒等于'\0'
494  退出
495  :next恒等于'&'
496  :next恒等于'|'
498  如果next[1]恒等于next[0]则
499  ptr自加
500  退出
503  默认
509  invert等于top按位与INVERT
511  如果top按位与PROCESS_AND
515  如果next恒等于'&'则
516  top或等于PROCESS_AND
517  退出
519  如果top按位与PROCESS_OR
523  如果next恒等于'|'则
524  top或等于PROCESS_OR
525  退出
527  如果非next则转到:out
530  如果top恒等于op_stack
531  ret等于负1
534  转到:out_free
536  top自减
539  out :
540  如果top不等于op_stack
542  parse_error(pe, FILT_ERR_TOO_MANY_OPEN, ptr - str)
543  转到:out_free
546  如果非N
548  ret等于负EINVAL
549  parse_error(pe, FILT_ERR_NO_FILTER, ptr - str)
550  转到:out_free
553  pred = NULL
554  target等于1
555  pred = NULL
556  target等于0
557  target等于N
558  when_to_branch = false
561 i自减循环
562  target等于target
563  如果when_to_branch恒等于when_to_branchtarget等于target
568 i小于N循环
569  invert等于inverts[i]按位异或when_to_branch
570  when_to_branch等于invert
572  如果WARN_ON(target <= i)则
573  ret等于负EINVAL
574  转到:out_free
578  kfree(op_stack)
579  kfree(inverts)
580  返回:prog
581  out_free :
582  kfree(op_stack)
583  kfree(inverts)
584  如果prog_stack
585 pred循环kfree(pred)
587  kfree(prog_stack)
589  返回:错误号
调用者
名称描述
process_preds