Skip to content

Commit d6dcdfb

Browse files
committed
CHB:ARM:TYPE: modify typing rules
1 parent 27cbb66 commit d6dcdfb

File tree

3 files changed

+63
-31
lines changed

3 files changed

+63
-31
lines changed

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_20250722"
99-
~date:"2025-07-22"
98+
~version:"0.6.0_20250728"
99+
~date:"2025-07-28"
100100
~licensee: None
101101
~maxfilesize: None
102102
()

CodeHawk/CHB/bchlibarm32/bCHFnARMDictionary.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,7 @@ object (self)
11781178
let r0_op = arm_register_op AR0 RD in
11791179
let xr0_r = r0_op#to_expr floc in
11801180
let xxr0_r = TR.tmap rewrite_expr xr0_r in
1181+
let xxr0_r = TR.tmap (rewrite_in_cc_context floc c) xxr0_r in
11811182
let cxr0_r = TR.tbind floc#convert_xpr_to_c_expr xxr0_r in
11821183
let (tagstring, args) = mk_instrx_data_r () in
11831184
let (tags, args) = add_optional_instr_condition tagstring args c in

CodeHawk/CHB/bchlibarm32/bCHFnARMTypeConstraints.ml

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ object (self)
156156
let varinvs = floc#varinv#get_var_reaching_defs symvar in
157157
(match varinvs with
158158
| [vinv] -> vinv#get_reaching_defs
159-
| _ -> []) in
159+
| _ ->
160+
List.concat (List.map (fun vinv -> vinv#get_reaching_defs) varinvs)) in
160161

161162
let get_variable_rdefs_r (v_r: variable_t traceresult): symbol_t list =
162163
TR.tfold_default get_variable_rdefs [] v_r in
@@ -347,10 +348,13 @@ object (self)
347348
let tt_z = mk_vty_term tv_z in
348349
let fterm = mk_vty_term fvar in
349350
let rule = mnem ^ "-exituse" in
350-
begin
351-
log_subtype_constraint __LINE__ rule tt_z fterm;
352-
store#add_subtype_constraint faddr iaddr rule tt_z fterm
353-
end)
351+
if fndata#is_typing_rule_enabled iaddr rule then
352+
begin
353+
log_subtype_constraint __LINE__ rule tt_z fterm;
354+
store#add_subtype_constraint faddr iaddr rule tt_z fterm
355+
end
356+
else
357+
log_subtype_rule_disabled __LINE__ rule tt_z fterm)
354358
else
355359
() in
356360

@@ -620,7 +624,7 @@ object (self)
620624
end)
621625
| _ ->
622626
let opttc = mk_btype_constraint typevar rtype in
623-
let rule = "BL-rv" in
627+
let rule = "BL-sig-rv" in
624628
match opttc with
625629
| Some tc ->
626630
if fndata#is_typing_rule_enabled iaddr rule then
@@ -642,6 +646,7 @@ object (self)
642646
begin
643647
(if is_register_parameter p then
644648
let regarg = TR.tget_ok (get_register_parameter_register p) in
649+
let regstr = BCHCPURegisters.register_to_string regarg in
645650
let pvar = floc#f#env#mk_register_variable regarg in
646651
let rdefs = get_variable_rdefs pvar in
647652
if not (is_unknown_type ptype) then
@@ -652,7 +657,8 @@ object (self)
652657
let rule = "BL-sig-regarg" in
653658
match opttc with
654659
| Some tc ->
655-
if fndata#is_typing_rule_enabled iaddr rule then
660+
if fndata#is_typing_rule_enabled
661+
~rdef:(Some regstr) iaddr rule then
656662
begin
657663
log_type_constraint __LINE__ rule tc;
658664
store#add_constraint faddr iaddr rule tc
@@ -1437,36 +1443,61 @@ object (self)
14371443
let lhstypevar =
14381444
mk_localstack_lhs_typevar offset faddr iaddr in
14391445
let opttc = mk_btype_constraint lhstypevar t in
1446+
let rule = "STR-svintro" in
14401447
(match opttc with
14411448
| Some tc ->
1442-
let rule = "STR-svintro" in
14431449
begin
14441450
log_type_constraint __LINE__ rule tc;
14451451
store#add_constraint faddr iaddr rule tc
14461452
end
1447-
| _ -> ()))
1453+
| _ ->
1454+
log_no_type_constraint __LINE__ rule t))
14481455
end);
14491456

