Skip to content

Commit 64ac6bb

Browse files
committed
Merge branch 'master' into summaries
2 parents b8ec55f + 34c7332 commit 64ac6bb

File tree

4 files changed

+81
-7
lines changed

4 files changed

+81
-7
lines changed

CodeHawk/CHB/bchlib/bCHFunctionInfo.ml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,12 @@ object (self)
894894
self#mk_variable (varmgr#make_global_variable ~size ~offset base) in
895895
begin
896896
(match name with
897-
| Some vname -> self#set_variable_name var vname
897+
| Some vname ->
898+
let ivar = self#mk_variable (varmgr#make_initial_memory_value var) in
899+
begin
900+
self#set_variable_name var vname;
901+
self#set_variable_name ivar (vname ^ "_in")
902+
end
898903
| _ -> ());
899904
Ok var
900905
end in

CodeHawk/CHB/bchlib/bCHTypeConstraintStore.ml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,7 @@ object (self)
293293
| [] -> ()
294294
| [_] -> ()
295295
| _ ->
296-
if List.for_all termset#has cterms then
297-
()
298-
else if List.exists termset#has cterms then
296+
if List.exists termset#has cterms then
299297
begin
300298
List.iter termset#add cterms;
301299
constraintset#add ixc;

CodeHawk/CHB/bchlib/bCHVersion.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ end
9595

9696

9797
let version = new version_info_t
98-
~version:"0.6.0_20241217"
99-
~date:"2024-12-17"
98+
~version:"0.6.0_20241218"
99+
~date:"2024-12-18"
100100
~licensee: None
101101
~maxfilesize: None
102102
()

CodeHawk/CHB/bchlibarm32/bCHFnARMTypeConstraints.ml

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ object (self)
208208
match instr#get_opcode with
209209

210210
| Add (_, _, rd, rn, rm, _) ->
211+
let xrn = rn#to_expr floc in
211212
begin
212213

213214
(if rm#is_immediate && (rm#to_numerical#toInt < 256) then
@@ -245,6 +246,20 @@ object (self)
245246
| _ -> ())
246247
else
247248
()
249+
| _ -> ());
250+
251+
(match getopt_initial_argument_value xrn with
252+
| Some (reg, _) ->
253+
let ftvar = mk_function_typevar faddr in
254+
let ftvar = add_freg_param_capability reg ftvar in
255+
let rdreg = rd#to_register in
256+
let lhstypevar = mk_reglhs_typevar rdreg faddr iaddr in
257+
let fttypeterm = mk_vty_term ftvar in
258+
let lhstypeterm = mk_vty_term lhstypevar in
259+
begin
260+
log_subtype_constraint "ADD-lhs-init" fttypeterm lhstypeterm;
261+
store#add_subtype_constraint fttypeterm lhstypeterm
262+
end
248263
| _ -> ())
249264
end
250265

@@ -312,6 +327,25 @@ object (self)
312327

313328
end
314329

330+
| BitwiseOr (_, _, rd, rn, _, _) ->
331+
let rdreg = rd#to_register in
332+
let lhstypevar = mk_reglhs_typevar rdreg faddr iaddr in
333+
let rndefs = get_variable_rdefs (rn#to_variable floc) in
334+
let rnreg = rn#to_register in
335+
begin
336+
337+
List.iter (fun rnsym ->
338+
let rnaddr = rnsym#getBaseName in
339+
let rntypevar = mk_reglhs_typevar rnreg faddr rnaddr in
340+
let rntypeterm = mk_vty_term rntypevar in
341+
let lhstypeterm = mk_vty_term lhstypevar in
342+
begin
343+
log_subtype_constraint "AND-rdef-1" rntypeterm lhstypeterm;
344+
store#add_subtype_constraint rntypeterm lhstypeterm
345+
end) rndefs
346+
end
347+
348+
315349
| Branch _ ->
316350
(* no type information gained *)
317351
()
@@ -658,7 +692,17 @@ object (self)
658692
begin
659693
log_subtype_constraint "LDRB-imm-off" rdtypeterm rttypeterm;
660694
store#add_subtype_constraint rdtypeterm rttypeterm
661-
end) xrdefs)
695+
end) xrdefs);
696+
697+
(* LDRB rt, ... : X_rt <: integer type *)
698+
(let tc = mk_int_type_constant Unsigned 8 in
699+
let tctypeterm = mk_cty_term tc in
700+
let rttypeterm = mk_vty_term rttypevar in
701+
begin
702+
log_subtype_constraint "LDRB-lhs-byte" tctypeterm rttypeterm;
703+
store#add_subtype_constraint tctypeterm rttypeterm
704+
end)
705+
662706
end
663707

664708
| LoadRegisterByte (_, rt, _, _, _, _) ->
@@ -741,6 +785,33 @@ object (self)
741785
store#add_subtype_constraint tctypeterm rntypeterm
742786
end) rndefs)
743787

788+
| LogicalShiftRight (_, _, rd, rn, rm, _) when rm#is_immediate ->
789+
let rdreg = rd#to_register in
790+
let lhstypevar = mk_reglhs_typevar rdreg faddr iaddr in
791+
let rnreg = rn#to_register in
792+
let rndefs = get_variable_rdefs (rn#to_variable floc) in
793+
794+
(* LSR results in an unsigned integer *)
795+
(let tc = mk_int_type_constant Unsigned 32 in
796+
let tcterm = mk_cty_term tc in
797+
let lhstypeterm = mk_vty_term lhstypevar in
798+
begin
799+
log_subtype_constraint "LSR-lhs" tcterm lhstypeterm;
800+
store#add_subtype_constraint tcterm lhstypeterm
801+
end);
802+
803+
(* LSR is applied to an unsigned integer *)
804+
(List.iter (fun rnrdef ->
805+
let rnaddr = rnrdef#getBaseName in
806+
let rntypevar = mk_reglhs_typevar rnreg faddr rnaddr in
807+
let tyc = mk_int_type_constant Unsigned 32 in
808+
let tctypeterm = mk_cty_term tyc in
809+
let rntypeterm = mk_vty_term rntypevar in
810+
begin
811+
log_subtype_constraint "LSR-rhs" tctypeterm rntypeterm;
812+
store#add_subtype_constraint tctypeterm rntypeterm
813+
end) rndefs)
814+
744815
| Move (_, _, rd, rm, _, _) when rm#is_immediate ->
745816
let rmval = rm#to_numerical#toInt in
746817
(* 0 provides no information about the type *)

0 commit comments

Comments
 (0)