Module Disasm.Subroutines

A set of subroutines.

A partition of a whole program control-flow graph into a quotient set of subroutines.

The algorithm builds the minimal partion, i.e., it guarantees that no other partition exists that has fewer elements.

The number of elements heavily depends on the number of function starts that were provided as the input (e.g., if the function start identification procedure has a lot of false positives, expect a lot of subroutines).

type t
include Core_kernel.Bin_prot.Binable.S with type t := t
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
val bin_shape_t : Bin_prot.Shape.t
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_reader_t : t Bin_prot.Type_class.reader
val bin_t : t Bin_prot.Type_class.t
val empty : t

empty is the empty partition.

val equal : t -> t -> bool

equal p1 p2 is true if p1 is structurally equal p2.

update p s updates the partitioning with the newly disassembled blocks.

val belongs : t -> entry:addr -> addr -> bool

belongs part ~entry addr is true if addr belongs to a basic block of subroutine with the given entry.

val entries : t -> Core_kernel.Set.M(Addr).t

entries part is the set of entry points of all subroutines in the partition.

Set.length (entries part) is the cardinality of the partition.

val siblings : t -> addr -> addr -> bool

siblings part x y is true if x and y belong to the same subroutine.