@@ -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
0 commit comments