1450-
(let rule = "STR-store" in
1451-
List.iter (fun rndsym ->
1452-
let straddr = rndsym#getBaseName in
1453-
let rntypevar = mk_reglhs_typevar rnreg faddr straddr in
1454-
let rntypevar = add_store_capability ~size:4 ~offset rntypevar in
1455-
List.iter (fun rtdsym ->
1456-
let rtdloc = rtdsym#getBaseName in
1457-
let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1458-
let rttypeterm = mk_vty_term rttypevar in
1459-
let rntypeterm = mk_vty_term rntypevar in
1460-
if fndata#is_typing_rule_enabled
1461-
~rdef:(Some rtdloc) iaddr rule then
1462-
begin
1463-
log_subtype_constraint __LINE__ rule rttypeterm rntypeterm;
1464-
store#add_subtype_constraint
1465-
faddr iaddr rule rttypeterm rntypeterm
1466-
end
1467-
else
1468-
log_subtype_rule_disabled __LINE__ rule rttypeterm rntypeterm
1469-
) rtrdefs) rnrdefs)
1457+
(let rule = "STR-store" in
1458+
List.iter (fun rndsym ->
1459+
let straddr = rndsym#getBaseName in
1460+
let rntypevar = mk_reglhs_typevar rnreg faddr straddr in
1461+
let rntypevar = add_store_capability ~size:4 ~offset rntypevar in
1462+
List.iter (fun rtdsym ->
1463+
let rtdloc = rtdsym#getBaseName in
1464+
let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1465+
let rttypeterm = mk_vty_term rttypevar in
1466+
let rntypeterm = mk_vty_term rntypevar in
1467+
if fndata#is_typing_rule_enabled
1468+
~rdef:(Some rtdloc) iaddr rule then
1469+
begin
1470+
log_subtype_constraint __LINE__ rule rttypeterm rntypeterm;
1471+
store#add_subtype_constraint
1472+
faddr iaddr rule rttypeterm rntypeterm
1473+
end
1474+
else
1475+
log_subtype_rule_disabled __LINE__ rule rttypeterm rntypeterm
1476+
) rtrdefs) rnrdefs);
1477+
1478+
(* type of destination memory location may be known *)
1479+
(let vmem_r = memvarop#to_variable floc in
1480+
let vtype_r = TR.tbind floc#get_variable_type vmem_r in
1481+
let rule = "STR-memop-tc" in
1482+
TR.titer
1483+
~ok:(fun t ->
1484+
List.iter (fun rtdsym ->
1485+
let rtdloc = rtdsym#getBaseName in
1486+
let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1487+
let opttc = mk_btype_constraint rttypevar t in
1488+
match opttc with
1489+
| Some tc ->
1490+
if fndata#is_typing_rule_enabled iaddr rule then
1491+
begin
1492+
log_type_constraint __LINE__ rule tc;
1493+
store#add_constraint faddr iaddr rule tc
1494+
end
1495+
else
1496+
log_type_constraint_rule_disabled __LINE__ rule tc
1497+
| _ -> ()) rtrdefs)
1498+
~error:(fun e -> log_error_result __FILE__ __LINE__ e)
1499+
vtype_r)
1500+
14701501
end
14711502

14721503
| StoreRegisterByte (_, rt, rn, rm, _memvarop, _) when rm#is_immediate ->

0 commit comments

Comments
 (0)