├── Readme.txt ├── devel ├── daily_builds │ ├── Readme.txt │ ├── build.conf │ └── target.sh ├── devel-docs │ ├── general │ │ └── machines_roles.txt │ └── models │ │ └── general.txt ├── examples │ ├── Readme.txt │ ├── address_filters │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── cfake.c │ │ ├── cfake.h │ │ └── kedr_sample_target │ ├── asm-offsets │ │ ├── Kbuild │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── functions.h │ │ ├── kedr │ │ │ └── asm │ │ │ │ ├── inat.h │ │ │ │ ├── inat_types.h │ │ │ │ └── insn.h │ │ ├── kedr_asm_offsets.c │ │ └── local_storage.h │ ├── blocks │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── arch │ │ │ └── x86 │ │ │ │ ├── include │ │ │ │ └── asm │ │ │ │ │ ├── inat.h │ │ │ │ │ ├── inat_types.h │ │ │ │ │ └── insn.h │ │ │ │ ├── lib │ │ │ │ ├── inat.c │ │ │ │ ├── insn.c │ │ │ │ └── x86-opcode-map.txt │ │ │ │ └── tools │ │ │ │ └── gen-insn-attr-x86.awk │ │ ├── debug_util.c │ │ ├── debug_util.h │ │ ├── detour_buffer.c │ │ ├── detour_buffer.h │ │ ├── functions.c │ │ ├── functions.h │ │ └── module.c │ ├── call_inject │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── arch │ │ │ └── x86 │ │ │ │ ├── include │ │ │ │ └── asm │ │ │ │ │ ├── inat.h │ │ │ │ │ ├── inat_types.h │ │ │ │ │ └── insn.h │ │ │ │ ├── lib │ │ │ │ ├── inat.c │ │ │ │ ├── insn.c │ │ │ │ └── x86-opcode-map.txt │ │ │ │ └── tools │ │ │ │ └── gen-insn-attr-x86.awk │ │ ├── debug_util.c │ │ ├── debug_util.h │ │ ├── detour_buffer.c │ │ ├── detour_buffer.h │ │ ├── functions.c │ │ ├── functions.h │ │ └── module.c │ ├── call_inline │ │ ├── Kbuild │ │ ├── Readme.txt │ │ ├── cfake.c │ │ ├── cfake.h │ │ ├── kedr_sample_target │ │ └── makefile │ ├── dwarf │ │ └── dw_addr2line │ │ │ ├── main.cpp │ │ │ └── readme.txt │ ├── func_detect │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── functions.c │ │ ├── functions.h │ │ └── module.c │ ├── func_detour │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── arch │ │ │ └── x86 │ │ │ │ ├── include │ │ │ │ └── asm │ │ │ │ │ ├── inat.h │ │ │ │ │ ├── inat_types.h │ │ │ │ │ └── insn.h │ │ │ │ ├── lib │ │ │ │ ├── inat.c │ │ │ │ ├── insn.c │ │ │ │ └── x86-opcode-map.txt │ │ │ │ └── tools │ │ │ │ └── gen-insn-attr-x86.awk │ │ ├── debug_util.c │ │ ├── debug_util.h │ │ ├── detour_buffer.c │ │ ├── detour_buffer.h │ │ ├── functions.c │ │ ├── functions.h │ │ └── module.c │ ├── instrumentation │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── arch │ │ │ └── x86 │ │ │ │ ├── include │ │ │ │ └── kedr │ │ │ │ │ └── asm │ │ │ │ │ ├── inat.h │ │ │ │ │ ├── inat_types.h │ │ │ │ │ └── insn.h │ │ │ │ ├── lib │ │ │ │ ├── inat.c │ │ │ │ ├── insn.c │ │ │ │ └── x86-opcode-map.txt │ │ │ │ └── tools │ │ │ │ └── gen-insn-attr-x86.awk │ │ ├── code_gen.c │ │ ├── code_gen.h │ │ ├── debug_util.c │ │ ├── debug_util.h │ │ ├── demo.c │ │ ├── demo.h │ │ ├── detour_buffer.c │ │ ├── detour_buffer.h │ │ ├── functions.c │ │ ├── functions.h │ │ ├── ifunc.h │ │ ├── instrument.c │ │ ├── instrument.h │ │ ├── internal_api.c │ │ ├── internal_api.h │ │ ├── ir.h │ │ ├── ir_handlers.c │ │ ├── ir_handlers.h │ │ ├── kedr_get_sections.sh │ │ ├── module.c │ │ ├── primary_storage.h │ │ ├── sections.c │ │ ├── sections.h │ │ ├── util.c │ │ └── util.h │ ├── plugin_coi │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── cdev_fops.data │ │ └── module.c │ ├── reg_usage │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── arch │ │ │ └── x86 │ │ │ │ ├── include │ │ │ │ └── kedr │ │ │ │ │ └── asm │ │ │ │ │ ├── inat.h │ │ │ │ │ ├── inat_types.h │ │ │ │ │ └── insn.h │ │ │ │ ├── lib │ │ │ │ ├── inat.c │ │ │ │ ├── insn.c │ │ │ │ └── x86-opcode-map.txt │ │ │ │ └── tools │ │ │ │ └── gen-insn-attr-x86.awk │ │ ├── debug_util.c │ │ ├── debug_util.h │ │ ├── detour_buffer.c │ │ ├── detour_buffer.h │ │ ├── functions.c │ │ ├── functions.h │ │ ├── module.c │ │ └── test_sources │ │ │ ├── cfake32.c │ │ │ └── cfake64.c │ └── sections │ │ ├── Makefile │ │ ├── Readme.txt │ │ ├── kedr_get_sections.sh │ │ ├── module.c │ │ ├── sections.c │ │ └── sections.h ├── kernel_patches │ ├── Readme.txt │ ├── kedr-annotations-3.10.patch │ ├── kedr-annotations-3.12.patch │ ├── kedr-annotations-3.13.patch │ └── kedr-annotations-3.14.patch ├── races-found │ ├── fuse_getattr.txt │ └── fuse_set_file_private_data.txt ├── stack_checking │ ├── Readme.txt │ └── add-stack-checking.patch ├── tsan-features │ ├── README │ ├── benign_race │ │ ├── classic │ │ └── malloc_cancel_benign_race │ ├── lock │ │ ├── classic │ │ ├── destroy_unaffected │ │ └── malloc_unaffected │ ├── malloc │ │ └── classic │ └── signals │ │ ├── classic │ │ └── malloc_unaffected └── util │ ├── for_tsan │ ├── convert_trace_to_tsan.awk │ ├── kedr_show_target_sections.sh │ ├── kedr_show_target_symbols.sh │ └── symbolize │ │ ├── CMakeLists.txt │ │ ├── config.h.in │ │ ├── main.cpp │ │ ├── report_processor.cpp │ │ ├── report_processor.h │ │ ├── symbol_info.cpp │ │ └── symbol_info.h │ └── several_event_handlers │ ├── README │ ├── event_handlers_splitter.c │ └── patch └── sources ├── AUTHORS ├── CMakeLists.txt ├── LICENSE ├── README ├── cmake ├── Readme.developer.txt ├── kmodule_sources │ ├── check_alloc_workqueue_key │ │ └── module.c │ ├── check_allocator │ │ └── module.c │ ├── check_hlist_for_each_entry │ │ └── module.c │ ├── check_kedr_annotations │ │ └── module.c │ ├── check_kernel_config │ │ └── module.c │ ├── check_kfree_rcu │ │ └── module.c │ ├── check_module_build │ │ └── module.c │ ├── check_ndo_fdb_add │ │ └── module.c │ ├── check_ndo_fdb_del │ │ └── module.c │ ├── check_random32 │ │ └── module.c │ ├── check_request_fw │ │ └── module.c │ ├── check_ring_buffer │ │ └── module.c │ ├── check_stack_trace │ │ └── module.c │ ├── check_unreliable_functions │ │ ├── README │ │ ├── __kmalloc_node.c │ │ ├── kmem_cache_alloc_node.c │ │ ├── kmem_cache_alloc_node_notrace.c │ │ └── kmem_cache_alloc_node_trace.c │ └── check_vm_split │ │ └── module.c ├── modules │ ├── Copyright.txt │ ├── FindKbuild.cmake │ ├── FindPythonInterp.cmake │ ├── cmake_useful.cmake │ ├── kbuild_system.cmake │ ├── kbuild_system_files │ │ ├── Kbuild.in │ │ └── Kbuild_object.in │ ├── kmodule.cmake │ ├── kmodule_files │ │ ├── CMakeLists.txt │ │ ├── Kbuild.in │ │ └── scripts │ │ │ ├── gen_check_member_code.sh │ │ │ └── lookup_kernel_function.sh │ └── path_prefixes.cmake └── other_sources │ ├── dwfl_report_elf_check.c │ ├── libdw_check.c │ └── libelf_check.c ├── cmake_uninstall.cmake.in ├── config.h.in ├── converter ├── CMakeLists.txt ├── Readme.developer.txt ├── simple │ ├── CMakeLists.txt │ ├── README │ └── converter.cpp ├── tests │ └── CMakeLists.txt └── tsan │ ├── CMakeLists.txt │ ├── converter.cpp │ └── converter_usage ├── core ├── CMakeLists.txt ├── Readme.developer.txt ├── annot_impl.c ├── annotations │ ├── CMakeLists.txt │ ├── kedr_annotations.c │ ├── kedr_annotations.h │ └── tests │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_module │ │ ├── CMakeLists.txt │ │ └── module.c ├── arch │ └── x86 │ │ ├── include │ │ └── kedr │ │ │ └── asm │ │ │ ├── inat.h │ │ │ ├── inat_types.h │ │ │ └── insn.h │ │ ├── lib │ │ ├── inat.c │ │ ├── insn.c │ │ └── x86-opcode-map.txt │ │ └── tools │ │ └── gen-insn-attr-x86.awk ├── asm_offsets │ ├── Kbuild.in │ └── kedr_asm_offsets.c ├── core_impl.h.in ├── fh_impl.c ├── fh_impl.h ├── handlers.c ├── handlers.h ├── hooks.h ├── i13n.c ├── i13n.h ├── ifunc.c ├── ifunc.h ├── insn_gen.c ├── insn_gen.h ├── ir.c ├── ir.h ├── module.c ├── module_ms_alloc.c ├── module_ms_alloc.h ├── resolve_ip.c ├── resolve_ip.h ├── target.h ├── tests │ ├── CMakeLists.txt │ ├── callbacks │ │ ├── CMakeLists.txt │ │ ├── calls │ │ │ ├── CMakeLists.txt │ │ │ ├── expected │ │ │ │ ├── x86-32 │ │ │ │ │ ├── calls_jumps2_indirect.txt │ │ │ │ │ ├── calls_jumps2_jcc.txt │ │ │ │ │ ├── calls_jumps2_jcc_short.txt │ │ │ │ │ ├── calls_jumps2_jmp_short.txt │ │ │ │ │ └── calls_jumps2_rel32.txt │ │ │ │ └── x86-64 │ │ │ │ │ ├── calls_jumps2_indirect.txt │ │ │ │ │ ├── calls_jumps2_jcc.txt │ │ │ │ │ ├── calls_jumps2_jcc_short.txt │ │ │ │ │ ├── calls_jumps2_jmp_short.txt │ │ │ │ │ └── calls_jumps2_rel32.txt │ │ │ └── test.sh.in │ │ ├── events │ │ │ ├── CMakeLists.txt │ │ │ ├── data_symbols.txt │ │ │ ├── expected │ │ │ │ ├── x86-32 │ │ │ │ │ ├── barriers_mem.txt │ │ │ │ │ ├── common_type_e.txt │ │ │ │ │ ├── locked_updates2.txt │ │ │ │ │ ├── mem_special.txt │ │ │ │ │ ├── mem_special_xlat_bx.txt │ │ │ │ │ ├── stack_access.txt │ │ │ │ │ ├── stack_access_with_stack.txt │ │ │ │ │ └── strings.txt │ │ │ │ └── x86-64 │ │ │ │ │ ├── barriers_mem.txt │ │ │ │ │ ├── common_type_e.txt │ │ │ │ │ ├── locked_updates2.txt │ │ │ │ │ ├── mem_special.txt │ │ │ │ │ ├── mem_special_xlat_bx.txt │ │ │ │ │ ├── stack_access.txt │ │ │ │ │ ├── stack_access_with_stack.txt │ │ │ │ │ └── strings.txt │ │ │ ├── prepare_symbol_table.awk.in │ │ │ └── test.sh.in │ │ └── load_unload │ │ │ ├── CMakeLists.txt │ │ │ ├── test.sh.in │ │ │ └── test_module │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── debug_util │ │ ├── Readme.developer.txt │ │ ├── debug_util.c │ │ └── debug_util.h │ ├── i13n │ │ ├── CMakeLists.txt │ │ ├── asm │ │ │ ├── x86-32 │ │ │ │ ├── barriers_cpuid.S │ │ │ │ ├── barriers_mem.S │ │ │ │ ├── barriers_other.S │ │ │ │ ├── base_reg.S │ │ │ │ ├── calls_jumps.S │ │ │ │ ├── calls_jumps2.S │ │ │ │ ├── common_blocks.S │ │ │ │ ├── common_type_e.S │ │ │ │ ├── disp32_iprel.S │ │ │ │ ├── io_mem.S │ │ │ │ ├── jcxz_loop.S │ │ │ │ ├── jump_tables.S │ │ │ │ ├── locked_updates.S │ │ │ │ ├── locked_updates2.S │ │ │ │ ├── long_blocks.S │ │ │ │ ├── mem_special.S │ │ │ │ ├── special_control.S │ │ │ │ ├── split_func.S │ │ │ │ ├── stack_access.S │ │ │ │ └── strings.S │ │ │ └── x86-64 │ │ │ │ ├── barriers_cpuid.S │ │ │ │ ├── barriers_mem.S │ │ │ │ ├── barriers_other.S │ │ │ │ ├── base_reg.S │ │ │ │ ├── calls_jumps.S │ │ │ │ ├── calls_jumps2.S │ │ │ │ ├── common_blocks.S │ │ │ │ ├── common_type_e.S │ │ │ │ ├── disp32_iprel.S │ │ │ │ ├── io_mem.S │ │ │ │ ├── jcxz_loop.S │ │ │ │ ├── jump_tables.S │ │ │ │ ├── locked_updates.S │ │ │ │ ├── locked_updates2.S │ │ │ │ ├── long_blocks.S │ │ │ │ ├── mem_special.S │ │ │ │ ├── special_control.S │ │ │ │ ├── split_func.S │ │ │ │ ├── stack_access.S │ │ │ │ └── strings.S │ │ ├── basic │ │ │ ├── CMakeLists.txt │ │ │ ├── test.sh.in │ │ │ └── test_jtable.sh.in │ │ ├── function_lookup │ │ │ ├── CMakeLists.txt │ │ │ ├── check_data.awk.in │ │ │ ├── test.sh.in │ │ │ └── test_module │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── module.c │ │ ├── ir_create │ │ │ ├── CMakeLists.txt │ │ │ ├── accessor │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── module.c │ │ │ ├── expected │ │ │ │ ├── x86-32 │ │ │ │ │ ├── barriers_cpuid.txt │ │ │ │ │ ├── barriers_other.txt │ │ │ │ │ ├── calls_jumps.txt │ │ │ │ │ ├── common_blocks.txt │ │ │ │ │ ├── disp32_iprel.txt │ │ │ │ │ ├── io_mem.txt │ │ │ │ │ ├── jcxz_loop.txt │ │ │ │ │ ├── jump_tables.txt │ │ │ │ │ ├── locked_updates.txt │ │ │ │ │ ├── long_blocks.txt │ │ │ │ │ └── special_control.txt │ │ │ │ └── x86-64 │ │ │ │ │ ├── barriers_cpuid.txt │ │ │ │ │ ├── barriers_other.txt │ │ │ │ │ ├── calls_jumps.txt │ │ │ │ │ ├── common_blocks.txt │ │ │ │ │ ├── disp32_iprel.txt │ │ │ │ │ ├── io_mem.txt │ │ │ │ │ ├── jcxz_loop.txt │ │ │ │ │ ├── jump_tables.txt │ │ │ │ │ ├── locked_updates.txt │ │ │ │ │ ├── long_blocks.txt │ │ │ │ │ └── special_control.txt │ │ │ ├── target_common │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── module.c │ │ │ ├── target_split_func │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── module.c │ │ │ ├── test.sh.in │ │ │ └── test_err.sh.in │ │ ├── null_alloc │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── target_jtable │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ └── transform │ │ │ ├── CMakeLists.txt │ │ │ ├── accessor2 │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ │ ├── expected │ │ │ ├── x86-32 │ │ │ │ ├── barriers_mem.txt │ │ │ │ ├── base_reg.txt │ │ │ │ ├── base_reg_no_edi.txt │ │ │ │ ├── base_reg_no_esi.txt │ │ │ │ ├── base_reg_no_esi_edi1.txt │ │ │ │ ├── base_reg_no_esi_edi2.txt │ │ │ │ ├── calls_jumps2_indirect.txt │ │ │ │ ├── calls_jumps2_jcc.txt │ │ │ │ ├── calls_jumps2_jcc_short.txt │ │ │ │ ├── calls_jumps2_jmp_short.txt │ │ │ │ ├── calls_jumps2_rel32.txt │ │ │ │ ├── common_type_e.txt │ │ │ │ ├── common_type_e_with_stack.txt │ │ │ │ ├── io_mem.txt │ │ │ │ ├── locked_updates2.txt │ │ │ │ ├── mem_special.txt │ │ │ │ ├── mem_special_xlat_bx.txt │ │ │ │ └── strings.txt │ │ │ └── x86-64 │ │ │ │ ├── barriers_mem.txt │ │ │ │ ├── base_reg.txt │ │ │ │ ├── calls_jumps2_indirect.txt │ │ │ │ ├── calls_jumps2_jcc.txt │ │ │ │ ├── calls_jumps2_jcc_short.txt │ │ │ │ ├── calls_jumps2_jmp_short.txt │ │ │ │ ├── calls_jumps2_rel32.txt │ │ │ │ ├── common_type_e.txt │ │ │ │ ├── common_type_e_with_stack.txt │ │ │ │ ├── io_mem.txt │ │ │ │ ├── locked_updates2.txt │ │ │ │ ├── mem_special.txt │ │ │ │ ├── mem_special_xlat_bx.txt │ │ │ │ └── strings.txt │ │ │ ├── target_common │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ │ ├── test.sh.in │ │ │ └── test_nulla.sh.in │ ├── ls_allocator │ │ ├── CMakeLists.txt │ │ ├── test_basics.sh.in │ │ └── test_module │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── module_ms_alloc │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_module │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── multiple_targets │ │ ├── CMakeLists.txt │ │ ├── kedr_multi_a │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── some_multi_a │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── some_multi_b │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── test_basics.sh.in │ │ ├── test_broken.sh.in │ │ ├── test_init_exit.sh.in │ │ └── test_multi_a │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── no_code │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_no_code │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── providers │ │ ├── CMakeLists.txt │ │ ├── test_core_hooks │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── test_eh │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── test_ls_alloc │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ └── test_unload.sh.in │ ├── recursion │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_recursion │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── reg_unreg │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_module │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── reporter │ │ ├── CMakeLists.txt │ │ └── module.c │ ├── sampling │ │ ├── CMakeLists.txt │ │ └── test_shallow.sh.in │ ├── sections │ │ ├── CMakeLists.txt │ │ ├── test.sh.in │ │ └── test_module │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ ├── simple_ins_rm │ │ ├── CMakeLists.txt │ │ └── ins_rm.sh.in │ ├── stack_on_call │ │ ├── CMakeLists.txt │ │ ├── expected │ │ │ ├── x86-32 │ │ │ │ ├── stack_on_call.txt │ │ │ │ └── stack_on_jmp.txt │ │ │ └── x86-64 │ │ │ │ ├── stack_on_call.txt │ │ │ │ └── stack_on_jmp.txt │ │ ├── target │ │ │ ├── CMakeLists.txt │ │ │ ├── module.c │ │ │ ├── test_stack_32.S │ │ │ └── test_stack_64.S │ │ └── test.sh.in │ └── util │ │ ├── compare_files.awk │ │ └── compare_files.sh ├── thunks.h ├── thunks_32.S ├── thunks_64.S ├── tid.c ├── tid.h ├── transform.c ├── transform.h ├── um_helpers │ ├── CMakeLists.txt │ └── kedr_get_sections.sh.in ├── util.c └── util.h ├── doc └── tutorial.txt ├── examples ├── CMakeLists.txt ├── buggy01 │ ├── CMakeLists.txt │ ├── Kbuild.in │ ├── makefile_installed.in │ ├── module.c │ └── tests │ │ ├── CMakeLists.txt │ │ └── test.sh.in ├── buggy01_annotated │ ├── CMakeLists.txt │ ├── Kbuild.in │ ├── Kbuild_annotations_in_kernel.in │ ├── makefile_installed.in │ ├── module.c │ └── tests │ │ └── CMakeLists.txt └── test_buggy01 │ ├── CMakeLists.txt │ └── test_buggy01.c ├── functions ├── CMakeLists.txt ├── cdev │ ├── CMakeLists.txt │ ├── cdev_add.data │ ├── cdev_del.data │ ├── templates │ │ ├── block │ │ │ └── block.tpl │ │ └── document │ │ │ ├── document.tpl │ │ │ └── handlerItem.tpl │ └── tests │ │ ├── CMakeLists.txt │ │ └── test.sh.in ├── common │ ├── CMakeLists.txt │ ├── group.list.in │ ├── groups │ │ ├── alloc │ │ │ ├── CMakeLists.txt │ │ │ ├── __alloc_pages_nodemask.data │ │ │ ├── __get_free_pages.data │ │ │ ├── __kmalloc.data │ │ │ ├── __kmalloc_node.data │ │ │ ├── __vmalloc.data │ │ │ ├── alloc_pages_current.data │ │ │ ├── alloc_pages_exact.data │ │ │ ├── alloc_pages_exact_nid.data │ │ │ ├── get_zeroed_page.data │ │ │ ├── kmalloc_order_trace.data │ │ │ ├── kmem_cache_alloc.data │ │ │ ├── kmem_cache_alloc_node.data │ │ │ ├── kmem_cache_alloc_node_notrace.data │ │ │ ├── kmem_cache_alloc_node_trace.data │ │ │ ├── kmem_cache_alloc_notrace.data │ │ │ ├── kmem_cache_alloc_trace.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ ├── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __alloc_pages_nodemask.trigger │ │ │ │ ├── __get_free_pages.trigger │ │ │ │ ├── __kmalloc.trigger │ │ │ │ ├── __kmalloc_node.trigger │ │ │ │ ├── __vmalloc.trigger │ │ │ │ ├── alloc_pages_current.trigger │ │ │ │ ├── alloc_pages_exact.trigger │ │ │ │ ├── alloc_pages_exact_nid.trigger │ │ │ │ ├── get_zeroed_page.trigger │ │ │ │ ├── header.data │ │ │ │ ├── kmalloc_order_trace.trigger │ │ │ │ ├── kmem_cache_alloc.trigger │ │ │ │ ├── kmem_cache_alloc_node.trigger │ │ │ │ ├── kmem_cache_alloc_node_notrace.trigger │ │ │ │ ├── kmem_cache_alloc_node_trace.trigger │ │ │ │ ├── kmem_cache_alloc_notrace.trigger │ │ │ │ ├── kmem_cache_alloc_trace.trigger │ │ │ │ ├── vmalloc.trigger │ │ │ │ ├── vmalloc_32.trigger │ │ │ │ ├── vmalloc_32_user.trigger │ │ │ │ ├── vmalloc_node.trigger │ │ │ │ ├── vmalloc_user.trigger │ │ │ │ ├── vzalloc.trigger │ │ │ │ └── vzalloc_node.trigger │ │ │ ├── vmalloc.data │ │ │ ├── vmalloc_32.data │ │ │ ├── vmalloc_32_user.data │ │ │ ├── vmalloc_node.data │ │ │ ├── vmalloc_user.data │ │ │ ├── vzalloc.data │ │ │ └── vzalloc_node.data │ │ ├── annotations │ │ │ ├── CMakeLists.txt │ │ │ ├── kedr_annotate_happens_after.data │ │ │ ├── kedr_annotate_happens_before.data │ │ │ ├── kedr_annotate_memory_acquired.data │ │ │ ├── kedr_annotate_memory_released.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ ├── handlerItem.tpl │ │ │ │ └── set_handlers.tpl │ │ ├── bh │ │ │ ├── CMakeLists.txt │ │ │ ├── local_bh_disable.data │ │ │ ├── local_bh_enable.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── completion │ │ │ ├── CMakeLists.txt │ │ │ ├── complete.data │ │ │ ├── complete_all.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ ├── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── check_trace.sh │ │ │ │ ├── complete.trigger │ │ │ │ ├── complete_all.trigger │ │ │ │ ├── expected_common.trace │ │ │ │ ├── header.data │ │ │ │ ├── try_wait_for_completion.trigger │ │ │ │ ├── wait_for_completion.trigger │ │ │ │ ├── wait_for_completion_interruptible.trigger │ │ │ │ ├── wait_for_completion_interruptible_timeout.trigger │ │ │ │ ├── wait_for_completion_io.trigger │ │ │ │ ├── wait_for_completion_io_timeout.trigger │ │ │ │ ├── wait_for_completion_killable.trigger │ │ │ │ ├── wait_for_completion_killable_timeout.trigger │ │ │ │ └── wait_for_completion_timeout.trigger │ │ │ ├── try_wait_for_completion.data │ │ │ ├── wait_for_completion.data │ │ │ ├── wait_for_completion_interruptible.data │ │ │ ├── wait_for_completion_interruptible_timeout.data │ │ │ ├── wait_for_completion_io.data │ │ │ ├── wait_for_completion_io_timeout.data │ │ │ ├── wait_for_completion_killable.data │ │ │ ├── wait_for_completion_killable_timeout.data │ │ │ └── wait_for_completion_timeout.data │ │ ├── device │ │ │ ├── CMakeLists.txt │ │ │ ├── pm_ops.list.in │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── set_handlers.tpl │ │ ├── dup │ │ │ ├── CMakeLists.txt │ │ │ ├── kmemdup.data │ │ │ ├── kstrdup.data │ │ │ ├── kstrndup.data │ │ │ ├── match_strdup.data │ │ │ ├── memdup_user.data │ │ │ ├── strndup_user.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── header.data │ │ │ │ ├── kmemdup.trigger │ │ │ │ ├── kstrdup.trigger │ │ │ │ ├── kstrndup.trigger │ │ │ │ └── match_strdup.trigger │ │ ├── firmware │ │ │ ├── CMakeLists.txt │ │ │ ├── request_firmware_nowait.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── free │ │ │ ├── CMakeLists.txt │ │ │ ├── __free_pages.data │ │ │ ├── free_pages.data │ │ │ ├── free_pages_exact.data │ │ │ ├── kfree.data │ │ │ ├── kmem_cache_free.data │ │ │ ├── kzfree.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ ├── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __free_pages.trigger │ │ │ │ ├── free_pages.trigger │ │ │ │ ├── free_pages_exact.trigger │ │ │ │ ├── header.data │ │ │ │ ├── kfree.trigger │ │ │ │ ├── kmem_cache_free.trigger │ │ │ │ ├── kzfree.trigger │ │ │ │ └── vfree.trigger │ │ │ └── vfree.data │ │ ├── irq │ │ │ ├── CMakeLists.txt │ │ │ ├── devm_free_irq.data │ │ │ ├── devm_request_threaded_irq.data │ │ │ ├── disable_irq.data │ │ │ ├── enable_irq.data │ │ │ ├── free_irq.data │ │ │ ├── request_any_context_irq.data │ │ │ ├── request_threaded_irq.data │ │ │ ├── synchronize_irq.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── lock │ │ │ ├── CMakeLists.txt │ │ │ ├── _atomic_dec_and_lock.data │ │ │ ├── _mutex_lock_nest_lock.data │ │ │ ├── _raw_read_lock.data │ │ │ ├── _raw_read_lock_bh.data │ │ │ ├── _raw_read_lock_irq.data │ │ │ ├── _raw_read_lock_irqsave.data │ │ │ ├── _raw_read_trylock.data │ │ │ ├── _raw_spin_lock.data │ │ │ ├── _raw_spin_lock_bh.data │ │ │ ├── _raw_spin_lock_irq.data │ │ │ ├── _raw_spin_lock_irqsave.data │ │ │ ├── _raw_spin_lock_irqsave_nested.data │ │ │ ├── _raw_spin_lock_nest_lock.data │ │ │ ├── _raw_spin_lock_nested.data │ │ │ ├── _raw_spin_trylock.data │ │ │ ├── _raw_spin_trylock_bh.data │ │ │ ├── _raw_write_lock.data │ │ │ ├── _raw_write_lock_bh.data │ │ │ ├── _raw_write_lock_irq.data │ │ │ ├── _raw_write_lock_irqsave.data │ │ │ ├── _raw_write_trylock.data │ │ │ ├── _read_lock.data │ │ │ ├── _read_lock_bh.data │ │ │ ├── _read_lock_irq.data │ │ │ ├── _read_lock_irqsave.data │ │ │ ├── _read_trylock.data │ │ │ ├── _spin_lock.data │ │ │ ├── _spin_lock_bh.data │ │ │ ├── _spin_lock_irq.data │ │ │ ├── _spin_lock_irqsave.data │ │ │ ├── _spin_lock_irqsave_nested.data │ │ │ ├── _spin_lock_nest_lock.data │ │ │ ├── _spin_lock_nested.data │ │ │ ├── _spin_trylock.data │ │ │ ├── _spin_trylock_bh.data │ │ │ ├── _write_lock.data │ │ │ ├── _write_lock_bh.data │ │ │ ├── _write_lock_irq.data │ │ │ ├── _write_lock_irqsave.data │ │ │ ├── _write_trylock.data │ │ │ ├── atomic_dec_and_mutex_lock.data │ │ │ ├── mutex_lock.data │ │ │ ├── mutex_lock_interruptible.data │ │ │ ├── mutex_lock_interruptible_nested.data │ │ │ ├── mutex_lock_killable.data │ │ │ ├── mutex_lock_killable_nested.data │ │ │ ├── mutex_lock_nested.data │ │ │ ├── mutex_trylock.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── _atomic_dec_and_lock.trigger │ │ │ │ ├── _raw_read_lock.trigger │ │ │ │ ├── _raw_read_lock_bh.trigger │ │ │ │ ├── _raw_read_lock_irq.trigger │ │ │ │ ├── _raw_read_lock_irqsave.trigger │ │ │ │ ├── _raw_read_trylock.trigger │ │ │ │ ├── _raw_spin_lock.trigger │ │ │ │ ├── _raw_spin_lock_bh.trigger │ │ │ │ ├── _raw_spin_lock_irq.trigger │ │ │ │ ├── _raw_spin_lock_irqsave.trigger │ │ │ │ ├── _raw_spin_lock_irqsave_nested.trigger │ │ │ │ ├── _raw_spin_lock_nested.trigger │ │ │ │ ├── _raw_spin_trylock.trigger │ │ │ │ ├── _raw_spin_trylock_bh.trigger │ │ │ │ ├── _raw_write_lock.trigger │ │ │ │ ├── _raw_write_lock_bh.trigger │ │ │ │ ├── _raw_write_lock_irq.trigger │ │ │ │ ├── _raw_write_lock_irqsave.trigger │ │ │ │ ├── _raw_write_trylock.trigger │ │ │ │ ├── _read_lock.trigger │ │ │ │ ├── _read_lock_bh.trigger │ │ │ │ ├── _read_lock_irq.trigger │ │ │ │ ├── _read_lock_irqsave.trigger │ │ │ │ ├── _read_trylock.trigger │ │ │ │ ├── _spin_lock.trigger │ │ │ │ ├── _spin_lock_bh.trigger │ │ │ │ ├── _spin_lock_irq.trigger │ │ │ │ ├── _spin_lock_irqsave.trigger │ │ │ │ ├── _spin_lock_irqsave_nested.trigger │ │ │ │ ├── _spin_lock_nested.trigger │ │ │ │ ├── _spin_trylock.trigger │ │ │ │ ├── _spin_trylock_bh.trigger │ │ │ │ ├── _write_lock.trigger │ │ │ │ ├── _write_lock_bh.trigger │ │ │ │ ├── _write_lock_irq.trigger │ │ │ │ ├── _write_lock_irqsave.trigger │ │ │ │ ├── _write_trylock.trigger │ │ │ │ ├── atomic_dec_and_mutex_lock.trigger │ │ │ │ ├── header.data │ │ │ │ ├── mutex_lock.trigger │ │ │ │ ├── mutex_lock_interruptible.trigger │ │ │ │ ├── mutex_lock_interruptible_nested.trigger │ │ │ │ ├── mutex_lock_killable.trigger │ │ │ │ ├── mutex_lock_killable_nested.trigger │ │ │ │ ├── mutex_lock_nested.trigger │ │ │ │ └── mutex_trylock.trigger │ │ ├── pci │ │ │ ├── CMakeLists.txt │ │ │ ├── __pci_register_driver.data │ │ │ ├── pci_driver │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── probe.data │ │ │ │ ├── remove.data │ │ │ │ ├── resume.data │ │ │ │ ├── resume_early.data │ │ │ │ ├── shutdown.data │ │ │ │ ├── sriov_configure.data │ │ │ │ ├── suspend.data │ │ │ │ ├── suspend_late.data │ │ │ │ └── templates │ │ │ │ │ ├── block │ │ │ │ │ └── block.tpl │ │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── set_handlers.tpl │ │ │ ├── pci_error_handlers │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── callbacks.list.in │ │ │ │ └── templates │ │ │ │ │ ├── block │ │ │ │ │ └── block.tpl │ │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── set_handlers.tpl │ │ │ ├── pci_unregister_driver.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── realloc │ │ │ ├── CMakeLists.txt │ │ │ ├── __krealloc.data │ │ │ ├── krealloc.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __krealloc.trigger │ │ │ │ ├── header.data │ │ │ │ └── krealloc.trigger │ │ ├── semaphore │ │ │ ├── CMakeLists.txt │ │ │ ├── down.data │ │ │ ├── down_interruptible.data │ │ │ ├── down_killable.data │ │ │ ├── down_timeout.data │ │ │ ├── down_trylock.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── up.data │ │ ├── strings │ │ │ ├── CMakeLists.txt │ │ │ ├── __memcpy.data │ │ │ ├── _kstrtol.data │ │ │ ├── _kstrtoul.data │ │ │ ├── kasprintf.data │ │ │ ├── kstrtoint.data │ │ │ ├── kstrtoll.data │ │ │ ├── kstrtos16.data │ │ │ ├── kstrtos8.data │ │ │ ├── kstrtou16.data │ │ │ ├── kstrtou8.data │ │ │ ├── kstrtouint.data │ │ │ ├── kstrtoull.data │ │ │ ├── kvasprintf.data │ │ │ ├── memchr.data │ │ │ ├── memchr_inv.data │ │ │ ├── memcmp.data │ │ │ ├── memcpy.data │ │ │ ├── memmove.data │ │ │ ├── memscan.data │ │ │ ├── memset.data │ │ │ ├── scnprintf.data │ │ │ ├── simple_strtol.data │ │ │ ├── simple_strtoll.data │ │ │ ├── simple_strtoul.data │ │ │ ├── simple_strtoull.data │ │ │ ├── skip_spaces.data │ │ │ ├── snprintf.data │ │ │ ├── sprintf.data │ │ │ ├── sscanf.data │ │ │ ├── strcasecmp.data │ │ │ ├── strcat.data │ │ │ ├── strchr.data │ │ │ ├── strcmp.data │ │ │ ├── strcpy.data │ │ │ ├── strcspn.data │ │ │ ├── strict_strtol.data │ │ │ ├── strict_strtoll.data │ │ │ ├── strict_strtoul.data │ │ │ ├── strict_strtoull.data │ │ │ ├── strim.data │ │ │ ├── strlcat.data │ │ │ ├── strlcpy.data │ │ │ ├── strlen.data │ │ │ ├── strncasecmp.data │ │ │ ├── strncat.data │ │ │ ├── strnchr.data │ │ │ ├── strncmp.data │ │ │ ├── strncpy.data │ │ │ ├── strnicmp.data │ │ │ ├── strnlen.data │ │ │ ├── strnstr.data │ │ │ ├── strpbrk.data │ │ │ ├── strrchr.data │ │ │ ├── strsep.data │ │ │ ├── strspn.data │ │ │ ├── strstr.data │ │ │ ├── strstrip.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ ├── handlerItem.tpl │ │ │ │ │ └── lookupItem.tpl │ │ │ ├── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __memcpy.trigger │ │ │ │ ├── _kstrtol.trigger │ │ │ │ ├── _kstrtoul.trigger │ │ │ │ ├── header.data │ │ │ │ ├── kasprintf.trigger │ │ │ │ ├── kstrtoint.trigger │ │ │ │ ├── kstrtoll.trigger │ │ │ │ ├── kstrtos16.trigger │ │ │ │ ├── kstrtos8.trigger │ │ │ │ ├── kstrtou16.trigger │ │ │ │ ├── kstrtou8.trigger │ │ │ │ ├── kstrtouint.trigger │ │ │ │ ├── kstrtoull.trigger │ │ │ │ ├── kvasprintf.trigger │ │ │ │ ├── memchr.trigger │ │ │ │ ├── memchr_inv.trigger │ │ │ │ ├── memcmp.trigger │ │ │ │ ├── memcpy.trigger │ │ │ │ ├── memmove.trigger │ │ │ │ ├── memscan.trigger │ │ │ │ ├── memset.trigger │ │ │ │ ├── scnprintf.trigger │ │ │ │ ├── simple_strtol.trigger │ │ │ │ ├── simple_strtoll.trigger │ │ │ │ ├── simple_strtoul.trigger │ │ │ │ ├── simple_strtoull.trigger │ │ │ │ ├── skip_spaces.trigger │ │ │ │ ├── snprintf.trigger │ │ │ │ ├── sprintf.trigger │ │ │ │ ├── sscanf.trigger │ │ │ │ ├── strcasecmp.trigger │ │ │ │ ├── strcat.trigger │ │ │ │ ├── strchr.trigger │ │ │ │ ├── strcmp.trigger │ │ │ │ ├── strcpy.trigger │ │ │ │ ├── strcspn.trigger │ │ │ │ ├── strict_strtol.trigger │ │ │ │ ├── strict_strtoll.trigger │ │ │ │ ├── strict_strtoul.trigger │ │ │ │ ├── strict_strtoull.trigger │ │ │ │ ├── strim.trigger │ │ │ │ ├── strlcat.trigger │ │ │ │ ├── strlcpy.trigger │ │ │ │ ├── strlen.trigger │ │ │ │ ├── strncasecmp.trigger │ │ │ │ ├── strncat.trigger │ │ │ │ ├── strnchr.trigger │ │ │ │ ├── strncmp.trigger │ │ │ │ ├── strncpy.trigger │ │ │ │ ├── strnicmp.trigger │ │ │ │ ├── strnlen.trigger │ │ │ │ ├── strnstr.trigger │ │ │ │ ├── strpbrk.trigger │ │ │ │ ├── strrchr.trigger │ │ │ │ ├── strsep.trigger │ │ │ │ ├── strspn.trigger │ │ │ │ ├── strstr.trigger │ │ │ │ ├── strstrip.trigger │ │ │ │ ├── vscnprintf.trigger │ │ │ │ ├── vsnprintf.trigger │ │ │ │ ├── vsprintf.trigger │ │ │ │ └── vsscanf.trigger │ │ │ ├── vscnprintf.data │ │ │ ├── vsnprintf.data │ │ │ ├── vsprintf.data │ │ │ └── vsscanf.data │ │ ├── tasklet │ │ │ ├── CMakeLists.txt │ │ │ ├── __tasklet_hi_schedule.data │ │ │ ├── __tasklet_schedule.data │ │ │ ├── tasklet_kill.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __tasklet_hi_schedule.trigger │ │ │ │ ├── __tasklet_schedule.trigger │ │ │ │ ├── check_trace.sh │ │ │ │ ├── expected_common.trace │ │ │ │ ├── header.data │ │ │ │ └── tasklet_kill.trigger │ │ ├── thread │ │ │ ├── CMakeLists.txt │ │ │ ├── kthread_create.data │ │ │ ├── kthread_create_on_node.data │ │ │ ├── kthread_stop.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── arg_def.tpl │ │ │ │ ├── arg_enum.tpl │ │ │ │ ├── arg_undef.tpl │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── timer │ │ │ ├── CMakeLists.txt │ │ │ ├── add_timer.data │ │ │ ├── add_timer_on.data │ │ │ ├── del_timer_sync.data │ │ │ ├── mod_timer.data │ │ │ ├── mod_timer_pinned.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ ├── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── add_timer.trigger │ │ │ │ ├── add_timer_on.trigger │ │ │ │ ├── check_trace.sh │ │ │ │ ├── del_timer_sync.trigger │ │ │ │ ├── expected_common.trace │ │ │ │ ├── header.data │ │ │ │ ├── mod_timer.trigger │ │ │ │ ├── mod_timer_pinned.trigger │ │ │ │ └── try_to_del_timer_sync.trigger │ │ │ └── try_to_del_timer_sync.data │ │ ├── uaccess │ │ │ ├── CMakeLists.txt │ │ │ ├── __strncpy_from_user.data │ │ │ ├── _copy_from_user.data │ │ │ ├── _copy_to_user.data │ │ │ ├── copy_from_user.data │ │ │ ├── copy_to_user.data │ │ │ ├── strncpy_from_user.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ └── header.data │ │ ├── unlock │ │ │ ├── CMakeLists.txt │ │ │ ├── _raw_read_unlock.data │ │ │ ├── _raw_read_unlock_bh.data │ │ │ ├── _raw_read_unlock_irq.data │ │ │ ├── _raw_read_unlock_irqrestore.data │ │ │ ├── _raw_spin_unlock.data │ │ │ ├── _raw_spin_unlock_bh.data │ │ │ ├── _raw_spin_unlock_irq.data │ │ │ ├── _raw_spin_unlock_irqrestore.data │ │ │ ├── _raw_write_unlock.data │ │ │ ├── _raw_write_unlock_bh.data │ │ │ ├── _raw_write_unlock_irq.data │ │ │ ├── _raw_write_unlock_irqrestore.data │ │ │ ├── _read_unlock.data │ │ │ ├── _read_unlock_bh.data │ │ │ ├── _read_unlock_irq.data │ │ │ ├── _read_unlock_irqrestore.data │ │ │ ├── _spin_unlock.data │ │ │ ├── _spin_unlock_bh.data │ │ │ ├── _spin_unlock_irq.data │ │ │ ├── _spin_unlock_irqrestore.data │ │ │ ├── _write_unlock.data │ │ │ ├── _write_unlock_bh.data │ │ │ ├── _write_unlock_irq.data │ │ │ ├── _write_unlock_irqrestore.data │ │ │ ├── mutex_unlock.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── _raw_read_unlock.trigger │ │ │ │ ├── _raw_read_unlock_bh.trigger │ │ │ │ ├── _raw_read_unlock_irq.trigger │ │ │ │ ├── _raw_read_unlock_irqrestore.trigger │ │ │ │ ├── _raw_spin_unlock.trigger │ │ │ │ ├── _raw_spin_unlock_bh.trigger │ │ │ │ ├── _raw_spin_unlock_irq.trigger │ │ │ │ ├── _raw_spin_unlock_irqrestore.trigger │ │ │ │ ├── _raw_write_unlock.trigger │ │ │ │ ├── _raw_write_unlock_bh.trigger │ │ │ │ ├── _raw_write_unlock_irq.trigger │ │ │ │ ├── _raw_write_unlock_irqrestore.trigger │ │ │ │ ├── _read_unlock.trigger │ │ │ │ ├── _read_unlock_bh.trigger │ │ │ │ ├── _read_unlock_irq.trigger │ │ │ │ ├── _read_unlock_irqrestore.trigger │ │ │ │ ├── _spin_unlock.trigger │ │ │ │ ├── _spin_unlock_bh.trigger │ │ │ │ ├── _spin_unlock_irq.trigger │ │ │ │ ├── _spin_unlock_irqrestore.trigger │ │ │ │ ├── _write_unlock.trigger │ │ │ │ ├── _write_unlock_bh.trigger │ │ │ │ ├── _write_unlock_irq.trigger │ │ │ │ ├── _write_unlock_irqrestore.trigger │ │ │ │ ├── header.data │ │ │ │ └── mutex_unlock.trigger │ │ └── workqueue │ │ │ ├── CMakeLists.txt │ │ │ ├── __alloc_workqueue_key.data │ │ │ ├── __create_workqueue_key.data │ │ │ ├── cancel_delayed_work_sync.data │ │ │ ├── cancel_work_sync.data │ │ │ ├── destroy_workqueue.data │ │ │ ├── drain_workqueue.data │ │ │ ├── flush_delayed_work.data │ │ │ ├── flush_scheduled_work.data │ │ │ ├── flush_work.data │ │ │ ├── flush_workqueue.data │ │ │ ├── mod_delayed_work.data │ │ │ ├── mod_delayed_work_on.data │ │ │ ├── queue_delayed_work.data │ │ │ ├── queue_delayed_work_on.data │ │ │ ├── queue_work.data │ │ │ ├── queue_work_on.data │ │ │ ├── schedule_delayed_work.data │ │ │ ├── schedule_delayed_work_on.data │ │ │ ├── schedule_work.data │ │ │ ├── schedule_work_on.data │ │ │ ├── templates │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ │ └── tests │ │ │ ├── CMakeLists.txt │ │ │ ├── __alloc_workqueue_key.trigger │ │ │ ├── __create_workqueue_key.trigger │ │ │ ├── cancel_delayed_work_sync.trigger │ │ │ ├── cancel_work_sync.trigger │ │ │ ├── check_trace.sh │ │ │ ├── destroy_workqueue.trigger │ │ │ ├── drain_workqueue.trigger │ │ │ ├── expected_alloc_wq.trace │ │ │ ├── expected_common.trace │ │ │ ├── expected_system_wq.trace │ │ │ ├── flush_delayed_work.trigger │ │ │ ├── flush_scheduled_work.trigger │ │ │ ├── flush_work.trigger │ │ │ ├── flush_workqueue.trigger │ │ │ ├── header.data │ │ │ ├── mod_delayed_work.trigger │ │ │ ├── mod_delayed_work_on.trigger │ │ │ ├── queue_delayed_work.trigger │ │ │ ├── queue_delayed_work_on.trigger │ │ │ ├── queue_work.trigger │ │ │ ├── queue_work_on.trigger │ │ │ ├── schedule_delayed_work.trigger │ │ │ ├── schedule_delayed_work_on.trigger │ │ │ ├── schedule_work.trigger │ │ │ └── schedule_work_on.trigger │ └── templates │ │ ├── block │ │ └── block.tpl │ │ └── document │ │ ├── add_group.tpl │ │ ├── declare_group.tpl │ │ └── document.tpl ├── fs │ ├── CMakeLists.txt │ ├── Readme │ ├── file_system │ │ ├── CMakeLists.txt │ │ ├── Readme │ │ ├── callback_interceptor.c │ │ ├── callback_interceptor.h │ │ ├── cdev_file_operations.data │ │ ├── cdev_file_operations_interceptor.data │ │ ├── cdev_model.h │ │ ├── dentry_operations.data │ │ ├── file_operations.data │ │ ├── file_system_type.data │ │ ├── fill_super_interceptor.data │ │ ├── inode_file_operations.data │ │ ├── inode_operations.data │ │ ├── miscdev_file_operations.data │ │ ├── miscdev_file_operations_interceptor.data │ │ ├── miscdev_file_operations_interceptor.h │ │ ├── miscdev_model.h │ │ ├── module.data │ │ ├── super_operations.data │ │ ├── vma_operations.data │ │ ├── vma_operations_clone_interceptor.data │ │ ├── vma_operations_interceptor.c │ │ ├── vma_operations_interceptor.data │ │ └── vma_operations_interceptor.h │ ├── module_ref_model.h │ └── templates │ │ ├── README │ │ ├── callback_interceptor.c │ │ ├── block │ │ │ ├── arg_spec.tpl │ │ │ ├── block.tpl │ │ │ └── callback_t.tpl │ │ └── document │ │ │ └── document.tpl │ │ ├── callback_interceptor.h │ │ ├── block │ │ │ ├── block.tpl │ │ │ └── callback_t.tpl │ │ └── document │ │ │ └── document.tpl │ │ ├── operations_model.c │ │ ├── block │ │ │ ├── arg.tpl │ │ │ ├── args.tpl │ │ │ ├── block.tpl │ │ │ ├── callback_name.tpl │ │ │ ├── checkOperationType.tpl │ │ │ ├── external_state_post.tpl │ │ │ ├── external_state_pre.tpl │ │ │ ├── external_state_transition_post.tpl │ │ │ ├── external_state_transition_pre.tpl │ │ │ ├── is_external.tpl │ │ │ ├── pc_value.tpl │ │ │ ├── post_external.tpl │ │ │ ├── post_internal.tpl │ │ │ ├── pre_external.tpl │ │ │ ├── pre_internal.tpl │ │ │ ├── protection.tpl │ │ │ ├── state_post.tpl │ │ │ ├── state_pre.tpl │ │ │ ├── state_transition_post.tpl │ │ │ └── state_transition_pre.tpl │ │ └── document │ │ │ ├── document.tpl │ │ │ ├── operations_type.tpl │ │ │ ├── post.tpl │ │ │ ├── pre.tpl │ │ │ └── state_ids.tpl │ │ ├── operations_model.h │ │ ├── block │ │ │ └── block.tpl │ │ └── document │ │ │ ├── document.tpl │ │ │ └── state_ids.tpl │ │ └── plugin_module.c │ │ ├── block │ │ ├── arg_spec.tpl │ │ └── block.tpl │ │ └── document │ │ ├── document.tpl │ │ ├── handlers_item.tpl │ │ ├── object_destroy_function.tpl │ │ ├── object_destroy_function_ref.tpl │ │ ├── object_init_function.tpl │ │ └── object_init_function_ref.tpl ├── net │ ├── CMakeLists.txt │ ├── drd_net_common.h │ ├── group.list.in │ ├── groups │ │ ├── ethtool_ops │ │ │ ├── CMakeLists.txt │ │ │ ├── callbacks.list.in │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── set_handlers.tpl │ │ ├── header_ops │ │ │ ├── CMakeLists.txt │ │ │ ├── cache.data │ │ │ ├── cache_update.data │ │ │ ├── create.data │ │ │ ├── parse.data │ │ │ ├── rebuild.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── set_handlers.tpl │ │ ├── napi │ │ │ ├── CMakeLists.txt │ │ │ ├── __napi_schedule.data │ │ │ ├── netif_napi_add.data │ │ │ ├── netif_napi_del.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ ├── net_device_ops │ │ │ ├── CMakeLists.txt │ │ │ ├── ndo_add_slave.data │ │ │ ├── ndo_add_vxlan_port.data │ │ │ ├── ndo_bridge_dellink.data │ │ │ ├── ndo_bridge_getlink.data │ │ │ ├── ndo_bridge_setlink.data │ │ │ ├── ndo_busy_poll.data │ │ │ ├── ndo_change_carrier.data │ │ │ ├── ndo_change_mtu.data │ │ │ ├── ndo_change_rx_flags.data │ │ │ ├── ndo_del_slave.data │ │ │ ├── ndo_del_vxlan_port.data │ │ │ ├── ndo_dfwd_add_station.data │ │ │ ├── ndo_dfwd_del_station.data │ │ │ ├── ndo_dfwd_start_xmit.data │ │ │ ├── ndo_do_ioctl.data │ │ │ ├── ndo_fcoe_ddp_done.data │ │ │ ├── ndo_fcoe_ddp_setup.data │ │ │ ├── ndo_fcoe_ddp_target.data │ │ │ ├── ndo_fcoe_disable.data │ │ │ ├── ndo_fcoe_enable.data │ │ │ ├── ndo_fcoe_get_hbainfo.data │ │ │ ├── ndo_fcoe_get_wwn.data │ │ │ ├── ndo_fdb_add.data │ │ │ ├── ndo_fdb_del.data │ │ │ ├── ndo_fdb_dump.data │ │ │ ├── ndo_fix_features.data │ │ │ ├── ndo_get_phys_port_id.data │ │ │ ├── ndo_get_stats.data │ │ │ ├── ndo_get_stats64.data │ │ │ ├── ndo_get_vf_config.data │ │ │ ├── ndo_get_vf_port.data │ │ │ ├── ndo_init.data │ │ │ ├── ndo_neigh_construct.data │ │ │ ├── ndo_neigh_destroy.data │ │ │ ├── ndo_neigh_setup.data │ │ │ ├── ndo_netpoll_cleanup.data │ │ │ ├── ndo_netpoll_setup.data │ │ │ ├── ndo_open.data │ │ │ ├── ndo_poll_controller.data │ │ │ ├── ndo_rx_flow_steer.data │ │ │ ├── ndo_select_queue.data │ │ │ ├── ndo_set_config.data │ │ │ ├── ndo_set_features.data │ │ │ ├── ndo_set_mac_address.data │ │ │ ├── ndo_set_multicast_list.data │ │ │ ├── ndo_set_rx_mode.data │ │ │ ├── ndo_set_vf_link_state.data │ │ │ ├── ndo_set_vf_mac.data │ │ │ ├── ndo_set_vf_port.data │ │ │ ├── ndo_set_vf_spoofchk.data │ │ │ ├── ndo_set_vf_tx_rate.data │ │ │ ├── ndo_set_vf_vlan.data │ │ │ ├── ndo_setup_tc.data │ │ │ ├── ndo_start_xmit.data │ │ │ ├── ndo_stop.data │ │ │ ├── ndo_tx_timeout.data │ │ │ ├── ndo_uninit.data │ │ │ ├── ndo_validate_addr.data │ │ │ ├── ndo_vlan_rx_add_vid.data │ │ │ ├── ndo_vlan_rx_kill_vid.data │ │ │ ├── ndo_vlan_rx_register.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── set_handlers.tpl │ │ ├── netdev │ │ │ ├── CMakeLists.txt │ │ │ ├── alloc_etherdev_mq.data │ │ │ ├── alloc_etherdev_mqs.data │ │ │ ├── alloc_netdev_mq.data │ │ │ ├── alloc_netdev_mqs.data │ │ │ ├── free_netdev.data │ │ │ ├── register_netdev.data │ │ │ ├── register_netdevice.data │ │ │ ├── templates │ │ │ │ ├── block │ │ │ │ │ ├── block.tpl │ │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ │ ├── document.tpl │ │ │ │ │ └── handlerItem.tpl │ │ │ ├── unregister_netdev.data │ │ │ ├── unregister_netdevice_many.data │ │ │ └── unregister_netdevice_queue.data │ │ ├── rtnl │ │ │ ├── CMakeLists.txt │ │ │ ├── __rtnl_link_register.data │ │ │ ├── __rtnl_link_unregister.data │ │ │ ├── rtnl_link_ops │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── changelink.data │ │ │ │ ├── dellink.data │ │ │ │ ├── fill_info.data │ │ │ │ ├── fill_xstats.data │ │ │ │ ├── get_num_rx_queues.data │ │ │ │ ├── get_num_tx_queues.data │ │ │ │ ├── get_size.data │ │ │ │ ├── get_tx_queues.data │ │ │ │ ├── get_xstats_size.data │ │ │ │ ├── newlink.data │ │ │ │ ├── setup.data │ │ │ │ ├── templates │ │ │ │ │ ├── block │ │ │ │ │ │ └── block.tpl │ │ │ │ │ └── document │ │ │ │ │ │ ├── document.tpl │ │ │ │ │ │ └── set_handlers.tpl │ │ │ │ └── validate.data │ │ │ ├── rtnl_link_register.data │ │ │ ├── rtnl_link_unregister.data │ │ │ ├── rtnl_lock.data │ │ │ ├── rtnl_trylock.data │ │ │ ├── rtnl_unlock.data │ │ │ └── templates │ │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ └── handlerStruct.tpl │ │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── handlerItem.tpl │ │ └── skb │ │ │ ├── CMakeLists.txt │ │ │ ├── __alloc_skb.data │ │ │ ├── __kfree_skb.data │ │ │ ├── __netdev_alloc_skb.data │ │ │ ├── __pskb_copy.data │ │ │ ├── build_skb.data │ │ │ ├── consume_skb.data │ │ │ ├── dev_alloc_skb.data │ │ │ ├── dev_kfree_skb_any.data │ │ │ ├── dev_kfree_skb_irq.data │ │ │ ├── dev_queue_xmit.data │ │ │ ├── kfree_skb.data │ │ │ ├── napi_gro_receive.data │ │ │ ├── netif_receive_skb.data │ │ │ ├── netif_rx.data │ │ │ ├── pskb_copy.data │ │ │ ├── skb_clone.data │ │ │ ├── skb_copy.data │ │ │ ├── skb_copy_expand.data │ │ │ ├── skb_queue_purge.data │ │ │ ├── skb_realloc_headroom.data │ │ │ └── templates │ │ │ ├── block │ │ │ ├── block.tpl │ │ │ └── handlerStruct.tpl │ │ │ └── document │ │ │ ├── document.tpl │ │ │ └── handlerItem.tpl │ ├── templates │ │ ├── block │ │ │ └── block.tpl │ │ └── document │ │ │ ├── add_group.tpl │ │ │ ├── declare_group.tpl │ │ │ └── document.tpl │ └── tests │ │ ├── CMakeLists.txt │ │ └── test.sh.in ├── tests │ ├── CMakeLists.txt │ ├── args │ │ ├── CMakeLists.txt │ │ ├── checker │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── provider │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── target │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── test.sh.in │ │ └── test_arg.h │ ├── callback_handlers │ │ ├── CMakeLists.txt │ │ ├── cb_user │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── checker │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── target │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ ├── test.sh.in │ │ └── test_cbh.h │ ├── handlers │ │ ├── templates │ │ │ ├── block │ │ │ │ └── block.tpl │ │ │ └── document │ │ │ │ ├── document.tpl │ │ │ │ └── triggerItem.tpl │ │ └── test.sh.in │ └── plugin_api │ │ ├── CMakeLists.txt │ │ ├── Readme.txt │ │ ├── plugin_a │ │ ├── CMakeLists.txt │ │ └── module.c │ │ ├── plugin_b │ │ ├── CMakeLists.txt │ │ └── module.c │ │ ├── plugin_c │ │ ├── CMakeLists.txt │ │ └── module.c │ │ ├── target │ │ ├── CMakeLists.txt │ │ └── module.c │ │ └── test.sh.in ├── usb │ ├── CMakeLists.txt │ ├── templates │ │ ├── block │ │ │ └── block.tpl │ │ └── document │ │ │ ├── document.tpl │ │ │ └── handlerItem.tpl │ ├── usb_deregister.data │ ├── usb_kill_anchored_urbs.data │ ├── usb_kill_urb.data │ ├── usb_poison_anchored_urbs.data │ ├── usb_poison_urb.data │ ├── usb_register_driver.data │ └── usb_submit_urb.data └── util │ ├── fh_plugin.c │ └── fh_plugin.h ├── include ├── CMakeLists.txt ├── Readme.developer.txt └── kedr │ ├── ctf_reader │ ├── ctf_context.h │ ├── ctf_hash.h │ ├── ctf_meta.h │ ├── ctf_reader.h │ ├── ctf_scope.h │ ├── ctf_tag.h │ ├── ctf_type.h │ ├── ctf_var.h │ └── ctf_var_place.h │ ├── fh_drd │ └── common.h │ ├── kedr_mem │ ├── block_info.h │ ├── core_api.h │ ├── functions.h │ └── local_storage.h │ ├── kedr_trace_reader │ └── kedr_trace_reader.h │ ├── object_types.h │ ├── output │ └── event_collector.h │ └── utils │ ├── template_parser.h │ └── uuid.h ├── lzo ├── COPYING ├── README.LZO ├── lzoconf.h ├── lzodefs.h ├── minilzo.c └── minilzo.h ├── output ├── CMakeLists.txt ├── Readme.txt ├── ctf_meta_template ├── kernel │ ├── CMakeLists.txt │ ├── determine_pointer_size.c │ ├── event_collector.c │ ├── module_param_create_use_ops.c │ ├── module_param_create_use_ops_struct.c │ ├── net_message.c │ ├── net_message.h │ ├── ring_buffer_consume_signature.c │ ├── trace_definition.h │ ├── trace_packets.c │ ├── trace_packets.h │ ├── trace_sender.c │ ├── trace_sender.h │ ├── trace_server.c │ ├── uuid_generator.c │ └── uuid_generator.h ├── tests │ ├── CMakeLists.txt │ ├── core_stub │ │ ├── CMakeLists.txt │ │ ├── core_stub.c │ │ └── core_stub_api.h │ ├── templates │ │ ├── check_events.cpp │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ ├── check_subevent.tpl │ │ │ │ └── subevent_count.tpl │ │ │ └── document │ │ │ │ ├── constant_def.tpl │ │ │ │ └── document.tpl │ │ ├── check_messages.cpp │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ ├── check_submessage.tpl │ │ │ │ └── submessage_count.tpl │ │ │ └── document │ │ │ │ ├── constant_def.tpl │ │ │ │ └── document.tpl │ │ ├── generate_events.c │ │ │ ├── block │ │ │ │ ├── block.tpl │ │ │ │ ├── generate_subevent.tpl │ │ │ │ └── subevent_count.tpl │ │ │ └── document │ │ │ │ ├── constant_def.tpl │ │ │ │ └── document.tpl │ │ └── generate_messages.c │ │ │ ├── block │ │ │ ├── block.tpl │ │ │ ├── generate_submessage.tpl │ │ │ └── submessage_count.tpl │ │ │ └── document │ │ │ ├── constant_def.tpl │ │ │ └── document.tpl │ ├── test_events │ │ ├── CMakeLists.txt │ │ ├── test.data │ │ └── test_events.sh.in │ ├── test_messages │ │ ├── CMakeLists.txt │ │ ├── test.data │ │ └── test_messages.sh.in │ └── trace_sender │ │ └── CMakeLists.txt ├── udp_packet_definition.h └── user │ ├── CMakeLists.txt │ ├── README │ ├── trace_receiver.cpp │ ├── trace_receiver.h │ ├── trace_receiver_control.cpp │ ├── trace_receiver_control_test.in │ └── trace_receiver_control_usage ├── tests ├── CMakeLists.txt ├── Readme.developer.txt ├── bug_bench │ ├── CMakeLists.txt │ ├── Readme.developer.txt │ ├── check_sample_and_buggy01.awk │ ├── test_common.sh.in │ ├── test_sample_and_buggy01.sh.in │ └── test_sample_target │ │ ├── CMakeLists.txt │ │ └── main.c ├── dummy_target │ ├── CMakeLists.txt │ └── module.c ├── sample_target │ ├── CMakeLists.txt │ ├── Kbuild.in │ ├── cfake.c │ ├── cfake.h │ ├── kedr_sample_target.in │ └── module.makefile.in └── util │ ├── Readme.developer.txt │ └── check_signal_wait.awk ├── tools ├── CMakeLists.txt └── kedr_gen │ ├── CMakeLists.txt │ ├── README │ └── src │ ├── CMakeLists.txt │ ├── Common.cpp │ ├── Common.h │ ├── Generator.cpp │ ├── Generator.h │ ├── TemplateLoader.cpp │ ├── TemplateLoader.h │ ├── ValueLoader.cpp │ ├── ValueLoader.h │ ├── main.cpp │ └── mist_engine │ ├── AUTHORS │ ├── CMakeLists.txt │ ├── ChangeLog │ ├── INSTALL │ ├── LICENSE │ ├── NEWS │ ├── README │ └── src │ ├── CMakeLists.txt │ ├── about.h │ ├── config.h.cmake │ ├── grar.c │ ├── grar.h │ ├── main.c │ ├── mist_base.c │ ├── mist_base.h │ ├── mist_engine.c │ ├── mist_engine.h.in │ ├── mist_engine.rc │ ├── mist_engine.rc.in │ ├── mist_errors.h │ ├── mist_exec.c │ ├── mist_exec.h │ ├── mist_file_utils.c │ ├── mist_file_utils.h │ ├── mist_string_utils.c │ ├── mist_string_utils.h │ ├── smap.c │ ├── smap.h │ └── versions.ldscript └── utils ├── CMakeLists.txt ├── ctf_reader ├── CMakeLists.txt ├── README ├── ctf_ast.cpp ├── ctf_ast.h ├── ctf_context.cpp ├── ctf_hash.cpp ├── ctf_meta.cpp ├── ctf_reader.cpp ├── ctf_reader_builder.cpp ├── ctf_reader_iter.cpp ├── ctf_reader_parser.h ├── ctf_reader_parser_base.tab.cc ├── ctf_reader_parser_base.tab.hh ├── ctf_reader_parser_base.yy ├── ctf_reader_scanner.h ├── ctf_reader_scanner_base.cc ├── ctf_reader_scanner_base.l ├── ctf_root_type.cpp ├── ctf_root_type.h ├── ctf_scope.cpp ├── ctf_scope.h ├── ctf_tag.cpp ├── ctf_type.cpp ├── ctf_types.cpp ├── ctf_var.cpp ├── ctf_var_place.cpp ├── layout_support.cpp ├── location.hh ├── position.hh ├── stack.hh └── tests │ ├── CMakeLists.txt │ ├── iterator_meta │ ├── CMakeLists.txt │ ├── metadata │ └── test.cpp │ ├── iterators_normal │ ├── CMakeLists.txt │ ├── data1 │ ├── data2 │ ├── data3 │ ├── metadata1 │ ├── metadata2 │ ├── metadata3 │ └── test.cpp │ └── var_types │ ├── CMakeLists.txt │ └── test.cpp ├── for_tsan ├── CMakeLists.txt ├── addr2line │ ├── CMakeLists.txt │ ├── README │ ├── resolver_addr2line.cpp │ ├── text_streamed_converter.h │ ├── tsan_report_addr2line │ └── tsan_report_processor.c ├── kedr_show_target_sections.sh ├── kedr_show_target_symbols.sh ├── process_trace │ ├── CMakeLists.txt │ ├── config_process_trace.h.in │ ├── main.cpp │ ├── module_info.cpp │ ├── module_info.h │ ├── process_trace.h │ ├── rc_ptr.h │ ├── tests │ │ ├── CMakeLists.txt │ │ └── init_not_first │ │ │ ├── CMakeLists.txt │ │ │ ├── target │ │ │ ├── CMakeLists.txt │ │ │ └── module.c │ │ │ └── test.sh.in │ ├── trace_processor.cpp │ └── trace_processor.h └── symbolize │ ├── CMakeLists.txt │ ├── config.h.in │ ├── main.cpp │ ├── report_processor.cpp │ ├── report_processor.h │ ├── symbol_info.cpp │ └── symbol_info.h ├── kedr.py.in ├── kedr_trace_reader ├── CMakeLists.txt ├── README └── kedr_trace_reader.cpp └── simple_trace_recorder ├── CMakeLists.txt ├── Readme.txt ├── kedr_st_rec_config.h.in ├── kernel ├── CMakeLists.txt └── module.c ├── recorder.h ├── tests ├── CMakeLists.txt ├── buffer_wrap │ ├── CMakeLists.txt │ ├── output_user │ │ └── CMakeLists.txt │ └── test_buffer_wrap.sh.in ├── event_gen │ ├── CMakeLists.txt │ └── module.c ├── expected32.txt ├── expected64.txt ├── multiple_targets │ ├── CMakeLists.txt │ ├── output_user │ │ └── CMakeLists.txt │ └── test_multi.sh.in ├── output_kernel │ └── CMakeLists.txt ├── output_user │ └── CMakeLists.txt ├── test.sh.in └── trace_to_text │ ├── CMakeLists.txt │ └── converter.cpp └── user ├── CMakeLists.txt └── recorder.c /devel/daily_builds/Readme.txt: -------------------------------------------------------------------------------- 1 | See also: 2 | http://code.google.com/p/kedr/source/browse/?repo=aux#hg%2Fdaily_builds 3 | Take all other necessary files from there. 4 | -------------------------------------------------------------------------------- /devel/examples/Readme.txt: -------------------------------------------------------------------------------- 1 | Here are the prototypes, examples, code snippets and other stuff used to 2 | experiment with the ideas how one or another thing should work in the 3 | system. 4 | 5 | These are mainly indended for the developers of Kernel Strider or similar 6 | systems rather than for the end users. 7 | -------------------------------------------------------------------------------- /devel/examples/address_filters/Readme.txt: -------------------------------------------------------------------------------- 1 | An example to demonstrate how to determine if and address belongs to 2 | the stack or to the user-space memory. See is_stack_address() and 3 | is_user_space_address() in cfake.c for details. 4 | 5 | Build: 6 | make 7 | 8 | Usage: 9 | kedr_sample_target load 10 | echo "asdasdasda" > /dev/cfake0 11 | dmesg | less # see the items marked with "[DBG]" 12 | kedr_sample_target unload 13 | -------------------------------------------------------------------------------- /devel/examples/address_filters/cfake.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/devel/examples/address_filters/cfake.h -------------------------------------------------------------------------------- /devel/examples/asm-offsets/Makefile: -------------------------------------------------------------------------------- 1 | OFFSETS_HEADER := kedr_asm_offsets.h 2 | 3 | KBUILD_DIR ?= /lib/modules/$(shell uname -r)/build 4 | PWD := $(shell pwd) 5 | 6 | HEADERS = functions.h local_storage.h 7 | 8 | all: $(OFFSETS_HEADER) 9 | 10 | $(OFFSETS_HEADER): kedr_asm_offsets.c Kbuild $(HEADERS) 11 | $(MAKE) -C $(KBUILD_DIR) M=$(PWD) 12 | 13 | clean: 14 | $(MAKE) -C $(KBUILD_DIR) M=$(PWD) clean 15 | 16 | .PHONY: all clean 17 | -------------------------------------------------------------------------------- /devel/examples/asm-offsets/Readme.txt: -------------------------------------------------------------------------------- 1 | An example to demonstrate how to create a list of definitions of the field 2 | offsets into structures in a header file. The file can then be used even 3 | from the assembly code. 4 | 5 | This example is based on what is done in the kernel itself (as of version 6 | 3.3.0), see the top-level Kbuild file, generation of asm-offsets.h. 7 | 8 | Build: 9 | make 10 | 11 | Results: 12 | see kedr_asm_offsets.h 13 | -------------------------------------------------------------------------------- /devel/examples/call_inline/Kbuild: -------------------------------------------------------------------------------- 1 | module_name=kedr_sample_target 2 | 3 | ccflags-y := -g -I$(src) 4 | obj-m := ${module_name}.o 5 | ${module_name}-y := cfake.o 6 | -------------------------------------------------------------------------------- /devel/examples/call_inline/Readme.txt: -------------------------------------------------------------------------------- 1 | This example demonstrates "insertion" of function call into another function (statically, with the inline assembly block). See CFAKE_* macros before cfake_open() as well as my_sensor_func() and cfake_open() itself. 2 | 3 | Usage: 4 | #> ./kedr_sample_target load 5 | #> echo 123456 > /dev/cfake0 6 | 7 | After that, see the messages in the system log. 8 | -------------------------------------------------------------------------------- /devel/examples/call_inline/cfake.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/devel/examples/call_inline/cfake.h -------------------------------------------------------------------------------- /devel/examples/call_inline/makefile: -------------------------------------------------------------------------------- 1 | module_name=kedr_sample_target 2 | 3 | KBUILD_DIR=/lib/modules/`uname -r`/build 4 | PWD=`pwd` 5 | 6 | all: ${module_name}.ko 7 | 8 | ${module_name}.ko: cfake.c 9 | $(MAKE) -C ${KBUILD_DIR} M=${PWD} modules 10 | 11 | clean: 12 | $(MAKE) -C ${KBUILD_DIR} M=${PWD} clean 13 | 14 | .PHONY: all clean 15 | -------------------------------------------------------------------------------- /devel/kernel_patches/Readme.txt: -------------------------------------------------------------------------------- 1 | Here are the patches to the respective kernel versions that add support for 2 | KEDR annotations. 3 | 4 | Note that the annotations are not enabled by default. To enable them, 5 | set CONFIG_KEDR_ANNOTATIONS=y ("Enable annotations to make KEDR tools more 6 | accurate" in "Kernel Hacking" section of the kernel configuration) and 7 | rebuild the kernel. 8 | -------------------------------------------------------------------------------- /devel/tsan-features/README: -------------------------------------------------------------------------------- 1 | Investigation of some ThreadSanitizer event types(in offline trace) and 2 | conclusions. 3 | 4 | Tsan traces are grouped by event type under investigate. 5 | -------------------------------------------------------------------------------- /devel/tsan-features/lock/classic: -------------------------------------------------------------------------------- 1 | # Writes under lock are not races. 2 | 3 | THR_START 0 0 0 0 4 | 5 | THR_START 1 0 0 0 6 | 7 | WRITER_LOCK 1 1000 20000 0 8 | SBLOCK_ENTER 1 1010 0 0 9 | WRITE 1 1010 10000 4 10 | UNLOCK 1 1020 20000 0 11 | 12 | THR_START 2 0 0 0 13 | 14 | WRITER_LOCK 2 2000 20000 0 15 | SBLOCK_ENTER 2 2010 0 0 16 | WRITE 2 2010 10000 4 17 | UNLOCK 2 2020 20000 0 18 | -------------------------------------------------------------------------------- /devel/tsan-features/malloc/classic: -------------------------------------------------------------------------------- 1 | # Memory accesses are not race if they interleaved by malloc which allocate 2 | # addresses range which accessed(no race here). 3 | 4 | THR_START 0 0 0 0 5 | 6 | THR_START 1 0 0 0 7 | MALLOC 1 1000 10000 10 8 | SBLOCK_ENTER 1 1010 0 0 9 | WRITE 1 1020 10000 4 10 | FREE 1 1000 10000 0 11 | 12 | THR_START 2 0 0 0 13 | MALLOC 2 2000 10000 10 14 | SBLOCK_ENTER 2 1010 0 0 15 | WRITE 2 1020 10000 4 16 | FREE 2 1000 10000 0 17 | -------------------------------------------------------------------------------- /devel/tsan-features/signals/classic: -------------------------------------------------------------------------------- 1 | # Signal-wait create happens-before arc(no race here). 2 | 3 | THR_START 0 0 0 0 4 | 5 | THR_START 1 0 0 0 6 | SBLOCK_ENTER 1 1000 0 0 7 | WRITE 1 1000 10000 4 8 | SIGNAL 1 1010 20000 0 9 | 10 | THR_START 2 0 0 0 11 | SBLOCK_ENTER 2 2000 0 0 12 | WAIT 2 2000 20000 0 13 | WRITE 2 2010 10000 4 14 | -------------------------------------------------------------------------------- /devel/util/for_tsan/symbolize/config.h.in: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H_SYMBOLIZE_1021_INCLUDED 2 | #define CONFIG_H_SYMBOLIZE_1021_INCLUDED 3 | 4 | #define PROJECT_APP_NAME "@PROJECT_NAME@" 5 | 6 | #endif //CONFIG_H_SYMBOLIZE_1021_INCLUDED 7 | -------------------------------------------------------------------------------- /sources/AUTHORS: -------------------------------------------------------------------------------- 1 | Kernel Strider system is developed by: 2 | 3 | Eugene A. Shatokhin 4 | Andrey V. Tsyvarev 5 | -------------------------------------------- 6 | -------------------------------------------------------------------------------- /sources/cmake/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This part is based on what is used in KEDR project. We should strive to 4 | keep it as close to the relevant part of the KEDR sources as possible to 5 | simplify maintenance. 6 | 7 | If it is decided to merge the two project in the future, it will be easier 8 | to perform if these parts have little or no difference. 9 | -------------------------------------------------------------------------------- /sources/cmake/kmodule_sources/check_random32/module.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | MODULE_LICENSE("GPL"); 7 | 8 | static int __init 9 | my_init(void) 10 | { 11 | return (int)random32(); 12 | } 13 | 14 | static void __exit 15 | my_exit(void) 16 | { 17 | } 18 | 19 | module_init(my_init); 20 | module_exit(my_exit); 21 | -------------------------------------------------------------------------------- /sources/cmake/kmodule_sources/check_unreliable_functions/README: -------------------------------------------------------------------------------- 1 | This directory contains source files with names having the following format: 2 | ${f}.c. Each of the files is used in try-compile procedure to determine 3 | whether function 'f' exists in the kernel. Usually such kernel module 4 | contains the code using this function directly or indirectly. 5 | 6 | The list of these files is hard-coded in the cmake module as 7 | 'unreliable_functions_list'. 8 | -------------------------------------------------------------------------------- /sources/cmake/modules/kbuild_system_files/Kbuild.in: -------------------------------------------------------------------------------- 1 | ${cflags_string} 2 | ${obj_string} 3 | ${obj_src_string} -------------------------------------------------------------------------------- /sources/cmake/modules/kbuild_system_files/Kbuild_object.in: -------------------------------------------------------------------------------- 1 | ${cflags_string} 2 | ${objects_string} -------------------------------------------------------------------------------- /sources/cmake/modules/kmodule_files/Kbuild.in: -------------------------------------------------------------------------------- 1 | ccflags-y := @kmodule_flags@ 2 | 3 | obj-m := try_compile.o 4 | -------------------------------------------------------------------------------- /sources/cmake/other_sources/libelf_check.c: -------------------------------------------------------------------------------- 1 | #include 2 | int main() 3 | { 4 | if(elf_version(EV_CURRENT) == EV_NONE) 5 | { 6 | return 1; 7 | } 8 | return 0; 9 | } -------------------------------------------------------------------------------- /sources/converter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # TODO 2 | add_subdirectory(simple) 3 | 4 | add_subdirectory(tsan) 5 | ######################################################################## 6 | 7 | # Tests 8 | kedr_test_add_subdirectory(tests) 9 | ######################################################################## 10 | -------------------------------------------------------------------------------- /sources/converter/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This part is for the user-space components of the system that are 4 | responsible for converting the information about the module under analysis 5 | to the appropriate formats. 6 | 7 | One example format is that is accepted by the offline version of 8 | ThreadSanitizer. 9 | -------------------------------------------------------------------------------- /sources/converter/simple/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(executable_name "kedr_trace_converter_simple") 2 | 3 | add_executable(${executable_name} 4 | "converter.cpp") 5 | 6 | target_link_libraries(${executable_name} ${kedr_trace_reader_name}) 7 | 8 | install(TARGETS "${executable_name}" 9 | DESTINATION "${KEDR_INSTALL_PREFIX_EXEC}") 10 | -------------------------------------------------------------------------------- /sources/converter/simple/README: -------------------------------------------------------------------------------- 1 | Simple converter of binary trace, generated by kernel-strider, into 2 | human readable form. 3 | 4 | Usage: 5 | 6 | ./kedr_trace_converter_simple 7 | 8 | Converted trace will be output into stdout. -------------------------------------------------------------------------------- /sources/converter/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | ######################################################################## 4 | -------------------------------------------------------------------------------- /sources/core/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This part is for the main kernel module components of Kernel Strider system. 4 | 5 | During the build, some of the the sources will probably be copied from 6 | other directories to the build directory corresponding to this one. 7 | -------------------------------------------------------------------------------- /sources/core/annotations/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_install_prefixes() 2 | set(KEDR_ANN_FILES_DIR "${KEDR_INSTALL_PREFIX_READONLY}/annotations") 3 | 4 | install(FILES 5 | "${CMAKE_CURRENT_SOURCE_DIR}/kedr_annotations.c" 6 | "${CMAKE_CURRENT_SOURCE_DIR}/kedr_annotations.h" 7 | DESTINATION "${KEDR_ANN_FILES_DIR}" 8 | ) 9 | 10 | kedr_test_add_subdirectory(tests) 11 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(load_unload) 2 | add_subdirectory(calls) 3 | add_subdirectory(events) 4 | ######################################################################## 5 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/calls/expected/x86-32/calls_jumps2_jcc_short.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_calls_jumps2_jcc_short" 2 | CALL_PRE pc=kedr_test_calls_jumps2_jcc_short+0x4 name="kedr_test_calls_jumps2_aux2" 3 | FENTRY name="kedr_test_calls_jumps2_aux2" 4 | FEXIT name="kedr_test_calls_jumps2_aux2" 5 | CALL_POST pc=kedr_test_calls_jumps2_jcc_short+0x4 name="kedr_test_calls_jumps2_aux2" 6 | FEXIT name="kedr_test_calls_jumps2_jcc_short" 7 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/calls/expected/x86-32/calls_jumps2_jmp_short.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_calls_jumps2_jmp_short" 2 | CALL_PRE pc=kedr_test_calls_jumps2_jmp_short+0x6 name="kedr_test_calls_jumps2_aux1" 3 | FENTRY name="kedr_test_calls_jumps2_aux1" 4 | FEXIT name="kedr_test_calls_jumps2_aux1" 5 | CALL_POST pc=kedr_test_calls_jumps2_jmp_short+0x6 name="kedr_test_calls_jumps2_aux1" 6 | FEXIT name="kedr_test_calls_jumps2_jmp_short" 7 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/calls/expected/x86-64/calls_jumps2_jcc_short.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_calls_jumps2_jcc_short" 2 | CALL_PRE pc=kedr_test_calls_jumps2_jcc_short+0x6 name="kedr_test_calls_jumps2_aux2" 3 | FENTRY name="kedr_test_calls_jumps2_aux2" 4 | FEXIT name="kedr_test_calls_jumps2_aux2" 5 | CALL_POST pc=kedr_test_calls_jumps2_jcc_short+0x6 name="kedr_test_calls_jumps2_aux2" 6 | FEXIT name="kedr_test_calls_jumps2_jcc_short" 7 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/calls/expected/x86-64/calls_jumps2_jmp_short.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_calls_jumps2_jmp_short" 2 | CALL_PRE pc=kedr_test_calls_jumps2_jmp_short+0x6 name="kedr_test_calls_jumps2_aux1" 3 | FENTRY name="kedr_test_calls_jumps2_aux1" 4 | FEXIT name="kedr_test_calls_jumps2_aux1" 5 | CALL_POST pc=kedr_test_calls_jumps2_jmp_short+0x6 name="kedr_test_calls_jumps2_aux1" 6 | FEXIT name="kedr_test_calls_jumps2_jmp_short" 7 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/data_symbols.txt: -------------------------------------------------------------------------------- 1 | kedr_test_array_cte01 2 | kedr_test_array_ms01 3 | kedr_test_strings01 4 | kedr_test_strings02 5 | kedr_test_strings03 6 | kedr_test_array_lu01 7 | kedr_test_array_bm01 8 | kedr_test_array_sa01 -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-32/mem_special_xlat_bx.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_mem_special_xlat_bx" 2 | READ pc=kedr_test_mem_special_xlat_bx+0x33 addr=kedr_test_array_ms01+0x2 size=1 3 | FEXIT name="kedr_test_mem_special_xlat_bx" 4 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-32/stack_access.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_access" 2 | READ pc=kedr_test_stack_access+0xc addr=kedr_test_array_sa01+0x0 size=4 3 | READ pc=kedr_test_stack_access+0xe addr=kedr_test_array_sa01+0x8 size=4 4 | FEXIT name="kedr_test_stack_access" 5 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-32/stack_access_with_stack.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_access" 2 | READ pc=kedr_test_stack_access+0x4 addr=0x0 size=4 3 | READ pc=kedr_test_stack_access+0xc addr=kedr_test_array_sa01+0x0 size=4 4 | READ pc=kedr_test_stack_access+0xe addr=kedr_test_array_sa01+0x8 size=4 5 | FEXIT name="kedr_test_stack_access" 6 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-64/mem_special_xlat_bx.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_mem_special_xlat_bx" 2 | READ pc=kedr_test_mem_special_xlat_bx+0x7a addr=kedr_test_array_ms01+0x2 size=1 3 | FEXIT name="kedr_test_mem_special_xlat_bx" 4 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-64/stack_access.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_access" 2 | READ pc=kedr_test_stack_access+0x10 addr=kedr_test_array_sa01+0x0 size=8 3 | READ pc=kedr_test_stack_access+0x13 addr=kedr_test_array_sa01+0x8 size=8 4 | FEXIT name="kedr_test_stack_access" 5 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/events/expected/x86-64/stack_access_with_stack.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_access" 2 | READ pc=kedr_test_stack_access+0x5 addr=0x0 size=8 3 | READ pc=kedr_test_stack_access+0x10 addr=kedr_test_array_sa01+0x0 size=8 4 | READ pc=kedr_test_stack_access+0x13 addr=kedr_test_array_sa01+0x8 size=8 5 | FEXIT name="kedr_test_stack_access" 6 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/load_unload/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | configure_file ( 2 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 3 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 4 | @ONLY 5 | ) 6 | 7 | kedr_test_add_script (mem_core.callbacks.load_unload.01 8 | test.sh 9 | ) 10 | 11 | add_subdirectory (test_module) 12 | -------------------------------------------------------------------------------- /sources/core/tests/callbacks/load_unload/test_module/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TEST_NAME "test_load_unload") 2 | 3 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 4 | kbuild_add_module(${KMODULE_TEST_NAME} 5 | "module.c") 6 | 7 | kedr_test_add_target (${KMODULE_TEST_NAME}) 8 | -------------------------------------------------------------------------------- /sources/core/tests/debug_util/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | The source files providing debugging utility interfaces like the convenient 2 | means to output the data via debugfs, etc., that can be used by different 3 | tests. 4 | These sources need not be built here. It is usually easier to compile them 5 | into the corresponding kernel modules or applications. 6 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/ir_create/expected/x86-32/barriers_cpuid.txt: -------------------------------------------------------------------------------- 1 | IR: 2 | Block (type: 2) 3 | 0x0: 55 4 | 5 | 0x1: 89 e5 6 | 7 | 0x3: 53 8 | 9 | 0x4: b8 01 00 00 00 10 | 11 | Block (type: 6) 12 | Barrier of type 0 13 | 0x9: 0f a2 14 | 15 | Block (type: 2) 16 | 0xb: 5b 17 | 18 | 0xc: 5d 19 | 20 | Block (type: 12) 21 | 0xd: c3 22 | 23 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/ir_create/expected/x86-32/disp32_iprel.txt: -------------------------------------------------------------------------------- 1 | IR: 2 | Block (type: 3) 3 | Block info: 4 | max_events = 2 5 | read_mask = 0x3 6 | write_mask = 0x0 7 | string_mask = 0x0 8 | events: 9 | (0x3, 4) 10 | (0x11, 4) 11 | 0x0: 55 12 | 13 | 0x1: 89 e5 14 | 15 | 0x3: 8b 15 0f d0 ad 6a 16 | 17 | 0x9: 31 c0 18 | 19 | 0xb: 8d 15 0d f0 af 6e 20 | 21 | 0x11: 8b 02 22 | 23 | 0x13: 5d 24 | 25 | Block (type: 12) 26 | 0x14: c3 27 | 28 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/ir_create/expected/x86-64/barriers_cpuid.txt: -------------------------------------------------------------------------------- 1 | IR: 2 | Block (type: 2) 3 | 0x0: 55 4 | 5 | 0x1: 48 89 e5 6 | 7 | 0x4: 53 8 | 9 | 0x5: 48 c7 c0 01 00 00 00 10 | 11 | Block (type: 6) 12 | Barrier of type 0 13 | 0xc: 0f a2 14 | 15 | Block (type: 2) 16 | 0xe: 5b 17 | 18 | 0xf: 5d 19 | 20 | Block (type: 12) 21 | 0x10: c3 22 | 23 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/ir_create/expected/x86-64/disp32_iprel.txt: -------------------------------------------------------------------------------- 1 | IR: 2 | Block (type: 3) 3 | Block info: 4 | max_events = 2 5 | read_mask = 0x3 6 | write_mask = 0x0 7 | string_mask = 0x0 8 | events: 9 | (0x4, 8) 10 | (0x15, 8) 11 | 0x0: 55 12 | 13 | 0x1: 48 89 e5 14 | 15 | 0x4: 48 8b 15 00 00 00 00 16 | 17 | 0xb: 48 31 c0 18 | 19 | 0xe: 48 8d 15 00 00 00 00 20 | 21 | 0x15: 48 8b 02 22 | 23 | 0x18: 5d 24 | 25 | Block (type: 12) 26 | 0x19: c3 27 | 28 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/ir_create/target_split_func/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # A module with a split function. The instrumentation system should 2 | # detect that. 3 | set(KMODULE_TARGET_NAME "test_ir_create_split_func") 4 | 5 | kbuild_add_module(${KMODULE_TARGET_NAME} 6 | "module.c" 7 | 8 | # Assembly sources with the functions to be used for testing 9 | "${KEDR_TEST_ASM_DIR}/split_func.S" 10 | ) 11 | 12 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 13 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/null_alloc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_NAME "kedr_null_alloc") 2 | set(TOP_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include/kedr") 3 | 4 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 5 | kbuild_add_module(${KMODULE_NAME} 6 | # sources 7 | "module.c" 8 | 9 | # headers 10 | "${TOP_INCLUDE_DIR}/kedr_mem/local_storage.h" 11 | ) 12 | 13 | kedr_test_add_target (${KMODULE_NAME}) 14 | -------------------------------------------------------------------------------- /sources/core/tests/i13n/target_jtable/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "target_jtable_basic") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/ls_allocator/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | configure_file ( 2 | "${CMAKE_CURRENT_SOURCE_DIR}/test_basics.sh.in" 3 | "${CMAKE_CURRENT_BINARY_DIR}/test_basics.sh" 4 | @ONLY 5 | ) 6 | 7 | kedr_test_add_script (mem_core.ls_allocator.01 8 | test_basics.sh 9 | ) 10 | 11 | add_subdirectory (test_module) 12 | -------------------------------------------------------------------------------- /sources/core/tests/ls_allocator/test_module/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TEST_NAME "test_ls_allocator") 2 | 3 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 4 | kbuild_add_module(${KMODULE_TEST_NAME} 5 | "module.c") 6 | 7 | kedr_test_add_target (${KMODULE_TEST_NAME}) 8 | -------------------------------------------------------------------------------- /sources/core/tests/module_ms_alloc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | configure_file ( 2 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 3 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 4 | @ONLY 5 | ) 6 | 7 | kedr_test_add_script (mem_core.module_ms_alloc.01 8 | test.sh 9 | ) 10 | 11 | add_subdirectory (test_module) 12 | -------------------------------------------------------------------------------- /sources/core/tests/multiple_targets/kedr_multi_a/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "kedr_multi_a") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/multiple_targets/some_multi_a/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "some_multi_a") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/multiple_targets/some_multi_b/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "some-multi_b") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/multiple_targets/test_multi_a/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "test_multi_a") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/no_code/test_no_code/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "test_no_code") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/providers/test_eh/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TEST_NAME "test_eh") 2 | 3 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 4 | kbuild_add_module(${KMODULE_TEST_NAME} 5 | "module.c") 6 | 7 | kedr_test_add_target (${KMODULE_TEST_NAME}) 8 | -------------------------------------------------------------------------------- /sources/core/tests/providers/test_ls_alloc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TEST_NAME "test_ls_alloc") 2 | 3 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 4 | kbuild_add_module(${KMODULE_TEST_NAME} 5 | "module.c") 6 | 7 | kedr_test_add_target (${KMODULE_TEST_NAME}) 8 | -------------------------------------------------------------------------------- /sources/core/tests/recursion/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | set (KEDR_TEST_TEMP_DIR "${KEDR_TEST_PREFIX_TEMP}/recursion") 3 | 4 | configure_file ( 5 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 6 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 7 | @ONLY 8 | ) 9 | 10 | kedr_test_add_script (mem_core.recursion.01 11 | test.sh 12 | ) 13 | 14 | add_subdirectory(test_recursion) 15 | ######################################################################## 16 | -------------------------------------------------------------------------------- /sources/core/tests/recursion/test_recursion/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "test_recursion") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/core/tests/reg_unreg/test_module/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TEST_NAME "test_reg_unreg") 2 | 3 | kbuild_use_symbols("${CMAKE_BINARY_DIR}/core/Module.symvers") 4 | kbuild_add_module(${KMODULE_TEST_NAME} 5 | "module.c") 6 | 7 | kedr_test_add_target (${KMODULE_TEST_NAME}) 8 | -------------------------------------------------------------------------------- /sources/core/tests/sampling/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | configure_file ( 2 | "${CMAKE_CURRENT_SOURCE_DIR}/test_shallow.sh.in" 3 | "${CMAKE_CURRENT_BINARY_DIR}/test_shallow.sh" 4 | @ONLY 5 | ) 6 | 7 | kedr_test_add_script (mem_core.sampling.shallow.01 8 | test_shallow.sh 9 | ) 10 | -------------------------------------------------------------------------------- /sources/core/tests/sections/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KEDR_MEM_CORE_DEBUGFS_DIR "kedr_test_sections") 2 | 3 | configure_file ( 4 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 5 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 6 | @ONLY 7 | ) 8 | 9 | kedr_test_add_script (mem_core.sections.01 10 | test.sh 11 | ) 12 | 13 | add_subdirectory (test_module) 14 | -------------------------------------------------------------------------------- /sources/core/tests/stack_on_call/expected/x86-32/stack_on_call.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_on_call" 2 | CALL_PRE pc=kedr_test_stack_on_call+0xa name="kedr_test_stack_func" 3 | FENTRY name="kedr_test_stack_func" 4 | FEXIT name="kedr_test_stack_func" 5 | CALL_POST pc=kedr_test_stack_on_call+0xa name="kedr_test_stack_func" 6 | FEXIT name="kedr_test_stack_on_call" 7 | -------------------------------------------------------------------------------- /sources/core/tests/stack_on_call/expected/x86-64/stack_on_call.txt: -------------------------------------------------------------------------------- 1 | FENTRY name="kedr_test_stack_on_call" 2 | CALL_PRE pc=kedr_test_stack_on_call+0x12 name="kedr_test_stack_func" 3 | FENTRY name="kedr_test_stack_func" 4 | FEXIT name="kedr_test_stack_func" 5 | CALL_POST pc=kedr_test_stack_on_call+0x12 name="kedr_test_stack_func" 6 | FEXIT name="kedr_test_stack_on_call" 7 | -------------------------------------------------------------------------------- /sources/core/tests/stack_on_call/target/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_NAME "${TEST_TARGET_NAME}") 2 | 3 | if (KEDR_64_BIT) 4 | set(TEST_ASM_FILE "test_stack_64.S") 5 | else () 6 | set(TEST_ASM_FILE "test_stack_32.S") 7 | endif () 8 | 9 | kbuild_add_module(${KMODULE_NAME} 10 | "module.c" 11 | "${TEST_ASM_FILE}" 12 | ) 13 | 14 | kedr_test_add_target (${KMODULE_NAME}) 15 | -------------------------------------------------------------------------------- /sources/core/tests/util/compare_files.awk: -------------------------------------------------------------------------------- 1 | #!/bin/awk -f 2 | 3 | # For each line of input... 4 | { 5 | if (tolower($1) != tolower($2)) { 6 | printf("Mismatch: expected \"%s\", found \"%s\"\n", $1, $2) 7 | exit 1 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /sources/examples/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_install_prefixes() 2 | 3 | # The path where the examples will be installed 4 | set (KEDR_EXAMPLE_PATH "${KEDR_INSTALL_PREFIX_EXAMPLES}") 5 | 6 | add_subdirectory(buggy01) 7 | add_subdirectory(buggy01_annotated) 8 | add_subdirectory(test_buggy01) 9 | -------------------------------------------------------------------------------- /sources/examples/buggy01/Kbuild.in: -------------------------------------------------------------------------------- 1 | MODULE_NAME := @KMODULE_NAME@ 2 | 3 | ccflags-y := -g 4 | obj-m := $(MODULE_NAME).o 5 | $(MODULE_NAME)-y := module.o 6 | 7 | -------------------------------------------------------------------------------- /sources/examples/buggy01/makefile_installed.in: -------------------------------------------------------------------------------- 1 | MODULE_NAME := @KMODULE_NAME@ 2 | KERNELDIR ?= /lib/modules/$(shell uname -r)/build 3 | PWD := $(shell pwd) 4 | 5 | all: $(MODULE_NAME).ko 6 | 7 | $(MODULE_NAME).ko: module.c 8 | $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 9 | 10 | clean: 11 | $(MAKE) -C $(KERNELDIR) M=$(PWD) clean 12 | 13 | .PHONY: all clean 14 | -------------------------------------------------------------------------------- /sources/examples/buggy01_annotated/Kbuild.in: -------------------------------------------------------------------------------- 1 | MODULE_NAME := @KMODULE_NAME@ 2 | 3 | ccflags-y := -g -DCONFIG_KEDR_ANNOTATIONS=1 -I$(src) 4 | obj-m := $(MODULE_NAME).o 5 | $(MODULE_NAME)-y := module.o kedr_annotations.o 6 | 7 | -------------------------------------------------------------------------------- /sources/examples/buggy01_annotated/Kbuild_annotations_in_kernel.in: -------------------------------------------------------------------------------- 1 | MODULE_NAME := @KMODULE_NAME@ 2 | 3 | ccflags-y := -g -I$(src) 4 | obj-m := $(MODULE_NAME).o 5 | $(MODULE_NAME)-y := module.o 6 | 7 | -------------------------------------------------------------------------------- /sources/examples/buggy01_annotated/makefile_installed.in: -------------------------------------------------------------------------------- 1 | MODULE_NAME := @KMODULE_NAME@ 2 | KERNELDIR ?= /lib/modules/$(shell uname -r)/build 3 | PWD := $(shell pwd) 4 | 5 | all: $(MODULE_NAME).ko 6 | 7 | $(MODULE_NAME).ko: module.c kedr_annotations.c kedr_annotations.h 8 | $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 9 | 10 | clean: 11 | $(MAKE) -C $(KERNELDIR) M=$(PWD) clean 12 | 13 | .PHONY: all clean 14 | -------------------------------------------------------------------------------- /sources/examples/test_buggy01/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(APP_NAME "test_buggy01") 2 | 3 | install(FILES 4 | "${CMAKE_CURRENT_SOURCE_DIR}/test_buggy01.c" 5 | DESTINATION "${KEDR_EXAMPLE_PATH}/${APP_NAME}" 6 | ) 7 | 8 | # Build the application to be used in the tests. This will test it too, 9 | # implicitly. 10 | add_executable("${APP_NAME}" 11 | test_buggy01.c 12 | ) 13 | kedr_test_add_target(${APP_NAME}) 14 | -------------------------------------------------------------------------------- /sources/functions/cdev/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/group.list.in: -------------------------------------------------------------------------------- 1 | [group] 2 | @KEDR_FH_GROUP_LIST@ 3 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/__alloc_pages_nodemask.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __alloc_pages_nodemask 3 | trigger.code =>> 4 | struct page *page = __alloc_pages_nodemask(GFP_KERNEL, 1, 5 | node_zonelist(numa_node_id(), GFP_KERNEL), NULL); 6 | if (page) 7 | __free_pages(page, 1); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/__get_free_pages.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __get_free_pages 3 | trigger.code =>> 4 | unsigned long addr = __get_free_pages(GFP_KERNEL, 4); 5 | free_pages(addr, 4); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/__kmalloc.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __kmalloc 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | size_t size = 20; 8 | void *p; 9 | p = __kmalloc(size, GFP_KERNEL); 10 | kfree(p); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/__kmalloc_node.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __kmalloc_node 3 | trigger.code =>> 4 | size_t size; 5 | void *p; 6 | size = 100; 7 | p = __kmalloc_node(size, GFP_KERNEL, numa_node_id()); 8 | kfree(p); 9 | << 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/__vmalloc.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __vmalloc 3 | trigger.code =>> 4 | void *p = __vmalloc(100, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/alloc_pages_current.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = alloc_pages_current 3 | trigger.code =>> 4 | /* Request 2 pages (2^1) */ 5 | struct page *page = alloc_pages_current(GFP_KERNEL, 1); 6 | if (page) 7 | __free_pages(page, 1); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/alloc_pages_exact.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = alloc_pages_exact 3 | trigger.code =>> 4 | size_t size; 5 | void* p; 6 | size = 100; 7 | p = alloc_pages_exact(size, GFP_KERNEL); 8 | if (p) 9 | free_pages_exact(p, size); 10 | << 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/alloc_pages_exact_nid.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = alloc_pages_exact_nid 3 | trigger.code =>> 4 | size_t size; 5 | void* p; 6 | size = 100; 7 | p = alloc_pages_exact_nid(numa_node_id(), size, GFP_KERNEL); 8 | if (p) 9 | free_pages_exact(p, size); 10 | << 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/get_zeroed_page.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_zeroed_page 3 | trigger.code =>> 4 | unsigned long addr = get_zeroed_page(GFP_KERNEL); 5 | free_pages(addr, 0); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | #include 5 | #include /* NUMA-related stuff */ 6 | #include 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/kmalloc_order_trace.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kmalloc_order_trace 3 | trigger.code =>> 4 | size_t size; 5 | void *p; 6 | size = 100; 7 | p = kmalloc_order_trace(size, GFP_KERNEL, 1); 8 | kfree(p); 9 | << 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vmalloc.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vmalloc 3 | trigger.code =>> 4 | void *p = vmalloc(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vmalloc_32.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vmalloc_32 3 | trigger.code =>> 4 | void *p = vmalloc_32(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vmalloc_32_user.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vmalloc_32_user 3 | trigger.code =>> 4 | void *p = vmalloc_32_user(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vmalloc_node.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vmalloc_node 3 | trigger.code =>> 4 | void *p = vmalloc_node(100, numa_node_id()); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vmalloc_user.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vmalloc_user 3 | trigger.code =>> 4 | void *p = vmalloc_user(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vzalloc.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vzalloc 3 | trigger.code =>> 4 | void *p = vzalloc(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/alloc/tests/vzalloc_node.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vzalloc_node 3 | trigger.code =>> 4 | void *p = vzalloc_node(100, numa_node_id()); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Handling of KEDR annotations if they are provided by the kernel itself. 2 | kmodule_configure_kernel_functions(functions OPTIONAL 3 | "kedr_annotate_happens_before" 4 | "kedr_annotate_happens_after" 5 | "kedr_annotate_memory_acquired" 6 | "kedr_annotate_memory_released" 7 | ) 8 | 9 | group_create_handlers(${GROUP_NAME} ${functions}) 10 | group_add_sources("handlers_${GROUP_NAME}.c") 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/kedr_annotate_happens_after.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kedr_annotate_happens_after 3 | function.index = KEDR_ANN_TYPE_HAPPENS_AFTER 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/kedr_annotate_happens_before.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kedr_annotate_happens_before 3 | function.index = KEDR_ANN_TYPE_HAPPENS_BEFORE 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/kedr_annotate_memory_acquired.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kedr_annotate_memory_acquired 3 | function.index = KEDR_ANN_TYPE_MEMORY_ACQUIRED 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/kedr_annotate_memory_released.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kedr_annotate_memory_released 3 | function.index = KEDR_ANN_TYPE_MEMORY_RELEASED 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .repl = NULL 4 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/annotations/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | /* Setting handlers for <$function.name$> */ { 2 | struct kedr_annotation *ann = 3 | kedr_get_annotation(<$function.index$>); 4 | BUG_ON(ann == NULL); 5 | handlers_<$function.name$>.pre = ann->pre; 6 | handlers_<$function.name$>.post = ann->post; 7 | } -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "local_bh_enable" 3 | "local_bh_disable" 4 | ) 5 | group_create_handlers(${GROUP_NAME} ${functions}) 6 | group_add_sources("handlers_${GROUP_NAME}.c") 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/local_bh_disable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = local_bh_disable 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = 7 | (struct kedr_call_info *)(ls->info); 8 | kedr_bh_disabled_start(ls->tid, info->pc); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/local_bh_enable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = local_bh_enable 4 | 5 | code.pre =>> 6 | struct kedr_call_info *info = 7 | (struct kedr_call_info *)(ls->info); 8 | kedr_bh_disabled_end(ls->tid, info->pc); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/bh/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/complete.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = complete 4 | 5 | code.pre =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | on_complete(ls, compl); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/complete_all.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = complete_all 4 | 5 | code.pre =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | on_complete(ls, compl); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | set(TEST_MATCH_EXPR "") 4 | set(TEST_CHECKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/check_trace.sh") 5 | 6 | add_tests_for_group(${PLUGIN_SHORT_NAME} ${GROUP_NAME} ${functions}) 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/tests/expected_common.trace: -------------------------------------------------------------------------------- 1 | # add_timer(&timer); 2 | SIGNAL t1 3 | 4 | # [timer_func] 5 | WAIT t1 6 | 7 | # 8 | WAIT func 9 | WAIT bh 10 | 11 | # complete() / complete_all() 12 | SIGNAL compl 13 | 14 | # 15 | SIGNAL bh 16 | SIGNAL func 17 | 18 | SIGNAL t1_1 19 | 20 | # *wait_for_completion*() 21 | WAIT compl 22 | 23 | # del_timer_sync(&timer); 24 | WAIT t1_1 25 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/try_wait_for_completion.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = try_wait_for_completion 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | int ret = (int)KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret) 10 | on_wait(ls, compl); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | on_wait(ls, compl); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_interruptible.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_interruptible 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | int ret = (int)KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret == 0) 10 | on_wait(ls, compl); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_interruptible_timeout.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_interruptible_timeout 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | long ret = (long)KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret > 0) 10 | on_wait(ls, compl); 11 | 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_io.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_io 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | on_wait(ls, compl); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_io_timeout.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_io_timeout 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | unsigned long ret = KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret > 0) 10 | on_wait(ls, compl); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_killable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_killable 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | int ret = (int)KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret == 0) 10 | on_wait(ls, compl); 11 | 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_killable_timeout.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_killable_timeout 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | long ret = (long)KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret > 0) 10 | on_wait(ls, compl); 11 | 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/completion/wait_for_completion_timeout.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = wait_for_completion_timeout 4 | 5 | code.post =>> 6 | void *compl = (void *)KEDR_LS_ARG1(ls); 7 | unsigned long ret = KEDR_LS_RET_VAL(ls); 8 | 9 | if (ret > 0) 10 | on_wait(ls, compl); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/device/pm_ops.list.in: -------------------------------------------------------------------------------- 1 | [group] 2 | @KEDR_PM_OPS_LIST@ -------------------------------------------------------------------------------- /sources/functions/common/groups/device/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | Not used -------------------------------------------------------------------------------- /sources/functions/common/groups/device/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (pm-><$function$> != NULL) { 2 | kedr_set_func_handlers(pm-><$function$>, base_pre, base_post, 3 | NULL, 0); 4 | } 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "kmemdup" 3 | "kstrdup" 4 | "kstrndup" 5 | 6 | "match_strdup" 7 | 8 | "memdup_user" 9 | "strndup_user" 10 | ) 11 | group_create_handlers(${GROUP_NAME} ${functions}) 12 | group_add_sources("handlers_${GROUP_NAME}.c") 13 | 14 | kedr_test_add_subdirectory(tests) 15 | ######################################################################## 16 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include /* match_strdup */ 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/tests/kmemdup.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kmemdup 3 | trigger.code =>> 4 | const char *orig_data = "Some data"; 5 | void *result = NULL; 6 | result = kmemdup(&orig_data[0], 2, GFP_KERNEL); 7 | kfree(result); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/tests/kstrdup.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kstrdup 3 | trigger.code =>> 4 | const char *orig_str = "Some string"; 5 | char *result_str = NULL; 6 | result_str = kstrdup(orig_str, GFP_KERNEL); 7 | kfree(result_str); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/tests/kstrndup.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kstrndup 3 | trigger.code =>> 4 | const char *orig_str = "Some string"; 5 | char *result_str = NULL; 6 | result_str = kstrndup(orig_str, 2, GFP_KERNEL); 7 | kfree(result_str); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/dup/tests/match_strdup.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = match_strdup 3 | trigger.code =>> 4 | char orig_data[] = "Some data"; 5 | substring_t substr; 6 | char *result = NULL; 7 | 8 | substr.from = &orig_data[1]; 9 | substr.to = &orig_data[4]; 10 | 11 | result = match_strdup(&substr); 12 | kfree(result); 13 | << 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/firmware/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "request_firmware_nowait" 3 | ) 4 | 5 | # Check the signature of request_firmware_nowait(). 6 | check_request_fw() 7 | 8 | group_create_handlers(${GROUP_NAME} ${functions}) 9 | group_add_sources("handlers_${GROUP_NAME}.c") 10 | ######################################################################## 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/firmware/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/firmware/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/firmware/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/free/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "kfree" 3 | "kzfree" 4 | "kmem_cache_free" 5 | "free_pages" 6 | "__free_pages" 7 | "free_pages_exact" 8 | "vfree" 9 | ) 10 | group_create_handlers(${GROUP_NAME} ${functions}) 11 | group_add_sources("handlers_${GROUP_NAME}.c") 12 | 13 | kedr_test_add_subdirectory(tests) 14 | ######################################################################## 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/free/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/__free_pages.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __free_pages 3 | trigger.code =>> 4 | struct page *page = alloc_pages(GFP_KERNEL, 1); 5 | if (page) 6 | __free_pages(page, 1); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/free_pages.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = free_pages 3 | trigger.code =>> 4 | unsigned long addr = __get_free_pages(GFP_KERNEL, 4); 5 | free_pages(addr, 4); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/free_pages_exact.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = free_pages_exact 3 | trigger.code =>> 4 | size_t size; 5 | void *p; 6 | size = 100; 7 | p = alloc_pages_exact(size, GFP_KERNEL); 8 | if (p) 9 | free_pages_exact(p, size); 10 | << 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | #include 5 | #include /* NUMA-related stuff */ 6 | #include 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/kfree.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = kfree 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | size_t size = 20; 8 | void *p; 9 | p = __kmalloc(size, GFP_KERNEL); 10 | kfree(p); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/kzfree.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kzfree 3 | trigger.code =>> 4 | void *p = kmalloc(100, GFP_KERNEL); 5 | kzfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/free/tests/vfree.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = vfree 3 | trigger.code =>> 4 | void *p = vmalloc(100); 5 | vfree(p); 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "request_threaded_irq" 3 | "request_any_context_irq" 4 | "free_irq" 5 | "enable_irq" 6 | "disable_irq" 7 | "synchronize_irq" 8 | "devm_request_threaded_irq" 9 | "devm_free_irq" 10 | ) 11 | group_create_handlers(${GROUP_NAME} ${functions}) 12 | group_add_sources("handlers_${GROUP_NAME}.c") 13 | ######################################################################## 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/devm_free_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = devm_free_irq 4 | 5 | code.post =>> 6 | unsigned int irq = (unsigned int)KEDR_LS_ARG2(ls); 7 | void *dev_id = (void *)KEDR_LS_ARG3(ls); 8 | on_free_irq(ls, irq, dev_id); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/disable_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = disable_irq 4 | 5 | code.post =>> 6 | unsigned int irq = (unsigned int)KEDR_LS_ARG1(ls); 7 | on_disable_or_sync_irq(ls, irq); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/enable_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = enable_irq 4 | 5 | code.pre =>> 6 | unsigned int irq = (unsigned int)KEDR_LS_ARG1(ls); 7 | on_enable_irq(ls, irq); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/free_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = free_irq 4 | 5 | code.post =>> 6 | unsigned int irq = (unsigned int)KEDR_LS_ARG1(ls); 7 | void *dev_id = (void *)KEDR_LS_ARG2(ls); 8 | on_free_irq(ls, irq, dev_id); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/synchronize_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = synchronize_irq 4 | 5 | code.post =>> 6 | unsigned int irq = (unsigned int)KEDR_LS_ARG1(ls); 7 | on_disable_or_sync_irq(ls, irq); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/irq/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_atomic_dec_and_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _atomic_dec_and_lock 3 | trigger.code =>> 4 | atomic_t cnt = ATOMIC_INIT(1); 5 | DEFINE_SPINLOCK(s); 6 | if (atomic_dec_and_lock(&cnt, &s)) 7 | spin_unlock(&s); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_read_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_lock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock(&lock); 6 | read_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_read_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_lock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_bh(&lock); 6 | read_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_read_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_lock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_irq(&lock); 6 | read_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_read_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | read_lock_irqsave(&lock, flags); 7 | read_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_read_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_trylock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(s); 5 | if (read_trylock(&s)) 6 | read_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_bh(&lock); 6 | spin_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock_irq 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_irq(&lock); 6 | spin_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock_irqsave_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock_irqsave_nested 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_lock_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_lock_nested 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_trylock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(s); 5 | if (spin_trylock(&s)) 6 | spin_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_spin_trylock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_trylock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(s); 5 | if (spin_trylock_bh(&s)) 6 | spin_unlock_bh(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_write_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_lock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock(&lock); 6 | write_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_write_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_lock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_bh(&lock); 6 | write_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_write_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_lock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_irq(&lock); 6 | write_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_write_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | write_lock_irqsave(&lock, flags); 7 | write_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_raw_write_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_trylock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(s); 5 | if (write_trylock(&s)) 6 | write_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_read_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_lock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock(&lock); 6 | read_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_read_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_lock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_bh(&lock); 6 | read_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_read_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_lock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_irq(&lock); 6 | read_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_read_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | read_lock_irqsave(&lock, flags); 7 | read_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_read_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_trylock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(s); 5 | if (read_trylock(&s)) 6 | read_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_bh(&lock); 6 | spin_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock_irq 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_irq(&lock); 6 | spin_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock_irqsave_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock_irqsave_nested 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_lock_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_lock_nested 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_trylock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(s); 5 | if (spin_trylock(&s)) 6 | spin_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_spin_trylock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_trylock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(s); 5 | if (spin_trylock_bh(&s)) 6 | spin_unlock_bh(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_write_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_lock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock(&lock); 6 | write_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_write_lock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_lock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_bh(&lock); 6 | write_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_write_lock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_lock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_irq(&lock); 6 | write_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_write_lock_irqsave.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_lock_irqsave 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | write_lock_irqsave(&lock, flags); 7 | write_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/_write_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_trylock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(s); 5 | if (write_trylock(&s)) 6 | write_unlock(&s); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/atomic_dec_and_mutex_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = atomic_dec_and_mutex_lock 3 | trigger.code =>> 4 | atomic_t cnt = ATOMIC_INIT(1); 5 | DEFINE_MUTEX(m); 6 | if (atomic_dec_and_mutex_lock(&cnt, &m)) 7 | mutex_unlock(&m); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | << 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | mutex_lock(&m); 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock_interruptible.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock_interruptible 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | if (mutex_lock_interruptible(&m) == 0) 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock_interruptible_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock_interruptible_nested 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | if (mutex_lock_interruptible(&m) == 0) 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock_killable.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock_killable 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | if (mutex_lock_killable(&m) == 0) 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock_killable_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock_killable_nested 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | if (mutex_lock_killable(&m) == 0) 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_lock_nested.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_lock_nested 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | mutex_lock(&m); 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/lock/tests/mutex_trylock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_trylock 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | if (mutex_trylock(&m)) 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/__pci_register_driver.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = __pci_register_driver 3 | 4 | code.pre =>> 5 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 6 | struct pci_driver *drv = (struct pci_driver *)KEDR_LS_ARG1(ls); 7 | 8 | on_register(drv, ls->tid, info->pc); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/probe.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = probe 3 | 4 | # Define it for probe() only. The actual value does not matter as 5 | # long as it is not empty. 6 | is_probe = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/remove.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = remove 3 | 4 | # Define it for remove() only. The actual value does not matter as 5 | # long as it is not empty. 6 | is_remove = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/resume.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = resume 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/resume_early.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = resume_early 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/shutdown.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = shutdown 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/sriov_configure.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = sriov_configure 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/suspend.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = suspend 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/suspend_late.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = suspend_late 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | cb_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | { 4 | <$if is_probe$>handle_pre_probe<$else$>handle_pre_common<$endif$>(ls); 5 | } 6 | 7 | static void 8 | cb_<$function.name$>_post(struct kedr_local_storage *ls) 9 | { 10 | <$if is_remove$>handle_post_remove<$else$>handle_post_common<$endif$>(ls); 11 | } -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_driver/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (drv-><$function.name$> != NULL) { 2 | kedr_set_func_handlers(drv-><$function.name$>, 3 | cb_<$function.name$>_pre, cb_<$function.name$>_post, 4 | NULL, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_error_handlers/callbacks.list.in: -------------------------------------------------------------------------------- 1 | [group] 2 | @KEDR_CALLBACKS_LIST@ 3 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_error_handlers/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | Not used -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_error_handlers/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (errh-><$function$> != NULL) { 2 | kedr_set_func_handlers(errh-><$function$>, 3 | handle_pre_common, handle_post_common, 4 | NULL, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/pci_unregister_driver.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = pci_unregister_driver 3 | 4 | code.post =>> 5 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 6 | struct pci_driver *drv = (struct pci_driver *)KEDR_LS_ARG1(ls); 7 | 8 | on_unregister(drv, ls->tid, info->pc); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/pci/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "krealloc" 3 | "__krealloc" 4 | ) 5 | group_create_handlers(${GROUP_NAME} ${functions}) 6 | group_add_sources("handlers_${GROUP_NAME}.c") 7 | 8 | kedr_test_add_subdirectory(tests) 9 | ######################################################################## 10 | -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/__krealloc.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __krealloc 4 | 5 | # The handlers are defined in the template because they are 6 | # function-specific. 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/krealloc.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = krealloc 4 | 5 | # The handlers are defined in the template because they are 6 | # function-specific. 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/realloc/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | << 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "down" 3 | "down_interruptible" 4 | "down_killable" 5 | "down_trylock" 6 | "down_timeout" 7 | "up" 8 | ) 9 | 10 | group_create_handlers(${GROUP_NAME} ${functions}) 11 | group_add_sources("handlers_${GROUP_NAME}.c") 12 | ######################################################################## 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/down.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = down 4 | 5 | code.post =>> 6 | handle_down(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/down_interruptible.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = down_interruptible 4 | 5 | code.post =>> 6 | int ret = (int)KEDR_LS_RET_VAL(ls); 7 | 8 | if (ret == 0) 9 | handle_down(ls); 10 | << 11 | ####################################################################### 12 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/down_killable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = down_killable 4 | 5 | code.post =>> 6 | int ret = (int)KEDR_LS_RET_VAL(ls); 7 | 8 | if (ret == 0) 9 | handle_down(ls); 10 | << 11 | ####################################################################### 12 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/down_timeout.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = down_timeout 4 | 5 | code.post =>> 6 | int ret = (int)KEDR_LS_RET_VAL(ls); 7 | 8 | if (ret == 0) 9 | handle_down(ls); 10 | << 11 | ####################################################################### 12 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/down_trylock.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = down_trylock 4 | 5 | code.post =>> 6 | int ret = (int)KEDR_LS_RET_VAL(ls); 7 | 8 | if (ret == 0) 9 | handle_down(ls); 10 | << 11 | ####################################################################### 12 | -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/semaphore/up.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = up 4 | 5 | code.pre =>> 6 | handle_up(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/strings/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = <$if function.lookup$>NULL<$else$>&<$function.name$><$endif$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/strings/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/strings/templates/document/lookupItem.tpl: -------------------------------------------------------------------------------- 1 | #ifdef KEDR_FUNC_ADDR_LOOKUP_<$function.name$> 2 | {"<$function.name$>", &handlers_<$function.name$>}, 3 | #endif 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/strings/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | #include 5 | #include 6 | << 7 | -------------------------------------------------------------------------------- /sources/functions/common/groups/strings/tests/memset.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = memset 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | char *bytes = NULL; 8 | bytes = kmalloc(20, GFP_KERNEL); 9 | if (bytes != NULL) { 10 | memset(&bytes[0], 0xcc * value_one, 10 * value_one); 11 | kfree(bytes); 12 | } 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "__tasklet_schedule" 3 | "__tasklet_hi_schedule" 4 | "tasklet_kill" 5 | ) 6 | group_create_handlers(${GROUP_NAME} ${functions}) 7 | group_add_sources("handlers_${GROUP_NAME}.c") 8 | 9 | kedr_test_add_subdirectory(tests) 10 | ######################################################################## 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/__tasklet_hi_schedule.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __tasklet_hi_schedule 4 | 5 | code.pre =>> 6 | handle_schedule(ls, "__tasklet_hi_schedule"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/__tasklet_schedule.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __tasklet_schedule 4 | 5 | code.pre =>> 6 | handle_schedule(ls, "__tasklet_schedule"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/tasklet_kill.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = tasklet_kill 4 | 5 | code.post =>> 6 | handle_kill(ls, "tasklet_kill"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | set(TEST_MATCH_EXPR "") 4 | set(TEST_CHECKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/check_trace.sh") 5 | 6 | add_tests_for_group(${PLUGIN_SHORT_NAME} ${GROUP_NAME} ${functions}) 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/tests/expected_common.trace: -------------------------------------------------------------------------------- 1 | # tasklet_*schedule() 2 | SIGNAL t1 3 | 4 | # [tasklet] 5 | WAIT t1 6 | 7 | # 8 | WAIT func 9 | WAIT bh 10 | 11 | # 12 | SIGNAL bh 13 | SIGNAL func 14 | 15 | SIGNAL t1_1 16 | 17 | # tasklet_kill() 18 | WAIT t1_1 19 | -------------------------------------------------------------------------------- /sources/functions/common/groups/tasklet/tests/tasklet_kill.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = tasklet_kill 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | struct tasklet_struct t; 8 | tasklet_init(&t, test_tasklet_fn, 0); 9 | 10 | tasklet_schedule(&t); 11 | msleep(wait_timeout_msec); 12 | 13 | tasklet_kill(&t); 14 | << 15 | ####################################################################### 16 | -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions REQUIRED 2 | ONE_OF_BEGIN "kthread_create" "kthread_create_on_node" ONE_OF_END 3 | "kthread_stop" 4 | ) 5 | group_create_handlers(${GROUP_NAME} ${functions}) 6 | group_add_sources("handlers_${GROUP_NAME}.c") 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/kthread_stop.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = kthread_stop 3 | returnType = int 4 | 5 | arg.type = struct task_struct* 6 | arg.name = p 7 | 8 | pre =>> 9 | generate_tjoin_pre(tid, pc, (unsigned long)p); 10 | << 11 | post =>> 12 | generate_tjoin_post(tid, pc, (unsigned long)p); 13 | << 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/templates/block/arg_def.tpl: -------------------------------------------------------------------------------- 1 | #define <$arg.name$> ((<$arg.type$>)kedr_arg(ls, <$function.name$>_arg_<$arg.name$> + 1)) -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/templates/block/arg_enum.tpl: -------------------------------------------------------------------------------- 1 | <$function.name$>_arg_<$arg.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/templates/block/arg_undef.tpl: -------------------------------------------------------------------------------- 1 | #undef <$arg.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/thread/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "add_timer" 3 | "add_timer_on" 4 | "mod_timer" 5 | "mod_timer_pinned" 6 | 7 | "del_timer_sync" 8 | "try_to_del_timer_sync" 9 | ) 10 | group_create_handlers(${GROUP_NAME} ${functions}) 11 | group_add_sources("handlers_${GROUP_NAME}.c") 12 | 13 | kedr_test_add_subdirectory(tests) 14 | ######################################################################## 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/add_timer.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = add_timer 4 | 5 | code.pre =>> 6 | handle_add_mod_timer(ls, "add_timer"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/add_timer_on.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = add_timer_on 4 | 5 | code.pre =>> 6 | handle_add_mod_timer(ls, "add_timer_on"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/del_timer_sync.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = del_timer_sync 4 | 5 | code.post =>> 6 | handle_del_timer_sync(ls, "del_timer_sync"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/mod_timer.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = mod_timer 4 | 5 | code.pre =>> 6 | handle_add_mod_timer(ls, "mod_timer"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/mod_timer_pinned.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = mod_timer_pinned 4 | 5 | code.pre =>> 6 | handle_add_mod_timer(ls, "mod_timer_pinned"); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | set(TEST_MATCH_EXPR "") 4 | set(TEST_CHECKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/check_trace.sh") 5 | 6 | add_tests_for_group(${PLUGIN_SHORT_NAME} ${GROUP_NAME} ${functions}) 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/tests/expected_common.trace: -------------------------------------------------------------------------------- 1 | # mod_timer(&timer, jiffies + msecs_to_jiffies(test_timeout_msec)); 2 | SIGNAL t1 3 | 4 | # [timer_func] 5 | WAIT t1 6 | 7 | # 8 | WAIT func 9 | WAIT bh 10 | 11 | # 12 | SIGNAL bh 13 | SIGNAL func 14 | 15 | SIGNAL t1_1 16 | 17 | # del_timer_sync(&timer); 18 | WAIT t1_1 19 | -------------------------------------------------------------------------------- /sources/functions/common/groups/timer/try_to_del_timer_sync.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = try_to_del_timer_sync 4 | 5 | code.post =>> 6 | int ret = (int)KEDR_LS_RET_VAL(ls); 7 | if (ret >= 0) 8 | handle_del_timer_sync(ls, "try_to_del_timer_sync"); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kmodule_configure_kernel_functions(functions OPTIONAL 2 | "copy_to_user" 3 | "_copy_to_user" 4 | "copy_from_user" 5 | "_copy_from_user" 6 | "__strncpy_from_user" 7 | "strncpy_from_user" 8 | ) 9 | group_create_handlers(${GROUP_NAME} ${functions}) 10 | group_add_sources("handlers_${GROUP_NAME}.c") 11 | 12 | kedr_test_add_subdirectory(tests) 13 | ######################################################################## 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | { 4 | } 5 | 6 | static void 7 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 8 | { 9 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 10 | /* Report memory accesses that have actually happened */ { 11 | <$code.post$> 12 | } 13 | } 14 | 15 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | set(TEST_MATCH_EXPR " NOT_USED") 3 | 4 | # From the build system's point of view, it is convenient to call 5 | # add_tests_for_group() anyway, even if there are no functions to test. 6 | add_tests_for_group(${PLUGIN_SHORT_NAME} ${GROUP_NAME} "NO_FUNCTIONS_TO_TEST") 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/uaccess/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | << 4 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_read_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_unlock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock(&lock); 6 | read_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_read_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_unlock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_bh(&lock); 6 | read_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_read_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_unlock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_irq(&lock); 6 | read_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_read_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_read_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | read_lock_irqsave(&lock, flags); 7 | read_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_spin_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_unlock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_spin_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_unlock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_bh(&lock); 6 | spin_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_spin_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_unlock_irq 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_irq(&lock); 6 | spin_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_spin_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_spin_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_write_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_unlock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock(&lock); 6 | write_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_write_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_unlock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_bh(&lock); 6 | write_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_write_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_unlock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_irq(&lock); 6 | write_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_raw_write_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _raw_write_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | write_lock_irqsave(&lock, flags); 7 | write_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_read_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_unlock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock(&lock); 6 | read_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_read_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_unlock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_bh(&lock); 6 | read_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_read_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_unlock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | read_lock_irq(&lock); 6 | read_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_read_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _read_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | read_lock_irqsave(&lock, flags); 7 | read_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_spin_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_unlock 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock(&lock); 6 | spin_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_spin_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_unlock_bh 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_bh(&lock); 6 | spin_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_spin_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_unlock_irq 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | spin_lock_irq(&lock); 6 | spin_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_spin_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _spin_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_SPINLOCK(lock); 5 | unsigned long flags; 6 | spin_lock_irqsave(&lock, flags); 7 | spin_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_write_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_unlock 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock(&lock); 6 | write_unlock(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_write_unlock_bh.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_unlock_bh 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_bh(&lock); 6 | write_unlock_bh(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_write_unlock_irq.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_unlock_irq 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | write_lock_irq(&lock); 6 | write_unlock_irq(&lock); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/_write_unlock_irqrestore.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = _write_unlock_irqrestore 3 | trigger.code =>> 4 | DEFINE_RWLOCK(lock); 5 | unsigned long flags; 6 | write_lock_irqsave(&lock, flags); 7 | write_unlock_irqrestore(&lock, flags); 8 | << 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/header.data: -------------------------------------------------------------------------------- 1 | header =>> 2 | #include 3 | #include 4 | << 5 | -------------------------------------------------------------------------------- /sources/functions/common/groups/unlock/tests/mutex_unlock.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = mutex_unlock 3 | trigger.code =>> 4 | DEFINE_MUTEX(m); 5 | mutex_lock(&m); 6 | mutex_unlock(&m); 7 | << 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/__create_workqueue_key.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __create_workqueue_key 4 | 5 | code.post =>> 6 | struct workqueue_struct *wq = 7 | (struct workqueue_struct *)KEDR_LS_RET_VAL(ls); 8 | 9 | int ordered = (int)KEDR_LS_ARG2(ls); 10 | 11 | if (wq != NULL) 12 | workqueue_add_info(wq, ordered); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/cancel_work_sync.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # bool cancel_work_sync(struct work_struct *work); 3 | 4 | # Name of the target function 5 | function.name = cancel_work_sync 6 | 7 | code.post =>> 8 | struct work_struct *work = 9 | (struct work_struct *)KEDR_LS_ARG1(ls); 10 | 11 | on_flush_or_cancel_work(ls, work); 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/drain_workqueue.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = drain_workqueue 4 | 5 | code.post =>> 6 | on_wq_flush_drain(ls, KEDR_LS_ARG1(ls)); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/flush_delayed_work.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # bool flush_delayed_work(struct delayed_work *dwork); 3 | 4 | # Name of the target function 5 | function.name = flush_delayed_work 6 | 7 | code.post =>> 8 | struct delayed_work *dw = 9 | (struct delayed_work *)KEDR_LS_ARG1(ls); 10 | if (dw != NULL) 11 | on_flush_or_cancel_work(ls, &dw->work); 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/flush_scheduled_work.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = flush_scheduled_work 4 | 5 | code.post =>> 6 | on_wq_flush_drain(ls, kedr_system_wq_id); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/flush_work.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # bool flush_work(struct work_struct *work); 3 | 4 | # Name of the target function 5 | function.name = flush_work 6 | 7 | code.post =>> 8 | struct work_struct *work = 9 | (struct work_struct *)KEDR_LS_ARG1(ls); 10 | 11 | on_flush_or_cancel_work(ls, work); 12 | << 13 | ####################################################################### 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/flush_workqueue.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = flush_workqueue 4 | 5 | code.post =>> 6 | on_wq_flush_drain(ls, KEDR_LS_ARG1(ls)); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/schedule_work.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # bool schedule_work(struct work_struct *work); 3 | 4 | # Name of the target function 5 | function.name = schedule_work 6 | 7 | code.pre =>> 8 | struct work_struct *work = (struct work_struct *)KEDR_LS_ARG1(ls); 9 | 10 | on_queue_work(ls, work, kedr_system_wq_id); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/schedule_work_on.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # bool schedule_work_on(int cpu, struct work_struct *work); 3 | 4 | # Name of the target function 5 | function.name = schedule_work_on 6 | 7 | code.pre =>> 8 | struct work_struct *work = (struct work_struct *)KEDR_LS_ARG2(ls); 9 | 10 | on_queue_work(ls, work, kedr_system_wq_id); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | set(TEST_MATCH_EXPR "") 4 | set(TEST_CHECKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/check_trace.sh") 5 | 6 | add_tests_for_group(${PLUGIN_SHORT_NAME} ${GROUP_NAME} ${functions}) 7 | ######################################################################## 8 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/expected_common.trace: -------------------------------------------------------------------------------- 1 | # queue_work(wq, &w1); 2 | SIGNAL w1 3 | 4 | # [work_func] 5 | WAIT w1 6 | WAIT w1_2 7 | 8 | SIGNAL w1_1 9 | SIGNAL w1_2 10 | SIGNAL wq 11 | 12 | # flush_work(&w1); 13 | WAIT w1_1 14 | 15 | # flush_workqueue(wq); 16 | WAIT wq 17 | 18 | # destroy_workqueue(wq); 19 | WAIT wq 20 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/expected_system_wq.trace: -------------------------------------------------------------------------------- 1 | # schedule_work(&w1); 2 | SIGNAL w1 3 | 4 | # [work_func] 5 | WAIT w1 6 | WAIT w1_2 7 | 8 | SIGNAL w1_1 9 | SIGNAL w1_2 10 | SIGNAL sys_wq 11 | 12 | # flush_scheduled_work(); 13 | WAIT sys_wq 14 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/flush_scheduled_work.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = flush_scheduled_work 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | DECLARE_WORK(w1, work_func1); 8 | 9 | schedule_work(&w1); 10 | msleep(wait_timeout_msec); 11 | 12 | flush_scheduled_work(); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/schedule_work.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = schedule_work 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | DECLARE_WORK(w1, work_func1); 8 | 9 | schedule_work(&w1); 10 | msleep(wait_timeout_msec); 11 | 12 | flush_scheduled_work(); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/common/groups/workqueue/tests/schedule_work_on.trigger: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = schedule_work_on 4 | 5 | # The code to trigger a call to this function. 6 | trigger.code =>> 7 | DECLARE_WORK(w1, work_func1); 8 | 9 | schedule_work_on(0, &w1); 10 | msleep(wait_timeout_msec); 11 | 12 | flush_scheduled_work(); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/common/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | Not used -------------------------------------------------------------------------------- /sources/functions/common/templates/document/add_group.tpl: -------------------------------------------------------------------------------- 1 | KEDR_FH_ADD_GROUP(<$group$>, groups); -------------------------------------------------------------------------------- /sources/functions/common/templates/document/declare_group.tpl: -------------------------------------------------------------------------------- 1 | KEDR_FH_DECLARE_GROUP(<$group$>); -------------------------------------------------------------------------------- /sources/functions/fs/file_system/Readme: -------------------------------------------------------------------------------- 1 | Plugin module which implements model of filesystem driver from the sence 2 | of serialization mechanizms. 3 | 4 | The plugin requires KEDR Callback Operations Interception installed 5 | before it can be builded. 6 | -------------------------------------------------------------------------------- /sources/functions/fs/templates/callback_interceptor.c/block/arg_spec.tpl: -------------------------------------------------------------------------------- 1 | <$callback.arg.type$> <$callback.arg.name$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/callback_interceptor.c/block/callback_t.tpl: -------------------------------------------------------------------------------- 1 | <$if callback.returnType$><$callback.returnType$><$else$>void<$endif$> 2 | (*)(<$if concat(callback.arg.type)$><$callback.arg.type: join(, )$><$else$>void<$endif$>) -------------------------------------------------------------------------------- /sources/functions/fs/templates/callback_interceptor.c/document/document.tpl: -------------------------------------------------------------------------------- 1 | /* Protect from header inclusion(otherwise typedefs will be redefined)*/ 2 | #define CALLBACK_INTERCEPTOR_<$interceptor.group.name$>_H 3 | #include 4 | #include "callback_interceptor.h" 5 | 6 | <$if concat(header)$><$header: join(\n)$> 7 | 8 | <$endif$><$if concat(implementation_header)$><$implementation_header: join(\n)$> 9 | 10 | <$endif$><$block: join(\n)$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/callback_interceptor.h/block/callback_t.tpl: -------------------------------------------------------------------------------- 1 | <$if callback.returnType$><$callback.returnType$><$else$>void<$endif$> 2 | (*)(<$if concat(callback.arg.type)$><$callback.arg.type: join(, )$><$else$>void<$endif$>) -------------------------------------------------------------------------------- /sources/functions/fs/templates/callback_interceptor.h/document/document.tpl: -------------------------------------------------------------------------------- 1 | /* Interceptors group '<$interceptor.group.name$>'.*/ 2 | #ifndef CALLBACK_INTERCEPTOR_<$interceptor.group.name$>_H 3 | #define CALLBACK_INTERCEPTOR_<$interceptor.group.name$>_H 4 | 5 | <$if concat(header)$><$header: join(\n)$> 6 | 7 | <$endif$><$block: join(\n)$> 8 | 9 | #endif /* CALLBACK_INTERCEPTOR_<$interceptor.group.name$>_H */ -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/arg.tpl: -------------------------------------------------------------------------------- 1 | <$operation.arg.type$> <$operation.arg.name$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/args.tpl: -------------------------------------------------------------------------------- 1 | <$arg: join(, )$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/callback_name.tpl: -------------------------------------------------------------------------------- 1 | <$if operation.callback_name$><$operation.callback_name$><$else$><$operation.name$><$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/checkOperationType.tpl: -------------------------------------------------------------------------------- 1 | CHECK_OPERATION_TYPE(<$callback_name$>, <$if operation.returnType$><$operation.returnType$><$else$>void<$endif$> (*)(<$operation.arg.type: join(,)$>)) -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/external_state_post.tpl: -------------------------------------------------------------------------------- 1 | <$if operations.external.state.value$> 2 | /* 3 | * Restriction: <$callback_name$>() should be finished in state 4 | * '<$operation.external.state.value$>' of object <$operation.external.state.object$>. 5 | */ 6 | kedr_eh_on_signal(tid, pc, <$operation.external.state.prefix$>_POST_<$operation.external.state.value$>(<$operation.external.state.object$>), 7 | KEDR_SWT_COMMON); 8 | <$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/external_state_pre.tpl: -------------------------------------------------------------------------------- 1 | <$if operation.external.state.value$> 2 | /* 3 | * Restriction: <$callback_name$>() should be called in state 4 | * '<$operation.external.state.value$>' of object <$operation.external.state.object$>. 5 | */ 6 | kedr_eh_on_wait(tid, pc, <$operation.external.state.prefix$>_PRE_<$operation.external.state.value$>(<$operation.external.state.object$>), 7 | KEDR_SWT_COMMON); 8 | <$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/is_external.tpl: -------------------------------------------------------------------------------- 1 | <$if operation.code.pre.external$>1 2 | <$else$><$if operation.code.post.external$>1 3 | <$endif$><$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/pc_value.tpl: -------------------------------------------------------------------------------- 1 | <$if is_external$>(call_info->op_orig \ 2 | ? (unsigned long)call_info->op_orig : (unsigned long)call_info->return_address)<$else$>((unsigned long)call_info->op_orig)<$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/protection.tpl: -------------------------------------------------------------------------------- 1 | (<$operation.protection$>) -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/state_post.tpl: -------------------------------------------------------------------------------- 1 | <$if operation.state.value$> 2 | /* 3 | * Restriction: <$callback_name$>() should be finished in state 4 | * '<$operation.state.value$>'. 5 | */ 6 | kedr_eh_on_signal(tid, pc, SELF_STATE(POST_<$operation.state.value$>)(<$operation.object$>), 7 | KEDR_SWT_COMMON); 8 | <$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/block/state_pre.tpl: -------------------------------------------------------------------------------- 1 | <$if operation.state.value$> 2 | /* 3 | * Restriction: <$callback_name$>() should be called in state 4 | * '<$operation.state.value$>'. 5 | */ 6 | kedr_eh_on_wait(tid, pc, SELF_STATE(PRE_<$operation.state.value$>)(<$operation.object$>), 7 | KEDR_SWT_COMMON); 8 | <$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/document/operations_type.tpl: -------------------------------------------------------------------------------- 1 | <$if object.operations_field$><$operations.type$><$else$><$object.type$><$endif$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/document/post.tpl: -------------------------------------------------------------------------------- 1 | model_<$operation.name$>_post_handler -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/document/pre.tpl: -------------------------------------------------------------------------------- 1 | model_<$operation.name$>_pre_handler -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.c/document/state_ids.tpl: -------------------------------------------------------------------------------- 1 | <$if object.state.pre_id$>static inline unsigned long <$sw_id.prefix$>_PRE_<$object.state.value$>(<$object.type$>* obj) 2 | { 3 | return (unsigned long)(<$object.state.pre_id$>); 4 | } 5 | <$endif$><$if object.state.post_id$>static inline unsigned long <$sw_id.prefix$>_POST_<$object.state.value$>(<$object.type$>* obj) 6 | { 7 | return (unsigned long)(<$object.state.post_id$>); 8 | } 9 | <$endif$> 10 | -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.h/block/block.tpl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sources/functions/fs/templates/operations_model.h/document/state_ids.tpl: -------------------------------------------------------------------------------- 1 | <$if object.state.pre_id$>static inline unsigned long <$sw_id.prefix$>_PRE_<$object.state.value$>(<$object.type$>* obj) 2 | { 3 | return (unsigned long)(<$object.state.pre_id$>); 4 | } 5 | <$endif$><$if object.state.post_id$>static inline unsigned long <$sw_id.prefix$>_POST_<$object.state.value$>(<$object.type$>* obj) 6 | { 7 | return (unsigned long)(<$object.state.post_id$>); 8 | } 9 | <$endif$> 10 | -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/block/arg_spec.tpl: -------------------------------------------------------------------------------- 1 | <$arg.type$> <$arg.name$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/document/handlers_item.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/document/object_destroy_function.tpl: -------------------------------------------------------------------------------- 1 | static void <$object.name$>_destroy_function(void) 2 | { 3 | <$object.destroy$> 4 | } -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/document/object_destroy_function_ref.tpl: -------------------------------------------------------------------------------- 1 | &<$object.name$>_destroy_function -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/document/object_init_function.tpl: -------------------------------------------------------------------------------- 1 | static int <$object.name$>_init_function(void) 2 | { 3 | <$object.init$> 4 | } -------------------------------------------------------------------------------- /sources/functions/fs/templates/plugin_module.c/document/object_init_function_ref.tpl: -------------------------------------------------------------------------------- 1 | &<$object.name$>_init_function -------------------------------------------------------------------------------- /sources/functions/net/group.list.in: -------------------------------------------------------------------------------- 1 | [group] 2 | @KEDR_FH_GROUP_LIST@ 3 | -------------------------------------------------------------------------------- /sources/functions/net/groups/ethtool_ops/callbacks.list.in: -------------------------------------------------------------------------------- 1 | [group] 2 | @KEDR_CALLBACKS_LIST@ 3 | -------------------------------------------------------------------------------- /sources/functions/net/groups/ethtool_ops/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | Not used -------------------------------------------------------------------------------- /sources/functions/net/groups/ethtool_ops/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (ops-><$function$> != NULL) { 2 | kedr_set_func_handlers( 3 | ops-><$function$>, 4 | common_pre, common_post, NULL, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/cache.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = cache 4 | 5 | code.pre =>> 6 | struct neighbour *neigh = (struct neighbour *)KEDR_LS_ARG1(ls); 7 | handle_pre_common(ls, neigh->dev); 8 | << 9 | 10 | code.post =>> 11 | struct neighbour *neigh = (struct neighbour *)KEDR_LS_ARG1(ls); 12 | handle_post_common(ls, neigh->dev); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/create.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = create 4 | 5 | code.pre =>> 6 | struct net_device *dev = (struct net_device *)KEDR_LS_ARG2(ls); 7 | handle_pre_common(ls, dev); 8 | << 9 | 10 | code.post =>> 11 | struct net_device *dev = (struct net_device *)KEDR_LS_ARG2(ls); 12 | handle_post_common(ls, dev); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/parse.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = parse 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_pre_common(ls, skb->dev); 8 | << 9 | 10 | code.post =>> 11 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 12 | handle_post_common(ls, skb->dev); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/rebuild.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rebuild 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_pre_common(ls, skb->dev); 8 | << 9 | 10 | code.post =>> 11 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 12 | handle_post_common(ls, skb->dev); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | cb_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | { 4 | <$code.pre$> 5 | } 6 | 7 | static void 8 | cb_<$function.name$>_post(struct kedr_local_storage *ls) 9 | { 10 | <$code.post$> 11 | } -------------------------------------------------------------------------------- /sources/functions/net/groups/header_ops/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (ops-><$function.name$> != NULL) { 2 | kedr_set_func_handlers(ops-><$function.name$>, 3 | cb_<$function.name$>_pre, cb_<$function.name$>_post, 4 | NULL, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # This group handles NAPI-related functions. 2 | 3 | kmodule_configure_kernel_functions(functions OPTIONAL 4 | "netif_napi_add" 5 | "netif_napi_del" 6 | "__napi_schedule" 7 | ) 8 | group_create_handlers(${GROUP_NAME} ${functions}) 9 | 10 | group_add_sources("handlers_${GROUP_NAME}.c") 11 | ############################################################################ 12 | -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/__napi_schedule.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __napi_schedule 4 | 5 | code.pre =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | unsigned long napi = KEDR_LS_ARG1(ls); 8 | 9 | /* Relation #3 */ 10 | kedr_happens_before(ls->tid, info->pc, napi); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/netif_napi_del.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = netif_napi_del 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | unsigned long napi = KEDR_LS_ARG1(ls); 8 | 9 | /* Relation #4 */ 10 | kedr_happens_after(ls->tid, info->pc, napi + 1); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/net/groups/napi/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_add_slave.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_add_slave 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_add_vxlan_port.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_add_vxlan_port 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_bridge_dellink.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_bridge_dellink 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_bridge_setlink.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_bridge_setlink 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_busy_poll.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_busy_poll 4 | 5 | get_netdev =>> 6 | dev = ((struct napi_struct *)KEDR_LS_ARG1(ls))->dev; 7 | << 8 | 9 | is_bh_disabled = yes 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_change_carrier.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_change_carrier 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_change_mtu.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_change_mtu 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_change_rx_flags.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_change_rx_flags 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_del_slave.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_del_slave 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_del_vxlan_port.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_del_vxlan_port 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_dfwd_add_station.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_dfwd_add_station 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_dfwd_del_station.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_dfwd_del_station 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_do_ioctl.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_do_ioctl 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_ddp_done.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_ddp_done 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_ddp_setup.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_ddp_setup 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_ddp_target.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_ddp_target 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_disable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_disable 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_enable.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_enable 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_get_hbainfo.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_get_hbainfo 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fcoe_get_wwn.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fcoe_get_wwn 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_fix_features.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_fix_features 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_get_phys_port_id.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_get_phys_port_id 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_get_stats.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_get_stats 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_get_stats64.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_get_stats64 4 | ####################################################################### 5 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_get_vf_config.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_get_vf_config 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_init.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_init 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_neigh_construct.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_neigh_construct 4 | 5 | get_netdev =>> 6 | dev = ((struct neighbour *)KEDR_LS_ARG1(ls))->dev; 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_neigh_destroy.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_neigh_destroy 4 | 5 | get_netdev =>> 6 | dev = ((struct neighbour *)KEDR_LS_ARG1(ls))->dev; 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_neigh_setup.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_neigh_setup 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_netpoll_cleanup.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_netpoll_cleanup 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_netpoll_setup.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_netpoll_setup 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_config.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_config 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_features.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_features 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_mac_address.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_mac_address 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_link_state.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_link_state 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_mac.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_mac 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_port.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_port 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_spoofchk.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_spoofchk 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_tx_rate.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_tx_rate 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_set_vf_vlan.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_set_vf_vlan 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_setup_tc.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_setup_tc 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_uninit.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_uninit 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_vlan_rx_add_vid.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_vlan_rx_add_vid 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_vlan_rx_kill_vid.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_vlan_rx_kill_vid 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/ndo_vlan_rx_register.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = ndo_vlan_rx_register 4 | 5 | is_rtnl_locked = yes 6 | ####################################################################### 7 | -------------------------------------------------------------------------------- /sources/functions/net/groups/net_device_ops/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (ops-><$function.name$> != NULL) { 2 | kedr_set_func_handlers(ops-><$function.name$>, 3 | cb_<$function.name$>_pre, cb_<$function.name$>_post, 4 | NULL, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/alloc_etherdev_mq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = alloc_etherdev_mq 4 | 5 | code.pre =>> 6 | handle_alloc_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | handle_alloc_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/alloc_etherdev_mqs.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = alloc_etherdev_mqs 4 | 5 | code.pre =>> 6 | handle_alloc_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | handle_alloc_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/alloc_netdev_mq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = alloc_netdev_mq 4 | 5 | code.pre =>> 6 | handle_alloc_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | handle_alloc_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/alloc_netdev_mqs.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = alloc_netdev_mqs 4 | 5 | code.pre =>> 6 | handle_alloc_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | handle_alloc_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/register_netdev.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = register_netdev 4 | 5 | code.pre =>> 6 | struct net_device *dev = (struct net_device *)KEDR_LS_ARG1(ls); 7 | handle_register_pre(ls, dev); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/register_netdevice.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = register_netdevice 4 | 5 | code.pre =>> 6 | struct net_device *dev = (struct net_device *)KEDR_LS_ARG1(ls); 7 | handle_register_pre(ls, dev); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/net/groups/netdev/unregister_netdev.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = unregister_netdev 4 | 5 | code.post =>> 6 | struct net_device *dev = (struct net_device *)KEDR_LS_ARG1(ls); 7 | handle_unregister_post(ls, dev); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/__rtnl_link_register.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __rtnl_link_register 4 | 5 | code.pre =>> 6 | handle_register_pre(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/__rtnl_link_unregister.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __rtnl_link_unregister 4 | 5 | code.post =>> 6 | handle_unregister_post(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/changelink.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = changelink 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/dellink.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = dellink 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/fill_info.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = fill_info 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/fill_xstats.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = fill_xstats 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/get_num_rx_queues.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_num_rx_queues 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/get_num_tx_queues.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_num_tx_queues 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/get_size.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_size 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/get_tx_queues.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_tx_queues 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/get_xstats_size.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = get_xstats_size 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/newlink.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = newlink 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/setup.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = setup 3 | ####################################################################### 4 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | cb_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | { 4 | <$if is_locked$>handle_pre_locked<$else$>handle_pre_common<$endif$>(ls); 5 | } 6 | 7 | static void 8 | cb_<$function.name$>_post(struct kedr_local_storage *ls) 9 | { 10 | <$if is_locked$>handle_post_locked<$else$>handle_post_common<$endif$>(ls); 11 | } -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/templates/document/set_handlers.tpl: -------------------------------------------------------------------------------- 1 | if (ops-><$function.name$> != NULL) { 2 | kedr_set_func_handlers(ops-><$function.name$>, 3 | cb_<$function.name$>_pre, cb_<$function.name$>_post, 4 | (void *)ops, 0); 5 | } 6 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_ops/validate.data: -------------------------------------------------------------------------------- 1 | [group] 2 | function.name = validate 3 | 4 | # Define is_locked only for the callbacks known to execute under 5 | # rtnl_lock. The actual value does not matter. 6 | is_locked = yes 7 | ####################################################################### 8 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_register.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rtnl_link_register 4 | 5 | code.pre =>> 6 | handle_register_pre(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_link_unregister.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rtnl_link_unregister 4 | 5 | code.post =>> 6 | handle_unregister_post(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_lock.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rtnl_lock 4 | 5 | code.pre =>> 6 | on_rtnl_lock_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | on_rtnl_lock_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_trylock.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rtnl_trylock 4 | 5 | code.pre =>> 6 | on_rtnl_lock_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | int ret = (int)KEDR_LS_RET_VAL(ls); 11 | if (ret == 1) 12 | on_rtnl_lock_post(ls); 13 | << 14 | ####################################################################### 15 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/rtnl_unlock.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = rtnl_unlock 4 | 5 | code.pre =>> 6 | on_rtnl_unlock_pre(ls); 7 | << 8 | 9 | code.post =>> 10 | on_rtnl_unlock_post(ls); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/net/groups/rtnl/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/__alloc_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __alloc_skb 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/__kfree_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __kfree_skb 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | 8 | /* __kfree_skb() always frees the SKB */ 9 | handle_kfree_plain(ls, skb); 10 | << 11 | ####################################################################### 12 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/__netdev_alloc_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __netdev_alloc_skb 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/__pskb_copy.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = __pskb_copy 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/build_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = build_skb 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/consume_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = consume_skb 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/dev_alloc_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = dev_alloc_skb 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/dev_kfree_skb_any.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = dev_kfree_skb_any 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/dev_kfree_skb_irq.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = dev_kfree_skb_irq 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/dev_queue_xmit.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = dev_queue_xmit 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/kfree_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = kfree_skb 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/napi_gro_receive.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = napi_gro_receive 4 | 5 | code.pre =>> 6 | /* skb is the second argument */ 7 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG2(ls); 8 | handle_kfree_skb(ls, skb); 9 | << 10 | ####################################################################### 11 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/netif_receive_skb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = netif_receive_skb 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/netif_rx.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = netif_rx 4 | 5 | code.pre =>> 6 | struct sk_buff *skb = (struct sk_buff *)KEDR_LS_ARG1(ls); 7 | handle_kfree_skb(ls, skb); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/pskb_copy.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = pskb_copy 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/skb_clone.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = skb_clone 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/skb_copy.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = skb_copy 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/skb_copy_expand.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = skb_copy_expand 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/skb_queue_purge.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = skb_queue_purge 4 | 5 | code.pre =>> 6 | handle_skb_queue_purge(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/skb_realloc_headroom.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = skb_realloc_headroom 4 | 5 | code.post =>> 6 | handle_alloc(ls); 7 | << 8 | ####################################################################### 9 | -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | static void 2 | func_drd_<$function.name$>_pre(struct kedr_local_storage *ls) 3 | {<$if code.pre$> 4 | <$code.pre$><$endif$> 5 | } 6 | 7 | static void 8 | func_drd_<$function.name$>_post(struct kedr_local_storage *ls) 9 | {<$if code.post$> 10 | <$code.post$><$endif$> 11 | } 12 | 13 | <$handlerStruct$> -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/templates/block/handlerStruct.tpl: -------------------------------------------------------------------------------- 1 | static struct kedr_fh_handlers handlers_<$function.name$> = { 2 | .orig = &<$function.name$>, 3 | .pre = &func_drd_<$function.name$>_pre, 4 | .post = &func_drd_<$function.name$>_post, 5 | .repl = NULL 6 | }; -------------------------------------------------------------------------------- /sources/functions/net/groups/skb/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/net/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | Not used -------------------------------------------------------------------------------- /sources/functions/net/templates/document/add_group.tpl: -------------------------------------------------------------------------------- 1 | KEDR_FH_ADD_GROUP(<$group$>, groups); -------------------------------------------------------------------------------- /sources/functions/net/templates/document/declare_group.tpl: -------------------------------------------------------------------------------- 1 | KEDR_FH_DECLARE_GROUP(<$group$>); -------------------------------------------------------------------------------- /sources/functions/net/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # This test checks only that the plugin can be loaded. 2 | configure_file ( 3 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 4 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 5 | @ONLY 6 | ) 7 | 8 | kedr_test_add_script (functions.net.01 9 | test.sh 10 | ) 11 | -------------------------------------------------------------------------------- /sources/functions/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(plugin_api) 2 | add_subdirectory(args) 3 | add_subdirectory(callback_handlers) 4 | ######################################################################## 5 | -------------------------------------------------------------------------------- /sources/functions/tests/args/provider/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_NAME "test_arg_provider") 2 | 3 | kbuild_include_directories("${TOP_TEST_INCLUDE_DIR}") 4 | kbuild_add_module(${KMODULE_NAME} 5 | "module.c" 6 | # headers 7 | "${TOP_TEST_INCLUDE_DIR}/test_arg.h" 8 | ) 9 | kedr_test_add_target(${KMODULE_NAME}) 10 | -------------------------------------------------------------------------------- /sources/functions/tests/callback_handlers/cb_user/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_NAME ${TEST_CB_USER_NAME}) 2 | 3 | kbuild_include_directories("${TOP_TEST_INCLUDE_DIR}") 4 | kbuild_add_module(${KMODULE_NAME} 5 | "module.c" 6 | # headers 7 | "${TOP_TEST_INCLUDE_DIR}/test_cbh.h" 8 | ) 9 | kedr_test_add_target(${KMODULE_NAME}) 10 | -------------------------------------------------------------------------------- /sources/functions/tests/handlers/templates/block/block.tpl: -------------------------------------------------------------------------------- 1 | <$if trigger.add_before$><$trigger.add_before$> 2 | 3 | <$endif$>static noinline void 4 | trigger_<$function.name$>(void) 5 | { 6 | <$trigger.code$> 7 | } -------------------------------------------------------------------------------- /sources/functions/tests/handlers/templates/document/triggerItem.tpl: -------------------------------------------------------------------------------- 1 | {"<$function.name$>", &trigger_<$function.name$>}, -------------------------------------------------------------------------------- /sources/functions/tests/plugin_api/Readme.txt: -------------------------------------------------------------------------------- 1 | Part of the API for function handling plugins is checked by the tests for 2 | the particular plugins (esp., "kedr_fh_drd_common"). The rest is tested 3 | here. 4 | -------------------------------------------------------------------------------- /sources/functions/tests/plugin_api/target/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_NAME ${TEST_TARGET_NAME}) 2 | kbuild_add_module(${KMODULE_NAME} 3 | "module.c" 4 | ) 5 | kedr_test_add_target(${KMODULE_NAME}) 6 | ######################################################################## 7 | -------------------------------------------------------------------------------- /sources/functions/usb/templates/document/handlerItem.tpl: -------------------------------------------------------------------------------- 1 | &handlers_<$function.name$> -------------------------------------------------------------------------------- /sources/functions/usb/usb_deregister.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_deregister 4 | 5 | code.post =>> 6 | struct usb_driver *drv = (struct usb_driver *)KEDR_LS_ARG1(ls); 7 | on_deregister(ls, drv); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/functions/usb/usb_kill_anchored_urbs.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_kill_anchored_urbs 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | struct usb_anchor *anchor = (struct usb_anchor *)KEDR_LS_ARG1(ls); 8 | 9 | if (anchor) 10 | on_kill_anchored_urbs(ls->tid, info->pc, anchor); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/usb/usb_kill_urb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_kill_urb 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | struct urb *urb = (struct urb *)KEDR_LS_ARG1(ls); 8 | 9 | if (urb) 10 | on_kill_urb(ls->tid, info->pc, urb); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/usb/usb_poison_anchored_urbs.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_poison_anchored_urbs 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | struct usb_anchor *anchor = (struct usb_anchor *)KEDR_LS_ARG1(ls); 8 | 9 | if (anchor) 10 | on_kill_anchored_urbs(ls->tid, info->pc, anchor); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/usb/usb_poison_urb.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_poison_urb 4 | 5 | code.post =>> 6 | struct kedr_call_info *info = (struct kedr_call_info *)(ls->info); 7 | struct urb *urb = (struct urb *)KEDR_LS_ARG1(ls); 8 | 9 | if (urb) 10 | on_kill_urb(ls->tid, info->pc, urb); 11 | << 12 | ####################################################################### 13 | -------------------------------------------------------------------------------- /sources/functions/usb/usb_register_driver.data: -------------------------------------------------------------------------------- 1 | [group] 2 | # Name of the target function 3 | function.name = usb_register_driver 4 | 5 | code.pre =>> 6 | struct usb_driver *drv = (struct usb_driver *)KEDR_LS_ARG1(ls); 7 | on_register(ls, drv); 8 | << 9 | ####################################################################### 10 | -------------------------------------------------------------------------------- /sources/include/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This part is for the common header files for Kernel Strider. Note that the 4 | headers are not to be installed. They should be used during the build 5 | process only. 6 | -------------------------------------------------------------------------------- /sources/output/kernel/uuid_generator.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generator of uuid for CTF trace. 3 | * 4 | * Even in newest kernels(>2.6.35) there are special functions for 5 | * generate uuid, distinct implementation remain useful for oldest 6 | * kernels and for choosing version of uuid(see RFC 4122) 7 | */ 8 | 9 | #ifndef UUID_GENERATOR_H 10 | #define UUID_GENERATOR_H 11 | 12 | void generate_uuid(unsigned char uuid[16]); 13 | 14 | #endif /* UUID_GENERATOR_H*/ 15 | -------------------------------------------------------------------------------- /sources/output/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(templates_dir "${CMAKE_CURRENT_SOURCE_DIR}/templates") 2 | 3 | set(trace_sender_module_name "test_trace_sender") 4 | set(trace_sender_module_dir "${CMAKE_CURRENT_BINARY_DIR}/trace_sender") 5 | 6 | add_subdirectory(core_stub) 7 | add_subdirectory(test_messages) 8 | add_subdirectory(test_events) 9 | add_subdirectory(trace_sender) 10 | 11 | -------------------------------------------------------------------------------- /sources/output/tests/templates/check_events.cpp/block/check_subevent.tpl: -------------------------------------------------------------------------------- 1 | result = checker.check_subevent(<$subevent.args$>); 2 | if(result) 3 | { 4 | std::cerr << i + 1 << "-th event has incorrect subevent.\n"; 5 | return -1; 6 | } -------------------------------------------------------------------------------- /sources/output/tests/templates/check_events.cpp/block/subevent_count.tpl: -------------------------------------------------------------------------------- 1 | <$if subevent.args$><$endif$>1 -------------------------------------------------------------------------------- /sources/output/tests/templates/check_events.cpp/document/constant_def.tpl: -------------------------------------------------------------------------------- 1 | <$constant.type$> <$constant.name$> = <$constant.value$>; -------------------------------------------------------------------------------- /sources/output/tests/templates/check_messages.cpp/block/check_submessage.tpl: -------------------------------------------------------------------------------- 1 | result = checker.check_submessage(<$submessage.args$>); 2 | if(result) 3 | { 4 | std::cerr << i + 1 << "-th message has incorrect subevent.\n"; 5 | return -1; 6 | } -------------------------------------------------------------------------------- /sources/output/tests/templates/check_messages.cpp/block/submessage_count.tpl: -------------------------------------------------------------------------------- 1 | <$if submessage.args$><$endif$>1 -------------------------------------------------------------------------------- /sources/output/tests/templates/check_messages.cpp/document/constant_def.tpl: -------------------------------------------------------------------------------- 1 | <$constant.type$> <$constant.name$> = <$constant.value$>; -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_events.c/block/block.tpl: -------------------------------------------------------------------------------- 1 | <$if concat(subevent.args)$> 2 | generate_event_begin_<$event.type$>(<$event.args$>, <$subevent_count: join( + )$>); 3 | <$generate_subevent: join(\n)$> 4 | generate_event_end_<$event.type$>(); 5 | <$else$> 6 | generate_event_<$event.type$>(<$event.args$>); 7 | <$endif$> -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_events.c/block/generate_subevent.tpl: -------------------------------------------------------------------------------- 1 | generate_subevent_<$event.type$>(<$subevent.args$>); -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_events.c/block/subevent_count.tpl: -------------------------------------------------------------------------------- 1 | <$if subevent.args$><$endif$>1 -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_events.c/document/constant_def.tpl: -------------------------------------------------------------------------------- 1 | <$constant.type$> <$constant.name$> = <$constant.value$>; -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_messages.c/block/block.tpl: -------------------------------------------------------------------------------- 1 | <$if concat(submessage.args)$> 2 | generate_message_begin_<$message.type$>(<$message.args$>, <$submessage_count: join( + )$>); 3 | <$generate_submessage: join(\n)$> 4 | generate_message_end_<$message.type$>(); 5 | <$else$> 6 | generate_message_<$message.type$>(<$message.args$>); 7 | <$endif$> -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_messages.c/block/generate_submessage.tpl: -------------------------------------------------------------------------------- 1 | generate_submessage_<$message.type$>(<$submessage.args$>); -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_messages.c/block/submessage_count.tpl: -------------------------------------------------------------------------------- 1 | <$if submessage.args$><$endif$>1 -------------------------------------------------------------------------------- /sources/output/tests/templates/generate_messages.c/document/constant_def.tpl: -------------------------------------------------------------------------------- 1 | <$constant.type$> <$constant.name$> = <$constant.value$>; -------------------------------------------------------------------------------- /sources/output/user/trace_receiver_control_test.in: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | @CMAKE_CURRENT_BINARY_DIR@/@trace_receiver_control_name@ --receiver-path \ 3 | @CMAKE_CURRENT_BINARY_DIR@/@trace_receiver_program_name@ "$@" -------------------------------------------------------------------------------- /sources/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | add_subdirectory(sample_target) 4 | add_subdirectory(dummy_target) 5 | 6 | if (TSAN_APP) 7 | # These tests use ThreadSanitizer and may assume the path to it is 8 | # ${TSAN_APP}. 9 | add_subdirectory(bug_bench) 10 | endif () 11 | ######################################################################## 12 | -------------------------------------------------------------------------------- /sources/tests/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This part is for the "global" tests, that is, the tests that cover more than 4 | one component of Kernel Strider system or even the system as a whole. 5 | 6 | Note that the line between "global" and "local" tests is often not very 7 | clear, the distinction is made just for convenience. 8 | -------------------------------------------------------------------------------- /sources/tests/bug_bench/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | This directory tree is for the tests checking if our system detects various 4 | kinds of races and lists correct source code locations in the report. 5 | 6 | Recommended prefix for test names: "bug_bench". 7 | -------------------------------------------------------------------------------- /sources/tests/bug_bench/test_sample_target/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # This application is used in the tests that involve "kedr_sample_target" 2 | # module. 3 | set(APP_NAME "test_sample_target") 4 | 5 | add_executable("${APP_NAME}" 6 | main.c 7 | ) 8 | kedr_test_add_target(${APP_NAME}) 9 | -------------------------------------------------------------------------------- /sources/tests/dummy_target/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "kedr_dummy_target") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/tests/sample_target/Kbuild.in: -------------------------------------------------------------------------------- 1 | module_name=@KMODULE_NAME@ 2 | 3 | ccflags-y := -g -I$(src) 4 | obj-m := ${module_name}.o 5 | ${module_name}-y := cfake.o 6 | -------------------------------------------------------------------------------- /sources/tests/sample_target/cfake.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/sources/tests/sample_target/cfake.h -------------------------------------------------------------------------------- /sources/tests/sample_target/module.makefile.in: -------------------------------------------------------------------------------- 1 | module_name=@KMODULE_NAME@ 2 | 3 | KBUILD_DIR=/lib/modules/$(shell uname -r)/build 4 | PWD=$(shell pwd) 5 | 6 | all: ${module_name}.ko 7 | 8 | ${module_name}.ko: cfake.c 9 | $(MAKE) -C ${KBUILD_DIR} M=${PWD} modules 10 | 11 | clean: 12 | $(MAKE) -C ${KBUILD_DIR} M=${PWD} clean 13 | 14 | .PHONY: all clean 15 | -------------------------------------------------------------------------------- /sources/tests/util/Readme.developer.txt: -------------------------------------------------------------------------------- 1 | (For the developers of Kernel Strider) 2 | 3 | The utilities used by more than one test may be placed here, if other 4 | locations are less convenient. 5 | -------------------------------------------------------------------------------- /sources/tools/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | # [NB] Do not add "kedr_gen" subdirectory here because it should only be 4 | # used during the build process. 5 | ######################################################################## 6 | -------------------------------------------------------------------------------- /sources/tools/kedr_gen/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 2.6) 2 | 3 | add_subdirectory(src) 4 | -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/AUTHORS: -------------------------------------------------------------------------------- 1 | MiST Engine is written by: 2 | 3 | Eugene Shatokhin 4 | --------------------------------------- -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/INSTALL: -------------------------------------------------------------------------------- 1 | See doc/html/mist-doc/install.html for installation instructions and other 2 | relevant information. 3 | -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/src/config.h.cmake: -------------------------------------------------------------------------------- 1 | // config.h 2 | // Configured settings for "MiST Engine" project 3 | #define PACKAGE_NAME "@PROJECT_NAME@" 4 | #define PACKAGE_VERSION "@MIST_ENGINE_VERSION@" 5 | #define PACKAGE_BUGREPORT "@MIST_ENGINE_BUGREPORT@" 6 | -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/src/mist_engine.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/sources/tools/kedr_gen/src/mist_engine/src/mist_engine.rc -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/src/mist_engine.rc.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/sources/tools/kedr_gen/src/mist_engine/src/mist_engine.rc.in -------------------------------------------------------------------------------- /sources/tools/kedr_gen/src/mist_engine/src/versions.ldscript: -------------------------------------------------------------------------------- 1 | MIST_1.0 { 2 | global: 3 | mist_engine_init; 4 | mist_tg_create; 5 | mist_tg_create_single; 6 | mist_tg_add_value; 7 | mist_tg_set_values; 8 | mist_tg_clear_values; 9 | mist_tg_evaluate; 10 | mist_tg_destroy; 11 | local: 12 | *; 13 | }; 14 | -------------------------------------------------------------------------------- /sources/utils/ctf_reader/ctf_hash.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | char IDHelpers::idTable[256]; 4 | 5 | IDHelpers::IDHelpers(void) 6 | { 7 | for(int i = 0; i < 256; i++) 8 | IDHelpers::idTable[i] = isalnum(i) || (i == '_') ? 1 : 0; 9 | } 10 | 11 | /* Object needed only for fill table. */ 12 | IDHelpers IDHelperAUX; -------------------------------------------------------------------------------- /sources/utils/ctf_reader/ctf_reader_parser.h: -------------------------------------------------------------------------------- 1 | #include "ctf_reader_parser_base.tab.hh" 2 | #include "ctf_reader_scanner.h" 3 | #include "ctf_ast.h" 4 | 5 | #include 6 | 7 | class CTFReaderParser 8 | { 9 | public: 10 | CTFReaderParser(std::istream& stream, CTFAST& ast); 11 | 12 | /* Parse given stream and build given ast according to it */ 13 | void parse(void); 14 | private: 15 | CTFReaderScanner scanner; 16 | yy::parser parserBase; 17 | }; -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(var_types) 2 | add_subdirectory(iterators_normal) 3 | add_subdirectory(iterator_meta) -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterator_meta/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(executable_name "test_ctf_reader_iterator_meta") 2 | 3 | add_executable(${executable_name} 4 | "test.cpp") 5 | 6 | target_link_libraries(${executable_name} ${ctf_reader_name}) 7 | 8 | kedr_test_add_target(${executable_name}) 9 | 10 | kedr_test_add("ctf_reader.iterator_meta.01" "${executable_name}" 11 | ${CMAKE_CURRENT_SOURCE_DIR}) -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(executable_name "test_ctf_reader_iterators_normal") 2 | 3 | add_executable(${executable_name} 4 | "test.cpp") 5 | 6 | target_link_libraries(${executable_name} ${ctf_reader_name}) 7 | 8 | kedr_test_add_target(${executable_name}) 9 | 10 | kedr_test_add("ctf_reader.iterators_normal.01" "${executable_name}" 11 | ${CMAKE_CURRENT_SOURCE_DIR}) -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/data1: -------------------------------------------------------------------------------- 1 | 88 -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/data2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/euspectre/kernel-strider/dad1d5772751fa25490121c0d2d7ddaaa519f848/sources/utils/ctf_reader/tests/iterators_normal/data2 -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/data3: -------------------------------------------------------------------------------- 1 | ((@@ 00 2 | -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/metadata1: -------------------------------------------------------------------------------- 1 | typedef integer{size = 8; align = 8; byte_order = be; signed = false;} uint8_t; 2 | 3 | stream 4 | { 5 | packet.context := struct { 6 | uint8_t packet_size; 7 | uint8_t context_size; 8 | }; 9 | }; 10 | 11 | event 12 | { 13 | fields := uint8_t; 14 | }; -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/iterators_normal/metadata3: -------------------------------------------------------------------------------- 1 | typedef integer{size = 8; align = 8; byte_order = be; signed = false;} uint8_t; 2 | 3 | stream 4 | { 5 | packet.context := struct { 6 | uint8_t packet_size; 7 | uint8_t context_size; 8 | }; 9 | }; 10 | 11 | event 12 | { 13 | fields := uint8_t; 14 | }; 15 | -------------------------------------------------------------------------------- /sources/utils/ctf_reader/tests/var_types/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(executable_name "test_ctf_reader_var_types") 2 | 3 | add_executable(${executable_name} 4 | "test.cpp") 5 | 6 | target_link_libraries(${executable_name} ${ctf_reader_name}) 7 | 8 | kedr_test_add_target(${executable_name}) 9 | 10 | kedr_test_add("ctf_reader.var_types.01" "${executable_name}") -------------------------------------------------------------------------------- /sources/utils/for_tsan/process_trace/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | kedr_load_test_prefixes() 2 | 3 | if (TSAN_APP) 4 | add_subdirectory(init_not_first) 5 | endif () 6 | ######################################################################## 7 | -------------------------------------------------------------------------------- /sources/utils/for_tsan/process_trace/tests/init_not_first/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KEDR_TEST_TEMP_DIR "${KEDR_TEST_PREFIX_TEMP}/init_not_first") 2 | 3 | configure_file( 4 | "${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in" 5 | "${CMAKE_CURRENT_BINARY_DIR}/test.sh" 6 | @ONLY 7 | ) 8 | 9 | kedr_test_add_script(utils.init_not_first.01 10 | test.sh 11 | ) 12 | 13 | add_subdirectory(target) 14 | ######################################################################## 15 | -------------------------------------------------------------------------------- /sources/utils/for_tsan/process_trace/tests/init_not_first/target/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KMODULE_TARGET_NAME "test_init_not_first") 2 | 3 | kbuild_add_module(${KMODULE_TARGET_NAME} 4 | "module.c") 5 | 6 | kedr_test_add_target (${KMODULE_TARGET_NAME}) 7 | -------------------------------------------------------------------------------- /sources/utils/for_tsan/symbolize/config.h.in: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H_SYMBOLIZE_1021_INCLUDED 2 | #define CONFIG_H_SYMBOLIZE_1021_INCLUDED 3 | 4 | #define PROJECT_APP_NAME "@PROJECT_NAME@" 5 | 6 | #endif //CONFIG_H_SYMBOLIZE_1021_INCLUDED 7 | -------------------------------------------------------------------------------- /sources/utils/kedr_trace_reader/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(kedr_trace_reader_name "kedr_trace_reader" CACHE INTERNAL 2 | "Name of the library for read trace generated by KEDR") 3 | 4 | add_library(${kedr_trace_reader_name} STATIC 5 | "kedr_trace_reader.cpp" 6 | ) 7 | 8 | target_link_libraries(${kedr_trace_reader_name} ${ctf_reader_name}) -------------------------------------------------------------------------------- /sources/utils/simple_trace_recorder/kedr_st_rec_config.h.in: -------------------------------------------------------------------------------- 1 | /* Name of the kernel part of the simple trace recorder system */ 2 | #define KEDR_ST_REC_KMODULE_NAME "@KEDR_ST_REC_KMODULE_NAME@" 3 | 4 | /* The base directory of debugfs */ 5 | #define KEDR_ST_REC_DEBUGFS_DIR "@KEDR_ST_REC_DEBUGFS_DIR@" 6 | --------------------------------------------------------------------------------