@@ -56,7 +56,6 @@ open BCHELFTypes
5656open BCHARMAssemblyFunctions
5757open BCHARMAssemblyInstruction
5858open BCHARMAssemblyInstructions
59- open BCHARMCallSitesRecords
6059open BCHARMInstructionAggregate
6160open BCHARMPseudocode
6261open BCHARMOpcodeRecords
@@ -455,6 +454,18 @@ let get_so_target (tgtaddr:doubleword_int) (_instr:arm_assembly_instruction_int)
455454 None
456455
457456
457+ let register_non_returning_functions () =
458+ List. map (fun fndata ->
459+ if fndata#is_non_returning then
460+ ()
461+ else if fndata#has_name then
462+ let fname = fndata#get_function_name in
463+ if function_summary_library#has_so_function fname then
464+ let fsum = function_summary_library#get_so_function fname in
465+ if fsum#is_nonreturning then
466+ fndata#set_non_returning) functions_data#get_functions
467+
468+
458469(* can be used before functions have been constructed *)
459470let is_nr_call_instruction (instr :arm_assembly_instruction_int ) =
460471 match instr#get_opcode with
@@ -947,9 +958,11 @@ let construct_functions_arm ?(construct_all_functions=false) () =
947958 List. iter
948959 (fun dw -> ignore (functions_data#add_function dw))
949960 (List. map (fun s -> TR. tget_ok (string_to_doubleword s)) fns_included) in
961+ let _ = register_non_returning_functions () in
950962 let _ = collect_call_targets () in
951963 let _ = set_block_boundaries () in
952964 let _ = pr_timing [STR " block boundaries set" ] in
965+ (* Disabled for now; it generates too many spurious non-returning functions.
953966 let _ = !arm_assembly_instructions#collect_callsites in
954967 let _ = pr_timing [STR "callsites collected"] in
955968 let _ =
@@ -958,7 +971,7 @@ let construct_functions_arm ?(construct_all_functions=false) () =
958971 if functions_data#is_function_entry_point faddr then
959972 let fndata = functions_data#get_function faddr in
960973 fndata#set_non_returning) nonrfns in
961- let _ = pr_timing [STR " non-returning functions set" ] in
974+ let _ = pr_timing [STR "non-returning functions set"] in *)
962975 let fnentrypoints =
963976 if ((List. length fns_included) = 0 ) || construct_all_functions then
964977 functions_data#get_function_entry_points
0 commit comments