int erts_clear_module_break(Module *modp) { BeamCodeHeader* code_hdr; Uint n; Uint i; ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); ASSERT(modp); code_hdr = modp->curr.code_hdr; if (!code_hdr) { return 0; } n = (Uint)(UWord) code_hdr->num_functions; for (i = 0; i < n; ++i) { ErtsCodeInfo *ci = code_hdr->functions[i]; if (erts_is_function_native(ci)) continue; clear_function_break(ci, ERTS_BPF_ALL); } erts_commit_staged_bp(); for (i = 0; i < n; ++i) { ErtsCodeInfo *ci = code_hdr->functions[i]; if (erts_is_function_native(ci)) continue; uninstall_breakpoint(ci); consolidate_bp_data(modp, ci, 1); ASSERT(ci->u.gen_bp == NULL); } return n; }
void erts_clear_export_break(Module* modp, BeamInstr* pc) { ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); clear_function_break(pc, ERTS_BPF_ALL); erts_commit_staged_bp(); *pc = (BeamInstr) 0; consolidate_bp_data(modp, pc, 0); ASSERT(pc[-4] == 0); }
void erts_consolidate_bif_bp_data(void) { int i; ERTS_SMP_LC_ASSERT(erts_has_code_write_permission()); for (i = 0; i < BIF_SIZE; i++) { Export *ep = bif_export[i]; consolidate_bp_data(0, ep->code+3, 0); } }
void erts_clear_export_break(Module* modp, ErtsCodeInfo *ci) { ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); clear_function_break(ci, ERTS_BPF_ALL); erts_commit_staged_bp(); *erts_codeinfo_to_code(ci) = (BeamInstr) 0; consolidate_bp_data(modp, ci, 0); ASSERT(ci->u.gen_bp == NULL); }
void erts_consolidate_bp_data(BpFunctions* f, int local) { BpFunction* fs = f->matching; Uint i; Uint n = f->matched; ERTS_SMP_LC_ASSERT(erts_has_code_write_permission()); for (i = 0; i < n; i++) { consolidate_bp_data(fs[i].mod, fs[i].pc, local); } }
int erts_clear_module_break(Module *modp) { BeamCodeHeader* code_hdr; Uint n; Uint i; ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); ASSERT(modp); code_hdr = modp->curr.code_hdr; if (!code_hdr) { return 0; } n = (Uint)(UWord) code_hdr->num_functions; for (i = 0; i < n; ++i) { BeamInstr* pc; pc = code_hdr->functions[i] + 5; if (erts_is_native_break(pc)) { continue; } clear_function_break(pc, ERTS_BPF_ALL); } erts_commit_staged_bp(); for (i = 0; i < n; ++i) { BeamInstr* pc; pc = code_hdr->functions[i] + 5; if (erts_is_native_break(pc)) { continue; } uninstall_breakpoint(pc); consolidate_bp_data(modp, pc, 1); ASSERT(pc[-4] == 0); } return n; }
int erts_clear_module_break(Module *modp) { BeamInstr** code_base; Uint n; Uint i; ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking()); ASSERT(modp); code_base = (BeamInstr **) modp->curr.code; if (code_base == NULL) { return 0; } n = (Uint)(UWord) code_base[MI_NUM_FUNCTIONS]; for (i = 0; i < n; ++i) { BeamInstr* pc; pc = code_base[MI_FUNCTIONS+i] + 5; if (erts_is_native_break(pc)) { continue; } clear_function_break(pc, ERTS_BPF_ALL); } erts_commit_staged_bp(); for (i = 0; i < n; ++i) { BeamInstr* pc; pc = code_base[MI_FUNCTIONS+i] + 5; if (erts_is_native_break(pc)) { continue; } uninstall_breakpoint(pc); consolidate_bp_data(modp, pc, 1); ASSERT(pc[-4] == 0); } return n; }