66
77 Copyright (c) 2005-2019 Kestrel Technology LLC
88 Copyright (c) 2020 Henny Sipma
9- Copyright (c) 2021-2024 Aarno Labs LLC
9+ Copyright (c) 2021-2025 Aarno Labs LLC
1010
1111 Permission is hereby granted, free of charge, to any person obtaining a copy
1212 of this software and associated documentation files (the "Software"), to deal
@@ -38,6 +38,7 @@ open BCHBasicTypes
3838open BCHLibTypes
3939open BCHUtilities
4040
41+ module H = Hashtbl
4142
4243let fns_included = ref []
4344let include_function (s : string ) = fns_included := s :: ! fns_included
@@ -49,6 +50,76 @@ let exclude_function (s: string) = fns_excluded := s :: !fns_excluded
4950let excluded_functions () = ! fns_excluded
5051
5152
53+ let arm_typingrules_settings = H. create 23
54+
55+ let _ =
56+ List. iter (fun (r , s ) ->
57+ H. add arm_typingrules_settings r s)
58+ [(* propagation rules *)
59+ (" ADD-c" , " enable" );
60+ (" AND-rdef" , " enable" );
61+ (" ASR-rdef" , " enable" );
62+ (" CMP-rdef" , " enable" );
63+ (" LSL_rdef" , " enable" );
64+ (" LSR_rdef" , " enable" );
65+ (" MOV-c" , " enable" );
66+ (" MOV-rdef" , " enable" );
67+ (" MVN-rdef" , " enable" );
68+ (" ORR-rdef" , " enable" );
69+ (" POP-rdef" , " enable" );
70+ (" RSB-rdef" , " enable" );
71+ (" SMULL-rdef" , " enable" );
72+ (" STR-rdef" , " enable" );
73+ (" SUB-rdef" , " enable" );
74+ (" UBFX-rdef" , " enable" );
75+
76+ (* load/store rules *)
77+ (" LDR-load" , " enable" );
78+ (" LDRB-load" , " enable" );
79+ (" LDRH-load" , " enable" );
80+ (" STR-store" , " enable" );
81+ (" STRB-store" , " enable" );
82+ (" STRH-store" , " enable" );
83+
84+ (* function return type back propagation *)
85+ (" ADD-exituse" , " enable" );
86+ (" AND-exituse" , " enable" );
87+ (" ASR-exituse" , " enable" );
88+ (" LDR-exituse" , " enable" );
89+ (" LDRB-exituse" , " enable" );
90+ (" LDRH-exituse" , " enable" );
91+ (" LSL-exituse" , " enable" );
92+ (" LSR-exituse" , " enable" );
93+ (" MOV-exituse" , " enable" );
94+ (" MVN-exituse" , " enable" );
95+ (" ORR-exituse" , " enable" );
96+ (" RSB-exituse" , " enable" );
97+ (" SUB-exituse" , " enable" );
98+ (" UBFX-exituse" , " enable" );
99+ (" UXTH-exituse" , " enable" );
100+
101+ (* default setting of lhs *)
102+ (" ASR-def-lhs" , " enable" );
103+ (" LDRB-def-lhs" , " enable" );
104+ (" LDRH-def-lhs" , " enable" );
105+ (" MVN-def-lhs" , " enable" );
106+ (" SMULL-def-lhs" , " enable" );
107+ (" UXTH-def-lhs" , " enable" );
108+
109+ (* misc rules *)
110+ (" ADD-global" , " enable" );
111+ (" BL-sig-regarg" , " enable" );
112+ (" BL-sig-stackarg" , " enable" );
113+ (" BL-sig-rv" , " enable" );
114+ (" LDR-array" , " enable" );
115+ (" LDR-memop-tc" , " enable" );
116+ (" LDR-stack-addr" , " enable" );
117+ (" LDR-struct-field" , " enable" );
118+ (" LDRH-memop-tc" , " enable" );
119+ (" POP-sig-rv" , " enable" )
120+ ]
121+
122+
52123(* -------------------------------------------------------------------------
53124 * Command-line switches:
54125 * - set_vftables: for all jump tables, if one of the targets is a function entry
@@ -313,6 +384,13 @@ object (self)
313384 | [] -> not (List. mem gv not_record_sideeffects_on_globals)
314385 | l -> List. mem gv l)
315386
387+ method is_typing_rule_enabled (name : string ) =
388+ match self#get_architecture with
389+ | "arm" ->
390+ (H. mem arm_typingrules_settings name)
391+ && (H. find arm_typingrules_settings name) == " enable"
392+ | _ -> false
393+
316394end
317395
318396
0 commit comments