Skip to content

Commit f117219

Browse files
committed
CHB: convert index expression to c expression
1 parent 120932a commit f117219

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

CodeHawk/CHB/bchlib/bCHFloc.ml

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,16 @@ object (self)
667667
(numoffset: numerical_t): variable_t traceresult =
668668
let inv = self#inv in
669669
let mk_memvar memref_r memoffset_r =
670+
let _ =
671+
log_diagnostics_result
672+
~msg:(p2s self#l#toPretty)
673+
~tag:"get_memory_variable_numoffset:mk_memvar"
674+
__FILE__ __LINE__
675+
["var: " ^ (p2s var#toPretty);
676+
"memref_r: "
677+
^ (TR.tfold_default (fun memref -> p2s memref#toPretty) "error" memref_r);
678+
"memoff_r: "
679+
^ (TR.tfold_default memory_offset_to_string "error" memoffset_r)] in
670680
TR.tbind
671681
~msg:(__FILE__ ^ ":" ^ (string_of_int __LINE__))
672682
(fun memref ->
@@ -1250,21 +1260,44 @@ object (self)
12501260
?(size=None)
12511261
?(btype=t_unknown)
12521262
(addrvalue: xpr_t): variable_t traceresult =
1263+
let _ =
1264+
log_diagnostics_result
1265+
~msg:(p2s self#l#toPretty)
1266+
~tag:"get_var_at_address"
1267+
__FILE__ __LINE__
1268+
["addrvalue: " ^ (x2s addrvalue);
1269+
"btype: " ^ (btype_to_string btype)] in
1270+
12531271
match self#normalize_addrvalue addrvalue with
12541272
| XOp ((Xf "addressofvar"), [XVar v]) -> Ok v
12551273
| XOp (XPlus, [XOp ((Xf "addressofvar"), [XVar v]); xoff])
12561274
when self#f#env#is_global_variable v ->
12571275
let gvaddr_r = self#f#env#get_global_variable_address v in
1276+
let cxoff_r = self#convert_xpr_to_c_expr xoff in
12581277
TR.tbind
12591278
~msg:(__FILE__ ^ ":" ^ (string_of_int __LINE__))
12601279
(fun gvaddr ->
12611280
if memmap#has_location gvaddr then
12621281
let gloc = memmap#get_location gvaddr in
1263-
TR.tmap
1264-
~msg:(__FILE__ ^ ":" ^ (string_of_int __LINE__))
1265-
(fun offset -> self#f#env#mk_gloc_variable gloc offset)
1266-
(gloc#address_offset_memory_offset
1267-
~tgtsize:size ~tgtbtype:btype xoff)
1282+
let varresult =
1283+
TR.tmap
1284+
~msg:(__FILE__ ^ ":" ^ (string_of_int __LINE__))
1285+
(fun offset -> self#f#env#mk_gloc_variable gloc offset)
1286+
(TR.tbind
1287+
(fun xoff ->
1288+
gloc#address_offset_memory_offset
1289+
~tgtsize:size ~tgtbtype:btype xoff)
1290+
cxoff_r) in
1291+
let _ =
1292+
log_diagnostics_result
1293+
~msg:(p2s self#l#toPretty)
1294+
~tag:"normalized global address"
1295+
__FILE__ __LINE__
1296+
["varresult: "
1297+
^ (TR.tfold_default (fun v -> p2s v#toPretty) "error" varresult);
1298+
"gloc: " ^ gloc#name] in
1299+
varresult
1300+
12681301
else
12691302
Error [__FILE__ ^ ":" ^ (string_of_int __LINE__) ^ ": "
12701303
^ (p2s self#l#toPretty)
@@ -1805,6 +1838,12 @@ object (self)
18051838

18061839
method decompose_memaddr (x: xpr_t):
18071840
(memory_reference_int traceresult * memory_offset_t traceresult) =
1841+
let _ =
1842+
log_diagnostics_result
1843+
~msg:(p2s self#l#toPretty)
1844+
~tag:"decompose_memaddr"
1845+
__FILE__ __LINE__
1846+
["x: " ^ (x2s x)] in
18081847
let is_external (v: variable_t) = self#env#is_function_initial_value v in
18091848
let vars = vars_as_positive_terms x in
18101849
let knownpointers = List.filter self#f#is_base_pointer vars in

CodeHawk/CHB/bchlibarm32/bCHFnARMDictionary.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,10 +1105,13 @@ object (self)
11051105
let indexregop = jt#index_operand in
11061106
let xrn_r = indexregop#to_expr floc in
11071107
let xxrn_r = TR.tmap rewrite_expr xrn_r in
1108+
let cxrn_r =
1109+
TR.tbind (floc#convert_xpr_to_c_expr ~size:(Some 4)) xxrn_r in
11081110
let rdefs = (get_rdef_r xrn_r) :: (get_all_rdefs_r xxrn_r) in
11091111
let (tagstring, args) =
11101112
mk_instrx_data_r
11111113
~xprs_r:[xrn_r; xxrn_r]
1114+
~cxprs_r:[cxrn_r]
11121115
~rdefs
11131116
() in
11141117
let tags = tagstring :: ["agg-jt"] in

0 commit comments

Comments
 (0)