Skip to content

Commit 715a562

Browse files
committed
Merge branch 'master' into outputparameters
2 parents b012ef6 + 7e01d90 commit 715a562

320 files changed

Lines changed: 6001 additions & 782 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CodeHawk/CH/chutil/cHUtil.ml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,37 @@ let list_compare_r (l1: 'a list) (l2: 'b list) (f: 'a -> 'b -> int): int =
261261
(fun e1 e2 a -> if a = 0 then (f e1 e2) else a) l1 l2 0
262262

263263

264+
let pair_compare
265+
(p1: ('a * 'b))
266+
(p2: ('a * 'b))
267+
(f1: 'a -> 'a -> int)
268+
(f2: 'b -> 'b -> int): int =
269+
let l0 = f1 (fst p1) (fst p2) in
270+
if l0 = 0 then
271+
f2 (snd p1) (snd p2)
272+
else
273+
l0
274+
275+
276+
let triple_compare
277+
(p1: ('a * 'b * 'c))
278+
(p2: ('a * 'b * 'c))
279+
(f1: 'a -> 'a -> int)
280+
(f2: 'b -> 'b -> int)
281+
(f3: 'c -> 'c -> int) =
282+
let (x1, y1, z1) = p1 in
283+
let (x2, y2, z2) = p2 in
284+
let l0 = f1 x1 x2 in
285+
if l0 = 0 then
286+
let l1 = f2 y1 y2 in
287+
if l1 = 0 then
288+
f3 z1 z2
289+
else
290+
l1
291+
else
292+
l0
293+
294+
264295
(* Compares to optional values, with the Some value smaller than None,
265296
two None values are considered equal, and otherwise the provided
266297
function decides *)

CodeHawk/CH/chutil/cHUtil.mli

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
Copyright (c) 2005-2020 Kestrel Technology LLC
88
Copyright (c) 2020 Henny B. Sipma
9-
Copyright (c) 2021-2025 Aarno Labs LLC
9+
Copyright (c) 2021-2026 Aarno Labs LLC
1010
1111
Permission is hereby granted, free of charge, to any person obtaining a copy
1212
of this software and associated documentation files (the "Software"), to deal
@@ -76,6 +76,26 @@ val list_compare: 'a list -> 'a list -> ('a -> 'a -> int) -> int
7676
and [lst2] starting from the last element.*)
7777
val list_compare_r: 'a list -> 'a list -> ('a -> 'a -> int) -> int
7878

79+
80+
(** [pair_compare p1 p2 f1 f2] returns the result of the element-wise comparison
81+
of pairs [p1] and [p2] using [f1] and [f2] as comparison function for the
82+
first and second element of the pair respectively.*)
83+
val pair_compare:
84+
('a * 'b) -> ('a * 'b) -> ('a -> 'a -> int) -> ('b -> 'b -> int) -> int
85+
86+
87+
(** [triple_compare t1 t2 returns the result of the element-wise comparison
88+
of triples [t1] and [t2], using [f1], [f2], and [f3] as comparison
89+
functions for the three elements, respectively.*)
90+
val triple_compare:
91+
('a * 'b * 'c)
92+
-> ('a * 'b * 'c)
93+
-> ('a -> 'a -> int)
94+
-> ('b -> 'b -> int)
95+
-> ('c -> 'c -> int)
96+
-> int
97+
98+
7999
val list_union_f: 'a list -> 'a list -> ('a -> 'a -> bool) -> 'a list
80100

81101
val list_difference: 'a list -> 'a list -> ('a -> 'a -> bool) -> 'a list

CodeHawk/CHB/bchanalyze/bCHAnalyzeApp.ml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ open BCHTrace
8787
module TR = CHTraceResult
8888

8989

90+
let p2s = CHPrettyUtil.pretty_to_string
91+
92+
9093
let analyze_all = ref false
9194
let maxrelationalvarcomplexity = ref 150000.0
9295
let maxrelationalloopcomplexity = ref 2000
@@ -568,14 +571,12 @@ let analyze_arm starttime =
568571
let failedfunctions = ref [] in
569572
let functionfailure (failuretype: string) (faddr: doubleword_int) (p: pretty_t) =
570573
begin
571-
ch_error_log#add
572-
"function failure"
573-
(LBLOCK [
574-
STR failuretype;
575-
STR ". ";
576-
faddr#toPretty;
577-
STR ": ";
578-
p]);
574+
log_error_result
575+
~tag:"analyze_arm:functionfailure"
576+
~msg:faddr#to_hex_string
577+
__FILE__ __LINE__
578+
["failure-type: " ^ failuretype;
579+
"error: " ^ (p2s p)];
579580
if system_settings#fail_on_function_failure then
580581
raise
581582
(BCH_failure

CodeHawk/CHB/bchanalyze/bCHTrace.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
Copyright (c) 2005-2020 Kestrel Technology LLC
88
Copyright (c) 2020 Henny Sipma
9-
Copyright (c) 2021-2025 Aarno Labs LLC
9+
Copyright (c) 2021-2026 Aarno Labs LLC
1010
1111
Permission is hereby granted, free of charge, to any person obtaining a copy
1212
of this software and associated documentation files (the "Software"), to deal
@@ -159,7 +159,7 @@ let rec _trace_fwd faddr op =
159159
let call_args = callee#get_call_args in
160160
List.iter (fun (p,e) ->
161161
match p.apar_location with
162-
| [StackParameter (par, _)] ->
162+
| [StackParameter (par, _, _)] ->
163163
let argIndices = get_xarg_indices finfo e in
164164
if List.mem op argIndices then
165165
begin

CodeHawk/CHB/bchcil/bCHParseCilFile.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ let parse_cil_file ?(computeCFG=true) ?(removeUnused=true) (filename: string) =
8787
NL];
8888
exit 1
8989
end
90+
| CHCommon.CHFailure p ->
91+
begin
92+
pr_debug [STR "Error when parsing "; STR filename; STR ": "; p; NL];
93+
exit 1
94+
end
9095
| e ->
9196
begin
9297
pr_debug [STR "Error when parsing (other exception): "; STR filename; NL];

CodeHawk/CHB/bchcmdline/bCHXBinaryAnalyzer.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ let speclist =
142142
("-collectdata", Arg.Unit (fun () -> system_settings#set_collect_data),
143143
"analyze all functions, create ssa variables (if enabled), and "
144144
^ " create stacklayouts and proof obligations");
145+
("-construct_signatures",
146+
Arg.Unit (fun () -> system_settings#set_construct_signatures),
147+
"create function signatures based on parameter inference");
145148
("-no_varinvs", Arg.Unit (fun () -> system_settings#set_no_varinvs),
146149
"do not generate variable invariants");
147150
("-stream", Arg.Unit (fun () -> cmd := "stream"),
@@ -888,6 +891,7 @@ let main () =
888891
let _ =
889892
if (List.length system_info#ifiles > 0) then
890893
pr_timing [STR "c header files parsed"] in
894+
let _ = BCHBCTypeXml.register_ch_named_struct_types () in
891895
(* function annotations in userdata should be loaded after the header
892896
files are parsed, so types in the function annotations can be resolved.*)
893897
let _ = system_info#initialize_function_annotations in

CodeHawk/CHB/bchcmdline/bCHXMakeLibSummary.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ let speclist = [
8080

8181
let ccNode =
8282
xml_string
83-
"copyright-notice" "Copyright 2012-2024, Henny Sipma, Palo Alto, CA 94304"
83+
"copyright-notice" "Copyright 2012-2026, Henny Sipma, Palo Alto, CA 94304"
8484

8585
let usage_msg = "mktemplate name"
8686
let read_args () = Arg.parse speclist (fun s -> name := s) usage_msg
8787

8888
let post_shortcuts = [
8989
"notzero-zero"; "nonzero-zero"; "one-zero"; "zero-negone";
90-
"notnull"; "notnull-null";
90+
"notnull"; "notnull-null"; "nonnegative-negone";
9191
"nonnegative-negative"; "positive-nonpositive"; "positive-zero"]
9292

9393

CodeHawk/CHB/bchlib/Makefile

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@ MLIS := \
100100
bCHSystemInfo \
101101
bCHXPODictionary \
102102
bCHCallTargetInfo \
103+
bCHXPOPredicate \
103104
bCHProofObligations \
104105
bCHFunctionStackframe \
105106
bCHFunctionInfo \
106107
bCHMakeCallTargetInfo \
107108
bCHGlobalState \
108109
bCHMemoryRecorder \
109-
bCHXPOPredicate \
110110
bCHCallSemanticsRecorder \
111111
bCHFloc \
112112
bCHCallgraph \
@@ -144,10 +144,6 @@ SOURCES := \
144144
bCHInvDictionary \
145145
bCHVarInvDictionary \
146146
bCHTypeDefinitions \
147-
bCHTypeConstraintDictionary \
148-
bCHTypeConstraintUtil \
149-
bCHTypeConstraintGraph \
150-
bCHTypeConstraintStore \
151147
bCHJavaSignatures \
152148
bCHVariableNames \
153149
bCHCodegraph \
@@ -164,8 +160,12 @@ SOURCES := \
164160
bCHFtsParameter \
165161
bCHARMFunctionInterface \
166162
bCHMIPSFunctionInterface \
167-
bCHFunctionInterface \
168163
bCHBTerm \
164+
bCHTypeConstraintDictionary \
165+
bCHTypeConstraintUtil \
166+
bCHTypeConstraintGraph \
167+
bCHTypeConstraintStore \
168+
bCHFunctionInterface \
169169
bCHFunctionStub \
170170
bCHCallTarget \
171171
bCHCStructConstant \
@@ -192,13 +192,13 @@ SOURCES := \
192192
bCHSystemInfo \
193193
bCHXPODictionary \
194194
bCHCallTargetInfo \
195+
bCHXPOPredicate \
195196
bCHProofObligations \
196197
bCHFunctionStackframe \
197198
bCHFunctionInfo \
198199
bCHMakeCallTargetInfo \
199200
bCHGlobalState \
200201
bCHMemoryRecorder \
201-
bCHXPOPredicate \
202202
bCHCallSemanticsRecorder \
203203
bCHFloc \
204204
bCHCallgraph \
@@ -232,7 +232,7 @@ clean:
232232
rm -f *.cmxa
233233
rm -f *.ml~
234234
rm -f *.mli~
235-
rm -f Makefile~
235+
rm -f Makefile~
236236
rm -f bchlib.cmxa
237237
rm -rf doc
238238

CodeHawk/CHB/bchlib/bCHARMFunctionInterface.ml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -677,13 +677,13 @@ let get_arm_format_spec_parameters
677677
List.fold_left
678678
(fun aas p ->
679679
match p.apar_location with
680-
| [RegisterParameter (ARMRegister r, _)] ->
680+
| [RegisterParameter (ARMRegister r, _, _)] ->
681681
update_core_reg aas r
682-
| [RegisterParameter (ARMDoubleRegister (r1, r2), _)] ->
682+
| [RegisterParameter (ARMDoubleRegister (r1, r2), _, _)] ->
683683
update_core_double_reg aas r1 r2
684-
| [RegisterParameter (ARMExtensionRegister r, _)] ->
684+
| [RegisterParameter (ARMExtensionRegister r, _, _)] ->
685685
update_extension_reg aas r
686-
| [StackParameter (offset, pld)] ->
686+
| [StackParameter (offset, pld, _)] ->
687687
update_stack_offset aas offset pld.pld_size
688688
| _ ->
689689
raise

CodeHawk/CHB/bchlib/bCHBCAttributes.ml

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
------------------------------------------------------------------------------
55
The MIT License (MIT)
66
7-
Copyright (c) 2024-2025 Aarno Labs LLC
7+
Copyright (c) 2024-2026 Aarno Labs LLC
88
99
Permission is hereby granted, free of charge, to any person obtaining a copy
1010
of this software and associated documentation files (the "Software"), to deal
@@ -88,17 +88,27 @@ let convert_b_attributes_to_function_conditions
8888
| [ACons (("write_only" | "read_write"), []); AInt refindex] ->
8989
let par = get_par refindex in
9090
let ty = get_derefty par in
91-
([XXBuffer (ty, ArgValue par, RunTimeValue)],
91+
([XXBuffer (ty, ArgValue par, RunTimeValue);
92+
XXBlockWrite (ty, ArgValue par, RunTimeValue)],
9293
[XXBlockWrite (ty, ArgValue par, RunTimeValue)])
9394

9495
| [ACons (("write_only" | "read_write"), []);
9596
AInt refindex; AInt sizeindex] ->
9697
let rpar = get_par refindex in
9798
let spar = get_par sizeindex in
9899
let ty = get_derefty rpar in
99-
([XXBuffer (ty, ArgValue rpar, ArgValue spar)],
100+
([XXBuffer (ty, ArgValue rpar, ArgValue spar);
101+
XXBlockWrite (ty, ArgValue rpar, RunTimeValue)],
100102
[XXBlockWrite (ty, ArgValue rpar, ArgValue spar)])
101103

104+
| [ACons ("write_only", [AInt buffersize]); AInt refindex] ->
105+
let par = get_par refindex in
106+
let ty = get_derefty par in
107+
let bytesize = CHNumerical.mkNumerical buffersize in
108+
([XXBuffer (ty, ArgValue par, NumConstant bytesize);
109+
XXBlockWrite (ty, ArgValue par, NumConstant bytesize)],
110+
[XXBlockWrite (ty, ArgValue par, NumConstant bytesize)])
111+
102112
| _ ->
103113
begin
104114
log_error_result
@@ -111,5 +121,72 @@ let convert_b_attributes_to_function_conditions
111121
([], [])
112122
end) in
113123
(pre @ xpre, side @ xside, xpost)
124+
| Attr ("chk_pre", params) ->
125+
let pre =
126+
(match params with
127+
| [ACons ("deref_read", []); AInt refindex] ->
128+
let par = get_par refindex in
129+
let ty = get_derefty par in
130+
[XXBuffer (ty, ArgValue par, RunTimeValue)]
131+
132+
| [ACons ("deref_read", []); AInt refindex; AInt sizeindex] ->
133+
let par1 = get_par refindex in
134+
let par2 = get_par sizeindex in
135+
let ty = get_derefty par1 in
136+
[XXBuffer (ty, ArgValue par1, ArgValue par2)]
137+
138+
| [ACons ("deref_read", [AInt size]); AInt refindex] ->
139+
let par = get_par refindex in
140+
let ty = get_derefty par in
141+
let c = CHNumerical.mkNumerical size in
142+
[XXBuffer (ty, ArgValue par, NumConstant c)]
143+
144+
| [ACons ("deref_read", [ACons ("ntp", [])]); AInt refindex] ->
145+
let par = get_par refindex in
146+
let ty = get_derefty par in
147+
[XXBuffer (ty, ArgValue par, ArgNullTerminatorPos (ArgValue par))]
148+
149+
| [ACons ("deref_write", []); AInt refindex] ->
150+
let par = get_par refindex in
151+
let ty = get_derefty par in
152+
[XXBlockWrite (ty, ArgValue par, RunTimeValue)]
153+
154+
| [ACons ("deref_write", []); AInt refindex; AInt sizeindex] ->
155+
let par1 = get_par refindex in
156+
let par2 = get_par sizeindex in
157+
let ty = get_derefty par1 in
158+
[XXBlockWrite (ty, ArgValue par1, ArgValue par2)]
159+
160+
| [ACons ("deref_write", [AInt size]); AInt refindex] ->
161+
let par = get_par refindex in
162+
let ty = get_derefty par in
163+
let c = CHNumerical.mkNumerical size in
164+
[XXBlockWrite (ty, ArgValue par, NumConstant c)]
165+
166+
| [ACons ("not_null", []); AInt refindex] ->
167+
let par = get_par refindex in
168+
[XXNotNull (ArgValue par)]
169+
170+
| [ACons ("null_terminated", []); AInt refindex] ->
171+
let par = get_par refindex in
172+
[XXNullTerminated (ArgValue par)]
173+
174+
| [ACons ("initialized_range", [ACons ("ntp", [])]); AInt refindex] ->
175+
let par = get_par refindex in
176+
let ty = get_derefty par in
177+
[XXInitializedRange (
178+
ty, ArgValue par, ArgNullTerminatorPos (ArgValue par))]
179+
180+
| _ ->
181+
begin
182+
log_error_result
183+
~tag:"convert_b_attributes_to_function_conditions"
184+
~msg:(name ^ ":chk_pre")
185+
__FILE__ __LINE__
186+
[String.concat ", " (List.map b_attrparam_to_string params)];
187+
[]
188+
end) in
189+
(pre @ xpre, xside, xpost)
190+
114191
| _ ->
115192
acc) ([], [], []) attrs

0 commit comments

Comments
 (0)