Skip to content

Commit 6c7c69c

Browse files
committed
CHB: roll over base address and add error-handling
1 parent 27afb7f commit 6c7c69c

12 files changed

+285
-146
lines changed

CodeHawk/CHB/bchlib/bCHFloc.ml

Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,13 @@ object (self)
691691
(self#cia ^ ": constant: " ^ n#toString))
692692
(fun base ->
693693
if system_info#get_image_base#le base then
694-
self#env#mk_global_variable ~size n
694+
log_tfold_default
695+
(log_error
696+
"get_memory_variable_1"
697+
(self#cia ^ " : constant: " ^ n#toString))
698+
(fun v -> v)
699+
(default ())
700+
(self#env#mk_global_variable ~size n)
695701
else
696702
default ())
697703
(default ())
@@ -718,7 +724,13 @@ object (self)
718724
if is_constant_offset memoffset then
719725
let memvar =
720726
if memref#is_global_reference then
721-
self#env#mk_global_variable (get_total_constant_offset memoffset)
727+
log_tfold_default
728+
(log_error
729+
"get_memory_variable_1"
730+
(self#cia))
731+
(fun v -> v)
732+
(default ())
733+
(self#env#mk_global_variable (get_total_constant_offset memoffset))
722734
else
723735
self#env#mk_memory_variable
724736
memref (get_total_constant_offset memoffset) in
@@ -785,7 +797,13 @@ object (self)
785797
let (memref, memoffset) = self#decompose_address address in
786798
if is_constant_offset memoffset then
787799
if memref#is_global_reference then
788-
self#env#mk_global_variable (get_total_constant_offset memoffset)
800+
log_tfold_default
801+
(log_error
802+
"get_memory_variable_3"
803+
(self#cia ^ ": memoffset: " ^ (memory_offset_to_string memoffset)))
804+
(fun v -> v)
805+
(default ())
806+
(self#env#mk_global_variable (get_total_constant_offset memoffset))
789807
else
790808
self#env#mk_memory_variable
791809
~size memref (get_total_constant_offset memoffset)
@@ -794,7 +812,25 @@ object (self)
794812
| IndexOffset _ ->
795813
self#env#mk_index_offset_memory_variable memref memoffset
796814
| ConstantOffset (n, IndexOffset (v, s, o)) ->
797-
self#env#mk_index_offset_global_memory_variable n (IndexOffset (v, s, o))
815+
let n = n#modulo (mkNumerical BCHDoubleword.e32) in
816+
log_tfold_default
817+
(mk_tracelog_spec
818+
~tag:"get_memory_variable_3"
819+
(self#cia
820+
^ ": constant: "
821+
^ n#toString
822+
^ "; index-expr: "
823+
^ "; offset: "
824+
^ offset#toString
825+
^ (x2s indexExpr)
826+
^ "; addr: "
827+
^ (x2s addr)
828+
^ "; memoffset: "
829+
^ (memory_offset_to_string memoffset)))
830+
(fun v -> v)
831+
(default ())
832+
(self#env#mk_index_offset_global_memory_variable
833+
n (IndexOffset (v, s, o)))
798834
| _ ->
799835
default ()
800836

@@ -820,7 +856,13 @@ object (self)
820856
(self#cia ^ ": constant: " ^ n#toString))
821857
(fun base ->
822858
if system_info#get_image_base#le base then
823-
self#env#mk_global_variable n
859+
log_tfold_default
860+
(log_error
861+
"get_memory_variable_4"
862+
(self#cia ^ "; constant: " ^ n#toString))
863+
(fun v -> v)
864+
(default ())
865+
(self#env#mk_global_variable n)
824866
else
825867
default ())
826868
(default ())
@@ -833,7 +875,13 @@ object (self)
833875
(self#cia ^ ": constant: " ^ n#toString))
834876
(fun base ->
835877
if system_info#get_image_base#le base then
836-
self#env#mk_global_variable n
878+
log_tfold_default
879+
(log_error
880+
"get_memory_variable_4"
881+
(self#cia ^ ": constant: " ^ n#toString))
882+
(fun v -> v)
883+
(default ())
884+
(self#env#mk_global_variable n)
837885
else
838886
default ())
839887
(default ())
@@ -1313,7 +1361,13 @@ object (self)
13131361
(self#cia ^ ": constant: " ^ n#toString))
13141362
(fun base ->
13151363
if system_info#get_image_base#le base then
1316-
self#env#mk_global_variable n
1364+
log_tfold_default
1365+
(log_error
1366+
"get_lhs_from_address"
1367+
(self#cia ^ ": constant: " ^ n#toString))
1368+
(fun v -> v)
1369+
(default ())
1370+
(self#env#mk_global_variable n)
13171371
else
13181372
default ())
13191373
(default ())
@@ -1516,7 +1570,18 @@ object (self)
15161570
self#rewrite_variable_to_external argvar
15171571
| [GlobalParameter (a, _)] ->
15181572
let argvar = self#env#mk_global_variable a#to_numerical in
1519-
self#rewrite_variable_to_external argvar
1573+
(match argvar with
1574+
| Error e ->
1575+
raise
1576+
(BCH_failure
1577+
(LBLOCK [
1578+
STR self#cia;
1579+
STR "; evaluate fts argument: ";
1580+
a#toPretty;
1581+
STR ": ";
1582+
STR (String.concat "; " e)]))
1583+
| Ok argvar ->
1584+
self#rewrite_variable_to_external argvar)
15201585
| _ -> random_constant_expr
15211586

15221587
method evaluate_summary_term (t:bterm_t) (returnvar:variable_t) =
@@ -1552,7 +1617,13 @@ object (self)
15521617
(self#cia ^ ": constant: " ^ num#toString))
15531618
(fun base ->
15541619
if system_info#get_image_base#le base then
1555-
Some (self#env#mk_global_variable num)
1620+
log_tfold_default
1621+
(log_error
1622+
"evaluate_summary_address_term"
1623+
(self#cia ^ ": constant: " ^ num#toString))
1624+
(fun v -> Some v)
1625+
None
1626+
(self#env#mk_global_variable num)
15561627
else
15571628
None)
15581629
None

0 commit comments

Comments
 (0)