Example #1
0
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);
}
Example #2
0
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));
    }
}
Example #3
0
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");
    }
}
Example #4
0
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);
}