亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exec.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
           itself */        env->current_tb = NULL;        tb_gen_code(env, current_pc, current_cs_base, current_flags,                    CF_SINGLE_INSN);        cpu_resume_from_signal(env, puc);    }#endif}#endif/* add the tb in the target page and protect it if necessary */static inline void tb_alloc_page(TranslationBlock *tb,                                 unsigned int n, target_ulong page_addr){    PageDesc *p;    TranslationBlock *last_first_tb;    tb->page_addr[n] = page_addr;    p = page_find_alloc(page_addr >> TARGET_PAGE_BITS);    tb->page_next[n] = p->first_tb;    last_first_tb = p->first_tb;    p->first_tb = (TranslationBlock *)((long)tb | n);    invalidate_page_bitmap(p);#if defined(TARGET_HAS_SMC) || 1#if defined(CONFIG_USER_ONLY)    if (p->flags & PAGE_WRITE) {        target_ulong addr;        PageDesc *p2;        int prot;        /* force the host page as non writable (writes will have a           page fault + mprotect overhead) */        page_addr &= qemu_host_page_mask;        prot = 0;        for(addr = page_addr; addr < page_addr + qemu_host_page_size;            addr += TARGET_PAGE_SIZE) {            p2 = page_find (addr >> TARGET_PAGE_BITS);            if (!p2)                continue;            prot |= p2->flags;            p2->flags &= ~PAGE_WRITE;            page_get_flags(addr);          }        mprotect(g2h(page_addr), qemu_host_page_size,                 (prot & PAGE_BITS) & ~PAGE_WRITE);#ifdef DEBUG_TB_INVALIDATE        printf("protecting code page: 0x" TARGET_FMT_lx "\n",               page_addr);#endif    }#else    /* if some code is already present, then the pages are already       protected. So we handle the case where only the first TB is       allocated in a physical page */    if (!last_first_tb) {        tlb_protect_code(page_addr);    }#endif#endif /* TARGET_HAS_SMC */}/* Allocate a new translation block. Flush the translation buffer if   too many translation blocks or too much generated code. */TranslationBlock *tb_alloc(target_ulong pc){    TranslationBlock *tb;    if (nb_tbs >= CODE_GEN_MAX_BLOCKS ||        (code_gen_ptr - code_gen_buffer) >= CODE_GEN_BUFFER_MAX_SIZE)        return NULL;    tb = &tbs[nb_tbs++];    tb->pc = pc;    tb->cflags = 0;    return tb;}/* add a new TB and link it to the physical page tables. phys_page2 is   (-1) to indicate that only one page contains the TB. */void tb_link_phys(TranslationBlock *tb,                  target_ulong phys_pc, target_ulong phys_page2){    unsigned int h;    TranslationBlock **ptb;    /* add in the physical hash table */    h = tb_phys_hash_func(phys_pc);    ptb = &tb_phys_hash[h];    tb->phys_hash_next = *ptb;    *ptb = tb;    /* add in the page list */    tb_alloc_page(tb, 0, phys_pc & TARGET_PAGE_MASK);    if (phys_page2 != -1)        tb_alloc_page(tb, 1, phys_page2);    else        tb->page_addr[1] = -1;    tb->jmp_first = (TranslationBlock *)((long)tb | 2);    tb->jmp_next[0] = NULL;    tb->jmp_next[1] = NULL;    /* init original jump addresses */    if (tb->tb_next_offset[0] != 0xffff)        tb_reset_jump(tb, 0);    if (tb->tb_next_offset[1] != 0xffff)        tb_reset_jump(tb, 1);#ifdef DEBUG_TB_CHECK    tb_page_check();#endif}/* find the TB 'tb' such that tb[0].tc_ptr <= tc_ptr <   tb[1].tc_ptr. Return NULL if not found */TranslationBlock *tb_find_pc(unsigned long tc_ptr){    int m_min, m_max, m;    unsigned long v;    TranslationBlock *tb;    if (nb_tbs <= 0)        return NULL;    if (tc_ptr < (unsigned long)code_gen_buffer ||        tc_ptr >= (unsigned long)code_gen_ptr)        return NULL;    /* binary search (cf Knuth) */    m_min = 0;    m_max = nb_tbs - 1;    while (m_min <= m_max) {        m = (m_min + m_max) >> 1;        tb = &tbs[m];        v = (unsigned long)tb->tc_ptr;        if (v == tc_ptr)            return tb;        else if (tc_ptr < v) {            m_max = m - 1;        } else {            m_min = m + 1;        }    }    return &tbs[m_max];}static void tb_reset_jump_recursive(TranslationBlock *tb);static inline void tb_reset_jump_recursive2(TranslationBlock *tb, int n){    TranslationBlock *tb1, *tb_next, **ptb;    unsigned int n1;    tb1 = tb->jmp_next[n];    if (tb1 != NULL) {        /* find head of list */        for(;;) {            n1 = (long)tb1 & 3;            tb1 = (TranslationBlock *)((long)tb1 & ~3);            if (n1 == 2)                break;            tb1 = tb1->jmp_next[n1];        }        /* we are now sure now that tb jumps to tb1 */        tb_next = tb1;        /* remove tb from the jmp_first list */        ptb = &tb_next->jmp_first;        for(;;) {            tb1 = *ptb;            n1 = (long)tb1 & 3;            tb1 = (TranslationBlock *)((long)tb1 & ~3);            if (n1 == n && tb1 == tb)                break;            ptb = &tb1->jmp_next[n1];        }        *ptb = tb->jmp_next[n];        tb->jmp_next[n] = NULL;        /* suppress the jump to next tb in generated code */        tb_reset_jump(tb, n);        /* suppress jumps in the tb on which we could have jumped */        tb_reset_jump_recursive(tb_next);    }}static void tb_reset_jump_recursive(TranslationBlock *tb){    tb_reset_jump_recursive2(tb, 0);    tb_reset_jump_recursive2(tb, 1);}#if defined(TARGET_HAS_ICE)static void breakpoint_invalidate(CPUState *env, target_ulong pc){    target_phys_addr_t addr;    target_ulong pd;    ram_addr_t ram_addr;    PhysPageDesc *p;    addr = cpu_get_phys_page_debug(env, pc);    p = phys_page_find(addr >> TARGET_PAGE_BITS);    if (!p) {        pd = IO_MEM_UNASSIGNED;    } else {        pd = p->phys_offset;    }    ram_addr = (pd & TARGET_PAGE_MASK) | (pc & ~TARGET_PAGE_MASK);    tb_invalidate_phys_page_range(ram_addr, ram_addr + 1, 0);}#endif/* Add a watchpoint.  */int  cpu_watchpoint_insert(CPUState *env, target_ulong addr){    int i;    for (i = 0; i < env->nb_watchpoints; i++) {        if (addr == env->watchpoint[i].vaddr)            return 0;    }    if (env->nb_watchpoints >= MAX_WATCHPOINTS)        return -1;    i = env->nb_watchpoints++;    env->watchpoint[i].vaddr = addr;    tlb_flush_page(env, addr);    /* FIXME: This flush is needed because of the hack to make memory ops       terminate the TB.  It can be removed once the proper IO trap and       re-execute bits are in.  */    tb_flush(env);    return i;}/* Remove a watchpoint.  */int cpu_watchpoint_remove(CPUState *env, target_ulong addr){    int i;    for (i = 0; i < env->nb_watchpoints; i++) {        if (addr == env->watchpoint[i].vaddr) {            env->nb_watchpoints--;            env->watchpoint[i] = env->watchpoint[env->nb_watchpoints];            tlb_flush_page(env, addr);            return 0;        }    }    return -1;}/* add a breakpoint. EXCP_DEBUG is returned by the CPU loop if a   breakpoint is reached */int cpu_breakpoint_insert(CPUState *env, target_ulong pc){#if defined(TARGET_HAS_ICE)    int i;    for(i = 0; i < env->nb_breakpoints; i++) {        if (env->breakpoints[i] == pc)            return 0;    }    if (env->nb_breakpoints >= MAX_BREAKPOINTS)        return -1;    env->breakpoints[env->nb_breakpoints++] = pc;    breakpoint_invalidate(env, pc);    return 0;#else    return -1;#endif}/* remove a breakpoint */int cpu_breakpoint_remove(CPUState *env, target_ulong pc){#if defined(TARGET_HAS_ICE)    int i;    for(i = 0; i < env->nb_breakpoints; i++) {        if (env->breakpoints[i] == pc)            goto found;    }    return -1; found:    env->nb_breakpoints--;    if (i < env->nb_breakpoints)      env->breakpoints[i] = env->breakpoints[env->nb_breakpoints];    breakpoint_invalidate(env, pc);    return 0;#else    return -1;#endif}/* enable or disable single step mode. EXCP_DEBUG is returned by the   CPU loop after each instruction */void cpu_single_step(CPUState *env, int enabled){#if defined(TARGET_HAS_ICE)    if (env->singlestep_enabled != enabled) {        env->singlestep_enabled = enabled;        /* must flush all the translated code to avoid inconsistancies */        /* XXX: only flush what is necessary */        tb_flush(env);    }#endif}/* enable or disable low levels log */void cpu_set_log(int log_flags){    loglevel = log_flags;    if (loglevel && !logfile) {        logfile = fopen(logfilename, log_append ? "a" : "w");        if (!logfile) {            perror(logfilename);            _exit(1);        }#if !defined(CONFIG_SOFTMMU)        /* must avoid mmap() usage of glibc by setting a buffer "by hand" */        {            static uint8_t logfile_buf[4096];            setvbuf(logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));        }#else        setvbuf(logfile, NULL, _IOLBF, 0);#endif        log_append = 1;    }    if (!loglevel && logfile) {        fclose(logfile);        logfile = NULL;    }}void cpu_set_log_filename(const char *filename){    logfilename = strdup(filename);    if (logfile) {        fclose(logfile);        logfile = NULL;    }    cpu_set_log(loglevel);}/* mask must never be zero, except for A20 change call */void cpu_interrupt(CPUState *env, int mask){    TranslationBlock *tb;    static int interrupt_lock;    env->interrupt_request |= mask;    /* if the cpu is currently executing code, we must unlink it and       all the potentially executing TB */    tb = env->current_tb;    if (tb && !testandset(&interrupt_lock)) {        env->current_tb = NULL;        tb_reset_jump_recursive(tb);        interrupt_lock = 0;    }}void cpu_reset_interrupt(CPUState *env, int mask){    env->interrupt_request &= ~mask;}CPULogItem cpu_log_items[] = {    { CPU_LOG_TB_OUT_ASM, "out_asm",      "show generated host assembly code for each compiled TB" },    { CPU_LOG_TB_IN_ASM, "in_asm",      "show target assembly code for each compiled TB" },    { CPU_LOG_TB_OP, "op",      "show micro ops for each compiled TB (only usable if 'in_asm' used)" },#ifdef TARGET_I386    { CPU_LOG_TB_OP_OPT, "op_opt",      "show micro ops after optimization for each compiled TB" },#endif    { CPU_LOG_INT, "int",      "show interrupts/exceptions in short format" },    { CPU_LOG_EXEC, "exec",      "show trace before each executed TB (lots of logs)" },    { CPU_LOG_TB_CPU, "cpu",      "show CPU state before block translation" },#ifdef TARGET_I386    { CPU_LOG_PCALL, "pcall",      "show protected mode far calls/returns/exceptions" },#endif#ifdef DEBUG_IOPORT    { CPU_LOG_IOPORT, "ioport",      "show all i/o ports accesses" },#endif    { 0, NULL, NULL },};static int cmp1(const char *s1, int n, const char *s2){    if (strlen(s2) != n)        return 0;    return memcmp(s1, s2, n) == 0;}/* takes a comma separated list of log masks. Return 0 if error. */int cpu_str_to_log_mask(const char *str){    CPULogItem *item;    int mask;    const char *p, *p1;    p = str;    mask = 0;    for(;;) {        p1 = strchr(p, ',');        if (!p1)            p1 = p + strlen(p);	if(cmp1(p,p1-p,"all")) {		for(item = cpu_log_items; item->mask != 0; item++) {			mask |= item->mask;		}	} else {        for(item = cpu_log_items; item->mask != 0; item++) {            if (cmp1(p, p1 - p, item->name))                goto found;        }        return 0;	}    found:        mask |= item->mask;        if (*p1 != ',')

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久不见久久见免费视频7| 91精品在线麻豆| 成人看片黄a免费看在线| 久久精品国产一区二区| 精品一区二区三区的国产在线播放| 偷拍日韩校园综合在线| 三级成人在线视频| 五月激情六月综合| 日韩高清中文字幕一区| 美女脱光内衣内裤视频久久网站 | 污片在线观看一区二区| 天天综合天天综合色| 日韩主播视频在线| 日韩av成人高清| 国产乱人伦偷精品视频不卡| 成人午夜视频福利| 色中色一区二区| 欧美精品亚洲二区| 日韩亚洲欧美一区二区三区| 精品欧美一区二区三区精品久久| 日韩精品一区二区在线| 国产亚洲一二三区| 国产精品色一区二区三区| 自拍偷自拍亚洲精品播放| 成人激情午夜影院| 色综合久久66| 日韩免费观看高清完整版在线观看| 精品国产91乱码一区二区三区| 久久久久青草大香线综合精品| 中文在线资源观看网站视频免费不卡| 中文字幕制服丝袜成人av| 一级中文字幕一区二区| 免费观看在线综合| 懂色av一区二区夜夜嗨| 欧洲色大大久久| 精品少妇一区二区三区免费观看 | 欧美国产国产综合| 一区二区高清视频在线观看| 日韩高清一区在线| 成人丝袜18视频在线观看| 欧美丝袜第三区| 精品国产免费人成在线观看| 日韩一区在线看| 日本欧美肥老太交大片| 懂色av中文一区二区三区| 欧美狂野另类xxxxoooo| 欧美国产一区二区在线观看| 亚洲午夜免费福利视频| 国产麻豆成人传媒免费观看| 色婷婷亚洲精品| 26uuu精品一区二区 | 成人福利视频网站| 欧美精品在线视频| 国产精品人人做人人爽人人添 | 成人中文字幕合集| 777奇米四色成人影色区| 中文字幕国产一区二区| 日韩精品成人一区二区在线| 97久久超碰精品国产| 欧美大片在线观看一区二区| 亚洲色图色小说| 国产曰批免费观看久久久| 欧美天堂一区二区三区| 国产精品毛片a∨一区二区三区 | 欧洲另类一二三四区| 久久久久成人黄色影片| 午夜精品久久久久久久99樱桃| 国产a精品视频| 欧美一区二区女人| 亚洲综合小说图片| 高清国产一区二区三区| 日韩精品中文字幕一区| 亚洲成人精品在线观看| 99re热视频精品| 国产日韩在线不卡| 国内精品伊人久久久久av一坑 | 91精品国产色综合久久ai换脸 | 99久久精品免费看| 精品久久久网站| 91视频观看免费| 国产欧美日韩在线观看| 美女久久久精品| 欧美一区二区三区在线看| 亚洲曰韩产成在线| av电影在线不卡| 中文字幕av一区二区三区免费看 | 欧美少妇性性性| 亚洲三级理论片| 成人av在线一区二区三区| 26uuu亚洲| 国产综合色产在线精品| 日韩欧美一级二级三级| 肉丝袜脚交视频一区二区| 欧美在线免费播放| 一区二区不卡在线视频 午夜欧美不卡在| 国产成人av一区二区| 欧美精品一区二区三区蜜桃| 久久99热国产| 欧美成人猛片aaaaaaa| 日本欧美一区二区| 日韩一级大片在线| 久久国产精品72免费观看| 91精品国产免费| 日本伊人色综合网| 91精品国产色综合久久ai换脸| 偷拍日韩校园综合在线| 欧美一级高清大全免费观看| 日韩av二区在线播放| 日韩亚洲欧美中文三级| 美腿丝袜在线亚洲一区| 3d成人h动漫网站入口| 日韩精品每日更新| 日韩一区二区精品葵司在线| 久久99精品一区二区三区 | 亚洲精品免费视频| 在线免费不卡视频| 亚洲国产日韩精品| 欧美一区二区三区色| 久久国产精品99久久久久久老狼| 欧美刺激脚交jootjob| 国产一区二区三区四区五区美女| 久久久久9999亚洲精品| 成人综合激情网| 亚洲三级免费观看| 9191成人精品久久| 国产一区二区三区免费播放| 国产农村妇女精品| 91啪亚洲精品| 五月婷婷久久综合| 久久久精品综合| 一本久久精品一区二区| 五月天久久比比资源色| 精品国产伦一区二区三区观看体验| 国产精品综合视频| 自拍偷拍国产亚洲| 欧美一区二区三区喷汁尤物| 国产精品996| 一区二区三区鲁丝不卡| 日韩一区二区免费在线电影| 国产成人99久久亚洲综合精品| 国产精品国产三级国产| 欧美日韩精品电影| 国产河南妇女毛片精品久久久| 18欧美乱大交hd1984| 欧美欧美欧美欧美| 国产精品一区在线| 亚洲成a人在线观看| 精品久久99ma| 色哟哟日韩精品| 久久精品国产成人一区二区三区| 国产喷白浆一区二区三区| 国产精品久久久久aaaa樱花 | 久久精品视频一区二区三区| 色综合 综合色| 国产在线播放一区二区三区 | 色婷婷综合久久久| 精品一区二区三区蜜桃| 亚洲精品亚洲人成人网| 日韩欧美黄色影院| 色婷婷久久久亚洲一区二区三区| 麻豆视频一区二区| 亚洲欧美另类小说| 欧美精品一区二区三区四区| 91久久精品一区二区三区| 国产精品77777| 亚洲午夜在线视频| 国产欧美日韩另类视频免费观看| 欧美色网站导航| 粉嫩高潮美女一区二区三区| 五月天激情综合| 亚洲免费观看高清完整版在线观看熊| 日韩视频在线你懂得| 色综合久久久久综合| 国产一区不卡视频| 青青草97国产精品免费观看| 自拍偷自拍亚洲精品播放| 久久久精品免费免费| 欧美一区二区三区电影| 在线观看视频一区| 99久久婷婷国产| 国产凹凸在线观看一区二区 | 5566中文字幕一区二区电影| 色综合久久精品| 豆国产96在线|亚洲| 精品一区二区三区免费| 日本视频在线一区| 亚洲综合成人网| 亚洲激情欧美激情| 1区2区3区欧美| 国产精品嫩草99a| 久久久精品免费网站| 26uuu亚洲| 26uuu亚洲综合色欧美| 精品免费日韩av| 日韩午夜激情电影| 日韩亚洲欧美一区二区三区| 制服丝袜中文字幕亚洲| 欧美三级电影一区| 欧美性感一类影片在线播放| 一本一道波多野结衣一区二区|