@@ -109,6 +109,8 @@ module DoublewordCollections = CHCollections.Make
109109
110110let id = BCHInterfaceDictionary. interface_dictionary
111111
112+ let memmap = BCHGlobalMemoryMap. global_memory_map
113+
112114
113115type po_anchor_t = (* proof obligation anchor *)
114116| DirectAccess
@@ -850,7 +852,23 @@ object (self)
850852 ?(size =4 )
851853 ?(offset =NoOffset )
852854 (base : numerical_t ): variable_t traceresult =
853- let base = base#modulo (mkNumerical BCHDoubleword. e32) in
855+ let dwbase =
856+ fail_tfold
857+ (trerror_record
858+ (LBLOCK [
859+ STR " Converting " ;
860+ base#toPretty;
861+ STR " in finfo.mk_global_variable in function " ;
862+ faddr#toPretty]))
863+ (fun b -> b)
864+ (numerical_to_doubleword (base#modulo (mkNumerical BCHDoubleword. e32))) in
865+ let default (gloc : global_location_int ) =
866+ let var =
867+ self#mk_variable (varmgr#make_global_variable ~size ~offset base) in
868+ let _ = self#set_variable_name var gloc#name in
869+ Ok var in
870+
871+ (*
854872 match numerical_to_doubleword base with
855873 | Error e -> Error ("finfo.mk_global_variable" :: e)
856874 | Ok addr ->
@@ -880,6 +898,29 @@ object (self)
880898 | _ -> ());
881899 Ok var
882900 end in
901+ *)
902+ match memmap#containing_location dwbase with
903+ | Some gloc ->
904+ tfold
905+ ~ok: (fun memoffset ->
906+ let var =
907+ self#mk_variable
908+ (varmgr#make_global_variable
909+ ~offset: memoffset gloc#address#to_numerical) in
910+ let _ = self#set_variable_name var gloc#name in
911+ Ok var)
912+ ~error: (fun sl ->
913+ begin
914+ chlog#add
915+ " fenv#mk_global_variable: Error"
916+ (LBLOCK [faddr#toPretty; STR " : " ; STR (String. concat " ; " sl)]);
917+ default gloc
918+ end )
919+ (gloc#address_memory_offset dwbase)
920+ | _ ->
921+ Ok (self#mk_variable (varmgr#make_global_variable ~size ~offset base))
922+ (*
923+ |
883924
884925 if is_in_global_structvar addr then
885926 (match get_structvar_base_offset addr with
@@ -951,6 +992,7 @@ object (self)
951992 default ())
952993 else
953994 default ()
995+ *)
954996
955997 method mk_global_memory_address
956998 ?(optname = None ) ?(opttype =None ) (n : numerical_t ) =
@@ -2010,7 +2052,13 @@ object (self)
20102052 method set_bc_summary (fs : function_summary_int ) =
20112053 begin
20122054 appsummary < - fs;
2013- env#set_argument_names fs#get_function_interface
2055+ env#set_argument_names fs#get_function_interface;
2056+ chlog#add
2057+ " set-bc-summary"
2058+ (LBLOCK [
2059+ function_interface_to_pretty fs#get_function_interface;
2060+ STR " with function signature " ;
2061+ STR (btype_to_string fs#get_function_interface.fintf_type_signature.fts_returntype)])
20142062 end
20152063
20162064 method read_xml_user_summary (node :xml_element_int ) =
0 commit comments