@@ -383,19 +383,20 @@ let merge_encodings x y =
383
383
| Ok coding -> KB. return {x with coding}
384
384
| Error mismatch -> KB. fail mismatch
385
385
386
+ let is_known {coding} = not (Theory.Language. is_unknown coding)
386
387
387
388
let collect_dests source code =
388
389
KB. collect Theory.Semantics. slot code >> = fun insn ->
389
390
let init = {
390
- encoding= source;
391
+ encoding= { source with coding = Theory.Language. unknown} ;
391
392
call = Insn. (is call insn);
392
393
barrier = Insn. (is barrier insn);
393
394
indirect = false ;
394
395
resolved = Set. empty (module Addr );
395
396
unresolved = Set. empty (module Theory. Label );
396
397
} in
397
398
KB.Value. get Insn.Slot. dests insn |> function
398
- | None -> KB. return init
399
+ | None -> KB. return { init with encoding = source}
399
400
| Some dests ->
400
401
Set. to_sequence dests |>
401
402
KB.Seq. fold ~init ~f: (fun dest label ->
@@ -417,7 +418,9 @@ let collect_dests source code =
417
418
indirect= true ;
418
419
unresolved = Set. add dest.unresolved label;
419
420
encoding;
420
- })
421
+ }) >> | fun dest ->
422
+ if is_known dest.encoding then dest
423
+ else {dest with encoding = source}
421
424
422
425
let pp_addr_opt ppf = function
423
426
| None -> Format. fprintf ppf " Unk"
@@ -463,8 +466,6 @@ let switch encoding s =
463
466
| Error _ -> s
464
467
| Ok dis -> Dis. switch s dis
465
468
466
- let is_known {coding} = not (Theory.Language. is_unknown coding)
467
-
468
469
let disassemble ~code ~data ~funs debt base : Machine.state KB.t =
469
470
unit_for_mem base >> = fun unit ->
470
471
let rec next_encoding state current mem f =
0 commit comments