void MyFrame::pop(int stackLevel, uint64_t time, CallStackBase *base)
{
    int pid = base->getId();
    CallStackType *stack = (CallStackType *) base;

#if 0
    fprintf(stderr, "native pop  t %llu p %d s %d fid %d 0x%x %s\n",
            stack->getGlobalTime(time), pid, stackLevel,
            function->id, function->addr, function->name);
#endif

    FunctionStack *fstack = dmtrace_stack[pid];
    if (fstack == NULL) {
        fstack = new FunctionStack();
        dmtrace_stack[pid] = fstack;
    }

    symbol_type *sym = fstack->pop();
    if (sym != NULL && sym != function) {
        fprintf(stderr, "Error: q2dm function mismatch at time %llu pid %d sym %s\n",
                stack->getGlobalTime(time), pid, sym->name);
        fstack->showStack();
        exit(1);
    }

    thread_time[pid] = time;
    dmtrace->addFunctionExit(function->id, time, pid);
}