Commit e2eef1703b536d42b89f8046faf7adeaa0e42ba1
1 parent
2c44375d
Remove dead and bitrotten "qemu-fast" code.
Only build softmmu+MMIO handlers for system emulation. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4695 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
16 additions
and
130 deletions
exec.c
... | ... | @@ -95,11 +95,13 @@ unsigned long code_gen_buffer_size; |
95 | 95 | unsigned long code_gen_buffer_max_size; |
96 | 96 | uint8_t *code_gen_ptr; |
97 | 97 | |
98 | +#if !defined(CONFIG_USER_ONLY) | |
98 | 99 | ram_addr_t phys_ram_size; |
99 | 100 | int phys_ram_fd; |
100 | 101 | uint8_t *phys_ram_base; |
101 | 102 | uint8_t *phys_ram_dirty; |
102 | 103 | static ram_addr_t phys_ram_alloc_offset = 0; |
104 | +#endif | |
103 | 105 | |
104 | 106 | CPUState *first_cpu; |
105 | 107 | /* current CPU in the current thread. It is only valid inside |
... | ... | @@ -137,8 +139,6 @@ typedef struct PhysPageDesc { |
137 | 139 | #define L1_SIZE (1 << L1_BITS) |
138 | 140 | #define L2_SIZE (1 << L2_BITS) |
139 | 141 | |
140 | -static void io_mem_init(void); | |
141 | - | |
142 | 142 | unsigned long qemu_real_host_page_size; |
143 | 143 | unsigned long qemu_host_page_bits; |
144 | 144 | unsigned long qemu_host_page_size; |
... | ... | @@ -148,12 +148,14 @@ unsigned long qemu_host_page_mask; |
148 | 148 | static PageDesc *l1_map[L1_SIZE]; |
149 | 149 | PhysPageDesc **l1_phys_map; |
150 | 150 | |
151 | +#if !defined(CONFIG_USER_ONLY) | |
152 | +static void io_mem_init(void); | |
153 | + | |
151 | 154 | /* io memory support */ |
152 | 155 | CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4]; |
153 | 156 | CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4]; |
154 | 157 | void *io_mem_opaque[IO_MEM_NB_ENTRIES]; |
155 | 158 | static int io_mem_nb; |
156 | -#if defined(CONFIG_SOFTMMU) | |
157 | 159 | static int io_mem_watch; |
158 | 160 | #endif |
159 | 161 | |
... | ... | @@ -408,7 +410,9 @@ void cpu_exec_init_all(unsigned long tb_size) |
408 | 410 | code_gen_alloc(tb_size); |
409 | 411 | code_gen_ptr = code_gen_buffer; |
410 | 412 | page_init(); |
413 | +#if !defined(CONFIG_USER_ONLY) | |
411 | 414 | io_mem_init(); |
415 | +#endif | |
412 | 416 | } |
413 | 417 | |
414 | 418 | void cpu_exec_init(CPUState *env) |
... | ... | @@ -1536,9 +1540,6 @@ void tlb_flush(CPUState *env, int flush_global) |
1536 | 1540 | |
1537 | 1541 | memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *)); |
1538 | 1542 | |
1539 | -#if !defined(CONFIG_SOFTMMU) | |
1540 | - munmap((void *)MMAP_AREA_START, MMAP_AREA_END - MMAP_AREA_START); | |
1541 | -#endif | |
1542 | 1543 | #ifdef USE_KQEMU |
1543 | 1544 | if (env->kqemu_enabled) { |
1544 | 1545 | kqemu_flush(env, flush_global); |
... | ... | @@ -1585,10 +1586,6 @@ void tlb_flush_page(CPUState *env, target_ulong addr) |
1585 | 1586 | |
1586 | 1587 | tlb_flush_jmp_cache(env, addr); |
1587 | 1588 | |
1588 | -#if !defined(CONFIG_SOFTMMU) | |
1589 | - if (addr < MMAP_AREA_END) | |
1590 | - munmap((void *)addr, TARGET_PAGE_SIZE); | |
1591 | -#endif | |
1592 | 1589 | #ifdef USE_KQEMU |
1593 | 1590 | if (env->kqemu_enabled) { |
1594 | 1591 | kqemu_flush_page(env, addr); |
... | ... | @@ -1674,34 +1671,6 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, |
1674 | 1671 | #endif |
1675 | 1672 | #endif |
1676 | 1673 | } |
1677 | - | |
1678 | -#if !defined(CONFIG_SOFTMMU) | |
1679 | - /* XXX: this is expensive */ | |
1680 | - { | |
1681 | - VirtPageDesc *p; | |
1682 | - int j; | |
1683 | - target_ulong addr; | |
1684 | - | |
1685 | - for(i = 0; i < L1_SIZE; i++) { | |
1686 | - p = l1_virt_map[i]; | |
1687 | - if (p) { | |
1688 | - addr = i << (TARGET_PAGE_BITS + L2_BITS); | |
1689 | - for(j = 0; j < L2_SIZE; j++) { | |
1690 | - if (p->valid_tag == virt_valid_tag && | |
1691 | - p->phys_addr >= start && p->phys_addr < end && | |
1692 | - (p->prot & PROT_WRITE)) { | |
1693 | - if (addr < MMAP_AREA_END) { | |
1694 | - mprotect((void *)addr, TARGET_PAGE_SIZE, | |
1695 | - p->prot & ~PROT_WRITE); | |
1696 | - } | |
1697 | - } | |
1698 | - addr += TARGET_PAGE_SIZE; | |
1699 | - p++; | |
1700 | - } | |
1701 | - } | |
1702 | - } | |
1703 | - } | |
1704 | -#endif | |
1705 | 1674 | } |
1706 | 1675 | |
1707 | 1676 | static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry) |
... | ... | @@ -1795,9 +1764,6 @@ int tlb_set_page_exec(CPUState *env, target_ulong vaddr, |
1795 | 1764 | #endif |
1796 | 1765 | |
1797 | 1766 | ret = 0; |
1798 | -#if !defined(CONFIG_SOFTMMU) | |
1799 | - if (is_softmmu) | |
1800 | -#endif | |
1801 | 1767 | { |
1802 | 1768 | if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) { |
1803 | 1769 | /* IO memory case */ |
... | ... | @@ -1857,92 +1823,9 @@ int tlb_set_page_exec(CPUState *env, target_ulong vaddr, |
1857 | 1823 | te->addr_write = -1; |
1858 | 1824 | } |
1859 | 1825 | } |
1860 | -#if !defined(CONFIG_SOFTMMU) | |
1861 | - else { | |
1862 | - if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM) { | |
1863 | - /* IO access: no mapping is done as it will be handled by the | |
1864 | - soft MMU */ | |
1865 | - if (!(env->hflags & HF_SOFTMMU_MASK)) | |
1866 | - ret = 2; | |
1867 | - } else { | |
1868 | - void *map_addr; | |
1869 | - | |
1870 | - if (vaddr >= MMAP_AREA_END) { | |
1871 | - ret = 2; | |
1872 | - } else { | |
1873 | - if (prot & PROT_WRITE) { | |
1874 | - if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_ROM || | |
1875 | -#if defined(TARGET_HAS_SMC) || 1 | |
1876 | - first_tb || | |
1877 | -#endif | |
1878 | - ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM && | |
1879 | - !cpu_physical_memory_is_dirty(pd))) { | |
1880 | - /* ROM: we do as if code was inside */ | |
1881 | - /* if code is present, we only map as read only and save the | |
1882 | - original mapping */ | |
1883 | - VirtPageDesc *vp; | |
1884 | - | |
1885 | - vp = virt_page_find_alloc(vaddr >> TARGET_PAGE_BITS, 1); | |
1886 | - vp->phys_addr = pd; | |
1887 | - vp->prot = prot; | |
1888 | - vp->valid_tag = virt_valid_tag; | |
1889 | - prot &= ~PAGE_WRITE; | |
1890 | - } | |
1891 | - } | |
1892 | - map_addr = mmap((void *)vaddr, TARGET_PAGE_SIZE, prot, | |
1893 | - MAP_SHARED | MAP_FIXED, phys_ram_fd, (pd & TARGET_PAGE_MASK)); | |
1894 | - if (map_addr == MAP_FAILED) { | |
1895 | - cpu_abort(env, "mmap failed when mapped physical address 0x%08x to virtual address 0x%08x\n", | |
1896 | - paddr, vaddr); | |
1897 | - } | |
1898 | - } | |
1899 | - } | |
1900 | - } | |
1901 | -#endif | |
1902 | 1826 | return ret; |
1903 | 1827 | } |
1904 | 1828 | |
1905 | -/* called from signal handler: invalidate the code and unprotect the | |
1906 | - page. Return TRUE if the fault was succesfully handled. */ | |
1907 | -int page_unprotect(target_ulong addr, unsigned long pc, void *puc) | |
1908 | -{ | |
1909 | -#if !defined(CONFIG_SOFTMMU) | |
1910 | - VirtPageDesc *vp; | |
1911 | - | |
1912 | -#if defined(DEBUG_TLB) | |
1913 | - printf("page_unprotect: addr=0x%08x\n", addr); | |
1914 | -#endif | |
1915 | - addr &= TARGET_PAGE_MASK; | |
1916 | - | |
1917 | - /* if it is not mapped, no need to worry here */ | |
1918 | - if (addr >= MMAP_AREA_END) | |
1919 | - return 0; | |
1920 | - vp = virt_page_find(addr >> TARGET_PAGE_BITS); | |
1921 | - if (!vp) | |
1922 | - return 0; | |
1923 | - /* NOTE: in this case, validate_tag is _not_ tested as it | |
1924 | - validates only the code TLB */ | |
1925 | - if (vp->valid_tag != virt_valid_tag) | |
1926 | - return 0; | |
1927 | - if (!(vp->prot & PAGE_WRITE)) | |
1928 | - return 0; | |
1929 | -#if defined(DEBUG_TLB) | |
1930 | - printf("page_unprotect: addr=0x%08x phys_addr=0x%08x prot=%x\n", | |
1931 | - addr, vp->phys_addr, vp->prot); | |
1932 | -#endif | |
1933 | - if (mprotect((void *)addr, TARGET_PAGE_SIZE, vp->prot) < 0) | |
1934 | - cpu_abort(cpu_single_env, "error mprotect addr=0x%lx prot=%d\n", | |
1935 | - (unsigned long)addr, vp->prot); | |
1936 | - /* set the dirty bit */ | |
1937 | - phys_ram_dirty[vp->phys_addr >> TARGET_PAGE_BITS] = 0xff; | |
1938 | - /* flush the code inside */ | |
1939 | - tb_invalidate_phys_page(vp->phys_addr, pc, puc); | |
1940 | - return 1; | |
1941 | -#else | |
1942 | - return 0; | |
1943 | -#endif | |
1944 | -} | |
1945 | - | |
1946 | 1829 | #else |
1947 | 1830 | |
1948 | 1831 | void tlb_flush(CPUState *env, int flush_global) |
... | ... | @@ -2130,6 +2013,7 @@ static inline void tlb_set_dirty(CPUState *env, |
2130 | 2013 | } |
2131 | 2014 | #endif /* defined(CONFIG_USER_ONLY) */ |
2132 | 2015 | |
2016 | +#if !defined(CONFIG_USER_ONLY) | |
2133 | 2017 | static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, |
2134 | 2018 | ram_addr_t memory); |
2135 | 2019 | static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys, |
... | ... | @@ -2387,7 +2271,6 @@ static CPUWriteMemoryFunc *notdirty_mem_write[3] = { |
2387 | 2271 | notdirty_mem_writel, |
2388 | 2272 | }; |
2389 | 2273 | |
2390 | -#if defined(CONFIG_SOFTMMU) | |
2391 | 2274 | /* Watchpoint access routines. Watchpoints are inserted using TLB tricks, |
2392 | 2275 | so these check for a hit then pass through to the normal out-of-line |
2393 | 2276 | phys routines. */ |
... | ... | @@ -2463,7 +2346,6 @@ static CPUWriteMemoryFunc *watch_mem_write[3] = { |
2463 | 2346 | watch_mem_writew, |
2464 | 2347 | watch_mem_writel, |
2465 | 2348 | }; |
2466 | -#endif | |
2467 | 2349 | |
2468 | 2350 | static inline uint32_t subpage_readlen (subpage_t *mmio, target_phys_addr_t addr, |
2469 | 2351 | unsigned int len) |
... | ... | @@ -2619,10 +2501,8 @@ static void io_mem_init(void) |
2619 | 2501 | cpu_register_io_memory(IO_MEM_NOTDIRTY >> IO_MEM_SHIFT, error_mem_read, notdirty_mem_write, NULL); |
2620 | 2502 | io_mem_nb = 5; |
2621 | 2503 | |
2622 | -#if defined(CONFIG_SOFTMMU) | |
2623 | 2504 | io_mem_watch = cpu_register_io_memory(-1, watch_mem_read, |
2624 | 2505 | watch_mem_write, NULL); |
2625 | -#endif | |
2626 | 2506 | /* alloc dirty bits array */ |
2627 | 2507 | phys_ram_dirty = qemu_vmalloc(phys_ram_size >> TARGET_PAGE_BITS); |
2628 | 2508 | memset(phys_ram_dirty, 0xff, phys_ram_size >> TARGET_PAGE_BITS); |
... | ... | @@ -2672,6 +2552,8 @@ CPUReadMemoryFunc **cpu_get_io_memory_read(int io_index) |
2672 | 2552 | return io_mem_read[io_index >> IO_MEM_SHIFT]; |
2673 | 2553 | } |
2674 | 2554 | |
2555 | +#endif /* !defined(CONFIG_USER_ONLY) */ | |
2556 | + | |
2675 | 2557 | /* physical memory access (slow version, mainly for debug) */ |
2676 | 2558 | #if defined(CONFIG_USER_ONLY) |
2677 | 2559 | void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, | ... | ... |
target-cris/op_helper.c
... | ... | @@ -24,6 +24,10 @@ |
24 | 24 | #include "mmu.h" |
25 | 25 | #include "helper.h" |
26 | 26 | |
27 | +#define D(x) | |
28 | + | |
29 | +#if !defined(CONFIG_USER_ONLY) | |
30 | + | |
27 | 31 | #define MMUSUFFIX _mmu |
28 | 32 | |
29 | 33 | #define SHIFT 0 |
... | ... | @@ -38,8 +42,6 @@ |
38 | 42 | #define SHIFT 3 |
39 | 43 | #include "softmmu_template.h" |
40 | 44 | |
41 | -#define D(x) | |
42 | - | |
43 | 45 | /* Try to fill the TLB and return an exception if error. If retaddr is |
44 | 46 | NULL, it means that the function was called in C code (i.e. not |
45 | 47 | from generated code or from helper.c) */ |
... | ... | @@ -78,6 +80,8 @@ void tlb_fill (target_ulong addr, int is_write, int mmu_idx, void *retaddr) |
78 | 80 | env = saved_env; |
79 | 81 | } |
80 | 82 | |
83 | +#endif | |
84 | + | |
81 | 85 | void helper_raise_exception(uint32_t index) |
82 | 86 | { |
83 | 87 | env->exception_index = index; | ... | ... |