⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xenitp.c

📁 xen虚拟机源代码安装包
💻 C
📖 第 1 页 / 共 4 页
字号:
}void print_br (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    printf (" b0:  %016lx  ", regs->b[0]);    printf (" b1:  %016lx  ", regs->b[1]);    printf (" b2:  %016lx\n", regs->b[2]);    printf (" b3:  %016lx  ", regs->b[3]);    printf (" b4:  %016lx  ", regs->b[4]);    printf (" b5:  %016lx\n", regs->b[5]);    printf (" b6:  %016lx  ", regs->b[6]);    printf (" b7:  %016lx\n", regs->b[7]);}void print_regs (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    printf (" r1:  %016lx  ", regs->r[1]);    printf (" r2:  %016lx  ", regs->r[2]);    printf (" r3:  %016lx\n", regs->r[3]);    printf (" r4:  %016lx  ", regs->r[4]);    printf (" r5:  %016lx  ", regs->r[5]);    printf (" r6:  %016lx\n", regs->r[6]);    printf (" r7:  %016lx  ", regs->r[7]);    printf (" r8:  %016lx  ", regs->r[8]);    printf (" r9:  %016lx\n", regs->r[9]);    printf (" r10: %016lx  ", regs->r[10]);    printf (" r11: %016lx  ", regs->r[11]);    printf (" sp:  %016lx\n", regs->r[12]);    printf (" tp:  %016lx  ", regs->r[13]);    printf (" r14: %016lx  ", regs->r[14]);    printf (" r15: %016lx\n", regs->r[15]);    printf ("      Bank %d (current)                         Bank %d\n",            (regs->psr & PSR_BN) ? 1 : 0, (regs->psr & PSR_BN) ? 0 : 1);    printf ("16:%016lx ", regs->r[16]);    printf ("17:%016lx ", regs->r[17]);    printf ("16:%016lx ", regs->bank[0]);    printf ("17:%016lx\n", regs->bank[1]);    printf ("18:%016lx ", regs->r[18]);    printf ("19:%016lx ", regs->r[19]);    printf ("18:%016lx ", regs->bank[2]);    printf ("19:%016lx\n", regs->bank[3]);    printf ("20:%016lx ", regs->r[20]);    printf ("21:%016lx ", regs->r[21]);    printf ("20:%016lx ", regs->bank[4]);    printf ("21:%016lx\n", regs->bank[5]);    printf ("22:%016lx ", regs->r[22]);    printf ("23:%016lx ", regs->r[23]);    printf ("22:%016lx ", regs->bank[6]);    printf ("23:%016lx\n", regs->bank[7]);    printf ("24:%016lx ", regs->r[24]);    printf ("25:%016lx ", regs->r[25]);    printf ("24:%016lx ", regs->bank[8]);    printf ("25:%016lx\n", regs->bank[9]);    printf ("26:%016lx ", regs->r[26]);    printf ("27:%016lx ", regs->r[27]);    printf ("26:%016lx ", regs->bank[10]);    printf ("27:%016lx\n", regs->bank[11]);    printf ("28:%016lx ", regs->r[28]);    printf ("29:%016lx ", regs->r[29]);    printf ("28:%016lx ", regs->bank[12]);    printf ("29:%016lx\n", regs->bank[13]);    printf ("30:%016lx ", regs->r[30]);    printf ("31:%016lx ", regs->r[31]);    printf ("30:%016lx ", regs->bank[14]);    printf ("31:%016lx\n", regs->bank[15]);    printf ("\n");}void print_cr (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    printf (" dcr:  %016lx  ", regs->cr.dcr);    printf (" itm:  %016lx  ", regs->cr.itm);    printf (" iva:  %016lx\n", regs->cr.iva);    printf (" pta:  %016lx  ", regs->cr.pta);    printf (" ipsr: %016lx  ", regs->cr.ipsr);    printf (" isr:  %016lx\n", regs->cr.isr);    printf (" iip:  %016lx  ", regs->cr.iip);    printf (" ifa:  %016lx  ", regs->cr.ifa);    printf (" itir: %016lx\n", regs->cr.itir);    printf (" iipa: %016lx  ", regs->cr.iipa);    printf (" ifs:  %016lx  ", regs->cr.ifs);    printf (" iim:  %016lx\n", regs->cr.iim);    printf (" iha:  %016lx  ", regs->cr.iha);    printf (" lid:  %016lx  ", regs->cr.lid);    printf (" ivr:  %016lx\n", regs->cr.ivr);    printf (" tpr:  %016lx  ", regs->cr.tpr);    printf (" eoi:  %016lx  ", regs->cr.eoi);    printf (" irr0: %016lx\n", regs->cr.irr[0]);    printf (" irr1: %016lx  ", regs->cr.irr[1]);    printf (" irr2: %016lx  ", regs->cr.irr[2]);    printf (" irr3: %016lx\n", regs->cr.irr[3]);    printf (" itv:  %016lx  ", regs->cr.itv);    printf (" pmv:  %016lx  ", regs->cr.pmv);    printf (" cmcv: %016lx\n", regs->cr.cmcv);    printf (" lrr0: %016lx  ", regs->cr.lrr0);    printf (" lrr1: %016lx  ", regs->cr.lrr1);    printf (" ev_cb:%016lx\n", ctx->event_callback_ip);}void print_ar (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    printf (" kr0:  %016lx  ", regs->ar.kr[0]);    printf (" kr1:  %016lx  ", regs->ar.kr[1]);    printf (" kr2:  %016lx\n", regs->ar.kr[2]);    printf (" kr3:  %016lx  ", regs->ar.kr[3]);    printf (" kr4:  %016lx  ", regs->ar.kr[4]);    printf (" kr5:  %016lx\n", regs->ar.kr[5]);    printf (" kr6:  %016lx  ", regs->ar.kr[6]);    printf (" kr7:  %016lx  ", regs->ar.kr[7]);    printf (" rsc:  %016lx\n", regs->ar.rsc);    printf (" bsp:  %016lx  ", regs->ar.bsp);    printf (" bsps: %016lx  ", regs->ar.bspstore);    printf (" rnat: %016lx\n", regs->ar.rnat);    printf (" csd:  %016lx  ", regs->ar.csd);    printf (" ccv:  %016lx  ", regs->ar.ccv);    printf (" unat: %016lx\n", regs->ar.unat);    printf (" fpsr: %016lx  ", regs->ar.fpsr);    printf (" itc:  %016lx\n", regs->ar.itc);    printf (" pfs:  %016lx  ", regs->ar.pfs);    printf (" lc:   %016lx  ", regs->ar.lc);    printf (" ec:   %016lx\n", regs->ar.ec);}void print_a_rr (int num, unsigned long rr){    int ps_val = (rr >> RR_PS_SHIFT) & RR_PS_MASK;    printf (" [%d]  %06lx %02x %s %ld\n",            num, (rr >> RR_RID_SHIFT) & RR_RID_MASK,            ps_val, get_ps (ps_val), rr & RR_VE_MASK);}void print_rr (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    int i;    printf (" rr:  rid    ps      ve\n");    for (i = 0; i < 8; i++)        print_a_rr (i, regs->rr[i]);}void print_db (vcpu_guest_context_t *ctx){    struct vcpu_guest_context_regs *regs = &ctx->regs;    int i;    for (i = 0; i < 7; i += 2)        printf ("  ibr[%d]:  %016lx   ibr[%d]:  %016lx\n",                i, regs->ibr[i], i + 1, regs->ibr[i + 1]);    printf ("\n");    for (i = 0; i < 7; i += 2)        printf ("  dbr[%d]:  %016lx   dbr[%d]:  %016lx\n",                i, regs->dbr[i], i + 1, regs->dbr[i + 1]);}struct bit_descr {    const char *name;    unsigned char sz;};const struct bit_descr psr_bits[] =     {        {"", 1 },    {"be", 1 },  {"up", 1 },  {"ac", 1 },        {"mfl", 1 }, {"mfh", 1 }, {"", 7 },        {"ic", 1 },  {"i", 1 },   {"pk", 1 },        {"", 1 },    {"dt", 1 },  {"dfl", 1 }, {"dfh", 1 },        {"sp", 1 },  {"pp", 1 },  {"di", 1 },  {"si", 1 },        {"db", 1 },  {"lp", 1 },  {"tb", 1 },  {"rt", 1 },        {"", 4 },        {"cpl", 2 }, {"is", 1 },  {"mc", 1 },        {"it", 1 },  {"id", 1 },  {"da", 1 },  {"dd", 1 },        {"ss", 1 },  {"ri", 2 },  {"ed", 1 },        {"bn", 1 },  {"ia", 1 },  {"vm", 1 },        {NULL, 0 }    };void print_bits (const struct bit_descr *desc, unsigned long val){    const struct bit_descr *d;    unsigned int off;    /* Reverse order.  */    for (d = desc, off = 0; d->name; d++)        off += d->sz;    d--;    while (1) {        off -= d->sz;        if (*d->name) {            if (d->sz != 1 || ((val >> off) & 1))                printf (" %s", d->name);            if (d->sz != 1)                printf ("=%lx", (val >> off) & ((1 << d->sz) - 1));        }        if (d == desc)            break;        d--;    }}        void print_tr (vcpu_guest_context_t *ctx){    struct vcpu_tr_regs *tr = &ctx->regs.tr;    int i;    printf ("\n itr: P rid    va               pa            ps      ed pl "            "ar a d ma    key\n");    for (i = 0; i < sizeof (tr->itrs) / sizeof (tr->itrs[0]); i++)        print_a_tr (i, &tr->itrs[i]);    printf ("\n dtr: P rid    va               pa            ps      ed pl "            "ar a d ma    key\n");    for (i = 0; i < sizeof (tr->dtrs) / sizeof (tr->dtrs[0]); i++)        print_a_tr (i, &tr->dtrs[i]);}int lock_pages (void *addr, size_t len);void unlock_pages (void *addr, size_t len);int do_xen_hypercall (int xc_handle, privcmd_hypercall_t *hypercall);#ifdef HAVE_DEBUG_OPstatic int do_ia64_debug_op (int xc_handle,                            unsigned long cmd, unsigned long domain,                            xen_ia64_debug_op_t *op){    int ret = -1;    privcmd_hypercall_t hypercall;    hypercall.op     = __HYPERVISOR_ia64_debug_op;    hypercall.arg[0] = cmd;    hypercall.arg[1] = domain;    hypercall.arg[2] = (unsigned long)op;    if (lock_pages (op, sizeof (*op)) != 0) {        perror ("Could not lock memory for Xen hypercall");        goto out1;    }    ret = do_xen_hypercall (xc_handle, &hypercall);    if (ret  < 0) {        if (errno == EACCES)            fprintf (stderr,"domctl operation failed -- need to "                     "rebuild the user-space tool set?\n");    }    unlock_pages (op, sizeof (*op));out1:    return ret;}#endifstatic volatile int ctrl_c_hit;void ctrl_c_handler (int sig){    ctrl_c_hit = 1;}int wait_domain (int vcpu, vcpu_guest_context_t *ctx){    struct timespec ts;    xc_dominfo_t dominfo;    int ret;    int cnt = 0;    ts.tv_sec = 0;    ts.tv_nsec = 10*1000*1000;    ret = xc_domain_unpause (xc_handle, domid);    if (ret < 0)        perror ("xc_domain_unpause");    ctrl_c_hit = 0;    while (1) {        ret = xc_domain_getinfo (xc_handle, domid, 1, &dominfo);        if (ret < 0)            perror ("xc_domain_getinfo");        if (dominfo.paused)            break;        if (ctrl_c_hit) {            fflush (stdout);            /* Force pause.  */            ret = xc_domain_pause (xc_handle, domid);            if (ret < 0)                perror ("xc_domain_pause");            break;        }                        printf ("%c\b", "/-\\|"[(cnt++) % 4]);        fflush (stdout);        nanosleep (&ts, NULL);    }    return xc_ia64_vcpu_getcontext (xc_handle, domid, vcpu, ctx);}int virt_to_phys (int is_inst, unsigned long vaddr, unsigned long *paddr){    struct vcpu_tr_regs *trs = &cur_ctx->regs.tr;    struct ia64_tr_entry *tr;    int i;    int num;    /* Search in tr.  */    if (is_inst) {        tr = trs->itrs;        num = sizeof (trs->itrs) / sizeof (trs->itrs[0]);    }    else {        tr = trs->dtrs;        num = sizeof (trs->dtrs) / sizeof (trs->dtrs[0]);    }    for (i = 0; i < num; i++, tr++) {        int ps_val = (tr->itir >> ITIR_PS_SHIFT) & ITIR_PS_MASK;        unsigned long ps_mask = (-1L) << ps_val;        if ((tr->vadr & ps_mask) == (vaddr & ps_mask)) {            *paddr = ((tr->pte & (PTE_PPN_MASK << PTE_PPN_SHIFT)) & ps_mask) |                     (vaddr & ~ps_mask);            return 0;        }    }    return -1;}unsigned long *get_reg_addr (const char *name){    if (strcmp (name, "ip") == 0)        return &cur_ctx->regs.ip;    else if (strcmp (name, "psr") == 0)        return &cur_ctx->regs.psr;    else if (strcmp (name, "iip") == 0)        return &cur_ctx->regs.cr.iip;    else if (strcmp (name, "b0") == 0)        return &cur_ctx->regs.b[0];    else        return 0;}enum prio_expr {EXPR_BASE, EXPR_SUM, EXPR_LOGIC, EXPR_PROD};int parse_expr (char **buf, unsigned long *res, enum prio_expr prio);int next_char (char **buf){    char *b;    b = *buf;    while (isspace ((unsigned char)*b))        b++;    *buf = b;    return *b;}int parse_unary (char **buf, unsigned long *res){    char c;    c = next_char (buf);    switch (c) {    case '0' ... '9':        {            char *e;            *res = strtoul (*buf, &e, 0);            if (e == *buf) {                printf ("bad literal\n");                return -1;            }            *buf = e;        }        break;    case '+':        (*buf)++;        return parse_unary (buf, res);    case '$':        {            char *b;            char *e;            char c;            unsigned long *reg;            int len;            b = *buf;            e = b + 1;            while ((*e >= 'a' && *e <= 'z') ||                   (*e >= 'A' && *e <= 'Z') ||                   (*e >= '0' && *e <= '9') ||                   (*e == '_' || *e == '.'))                e++;            if (b == e) {                printf ("identifier missing after '$'\n");                return -1;            }            b++;            len = e - b;            c = b[len];            b[len] = 0;            reg = get_reg_addr (b);            b[len] = c;            if (reg != NULL)                *res = *reg;            else if (strncmp (b, "d2p", len) == 0 ||                     strncmp (b, "i2p", len) == 0) {                unsigned long vaddr;                *buf = e;                if (parse_unary (buf, &vaddr) != 0)                    return -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -