let compute_entry_point kf ~library =
  Kf_state.mark_as_called kf;
  Value_parameters.feedback "Analyzing a%scomplete application starting at %a"
    (if library then "n in" else " ")
    Kernel_function.pretty_name kf;
  let initial_state_globals =
    if Db.Value.globals_use_supplied_state () then (
      let r = Db.Value.globals_state () in
      Value_parameters.feedback "Initial state supplied by the user";
      Value_parameters.debug "@[<hov 0>Values of globals@\n%a@]"
        Db.Value.pretty_state_without_null r;
      r)
    else (
      Value_parameters.feedback "Computing initial state";
      let r = Db.Value.globals_state () in
      Value_parameters.feedback "Initial state computed";
      Value_parameters.result
        "@[<hov 0>Values of globals at initialization@\n%a@]"
        Db.Value.pretty_state_without_null r;
      r
    ) in
  Db.Value.update_table Kglobal initial_state_globals;

  Mark_noresults.run();

  let with_formals = match Db.Value.fun_get_args () with
    | None -> initial_state_formals kf initial_state_globals
    | Some formals -> actualize_formals kf initial_state_globals
        (List.map (fun f -> (), f) formals)
  in
  Db.Value.Call_Value_Callbacks.apply (with_formals, [ kf, Kglobal ]);
  let result =
    compute_with_initial_state kf ~call_kinstr:Kglobal with_formals
  in
  Value_parameters.feedback "done for function %a"
    Kernel_function.pretty_name kf;
  result