Frama-C:在插件中添加注释
Frama-C: Add Annotation in Plugin
我正在编写一个 Frama-C 插件。在这个插件中,我想为函数添加注释(例如,if function name = "test",添加一个 requires 子句,说参数 == 1)。
我找到了函数Annotations.add_requires,但我不知道一些参数(Emitter.t、Identified_predicates)。字符串参数是谓词的函数名称还是自己的名称?
如何使用这个功能?
谁能举个例子?
发射器识别您的插件并且必须声明它要修改的内容。在你的情况下,因为你想向规范添加属性,你可以构建它:
let emitter = Emitter.create "My plugin" [ Emitter.Funspec ]
~correctness:[] ~tuning:[]
现在,对于 kernel_function
,这是一个如何构建第一个参数等于 1 的先决条件的示例:
let add_pre kf = match Kernel_function.get_formals kf with
| [] -> ()
| c_var::_ ->
let l_var = Cil.cvar_to_lvar c_var in
let var_term = Logic_const.tvar l_var in
let cnst_term = Logic_const.tinteger 1 in
let eq_pred = Logic_const.prel (Cil_types.Req, var_term, cnst_term) in
let pred = Logic_const.new_predicate eq_pred in
let bname = Cil.default_behavior_name in
Annotations.add_requires emitter kf ~behavior:bname [pred]
我正在编写一个 Frama-C 插件。在这个插件中,我想为函数添加注释(例如,if function name = "test",添加一个 requires 子句,说参数 == 1)。
我找到了函数Annotations.add_requires,但我不知道一些参数(Emitter.t、Identified_predicates)。字符串参数是谓词的函数名称还是自己的名称?
如何使用这个功能? 谁能举个例子?
发射器识别您的插件并且必须声明它要修改的内容。在你的情况下,因为你想向规范添加属性,你可以构建它:
let emitter = Emitter.create "My plugin" [ Emitter.Funspec ]
~correctness:[] ~tuning:[]
现在,对于 kernel_function
,这是一个如何构建第一个参数等于 1 的先决条件的示例:
let add_pre kf = match Kernel_function.get_formals kf with
| [] -> ()
| c_var::_ ->
let l_var = Cil.cvar_to_lvar c_var in
let var_term = Logic_const.tvar l_var in
let cnst_term = Logic_const.tinteger 1 in
let eq_pred = Logic_const.prel (Cil_types.Req, var_term, cnst_term) in
let pred = Logic_const.new_predicate eq_pred in
let bname = Cil.default_behavior_name in
Annotations.add_requires emitter kf ~behavior:bname [pred]