void MR_mkframe_msg(FILE *fp, const char *predname) { MR_restore_transient_registers(); if (!MR_lld_print_enabled) { return; } fprintf(fp, "\nnew choice point for procedure %s\n", predname); fprintf(fp, "new fr: "); MR_printnondetstack(fp, MR_curfr); fprintf(fp, "\nprev fr: "); MR_printnondetstack(fp, MR_prevfr_slot(MR_curfr)); fprintf(fp, "\nsucc fr: "); MR_printnondetstack(fp, MR_succfr_slot(MR_curfr)); fprintf(fp, "\nsucc ip: "); MR_printlabel(fp, MR_succip_slot(MR_curfr)); fprintf(fp, "redo fr: "); MR_printnondetstack(fp, MR_redofr_slot(MR_curfr)); fprintf(fp, "\nredo ip: "); MR_printlabel(fp, MR_redoip_slot(MR_curfr)); #ifdef MR_USE_MINIMAL_MODEL_OWN_STACKS fprintf(fp, "\ndet fr: "); MR_printdetstack(fp, MR_table_detfr_slot(MR_curfr)); #endif fprintf(fp, "\n"); if (MR_detaildebug) { MR_dumpnondetstack(fp); } fflush(fp); }
void MR_dumpframe(FILE *fp, const MR_Word *fr) { int i; fprintf(fp, "frame at "); MR_printnondetstack(fp, fr), fprintf(fp, "\n"); fprintf(fp, "\t succip "); MR_printlabel(fp, MR_succip_slot(fr)); fprintf(fp, "\t redoip "); MR_printlabel(fp, MR_redoip_slot(fr)); fprintf(fp, "\t succfr "); MR_printnondetstack(fp, MR_succfr_slot(fr)); fprintf(fp, "\t prevfr "); MR_printnondetstack(fp, MR_prevfr_slot(fr)); for (i = 1; &MR_based_framevar(fr,i) > MR_prevfr_slot(fr); i++) { fprintf(fp, "\t framevar(%d) %ld 0x%lx\n", i, (long) (MR_Integer) MR_based_framevar(fr,i), (unsigned long) MR_based_framevar(fr,i)); } }
void MR_succeeddiscard_msg(FILE *fp) { MR_restore_transient_registers(); MR_do_watches(fp); if (!MR_lld_print_enabled) { return; } fprintf(fp, "\nsucceeding from procedure\n"); fprintf(fp, "curr fr: "); MR_printnondetstack(fp, MR_curfr); fprintf(fp, "succ fr: "); MR_printnondetstack(fp, MR_succfr_slot(MR_curfr)); fprintf(fp, "succ ip: "); MR_printlabel(fp, MR_succip_slot(MR_curfr)); if (MR_detaildebug) { MR_printregs(fp, "registers at success"); } }
void MR_agc_dump_nondet_stack_frames(MR_Internal *label, MR_MemoryZone *heap_zone, MR_Word *stack_pointer, MR_Word *current_frame, MR_Word *max_frame) { MR_Code *success_ip; int frame_size; MR_bool registers_valid; while (max_frame > MR_nondet_stack_trace_bottom_fr) { registers_valid = (max_frame == current_frame); frame_size = max_frame - MR_prevfr_slot(max_frame); if (frame_size == MR_NONDET_TEMP_SIZE) { fprintf(stderr, "%p: nondet temp\n", max_frame); fprintf(stderr, " redoip: "); fflush(NULL); MR_printlabel(stderr, MR_redoip_slot(max_frame)); fflush(NULL); fprintf(stderr, " redofr: %p\n", MR_redofr_slot(max_frame)); label = MR_lookup_internal_by_addr(MR_redoip_slot(max_frame)); if (label && label->MR_internal_layout) { MR_dump_live_variables(label->MR_internal_layout, heap_zone, registers_valid, stack_pointer, MR_redofr_slot(max_frame)); } } else if (frame_size == MR_DET_TEMP_SIZE) { fprintf(stderr, "%p: nondet temp\n", max_frame); fprintf(stderr, " redoip: "); fflush(NULL); MR_printlabel(stderr, MR_redoip_slot(max_frame)); fflush(NULL); fprintf(stderr, " redofr: %p\n", MR_redofr_slot(max_frame)); fprintf(stderr, " detfr: %p\n", MR_tmp_detfr_slot(max_frame)); label = MR_lookup_internal_by_addr(MR_redoip_slot(max_frame)); if (label && label->MR_internal_layout) { MR_dump_live_variables(label->MR_internal_layout, heap_zone, registers_valid, MR_tmp_detfr_slot(max_frame), max_frame); // XXX Should max_frame above be // MR_redoip_slot(max_frame) instead? } } else { fprintf(stderr, "%p: nondet ordinary\n", max_frame); fprintf(stderr, " redoip: "); fflush(NULL); MR_printlabel(stderr, MR_redoip_slot(max_frame)); fflush(NULL); fprintf(stderr, " redofr: %p\n", MR_redofr_slot(max_frame)); fprintf(stderr, " succip: "); fflush(NULL); MR_printlabel(stderr, MR_succip_slot(max_frame)); fflush(NULL); fprintf(stderr, " succfr: %p\n", MR_succfr_slot(max_frame)); // XXX ??? label = MR_lookup_internal_by_addr(MR_redoip_slot(max_frame)); if (label != NULL && label->MR_internal_layout) { MR_dump_live_variables(label->MR_internal_layout, heap_zone, registers_valid, stack_pointer, MR_redofr_slot(max_frame)); fprintf(stderr, " this label: %s\n", label->MR_internal_name); } } max_frame = MR_prevfr_slot(max_frame); } // XXX Lookup the address (redoip?) and dump the variables. fflush(NULL); }