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

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

?? exec.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
                    if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_ROM ||#if defined(TARGET_HAS_SMC) || 1                        first_tb ||#endif                        ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM &&                         !cpu_physical_memory_is_dirty(pd))) {                        /* ROM: we do as if code was inside */                        /* if code is present, we only map as read only and save the                           original mapping */                        VirtPageDesc *vp;                        vp = virt_page_find_alloc(vaddr >> TARGET_PAGE_BITS, 1);                        vp->phys_addr = pd;                        vp->prot = prot;                        vp->valid_tag = virt_valid_tag;                        prot &= ~PAGE_WRITE;                    }                }                map_addr = mmap((void *)vaddr, TARGET_PAGE_SIZE, prot,                                MAP_SHARED | MAP_FIXED, phys_ram_fd, (pd & TARGET_PAGE_MASK));                if (map_addr == MAP_FAILED) {                    cpu_abort(env, "mmap failed when mapped physical address 0x%08x to virtual address 0x%08x\n",                              paddr, vaddr);                }            }        }    }#endif    return ret;}/* called from signal handler: invalidate the code and unprotect the   page. Return TRUE if the fault was succesfully handled. */int page_unprotect(target_ulong addr, unsigned long pc, void *puc){#if !defined(CONFIG_SOFTMMU)    VirtPageDesc *vp;#if defined(DEBUG_TLB)    printf("page_unprotect: addr=0x%08x\n", addr);#endif    addr &= TARGET_PAGE_MASK;    /* if it is not mapped, no need to worry here */    if (addr >= MMAP_AREA_END)        return 0;    vp = virt_page_find(addr >> TARGET_PAGE_BITS);    if (!vp)        return 0;    /* NOTE: in this case, validate_tag is _not_ tested as it       validates only the code TLB */    if (vp->valid_tag != virt_valid_tag)        return 0;    if (!(vp->prot & PAGE_WRITE))        return 0;#if defined(DEBUG_TLB)    printf("page_unprotect: addr=0x%08x phys_addr=0x%08x prot=%x\n",           addr, vp->phys_addr, vp->prot);#endif    if (mprotect((void *)addr, TARGET_PAGE_SIZE, vp->prot) < 0)        cpu_abort(cpu_single_env, "error mprotect addr=0x%lx prot=%d\n",                  (unsigned long)addr, vp->prot);    /* set the dirty bit */    phys_ram_dirty[vp->phys_addr >> TARGET_PAGE_BITS] = 0xff;    /* flush the code inside */    tb_invalidate_phys_page(vp->phys_addr, pc, puc);    return 1;#else    return 0;#endif}#elsevoid tlb_flush(CPUState *env, int flush_global){}void tlb_flush_page(CPUState *env, target_ulong addr){}int tlb_set_page_exec(CPUState *env, target_ulong vaddr,                      target_phys_addr_t paddr, int prot,                      int mmu_idx, int is_softmmu){    return 0;}/* dump memory mappings */void page_dump(FILE *f){    unsigned long start, end;    int i, j, prot, prot1;    PageDesc *p;    fprintf(f, "%-8s %-8s %-8s %s\n",            "start", "end", "size", "prot");    start = -1;    end = -1;    prot = 0;    for(i = 0; i <= L1_SIZE; i++) {        if (i < L1_SIZE)            p = l1_map[i];        else            p = NULL;        for(j = 0;j < L2_SIZE; j++) {            if (!p)                prot1 = 0;            else                prot1 = p[j].flags;            if (prot1 != prot) {                end = (i << (32 - L1_BITS)) | (j << TARGET_PAGE_BITS);                if (start != -1) {                    fprintf(f, "%08lx-%08lx %08lx %c%c%c\n",                            start, end, end - start,                            prot & PAGE_READ ? 'r' : '-',                            prot & PAGE_WRITE ? 'w' : '-',                            prot & PAGE_EXEC ? 'x' : '-');                }                if (prot1 != 0)                    start = end;                else                    start = -1;                prot = prot1;            }            if (!p)                break;        }    }}int page_get_flags(target_ulong address){    PageDesc *p;    p = page_find(address >> TARGET_PAGE_BITS);    if (!p)        return 0;    return p->flags;}/* modify the flags of a page and invalidate the code if   necessary. The flag PAGE_WRITE_ORG is positionned automatically   depending on PAGE_WRITE */void page_set_flags(target_ulong start, target_ulong end, int flags){    PageDesc *p;    target_ulong addr;    start = start & TARGET_PAGE_MASK;    end = TARGET_PAGE_ALIGN(end);    if (flags & PAGE_WRITE)        flags |= PAGE_WRITE_ORG;    spin_lock(&tb_lock);    for(addr = start; addr < end; addr += TARGET_PAGE_SIZE) {        p = page_find_alloc(addr >> TARGET_PAGE_BITS);        /* if the write protection is set, then we invalidate the code           inside */        if (!(p->flags & PAGE_WRITE) &&            (flags & PAGE_WRITE) &&            p->first_tb) {            tb_invalidate_phys_page(addr, 0, NULL);        }        p->flags = flags;    }    spin_unlock(&tb_lock);}int page_check_range(target_ulong start, target_ulong len, int flags){    PageDesc *p;    target_ulong end;    target_ulong addr;    end = TARGET_PAGE_ALIGN(start+len); /* must do before we loose bits in the next step */    start = start & TARGET_PAGE_MASK;    if( end < start )        /* we've wrapped around */        return -1;    for(addr = start; addr < end; addr += TARGET_PAGE_SIZE) {        p = page_find(addr >> TARGET_PAGE_BITS);        if( !p )            return -1;        if( !(p->flags & PAGE_VALID) )            return -1;        if ((flags & PAGE_READ) && !(p->flags & PAGE_READ))            return -1;        if (flags & PAGE_WRITE) {            if (!(p->flags & PAGE_WRITE_ORG))                return -1;            /* unprotect the page if it was put read-only because it               contains translated code */            if (!(p->flags & PAGE_WRITE)) {                if (!page_unprotect(addr, 0, NULL))                    return -1;            }            return 0;        }    }    return 0;}/* called from signal handler: invalidate the code and unprotect the   page. Return TRUE if the fault was succesfully handled. */int page_unprotect(target_ulong address, unsigned long pc, void *puc){    unsigned int page_index, prot, pindex;    PageDesc *p, *p1;    target_ulong host_start, host_end, addr;    host_start = address & qemu_host_page_mask;    page_index = host_start >> TARGET_PAGE_BITS;    p1 = page_find(page_index);    if (!p1)        return 0;    host_end = host_start + qemu_host_page_size;    p = p1;    prot = 0;    for(addr = host_start;addr < host_end; addr += TARGET_PAGE_SIZE) {        prot |= p->flags;        p++;    }    /* if the page was really writable, then we change its       protection back to writable */    if (prot & PAGE_WRITE_ORG) {        pindex = (address - host_start) >> TARGET_PAGE_BITS;        if (!(p1[pindex].flags & PAGE_WRITE)) {            mprotect((void *)g2h(host_start), qemu_host_page_size,                     (prot & PAGE_BITS) | PAGE_WRITE);            p1[pindex].flags |= PAGE_WRITE;            /* and since the content will be modified, we must invalidate               the corresponding translated code. */            tb_invalidate_phys_page(address, pc, puc);#ifdef DEBUG_TB_CHECK            tb_invalidate_check(address);#endif            return 1;        }    }    return 0;}static inline void tlb_set_dirty(CPUState *env,                                 unsigned long addr, target_ulong vaddr){}#endif /* defined(CONFIG_USER_ONLY) */static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,                             int memory);static void *subpage_init (target_phys_addr_t base, uint32_t *phys,                           int orig_memory);#define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \                      need_subpage)                                     \    do {                                                                \        if (addr > start_addr)                                          \            start_addr2 = 0;                                            \        else {                                                          \            start_addr2 = start_addr & ~TARGET_PAGE_MASK;               \            if (start_addr2 > 0)                                        \                need_subpage = 1;                                       \        }                                                               \                                                                        \        if ((start_addr + orig_size) - addr >= TARGET_PAGE_SIZE)        \            end_addr2 = TARGET_PAGE_SIZE - 1;                           \        else {                                                          \            end_addr2 = (start_addr + orig_size - 1) & ~TARGET_PAGE_MASK; \            if (end_addr2 < TARGET_PAGE_SIZE - 1)                       \                need_subpage = 1;                                       \        }                                                               \    } while (0)/* register physical memory. 'size' must be a multiple of the target   page size. If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an   io memory page */void cpu_register_physical_memory(target_phys_addr_t start_addr,                                  unsigned long size,                                  unsigned long phys_offset){    target_phys_addr_t addr, end_addr;    PhysPageDesc *p;    CPUState *env;    unsigned long orig_size = size;    void *subpage;    size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;    end_addr = start_addr + (target_phys_addr_t)size;    for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) {        p = phys_page_find(addr >> TARGET_PAGE_BITS);        if (p && p->phys_offset != IO_MEM_UNASSIGNED) {            unsigned long orig_memory = p->phys_offset;            target_phys_addr_t start_addr2, end_addr2;            int need_subpage = 0;            CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2,                          need_subpage);            if (need_subpage || phys_offset & IO_MEM_SUBWIDTH) {                if (!(orig_memory & IO_MEM_SUBPAGE)) {                    subpage = subpage_init((addr & TARGET_PAGE_MASK),                                           &p->phys_offset, orig_memory);                } else {                    subpage = io_mem_opaque[(orig_memory & ~TARGET_PAGE_MASK)                                            >> IO_MEM_SHIFT];                }                subpage_register(subpage, start_addr2, end_addr2, phys_offset);            } else {                p->phys_offset = phys_offset;                if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM ||                    (phys_offset & IO_MEM_ROMD))                    phys_offset += TARGET_PAGE_SIZE;            }        } else {            p = phys_page_find_alloc(addr >> TARGET_PAGE_BITS, 1);            p->phys_offset = phys_offset;            if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM ||                (phys_offset & IO_MEM_ROMD))                phys_offset += TARGET_PAGE_SIZE;            else {                target_phys_addr_t start_addr2, end_addr2;                int need_subpage = 0;                CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr,                              end_addr2, need_subpage);                if (need_subpage || phys_offset & IO_MEM_SUBWIDTH) {                    subpage = subpage_init((addr & TARGET_PAGE_MASK),                                           &p->phys_offset, IO_MEM_UNASSIGNED);                    subpage_register(subpage, start_addr2, end_addr2,                                     phys_offset);                }            }        }    }    /* since each CPU stores ram addresses in its TLB cache, we must       reset the modified entries */    /* XXX: slow ! */    for(env = first_cpu; env != NULL; env = env->next_cpu) {        tlb_flush(env, 1);    }}/* XXX: temporary until new memory mapping API */uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr){    PhysPageDesc *p;    p = phys_page_find(addr >> TARGET_PAGE_BITS);    if (!p)        return IO_MEM_UNASSIGNED;    return p->phys_offset;}/* XXX: better than nothing */ram_addr_t qemu_ram_alloc(unsigned int size){    ram_addr_t addr;    if ((phys_ram_alloc_offset + size) >= phys_ram_size) {        fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n",                size, phys_ram_size);        abort();    }    addr = phys_ram_alloc_offset;    phys_ram_alloc_offset = TARGET_PAGE_ALIGN(phys_ram_alloc_offset + size);    return addr;}void qemu_ram_free(ram_addr_t addr){}static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr){#ifdef DEBUG_UNASSIGNED    printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);#endif#ifdef TARGET_SPARC    do_unassigned_access(addr, 0, 0, 0);#elif TARGET_CRIS    do_unassigned_access(addr, 0, 0, 0);#endif    return 0;}static void unassigned_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val){#ifdef DEBUG_UNASSIGNED    printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);#endif#ifdef TARGET_SPARC    do_unassigned_access(addr, 1, 0, 0);#elif TARGET_CRIS    do_unassigned_access(addr, 1, 0, 0);#endif}static CPUReadMemoryFunc *unassigned_mem_read[3] = {    unassigned_mem_readb,    unassigned_mem_readb,    unassigned_mem_readb,};static CPUWriteMemoryFunc *unassigned_mem_write[3] = {    unassigned_mem_writeb,    unassigned_mem_writeb,    unassigned_mem_writeb,};static void notdirty_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val){    unsigned long ram_addr;    int dirty_flags;    ram_addr = addr - (unsigned long)phys_ram_base;    dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];    if (!(dirty_flags & CODE_DIRTY_FLAG)) {#if !defined(CONFIG_USER_ONLY)        tb_invalidate_phys_page_fast(ram_addr, 1);        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];#endif    }    stb_p((uint8_t *)(long)addr, val);#ifdef USE_KQEMU    if (cpu_single_env->kqemu_enabled &&        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)        kqemu_modify_page(cpu_single_env, ram_addr);#endif    dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);    phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags;    /* we remove 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区久久久 | 国产日韩欧美精品一区| 国产乱码精品一区二区三区忘忧草 | 奇米色777欧美一区二区| 国产三级一区二区三区| 欧美日韩视频第一区| 国产福利一区二区三区视频在线 | 一本到不卡免费一区二区| 蜜桃久久av一区| 亚洲自拍与偷拍| 成人欧美一区二区三区黑人麻豆| 欧美精品一区二区三区蜜桃 | 日韩一区二区高清| 色综合天天综合色综合av | 不卡电影一区二区三区| 亚洲成人av一区二区三区| 91精品国产aⅴ一区二区| 成人开心网精品视频| 亚洲美女屁股眼交3| 国产精品久久久久三级| 欧美韩国日本综合| 欧美在线你懂得| 色先锋久久av资源部| a亚洲天堂av| 在线视频国内自拍亚洲视频| 日本精品一级二级| 久久久精品天堂| 亚洲欧美欧美一区二区三区| 亚洲一区二区精品视频| 免费观看在线色综合| 亚洲午夜成aⅴ人片| 日av在线不卡| 久99久精品视频免费观看| 国产精品一级二级三级| a在线欧美一区| 久久精品人人做人人爽人人| 亚洲图片你懂的| 午夜精品久久久久影视| 久久99精品久久久久久动态图| 日韩电影一区二区三区| 91九色最新地址| 欧美肥妇bbw| 久久亚洲欧美国产精品乐播| 日本一区二区视频在线| 日韩精品一区二| 亚洲成av人**亚洲成av**| 精品一区二区三区的国产在线播放| 国产一区二区在线观看视频| 日本高清不卡aⅴ免费网站| 日本精品一级二级| 欧美成人高清电影在线| 国产精品久久久久久久午夜片| 亚洲一二三四区| 美国三级日本三级久久99| av在线不卡电影| 日韩一区二区麻豆国产| 国产精品久久综合| 日本不卡一区二区三区高清视频| 成人福利视频在线看| 欧美日本一道本在线视频| 国产精品女人毛片| 日韩精品一区第一页| 久88久久88久久久| 久久一日本道色综合| 亚洲免费观看视频| 国产呦萝稀缺另类资源| 欧美亚洲国产一区二区三区va| 亚洲激情一二三区| 激情深爱一区二区| 99久久免费精品| 日韩一区二区电影在线| 欧美一区二区三区免费在线看| 三级影片在线观看欧美日韩一区二区| 高清av一区二区| 欧美一区三区四区| 亚洲一区影音先锋| 黄页网站大全一区二区| 欧美日韩高清影院| 亚洲精品一二三区| 国产伦精一区二区三区| 成人激情文学综合网| 国产精品国产a| 国内精品嫩模私拍在线| 欧美久久一区二区| 亚洲美女一区二区三区| 欧美色综合网站| 亚洲黄色小视频| 成人18精品视频| 精品久久久久一区| 不卡一区在线观看| 国产精品毛片无遮挡高清| 蜜桃视频在线观看一区二区| 91国模大尺度私拍在线视频| 中文字幕一区在线观看视频| 青青国产91久久久久久| 精品不卡在线视频| 午夜久久久影院| 欧美日韩久久不卡| 国产激情视频一区二区在线观看| 欧美一区二区三区日韩视频| 香蕉久久一区二区不卡无毒影院| 91丨九色丨尤物| 精品卡一卡二卡三卡四在线| 大胆亚洲人体视频| 久久久久久黄色| 久久99热这里只有精品| 日韩视频一区二区三区| 国产二区国产一区在线观看| 精品国产91九色蝌蚪| 黑人巨大精品欧美一区| 日韩你懂的在线播放| 久久99国产精品久久99| 欧美日本一区二区在线观看| 日韩精品一区第一页| 91精品国产欧美日韩| 午夜精品久久久久久久99水蜜桃 | 欧美激情综合网| 粉嫩嫩av羞羞动漫久久久| 7777精品伊人久久久大香线蕉完整版 | 视频一区二区中文字幕| 欧美一级二级三级蜜桃| 日韩电影免费在线| 欧美日韩一区成人| 日日嗨av一区二区三区四区| 欧美日韩一区成人| 亚洲va欧美va人人爽午夜| 成人晚上爱看视频| 日韩电影一区二区三区| 日韩精品中文字幕在线不卡尤物 | 国产乱码精品一区二区三区av| 日韩色视频在线观看| 国产一区二区影院| 91麻豆蜜桃一区二区三区| 美女脱光内衣内裤视频久久影院| 日韩精品资源二区在线| 国产精品一二一区| 国产女人18水真多18精品一级做| 一区二区三区在线播| 久久亚区不卡日本| 国产69精品久久久久777| 国产精品久久国产精麻豆99网站| 色综合天天天天做夜夜夜夜做| 国产亚洲人成网站| 色综合一个色综合亚洲| 午夜精彩视频在线观看不卡| 精品捆绑美女sm三区| 日韩电影在线免费看| 一区二区三区在线观看欧美| 欧美日韩一区二区三区四区| 狠狠色2019综合网| 亚洲黄色免费网站| 亚洲欧美怡红院| 精品视频色一区| 日本不卡在线视频| 国产日韩精品一区二区三区 | 黄网站免费久久| 中文字幕亚洲综合久久菠萝蜜| 在线中文字幕一区| 亚洲精品一区二区三区99| 欧美日韩精品一区二区三区| 黄色日韩网站视频| 亚洲精品成人悠悠色影视| 精品国产免费一区二区三区四区| 欧美日韩一区二区三区高清 | 99国产精品国产精品毛片| 99视频超级精品| 欧美国产亚洲另类动漫| 精品日韩欧美在线| 精品久久国产老人久久综合| 欧美美女喷水视频| 欧美人xxxx| 91麻豆精品久久久久蜜臀| 欧美精品亚洲二区| 69堂成人精品免费视频| 欧美日韩色一区| 91.成人天堂一区| 91精品欧美一区二区三区综合在| 欧美另类久久久品| 欧美美女一区二区在线观看| 欧美日韩国产中文| 欧美肥大bbwbbw高潮| 91精品国产91热久久久做人人| 欧美一级二级在线观看| 日韩美女在线视频| 久久这里只有精品视频网| 精品国产免费视频| 26uuu国产电影一区二区| 久久精品一区四区| 国产精品理论片在线观看| 亚洲欧美影音先锋| 亚洲一区二区三区在线看| 亚洲成人你懂的| 麻豆国产91在线播放| 国内成人自拍视频| 成人一区在线观看| 91猫先生在线| 欧美日韩另类国产亚洲欧美一级| 4438x成人网最大色成网站| 日韩精品最新网址| 欧美激情一区不卡|