]> Git Repo - qemu.git/blob - exec.c
qcow2: Ignore reserved bits in check_refcounts
[qemu.git] / exec.c
1 /*
2  *  virtual page mapping and translated block handling
3  *
4  *  Copyright (c) 2003 Fabrice Bellard
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18  */
19 #include "config.h"
20 #ifdef _WIN32
21 #include <windows.h>
22 #else
23 #include <sys/types.h>
24 #include <sys/mman.h>
25 #endif
26
27 #include "qemu-common.h"
28 #include "cpu.h"
29 #include "tcg.h"
30 #include "hw/hw.h"
31 #include "hw/qdev.h"
32 #include "osdep.h"
33 #include "kvm.h"
34 #include "hw/xen.h"
35 #include "qemu-timer.h"
36 #include "memory.h"
37 #include "exec-memory.h"
38 #if defined(CONFIG_USER_ONLY)
39 #include <qemu.h>
40 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
41 #include <sys/param.h>
42 #if __FreeBSD_version >= 700104
43 #define HAVE_KINFO_GETVMMAP
44 #define sigqueue sigqueue_freebsd  /* avoid redefinition */
45 #include <sys/time.h>
46 #include <sys/proc.h>
47 #include <machine/profile.h>
48 #define _KERNEL
49 #include <sys/user.h>
50 #undef _KERNEL
51 #undef sigqueue
52 #include <libutil.h>
53 #endif
54 #endif
55 #else /* !CONFIG_USER_ONLY */
56 #include "xen-mapcache.h"
57 #include "trace.h"
58 #endif
59
60 #define WANT_EXEC_OBSOLETE
61 #include "exec-obsolete.h"
62
63 //#define DEBUG_TB_INVALIDATE
64 //#define DEBUG_FLUSH
65 //#define DEBUG_TLB
66 //#define DEBUG_UNASSIGNED
67
68 /* make various TB consistency checks */
69 //#define DEBUG_TB_CHECK
70 //#define DEBUG_TLB_CHECK
71
72 //#define DEBUG_IOPORT
73 //#define DEBUG_SUBPAGE
74
75 #if !defined(CONFIG_USER_ONLY)
76 /* TB consistency checks only implemented for usermode emulation.  */
77 #undef DEBUG_TB_CHECK
78 #endif
79
80 #define SMC_BITMAP_USE_THRESHOLD 10
81
82 static TranslationBlock *tbs;
83 static int code_gen_max_blocks;
84 TranslationBlock *tb_phys_hash[CODE_GEN_PHYS_HASH_SIZE];
85 static int nb_tbs;
86 /* any access to the tbs or the page table must use this lock */
87 spinlock_t tb_lock = SPIN_LOCK_UNLOCKED;
88
89 #if defined(__arm__) || defined(__sparc_v9__)
90 /* The prologue must be reachable with a direct jump. ARM and Sparc64
91  have limited branch ranges (possibly also PPC) so place it in a
92  section close to code segment. */
93 #define code_gen_section                                \
94     __attribute__((__section__(".gen_code")))           \
95     __attribute__((aligned (32)))
96 #elif defined(_WIN32) && !defined(_WIN64)
97 #define code_gen_section                                \
98     __attribute__((aligned (16)))
99 #else
100 #define code_gen_section                                \
101     __attribute__((aligned (32)))
102 #endif
103
104 uint8_t code_gen_prologue[1024] code_gen_section;
105 static uint8_t *code_gen_buffer;
106 static unsigned long code_gen_buffer_size;
107 /* threshold to flush the translated code buffer */
108 static unsigned long code_gen_buffer_max_size;
109 static uint8_t *code_gen_ptr;
110
111 #if !defined(CONFIG_USER_ONLY)
112 int phys_ram_fd;
113 static int in_migration;
114
115 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list.blocks) };
116
117 static MemoryRegion *system_memory;
118 static MemoryRegion *system_io;
119
120 MemoryRegion io_mem_ram, io_mem_rom, io_mem_unassigned, io_mem_notdirty;
121 static MemoryRegion io_mem_subpage_ram;
122
123 #endif
124
125 CPUArchState *first_cpu;
126 /* current CPU in the current thread. It is only valid inside
127    cpu_exec() */
128 DEFINE_TLS(CPUArchState *,cpu_single_env);
129 /* 0 = Do not count executed instructions.
130    1 = Precise instruction counting.
131    2 = Adaptive rate instruction counting.  */
132 int use_icount = 0;
133
134 typedef struct PageDesc {
135     /* list of TBs intersecting this ram page */
136     TranslationBlock *first_tb;
137     /* in order to optimize self modifying code, we count the number
138        of lookups we do to a given page to use a bitmap */
139     unsigned int code_write_count;
140     uint8_t *code_bitmap;
141 #if defined(CONFIG_USER_ONLY)
142     unsigned long flags;
143 #endif
144 } PageDesc;
145
146 /* In system mode we want L1_MAP to be based on ram offsets,
147    while in user mode we want it to be based on virtual addresses.  */
148 #if !defined(CONFIG_USER_ONLY)
149 #if HOST_LONG_BITS < TARGET_PHYS_ADDR_SPACE_BITS
150 # define L1_MAP_ADDR_SPACE_BITS  HOST_LONG_BITS
151 #else
152 # define L1_MAP_ADDR_SPACE_BITS  TARGET_PHYS_ADDR_SPACE_BITS
153 #endif
154 #else
155 # define L1_MAP_ADDR_SPACE_BITS  TARGET_VIRT_ADDR_SPACE_BITS
156 #endif
157
158 /* Size of the L2 (and L3, etc) page tables.  */
159 #define L2_BITS 10
160 #define L2_SIZE (1 << L2_BITS)
161
162 #define P_L2_LEVELS \
163     (((TARGET_PHYS_ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / L2_BITS) + 1)
164
165 /* The bits remaining after N lower levels of page tables.  */
166 #define V_L1_BITS_REM \
167     ((L1_MAP_ADDR_SPACE_BITS - TARGET_PAGE_BITS) % L2_BITS)
168
169 #if V_L1_BITS_REM < 4
170 #define V_L1_BITS  (V_L1_BITS_REM + L2_BITS)
171 #else
172 #define V_L1_BITS  V_L1_BITS_REM
173 #endif
174
175 #define V_L1_SIZE  ((target_ulong)1 << V_L1_BITS)
176
177 #define V_L1_SHIFT (L1_MAP_ADDR_SPACE_BITS - TARGET_PAGE_BITS - V_L1_BITS)
178
179 uintptr_t qemu_real_host_page_size;
180 uintptr_t qemu_host_page_size;
181 uintptr_t qemu_host_page_mask;
182
183 /* This is a multi-level map on the virtual address space.
184    The bottom level has pointers to PageDesc.  */
185 static void *l1_map[V_L1_SIZE];
186
187 #if !defined(CONFIG_USER_ONLY)
188 typedef struct PhysPageEntry PhysPageEntry;
189
190 static MemoryRegionSection *phys_sections;
191 static unsigned phys_sections_nb, phys_sections_nb_alloc;
192 static uint16_t phys_section_unassigned;
193 static uint16_t phys_section_notdirty;
194 static uint16_t phys_section_rom;
195 static uint16_t phys_section_watch;
196
197 struct PhysPageEntry {
198     uint16_t is_leaf : 1;
199      /* index into phys_sections (is_leaf) or phys_map_nodes (!is_leaf) */
200     uint16_t ptr : 15;
201 };
202
203 /* Simple allocator for PhysPageEntry nodes */
204 static PhysPageEntry (*phys_map_nodes)[L2_SIZE];
205 static unsigned phys_map_nodes_nb, phys_map_nodes_nb_alloc;
206
207 #define PHYS_MAP_NODE_NIL (((uint16_t)~0) >> 1)
208
209 /* This is a multi-level map on the physical address space.
210    The bottom level has pointers to MemoryRegionSections.  */
211 static PhysPageEntry phys_map = { .ptr = PHYS_MAP_NODE_NIL, .is_leaf = 0 };
212
213 static void io_mem_init(void);
214 static void memory_map_init(void);
215
216 static MemoryRegion io_mem_watch;
217 #endif
218
219 /* log support */
220 #ifdef WIN32
221 static const char *logfilename = "qemu.log";
222 #else
223 static const char *logfilename = "/tmp/qemu.log";
224 #endif
225 FILE *logfile;
226 int loglevel;
227 static int log_append = 0;
228
229 /* statistics */
230 #if !defined(CONFIG_USER_ONLY)
231 static int tlb_flush_count;
232 #endif
233 static int tb_flush_count;
234 static int tb_phys_invalidate_count;
235
236 #ifdef _WIN32
237 static void map_exec(void *addr, long size)
238 {
239     DWORD old_protect;
240     VirtualProtect(addr, size,
241                    PAGE_EXECUTE_READWRITE, &old_protect);
242     
243 }
244 #else
245 static void map_exec(void *addr, long size)
246 {
247     unsigned long start, end, page_size;
248     
249     page_size = getpagesize();
250     start = (unsigned long)addr;
251     start &= ~(page_size - 1);
252     
253     end = (unsigned long)addr + size;
254     end += page_size - 1;
255     end &= ~(page_size - 1);
256     
257     mprotect((void *)start, end - start,
258              PROT_READ | PROT_WRITE | PROT_EXEC);
259 }
260 #endif
261
262 static void page_init(void)
263 {
264     /* NOTE: we can always suppose that qemu_host_page_size >=
265        TARGET_PAGE_SIZE */
266 #ifdef _WIN32
267     {
268         SYSTEM_INFO system_info;
269
270         GetSystemInfo(&system_info);
271         qemu_real_host_page_size = system_info.dwPageSize;
272     }
273 #else
274     qemu_real_host_page_size = getpagesize();
275 #endif
276     if (qemu_host_page_size == 0)
277         qemu_host_page_size = qemu_real_host_page_size;
278     if (qemu_host_page_size < TARGET_PAGE_SIZE)
279         qemu_host_page_size = TARGET_PAGE_SIZE;
280     qemu_host_page_mask = ~(qemu_host_page_size - 1);
281
282 #if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY)
283     {
284 #ifdef HAVE_KINFO_GETVMMAP
285         struct kinfo_vmentry *freep;
286         int i, cnt;
287
288         freep = kinfo_getvmmap(getpid(), &cnt);
289         if (freep) {
290             mmap_lock();
291             for (i = 0; i < cnt; i++) {
292                 unsigned long startaddr, endaddr;
293
294                 startaddr = freep[i].kve_start;
295                 endaddr = freep[i].kve_end;
296                 if (h2g_valid(startaddr)) {
297                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
298
299                     if (h2g_valid(endaddr)) {
300                         endaddr = h2g(endaddr);
301                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
302                     } else {
303 #if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS
304                         endaddr = ~0ul;
305                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
306 #endif
307                     }
308                 }
309             }
310             free(freep);
311             mmap_unlock();
312         }
313 #else
314         FILE *f;
315
316         last_brk = (unsigned long)sbrk(0);
317
318         f = fopen("/compat/linux/proc/self/maps", "r");
319         if (f) {
320             mmap_lock();
321
322             do {
323                 unsigned long startaddr, endaddr;
324                 int n;
325
326                 n = fscanf (f, "%lx-%lx %*[^\n]\n", &startaddr, &endaddr);
327
328                 if (n == 2 && h2g_valid(startaddr)) {
329                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
330
331                     if (h2g_valid(endaddr)) {
332                         endaddr = h2g(endaddr);
333                     } else {
334                         endaddr = ~0ul;
335                     }
336                     page_set_flags(startaddr, endaddr, PAGE_RESERVED);
337                 }
338             } while (!feof(f));
339
340             fclose(f);
341             mmap_unlock();
342         }
343 #endif
344     }
345 #endif
346 }
347
348 static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
349 {
350     PageDesc *pd;
351     void **lp;
352     int i;
353
354 #if defined(CONFIG_USER_ONLY)
355     /* We can't use g_malloc because it may recurse into a locked mutex. */
356 # define ALLOC(P, SIZE)                                 \
357     do {                                                \
358         P = mmap(NULL, SIZE, PROT_READ | PROT_WRITE,    \
359                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);   \
360     } while (0)
361 #else
362 # define ALLOC(P, SIZE) \
363     do { P = g_malloc0(SIZE); } while (0)
364 #endif
365
366     /* Level 1.  Always allocated.  */
367     lp = l1_map + ((index >> V_L1_SHIFT) & (V_L1_SIZE - 1));
368
369     /* Level 2..N-1.  */
370     for (i = V_L1_SHIFT / L2_BITS - 1; i > 0; i--) {
371         void **p = *lp;
372
373         if (p == NULL) {
374             if (!alloc) {
375                 return NULL;
376             }
377             ALLOC(p, sizeof(void *) * L2_SIZE);
378             *lp = p;
379         }
380
381         lp = p + ((index >> (i * L2_BITS)) & (L2_SIZE - 1));
382     }
383
384     pd = *lp;
385     if (pd == NULL) {
386         if (!alloc) {
387             return NULL;
388         }
389         ALLOC(pd, sizeof(PageDesc) * L2_SIZE);
390         *lp = pd;
391     }
392
393 #undef ALLOC
394
395     return pd + (index & (L2_SIZE - 1));
396 }
397
398 static inline PageDesc *page_find(tb_page_addr_t index)
399 {
400     return page_find_alloc(index, 0);
401 }
402
403 #if !defined(CONFIG_USER_ONLY)
404
405 static void phys_map_node_reserve(unsigned nodes)
406 {
407     if (phys_map_nodes_nb + nodes > phys_map_nodes_nb_alloc) {
408         typedef PhysPageEntry Node[L2_SIZE];
409         phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc * 2, 16);
410         phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc,
411                                       phys_map_nodes_nb + nodes);
412         phys_map_nodes = g_renew(Node, phys_map_nodes,
413                                  phys_map_nodes_nb_alloc);
414     }
415 }
416
417 static uint16_t phys_map_node_alloc(void)
418 {
419     unsigned i;
420     uint16_t ret;
421
422     ret = phys_map_nodes_nb++;
423     assert(ret != PHYS_MAP_NODE_NIL);
424     assert(ret != phys_map_nodes_nb_alloc);
425     for (i = 0; i < L2_SIZE; ++i) {
426         phys_map_nodes[ret][i].is_leaf = 0;
427         phys_map_nodes[ret][i].ptr = PHYS_MAP_NODE_NIL;
428     }
429     return ret;
430 }
431
432 static void phys_map_nodes_reset(void)
433 {
434     phys_map_nodes_nb = 0;
435 }
436
437
438 static void phys_page_set_level(PhysPageEntry *lp, target_phys_addr_t *index,
439                                 target_phys_addr_t *nb, uint16_t leaf,
440                                 int level)
441 {
442     PhysPageEntry *p;
443     int i;
444     target_phys_addr_t step = (target_phys_addr_t)1 << (level * L2_BITS);
445
446     if (!lp->is_leaf && lp->ptr == PHYS_MAP_NODE_NIL) {
447         lp->ptr = phys_map_node_alloc();
448         p = phys_map_nodes[lp->ptr];
449         if (level == 0) {
450             for (i = 0; i < L2_SIZE; i++) {
451                 p[i].is_leaf = 1;
452                 p[i].ptr = phys_section_unassigned;
453             }
454         }
455     } else {
456         p = phys_map_nodes[lp->ptr];
457     }
458     lp = &p[(*index >> (level * L2_BITS)) & (L2_SIZE - 1)];
459
460     while (*nb && lp < &p[L2_SIZE]) {
461         if ((*index & (step - 1)) == 0 && *nb >= step) {
462             lp->is_leaf = true;
463             lp->ptr = leaf;
464             *index += step;
465             *nb -= step;
466         } else {
467             phys_page_set_level(lp, index, nb, leaf, level - 1);
468         }
469         ++lp;
470     }
471 }
472
473 static void phys_page_set(target_phys_addr_t index, target_phys_addr_t nb,
474                           uint16_t leaf)
475 {
476     /* Wildly overreserve - it doesn't matter much. */
477     phys_map_node_reserve(3 * P_L2_LEVELS);
478
479     phys_page_set_level(&phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
480 }
481
482 static MemoryRegionSection *phys_page_find(target_phys_addr_t index)
483 {
484     PhysPageEntry lp = phys_map;
485     PhysPageEntry *p;
486     int i;
487     uint16_t s_index = phys_section_unassigned;
488
489     for (i = P_L2_LEVELS - 1; i >= 0 && !lp.is_leaf; i--) {
490         if (lp.ptr == PHYS_MAP_NODE_NIL) {
491             goto not_found;
492         }
493         p = phys_map_nodes[lp.ptr];
494         lp = p[(index >> (i * L2_BITS)) & (L2_SIZE - 1)];
495     }
496
497     s_index = lp.ptr;
498 not_found:
499     return &phys_sections[s_index];
500 }
501
502 static target_phys_addr_t section_addr(MemoryRegionSection *section,
503                                        target_phys_addr_t addr)
504 {
505     addr -= section->offset_within_address_space;
506     addr += section->offset_within_region;
507     return addr;
508 }
509
510 static void tlb_protect_code(ram_addr_t ram_addr);
511 static void tlb_unprotect_code_phys(CPUArchState *env, ram_addr_t ram_addr,
512                                     target_ulong vaddr);
513 #define mmap_lock() do { } while(0)
514 #define mmap_unlock() do { } while(0)
515 #endif
516
517 #define DEFAULT_CODE_GEN_BUFFER_SIZE (32 * 1024 * 1024)
518
519 #if defined(CONFIG_USER_ONLY)
520 /* Currently it is not recommended to allocate big chunks of data in
521    user mode. It will change when a dedicated libc will be used */
522 #define USE_STATIC_CODE_GEN_BUFFER
523 #endif
524
525 #ifdef USE_STATIC_CODE_GEN_BUFFER
526 static uint8_t static_code_gen_buffer[DEFAULT_CODE_GEN_BUFFER_SIZE]
527                __attribute__((aligned (CODE_GEN_ALIGN)));
528 #endif
529
530 static void code_gen_alloc(unsigned long tb_size)
531 {
532 #ifdef USE_STATIC_CODE_GEN_BUFFER
533     code_gen_buffer = static_code_gen_buffer;
534     code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
535     map_exec(code_gen_buffer, code_gen_buffer_size);
536 #else
537     code_gen_buffer_size = tb_size;
538     if (code_gen_buffer_size == 0) {
539 #if defined(CONFIG_USER_ONLY)
540         code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
541 #else
542         /* XXX: needs adjustments */
543         code_gen_buffer_size = (unsigned long)(ram_size / 4);
544 #endif
545     }
546     if (code_gen_buffer_size < MIN_CODE_GEN_BUFFER_SIZE)
547         code_gen_buffer_size = MIN_CODE_GEN_BUFFER_SIZE;
548     /* The code gen buffer location may have constraints depending on
549        the host cpu and OS */
550 #if defined(__linux__) 
551     {
552         int flags;
553         void *start = NULL;
554
555         flags = MAP_PRIVATE | MAP_ANONYMOUS;
556 #if defined(__x86_64__)
557         flags |= MAP_32BIT;
558         /* Cannot map more than that */
559         if (code_gen_buffer_size > (800 * 1024 * 1024))
560             code_gen_buffer_size = (800 * 1024 * 1024);
561 #elif defined(__sparc_v9__)
562         // Map the buffer below 2G, so we can use direct calls and branches
563         flags |= MAP_FIXED;
564         start = (void *) 0x60000000UL;
565         if (code_gen_buffer_size > (512 * 1024 * 1024))
566             code_gen_buffer_size = (512 * 1024 * 1024);
567 #elif defined(__arm__)
568         /* Keep the buffer no bigger than 16MB to branch between blocks */
569         if (code_gen_buffer_size > 16 * 1024 * 1024)
570             code_gen_buffer_size = 16 * 1024 * 1024;
571 #elif defined(__s390x__)
572         /* Map the buffer so that we can use direct calls and branches.  */
573         /* We have a +- 4GB range on the branches; leave some slop.  */
574         if (code_gen_buffer_size > (3ul * 1024 * 1024 * 1024)) {
575             code_gen_buffer_size = 3ul * 1024 * 1024 * 1024;
576         }
577         start = (void *)0x90000000UL;
578 #endif
579         code_gen_buffer = mmap(start, code_gen_buffer_size,
580                                PROT_WRITE | PROT_READ | PROT_EXEC,
581                                flags, -1, 0);
582         if (code_gen_buffer == MAP_FAILED) {
583             fprintf(stderr, "Could not allocate dynamic translator buffer\n");
584             exit(1);
585         }
586     }
587 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
588     || defined(__DragonFly__) || defined(__OpenBSD__) \
589     || defined(__NetBSD__)
590     {
591         int flags;
592         void *addr = NULL;
593         flags = MAP_PRIVATE | MAP_ANONYMOUS;
594 #if defined(__x86_64__)
595         /* FreeBSD doesn't have MAP_32BIT, use MAP_FIXED and assume
596          * 0x40000000 is free */
597         flags |= MAP_FIXED;
598         addr = (void *)0x40000000;
599         /* Cannot map more than that */
600         if (code_gen_buffer_size > (800 * 1024 * 1024))
601             code_gen_buffer_size = (800 * 1024 * 1024);
602 #elif defined(__sparc_v9__)
603         // Map the buffer below 2G, so we can use direct calls and branches
604         flags |= MAP_FIXED;
605         addr = (void *) 0x60000000UL;
606         if (code_gen_buffer_size > (512 * 1024 * 1024)) {
607             code_gen_buffer_size = (512 * 1024 * 1024);
608         }
609 #endif
610         code_gen_buffer = mmap(addr, code_gen_buffer_size,
611                                PROT_WRITE | PROT_READ | PROT_EXEC, 
612                                flags, -1, 0);
613         if (code_gen_buffer == MAP_FAILED) {
614             fprintf(stderr, "Could not allocate dynamic translator buffer\n");
615             exit(1);
616         }
617     }
618 #else
619     code_gen_buffer = g_malloc(code_gen_buffer_size);
620     map_exec(code_gen_buffer, code_gen_buffer_size);
621 #endif
622 #endif /* !USE_STATIC_CODE_GEN_BUFFER */
623     map_exec(code_gen_prologue, sizeof(code_gen_prologue));
624     code_gen_buffer_max_size = code_gen_buffer_size -
625         (TCG_MAX_OP_SIZE * OPC_BUF_SIZE);
626     code_gen_max_blocks = code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE;
627     tbs = g_malloc(code_gen_max_blocks * sizeof(TranslationBlock));
628 }
629
630 /* Must be called before using the QEMU cpus. 'tb_size' is the size
631    (in bytes) allocated to the translation buffer. Zero means default
632    size. */
633 void tcg_exec_init(unsigned long tb_size)
634 {
635     cpu_gen_init();
636     code_gen_alloc(tb_size);
637     code_gen_ptr = code_gen_buffer;
638     tcg_register_jit(code_gen_buffer, code_gen_buffer_size);
639     page_init();
640 #if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE)
641     /* There's no guest base to take into account, so go ahead and
642        initialize the prologue now.  */
643     tcg_prologue_init(&tcg_ctx);
644 #endif
645 }
646
647 bool tcg_enabled(void)
648 {
649     return code_gen_buffer != NULL;
650 }
651
652 void cpu_exec_init_all(void)
653 {
654 #if !defined(CONFIG_USER_ONLY)
655     memory_map_init();
656     io_mem_init();
657 #endif
658 }
659
660 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
661
662 static int cpu_common_post_load(void *opaque, int version_id)
663 {
664     CPUArchState *env = opaque;
665
666     /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
667        version_id is increased. */
668     env->interrupt_request &= ~0x01;
669     tlb_flush(env, 1);
670
671     return 0;
672 }
673
674 static const VMStateDescription vmstate_cpu_common = {
675     .name = "cpu_common",
676     .version_id = 1,
677     .minimum_version_id = 1,
678     .minimum_version_id_old = 1,
679     .post_load = cpu_common_post_load,
680     .fields      = (VMStateField []) {
681         VMSTATE_UINT32(halted, CPUArchState),
682         VMSTATE_UINT32(interrupt_request, CPUArchState),
683         VMSTATE_END_OF_LIST()
684     }
685 };
686 #endif
687
688 CPUArchState *qemu_get_cpu(int cpu)
689 {
690     CPUArchState *env = first_cpu;
691
692     while (env) {
693         if (env->cpu_index == cpu)
694             break;
695         env = env->next_cpu;
696     }
697
698     return env;
699 }
700
701 void cpu_exec_init(CPUArchState *env)
702 {
703     CPUArchState **penv;
704     int cpu_index;
705
706 #if defined(CONFIG_USER_ONLY)
707     cpu_list_lock();
708 #endif
709     env->next_cpu = NULL;
710     penv = &first_cpu;
711     cpu_index = 0;
712     while (*penv != NULL) {
713         penv = &(*penv)->next_cpu;
714         cpu_index++;
715     }
716     env->cpu_index = cpu_index;
717     env->numa_node = 0;
718     QTAILQ_INIT(&env->breakpoints);
719     QTAILQ_INIT(&env->watchpoints);
720 #ifndef CONFIG_USER_ONLY
721     env->thread_id = qemu_get_thread_id();
722 #endif
723     *penv = env;
724 #if defined(CONFIG_USER_ONLY)
725     cpu_list_unlock();
726 #endif
727 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
728     vmstate_register(NULL, cpu_index, &vmstate_cpu_common, env);
729     register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
730                     cpu_save, cpu_load, env);
731 #endif
732 }
733
734 /* Allocate a new translation block. Flush the translation buffer if
735    too many translation blocks or too much generated code. */
736 static TranslationBlock *tb_alloc(target_ulong pc)
737 {
738     TranslationBlock *tb;
739
740     if (nb_tbs >= code_gen_max_blocks ||
741         (code_gen_ptr - code_gen_buffer) >= code_gen_buffer_max_size)
742         return NULL;
743     tb = &tbs[nb_tbs++];
744     tb->pc = pc;
745     tb->cflags = 0;
746     return tb;
747 }
748
749 void tb_free(TranslationBlock *tb)
750 {
751     /* In practice this is mostly used for single use temporary TB
752        Ignore the hard cases and just back up if this TB happens to
753        be the last one generated.  */
754     if (nb_tbs > 0 && tb == &tbs[nb_tbs - 1]) {
755         code_gen_ptr = tb->tc_ptr;
756         nb_tbs--;
757     }
758 }
759
760 static inline void invalidate_page_bitmap(PageDesc *p)
761 {
762     if (p->code_bitmap) {
763         g_free(p->code_bitmap);
764         p->code_bitmap = NULL;
765     }
766     p->code_write_count = 0;
767 }
768
769 /* Set to NULL all the 'first_tb' fields in all PageDescs. */
770
771 static void page_flush_tb_1 (int level, void **lp)
772 {
773     int i;
774
775     if (*lp == NULL) {
776         return;
777     }
778     if (level == 0) {
779         PageDesc *pd = *lp;
780         for (i = 0; i < L2_SIZE; ++i) {
781             pd[i].first_tb = NULL;
782             invalidate_page_bitmap(pd + i);
783         }
784     } else {
785         void **pp = *lp;
786         for (i = 0; i < L2_SIZE; ++i) {
787             page_flush_tb_1 (level - 1, pp + i);
788         }
789     }
790 }
791
792 static void page_flush_tb(void)
793 {
794     int i;
795     for (i = 0; i < V_L1_SIZE; i++) {
796         page_flush_tb_1(V_L1_SHIFT / L2_BITS - 1, l1_map + i);
797     }
798 }
799
800 /* flush all the translation blocks */
801 /* XXX: tb_flush is currently not thread safe */
802 void tb_flush(CPUArchState *env1)
803 {
804     CPUArchState *env;
805 #if defined(DEBUG_FLUSH)
806     printf("qemu: flush code_size=%ld nb_tbs=%d avg_tb_size=%ld\n",
807            (unsigned long)(code_gen_ptr - code_gen_buffer),
808            nb_tbs, nb_tbs > 0 ?
809            ((unsigned long)(code_gen_ptr - code_gen_buffer)) / nb_tbs : 0);
810 #endif
811     if ((unsigned long)(code_gen_ptr - code_gen_buffer) > code_gen_buffer_size)
812         cpu_abort(env1, "Internal error: code buffer overflow\n");
813
814     nb_tbs = 0;
815
816     for(env = first_cpu; env != NULL; env = env->next_cpu) {
817         memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *));
818     }
819
820     memset (tb_phys_hash, 0, CODE_GEN_PHYS_HASH_SIZE * sizeof (void *));
821     page_flush_tb();
822
823     code_gen_ptr = code_gen_buffer;
824     /* XXX: flush processor icache at this point if cache flush is
825        expensive */
826     tb_flush_count++;
827 }
828
829 #ifdef DEBUG_TB_CHECK
830
831 static void tb_invalidate_check(target_ulong address)
832 {
833     TranslationBlock *tb;
834     int i;
835     address &= TARGET_PAGE_MASK;
836     for(i = 0;i < CODE_GEN_PHYS_HASH_SIZE; i++) {
837         for(tb = tb_phys_hash[i]; tb != NULL; tb = tb->phys_hash_next) {
838             if (!(address + TARGET_PAGE_SIZE <= tb->pc ||
839                   address >= tb->pc + tb->size)) {
840                 printf("ERROR invalidate: address=" TARGET_FMT_lx
841                        " PC=%08lx size=%04x\n",
842                        address, (long)tb->pc, tb->size);
843             }
844         }
845     }
846 }
847
848 /* verify that all the pages have correct rights for code */
849 static void tb_page_check(void)
850 {
851     TranslationBlock *tb;
852     int i, flags1, flags2;
853
854     for(i = 0;i < CODE_GEN_PHYS_HASH_SIZE; i++) {
855         for(tb = tb_phys_hash[i]; tb != NULL; tb = tb->phys_hash_next) {
856             flags1 = page_get_flags(tb->pc);
857             flags2 = page_get_flags(tb->pc + tb->size - 1);
858             if ((flags1 & PAGE_WRITE) || (flags2 & PAGE_WRITE)) {
859                 printf("ERROR page flags: PC=%08lx size=%04x f1=%x f2=%x\n",
860                        (long)tb->pc, tb->size, flags1, flags2);
861             }
862         }
863     }
864 }
865
866 #endif
867
868 /* invalidate one TB */
869 static inline void tb_remove(TranslationBlock **ptb, TranslationBlock *tb,
870                              int next_offset)
871 {
872     TranslationBlock *tb1;
873     for(;;) {
874         tb1 = *ptb;
875         if (tb1 == tb) {
876             *ptb = *(TranslationBlock **)((char *)tb1 + next_offset);
877             break;
878         }
879         ptb = (TranslationBlock **)((char *)tb1 + next_offset);
880     }
881 }
882
883 static inline void tb_page_remove(TranslationBlock **ptb, TranslationBlock *tb)
884 {
885     TranslationBlock *tb1;
886     unsigned int n1;
887
888     for(;;) {
889         tb1 = *ptb;
890         n1 = (uintptr_t)tb1 & 3;
891         tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
892         if (tb1 == tb) {
893             *ptb = tb1->page_next[n1];
894             break;
895         }
896         ptb = &tb1->page_next[n1];
897     }
898 }
899
900 static inline void tb_jmp_remove(TranslationBlock *tb, int n)
901 {
902     TranslationBlock *tb1, **ptb;
903     unsigned int n1;
904
905     ptb = &tb->jmp_next[n];
906     tb1 = *ptb;
907     if (tb1) {
908         /* find tb(n) in circular list */
909         for(;;) {
910             tb1 = *ptb;
911             n1 = (uintptr_t)tb1 & 3;
912             tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
913             if (n1 == n && tb1 == tb)
914                 break;
915             if (n1 == 2) {
916                 ptb = &tb1->jmp_first;
917             } else {
918                 ptb = &tb1->jmp_next[n1];
919             }
920         }
921         /* now we can suppress tb(n) from the list */
922         *ptb = tb->jmp_next[n];
923
924         tb->jmp_next[n] = NULL;
925     }
926 }
927
928 /* reset the jump entry 'n' of a TB so that it is not chained to
929    another TB */
930 static inline void tb_reset_jump(TranslationBlock *tb, int n)
931 {
932     tb_set_jmp_target(tb, n, (uintptr_t)(tb->tc_ptr + tb->tb_next_offset[n]));
933 }
934
935 void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr)
936 {
937     CPUArchState *env;
938     PageDesc *p;
939     unsigned int h, n1;
940     tb_page_addr_t phys_pc;
941     TranslationBlock *tb1, *tb2;
942
943     /* remove the TB from the hash list */
944     phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
945     h = tb_phys_hash_func(phys_pc);
946     tb_remove(&tb_phys_hash[h], tb,
947               offsetof(TranslationBlock, phys_hash_next));
948
949     /* remove the TB from the page list */
950     if (tb->page_addr[0] != page_addr) {
951         p = page_find(tb->page_addr[0] >> TARGET_PAGE_BITS);
952         tb_page_remove(&p->first_tb, tb);
953         invalidate_page_bitmap(p);
954     }
955     if (tb->page_addr[1] != -1 && tb->page_addr[1] != page_addr) {
956         p = page_find(tb->page_addr[1] >> TARGET_PAGE_BITS);
957         tb_page_remove(&p->first_tb, tb);
958         invalidate_page_bitmap(p);
959     }
960
961     tb_invalidated_flag = 1;
962
963     /* remove the TB from the hash list */
964     h = tb_jmp_cache_hash_func(tb->pc);
965     for(env = first_cpu; env != NULL; env = env->next_cpu) {
966         if (env->tb_jmp_cache[h] == tb)
967             env->tb_jmp_cache[h] = NULL;
968     }
969
970     /* suppress this TB from the two jump lists */
971     tb_jmp_remove(tb, 0);
972     tb_jmp_remove(tb, 1);
973
974     /* suppress any remaining jumps to this TB */
975     tb1 = tb->jmp_first;
976     for(;;) {
977         n1 = (uintptr_t)tb1 & 3;
978         if (n1 == 2)
979             break;
980         tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
981         tb2 = tb1->jmp_next[n1];
982         tb_reset_jump(tb1, n1);
983         tb1->jmp_next[n1] = NULL;
984         tb1 = tb2;
985     }
986     tb->jmp_first = (TranslationBlock *)((uintptr_t)tb | 2); /* fail safe */
987
988     tb_phys_invalidate_count++;
989 }
990
991 static inline void set_bits(uint8_t *tab, int start, int len)
992 {
993     int end, mask, end1;
994
995     end = start + len;
996     tab += start >> 3;
997     mask = 0xff << (start & 7);
998     if ((start & ~7) == (end & ~7)) {
999         if (start < end) {
1000             mask &= ~(0xff << (end & 7));
1001             *tab |= mask;
1002         }
1003     } else {
1004         *tab++ |= mask;
1005         start = (start + 8) & ~7;
1006         end1 = end & ~7;
1007         while (start < end1) {
1008             *tab++ = 0xff;
1009             start += 8;
1010         }
1011         if (start < end) {
1012             mask = ~(0xff << (end & 7));
1013             *tab |= mask;
1014         }
1015     }
1016 }
1017
1018 static void build_page_bitmap(PageDesc *p)
1019 {
1020     int n, tb_start, tb_end;
1021     TranslationBlock *tb;
1022
1023     p->code_bitmap = g_malloc0(TARGET_PAGE_SIZE / 8);
1024
1025     tb = p->first_tb;
1026     while (tb != NULL) {
1027         n = (uintptr_t)tb & 3;
1028         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1029         /* NOTE: this is subtle as a TB may span two physical pages */
1030         if (n == 0) {
1031             /* NOTE: tb_end may be after the end of the page, but
1032                it is not a problem */
1033             tb_start = tb->pc & ~TARGET_PAGE_MASK;
1034             tb_end = tb_start + tb->size;
1035             if (tb_end > TARGET_PAGE_SIZE)
1036                 tb_end = TARGET_PAGE_SIZE;
1037         } else {
1038             tb_start = 0;
1039             tb_end = ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);
1040         }
1041         set_bits(p->code_bitmap, tb_start, tb_end - tb_start);
1042         tb = tb->page_next[n];
1043     }
1044 }
1045
1046 TranslationBlock *tb_gen_code(CPUArchState *env,
1047                               target_ulong pc, target_ulong cs_base,
1048                               int flags, int cflags)
1049 {
1050     TranslationBlock *tb;
1051     uint8_t *tc_ptr;
1052     tb_page_addr_t phys_pc, phys_page2;
1053     target_ulong virt_page2;
1054     int code_gen_size;
1055
1056     phys_pc = get_page_addr_code(env, pc);
1057     tb = tb_alloc(pc);
1058     if (!tb) {
1059         /* flush must be done */
1060         tb_flush(env);
1061         /* cannot fail at this point */
1062         tb = tb_alloc(pc);
1063         /* Don't forget to invalidate previous TB info.  */
1064         tb_invalidated_flag = 1;
1065     }
1066     tc_ptr = code_gen_ptr;
1067     tb->tc_ptr = tc_ptr;
1068     tb->cs_base = cs_base;
1069     tb->flags = flags;
1070     tb->cflags = cflags;
1071     cpu_gen_code(env, tb, &code_gen_size);
1072     code_gen_ptr = (void *)(((uintptr_t)code_gen_ptr + code_gen_size +
1073                              CODE_GEN_ALIGN - 1) & ~(CODE_GEN_ALIGN - 1));
1074
1075     /* check next page if needed */
1076     virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;
1077     phys_page2 = -1;
1078     if ((pc & TARGET_PAGE_MASK) != virt_page2) {
1079         phys_page2 = get_page_addr_code(env, virt_page2);
1080     }
1081     tb_link_page(tb, phys_pc, phys_page2);
1082     return tb;
1083 }
1084
1085 /* invalidate all TBs which intersect with the target physical page
1086    starting in range [start;end[. NOTE: start and end must refer to
1087    the same physical page. 'is_cpu_write_access' should be true if called
1088    from a real cpu write access: the virtual CPU will exit the current
1089    TB if code is modified inside this TB. */
1090 void tb_invalidate_phys_page_range(tb_page_addr_t start, tb_page_addr_t end,
1091                                    int is_cpu_write_access)
1092 {
1093     TranslationBlock *tb, *tb_next, *saved_tb;
1094     CPUArchState *env = cpu_single_env;
1095     tb_page_addr_t tb_start, tb_end;
1096     PageDesc *p;
1097     int n;
1098 #ifdef TARGET_HAS_PRECISE_SMC
1099     int current_tb_not_found = is_cpu_write_access;
1100     TranslationBlock *current_tb = NULL;
1101     int current_tb_modified = 0;
1102     target_ulong current_pc = 0;
1103     target_ulong current_cs_base = 0;
1104     int current_flags = 0;
1105 #endif /* TARGET_HAS_PRECISE_SMC */
1106
1107     p = page_find(start >> TARGET_PAGE_BITS);
1108     if (!p)
1109         return;
1110     if (!p->code_bitmap &&
1111         ++p->code_write_count >= SMC_BITMAP_USE_THRESHOLD &&
1112         is_cpu_write_access) {
1113         /* build code bitmap */
1114         build_page_bitmap(p);
1115     }
1116
1117     /* we remove all the TBs in the range [start, end[ */
1118     /* XXX: see if in some cases it could be faster to invalidate all the code */
1119     tb = p->first_tb;
1120     while (tb != NULL) {
1121         n = (uintptr_t)tb & 3;
1122         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1123         tb_next = tb->page_next[n];
1124         /* NOTE: this is subtle as a TB may span two physical pages */
1125         if (n == 0) {
1126             /* NOTE: tb_end may be after the end of the page, but
1127                it is not a problem */
1128             tb_start = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
1129             tb_end = tb_start + tb->size;
1130         } else {
1131             tb_start = tb->page_addr[1];
1132             tb_end = tb_start + ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);
1133         }
1134         if (!(tb_end <= start || tb_start >= end)) {
1135 #ifdef TARGET_HAS_PRECISE_SMC
1136             if (current_tb_not_found) {
1137                 current_tb_not_found = 0;
1138                 current_tb = NULL;
1139                 if (env->mem_io_pc) {
1140                     /* now we have a real cpu fault */
1141                     current_tb = tb_find_pc(env->mem_io_pc);
1142                 }
1143             }
1144             if (current_tb == tb &&
1145                 (current_tb->cflags & CF_COUNT_MASK) != 1) {
1146                 /* If we are modifying the current TB, we must stop
1147                 its execution. We could be more precise by checking
1148                 that the modification is after the current PC, but it
1149                 would require a specialized function to partially
1150                 restore the CPU state */
1151
1152                 current_tb_modified = 1;
1153                 cpu_restore_state(current_tb, env, env->mem_io_pc);
1154                 cpu_get_tb_cpu_state(env, &current_pc, &current_cs_base,
1155                                      &current_flags);
1156             }
1157 #endif /* TARGET_HAS_PRECISE_SMC */
1158             /* we need to do that to handle the case where a signal
1159                occurs while doing tb_phys_invalidate() */
1160             saved_tb = NULL;
1161             if (env) {
1162                 saved_tb = env->current_tb;
1163                 env->current_tb = NULL;
1164             }
1165             tb_phys_invalidate(tb, -1);
1166             if (env) {
1167                 env->current_tb = saved_tb;
1168                 if (env->interrupt_request && env->current_tb)
1169                     cpu_interrupt(env, env->interrupt_request);
1170             }
1171         }
1172         tb = tb_next;
1173     }
1174 #if !defined(CONFIG_USER_ONLY)
1175     /* if no code remaining, no need to continue to use slow writes */
1176     if (!p->first_tb) {
1177         invalidate_page_bitmap(p);
1178         if (is_cpu_write_access) {
1179             tlb_unprotect_code_phys(env, start, env->mem_io_vaddr);
1180         }
1181     }
1182 #endif
1183 #ifdef TARGET_HAS_PRECISE_SMC
1184     if (current_tb_modified) {
1185         /* we generate a block containing just the instruction
1186            modifying the memory. It will ensure that it cannot modify
1187            itself */
1188         env->current_tb = NULL;
1189         tb_gen_code(env, current_pc, current_cs_base, current_flags, 1);
1190         cpu_resume_from_signal(env, NULL);
1191     }
1192 #endif
1193 }
1194
1195 /* len must be <= 8 and start must be a multiple of len */
1196 static inline void tb_invalidate_phys_page_fast(tb_page_addr_t start, int len)
1197 {
1198     PageDesc *p;
1199     int offset, b;
1200 #if 0
1201     if (1) {
1202         qemu_log("modifying code at 0x%x size=%d EIP=%x PC=%08x\n",
1203                   cpu_single_env->mem_io_vaddr, len,
1204                   cpu_single_env->eip,
1205                   cpu_single_env->eip +
1206                   (intptr_t)cpu_single_env->segs[R_CS].base);
1207     }
1208 #endif
1209     p = page_find(start >> TARGET_PAGE_BITS);
1210     if (!p)
1211         return;
1212     if (p->code_bitmap) {
1213         offset = start & ~TARGET_PAGE_MASK;
1214         b = p->code_bitmap[offset >> 3] >> (offset & 7);
1215         if (b & ((1 << len) - 1))
1216             goto do_invalidate;
1217     } else {
1218     do_invalidate:
1219         tb_invalidate_phys_page_range(start, start + len, 1);
1220     }
1221 }
1222
1223 #if !defined(CONFIG_SOFTMMU)
1224 static void tb_invalidate_phys_page(tb_page_addr_t addr,
1225                                     uintptr_t pc, void *puc)
1226 {
1227     TranslationBlock *tb;
1228     PageDesc *p;
1229     int n;
1230 #ifdef TARGET_HAS_PRECISE_SMC
1231     TranslationBlock *current_tb = NULL;
1232     CPUArchState *env = cpu_single_env;
1233     int current_tb_modified = 0;
1234     target_ulong current_pc = 0;
1235     target_ulong current_cs_base = 0;
1236     int current_flags = 0;
1237 #endif
1238
1239     addr &= TARGET_PAGE_MASK;
1240     p = page_find(addr >> TARGET_PAGE_BITS);
1241     if (!p)
1242         return;
1243     tb = p->first_tb;
1244 #ifdef TARGET_HAS_PRECISE_SMC
1245     if (tb && pc != 0) {
1246         current_tb = tb_find_pc(pc);
1247     }
1248 #endif
1249     while (tb != NULL) {
1250         n = (uintptr_t)tb & 3;
1251         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1252 #ifdef TARGET_HAS_PRECISE_SMC
1253         if (current_tb == tb &&
1254             (current_tb->cflags & CF_COUNT_MASK) != 1) {
1255                 /* If we are modifying the current TB, we must stop
1256                    its execution. We could be more precise by checking
1257                    that the modification is after the current PC, but it
1258                    would require a specialized function to partially
1259                    restore the CPU state */
1260
1261             current_tb_modified = 1;
1262             cpu_restore_state(current_tb, env, pc);
1263             cpu_get_tb_cpu_state(env, &current_pc, &current_cs_base,
1264                                  &current_flags);
1265         }
1266 #endif /* TARGET_HAS_PRECISE_SMC */
1267         tb_phys_invalidate(tb, addr);
1268         tb = tb->page_next[n];
1269     }
1270     p->first_tb = NULL;
1271 #ifdef TARGET_HAS_PRECISE_SMC
1272     if (current_tb_modified) {
1273         /* we generate a block containing just the instruction
1274            modifying the memory. It will ensure that it cannot modify
1275            itself */
1276         env->current_tb = NULL;
1277         tb_gen_code(env, current_pc, current_cs_base, current_flags, 1);
1278         cpu_resume_from_signal(env, puc);
1279     }
1280 #endif
1281 }
1282 #endif
1283
1284 /* add the tb in the target page and protect it if necessary */
1285 static inline void tb_alloc_page(TranslationBlock *tb,
1286                                  unsigned int n, tb_page_addr_t page_addr)
1287 {
1288     PageDesc *p;
1289 #ifndef CONFIG_USER_ONLY
1290     bool page_already_protected;
1291 #endif
1292
1293     tb->page_addr[n] = page_addr;
1294     p = page_find_alloc(page_addr >> TARGET_PAGE_BITS, 1);
1295     tb->page_next[n] = p->first_tb;
1296 #ifndef CONFIG_USER_ONLY
1297     page_already_protected = p->first_tb != NULL;
1298 #endif
1299     p->first_tb = (TranslationBlock *)((uintptr_t)tb | n);
1300     invalidate_page_bitmap(p);
1301
1302 #if defined(TARGET_HAS_SMC) || 1
1303
1304 #if defined(CONFIG_USER_ONLY)
1305     if (p->flags & PAGE_WRITE) {
1306         target_ulong addr;
1307         PageDesc *p2;
1308         int prot;
1309
1310         /* force the host page as non writable (writes will have a
1311            page fault + mprotect overhead) */
1312         page_addr &= qemu_host_page_mask;
1313         prot = 0;
1314         for(addr = page_addr; addr < page_addr + qemu_host_page_size;
1315             addr += TARGET_PAGE_SIZE) {
1316
1317             p2 = page_find (addr >> TARGET_PAGE_BITS);
1318             if (!p2)
1319                 continue;
1320             prot |= p2->flags;
1321             p2->flags &= ~PAGE_WRITE;
1322           }
1323         mprotect(g2h(page_addr), qemu_host_page_size,
1324                  (prot & PAGE_BITS) & ~PAGE_WRITE);
1325 #ifdef DEBUG_TB_INVALIDATE
1326         printf("protecting code page: 0x" TARGET_FMT_lx "\n",
1327                page_addr);
1328 #endif
1329     }
1330 #else
1331     /* if some code is already present, then the pages are already
1332        protected. So we handle the case where only the first TB is
1333        allocated in a physical page */
1334     if (!page_already_protected) {
1335         tlb_protect_code(page_addr);
1336     }
1337 #endif
1338
1339 #endif /* TARGET_HAS_SMC */
1340 }
1341
1342 /* add a new TB and link it to the physical page tables. phys_page2 is
1343    (-1) to indicate that only one page contains the TB. */
1344 void tb_link_page(TranslationBlock *tb,
1345                   tb_page_addr_t phys_pc, tb_page_addr_t phys_page2)
1346 {
1347     unsigned int h;
1348     TranslationBlock **ptb;
1349
1350     /* Grab the mmap lock to stop another thread invalidating this TB
1351        before we are done.  */
1352     mmap_lock();
1353     /* add in the physical hash table */
1354     h = tb_phys_hash_func(phys_pc);
1355     ptb = &tb_phys_hash[h];
1356     tb->phys_hash_next = *ptb;
1357     *ptb = tb;
1358
1359     /* add in the page list */
1360     tb_alloc_page(tb, 0, phys_pc & TARGET_PAGE_MASK);
1361     if (phys_page2 != -1)
1362         tb_alloc_page(tb, 1, phys_page2);
1363     else
1364         tb->page_addr[1] = -1;
1365
1366     tb->jmp_first = (TranslationBlock *)((uintptr_t)tb | 2);
1367     tb->jmp_next[0] = NULL;
1368     tb->jmp_next[1] = NULL;
1369
1370     /* init original jump addresses */
1371     if (tb->tb_next_offset[0] != 0xffff)
1372         tb_reset_jump(tb, 0);
1373     if (tb->tb_next_offset[1] != 0xffff)
1374         tb_reset_jump(tb, 1);
1375
1376 #ifdef DEBUG_TB_CHECK
1377     tb_page_check();
1378 #endif
1379     mmap_unlock();
1380 }
1381
1382 /* find the TB 'tb' such that tb[0].tc_ptr <= tc_ptr <
1383    tb[1].tc_ptr. Return NULL if not found */
1384 TranslationBlock *tb_find_pc(uintptr_t tc_ptr)
1385 {
1386     int m_min, m_max, m;
1387     uintptr_t v;
1388     TranslationBlock *tb;
1389
1390     if (nb_tbs <= 0)
1391         return NULL;
1392     if (tc_ptr < (uintptr_t)code_gen_buffer ||
1393         tc_ptr >= (uintptr_t)code_gen_ptr) {
1394         return NULL;
1395     }
1396     /* binary search (cf Knuth) */
1397     m_min = 0;
1398     m_max = nb_tbs - 1;
1399     while (m_min <= m_max) {
1400         m = (m_min + m_max) >> 1;
1401         tb = &tbs[m];
1402         v = (uintptr_t)tb->tc_ptr;
1403         if (v == tc_ptr)
1404             return tb;
1405         else if (tc_ptr < v) {
1406             m_max = m - 1;
1407         } else {
1408             m_min = m + 1;
1409         }
1410     }
1411     return &tbs[m_max];
1412 }
1413
1414 static void tb_reset_jump_recursive(TranslationBlock *tb);
1415
1416 static inline void tb_reset_jump_recursive2(TranslationBlock *tb, int n)
1417 {
1418     TranslationBlock *tb1, *tb_next, **ptb;
1419     unsigned int n1;
1420
1421     tb1 = tb->jmp_next[n];
1422     if (tb1 != NULL) {
1423         /* find head of list */
1424         for(;;) {
1425             n1 = (uintptr_t)tb1 & 3;
1426             tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
1427             if (n1 == 2)
1428                 break;
1429             tb1 = tb1->jmp_next[n1];
1430         }
1431         /* we are now sure now that tb jumps to tb1 */
1432         tb_next = tb1;
1433
1434         /* remove tb from the jmp_first list */
1435         ptb = &tb_next->jmp_first;
1436         for(;;) {
1437             tb1 = *ptb;
1438             n1 = (uintptr_t)tb1 & 3;
1439             tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
1440             if (n1 == n && tb1 == tb)
1441                 break;
1442             ptb = &tb1->jmp_next[n1];
1443         }
1444         *ptb = tb->jmp_next[n];
1445         tb->jmp_next[n] = NULL;
1446
1447         /* suppress the jump to next tb in generated code */
1448         tb_reset_jump(tb, n);
1449
1450         /* suppress jumps in the tb on which we could have jumped */
1451         tb_reset_jump_recursive(tb_next);
1452     }
1453 }
1454
1455 static void tb_reset_jump_recursive(TranslationBlock *tb)
1456 {
1457     tb_reset_jump_recursive2(tb, 0);
1458     tb_reset_jump_recursive2(tb, 1);
1459 }
1460
1461 #if defined(TARGET_HAS_ICE)
1462 #if defined(CONFIG_USER_ONLY)
1463 static void breakpoint_invalidate(CPUArchState *env, target_ulong pc)
1464 {
1465     tb_invalidate_phys_page_range(pc, pc + 1, 0);
1466 }
1467 #else
1468 void tb_invalidate_phys_addr(target_phys_addr_t addr)
1469 {
1470     ram_addr_t ram_addr;
1471     MemoryRegionSection *section;
1472
1473     section = phys_page_find(addr >> TARGET_PAGE_BITS);
1474     if (!(memory_region_is_ram(section->mr)
1475           || (section->mr->rom_device && section->mr->readable))) {
1476         return;
1477     }
1478     ram_addr = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
1479         + section_addr(section, addr);
1480     tb_invalidate_phys_page_range(ram_addr, ram_addr + 1, 0);
1481 }
1482
1483 static void breakpoint_invalidate(CPUArchState *env, target_ulong pc)
1484 {
1485     tb_invalidate_phys_addr(cpu_get_phys_page_debug(env, pc));
1486 }
1487 #endif
1488 #endif /* TARGET_HAS_ICE */
1489
1490 #if defined(CONFIG_USER_ONLY)
1491 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
1492
1493 {
1494 }
1495
1496 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
1497                           int flags, CPUWatchpoint **watchpoint)
1498 {
1499     return -ENOSYS;
1500 }
1501 #else
1502 /* Add a watchpoint.  */
1503 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
1504                           int flags, CPUWatchpoint **watchpoint)
1505 {
1506     target_ulong len_mask = ~(len - 1);
1507     CPUWatchpoint *wp;
1508
1509     /* sanity checks: allow power-of-2 lengths, deny unaligned watchpoints */
1510     if ((len & (len - 1)) || (addr & ~len_mask) ||
1511             len == 0 || len > TARGET_PAGE_SIZE) {
1512         fprintf(stderr, "qemu: tried to set invalid watchpoint at "
1513                 TARGET_FMT_lx ", len=" TARGET_FMT_lu "\n", addr, len);
1514         return -EINVAL;
1515     }
1516     wp = g_malloc(sizeof(*wp));
1517
1518     wp->vaddr = addr;
1519     wp->len_mask = len_mask;
1520     wp->flags = flags;
1521
1522     /* keep all GDB-injected watchpoints in front */
1523     if (flags & BP_GDB)
1524         QTAILQ_INSERT_HEAD(&env->watchpoints, wp, entry);
1525     else
1526         QTAILQ_INSERT_TAIL(&env->watchpoints, wp, entry);
1527
1528     tlb_flush_page(env, addr);
1529
1530     if (watchpoint)
1531         *watchpoint = wp;
1532     return 0;
1533 }
1534
1535 /* Remove a specific watchpoint.  */
1536 int cpu_watchpoint_remove(CPUArchState *env, target_ulong addr, target_ulong len,
1537                           int flags)
1538 {
1539     target_ulong len_mask = ~(len - 1);
1540     CPUWatchpoint *wp;
1541
1542     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1543         if (addr == wp->vaddr && len_mask == wp->len_mask
1544                 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
1545             cpu_watchpoint_remove_by_ref(env, wp);
1546             return 0;
1547         }
1548     }
1549     return -ENOENT;
1550 }
1551
1552 /* Remove a specific watchpoint by reference.  */
1553 void cpu_watchpoint_remove_by_ref(CPUArchState *env, CPUWatchpoint *watchpoint)
1554 {
1555     QTAILQ_REMOVE(&env->watchpoints, watchpoint, entry);
1556
1557     tlb_flush_page(env, watchpoint->vaddr);
1558
1559     g_free(watchpoint);
1560 }
1561
1562 /* Remove all matching watchpoints.  */
1563 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
1564 {
1565     CPUWatchpoint *wp, *next;
1566
1567     QTAILQ_FOREACH_SAFE(wp, &env->watchpoints, entry, next) {
1568         if (wp->flags & mask)
1569             cpu_watchpoint_remove_by_ref(env, wp);
1570     }
1571 }
1572 #endif
1573
1574 /* Add a breakpoint.  */
1575 int cpu_breakpoint_insert(CPUArchState *env, target_ulong pc, int flags,
1576                           CPUBreakpoint **breakpoint)
1577 {
1578 #if defined(TARGET_HAS_ICE)
1579     CPUBreakpoint *bp;
1580
1581     bp = g_malloc(sizeof(*bp));
1582
1583     bp->pc = pc;
1584     bp->flags = flags;
1585
1586     /* keep all GDB-injected breakpoints in front */
1587     if (flags & BP_GDB)
1588         QTAILQ_INSERT_HEAD(&env->breakpoints, bp, entry);
1589     else
1590         QTAILQ_INSERT_TAIL(&env->breakpoints, bp, entry);
1591
1592     breakpoint_invalidate(env, pc);
1593
1594     if (breakpoint)
1595         *breakpoint = bp;
1596     return 0;
1597 #else
1598     return -ENOSYS;
1599 #endif
1600 }
1601
1602 /* Remove a specific breakpoint.  */
1603 int cpu_breakpoint_remove(CPUArchState *env, target_ulong pc, int flags)
1604 {
1605 #if defined(TARGET_HAS_ICE)
1606     CPUBreakpoint *bp;
1607
1608     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
1609         if (bp->pc == pc && bp->flags == flags) {
1610             cpu_breakpoint_remove_by_ref(env, bp);
1611             return 0;
1612         }
1613     }
1614     return -ENOENT;
1615 #else
1616     return -ENOSYS;
1617 #endif
1618 }
1619
1620 /* Remove a specific breakpoint by reference.  */
1621 void cpu_breakpoint_remove_by_ref(CPUArchState *env, CPUBreakpoint *breakpoint)
1622 {
1623 #if defined(TARGET_HAS_ICE)
1624     QTAILQ_REMOVE(&env->breakpoints, breakpoint, entry);
1625
1626     breakpoint_invalidate(env, breakpoint->pc);
1627
1628     g_free(breakpoint);
1629 #endif
1630 }
1631
1632 /* Remove all matching breakpoints. */
1633 void cpu_breakpoint_remove_all(CPUArchState *env, int mask)
1634 {
1635 #if defined(TARGET_HAS_ICE)
1636     CPUBreakpoint *bp, *next;
1637
1638     QTAILQ_FOREACH_SAFE(bp, &env->breakpoints, entry, next) {
1639         if (bp->flags & mask)
1640             cpu_breakpoint_remove_by_ref(env, bp);
1641     }
1642 #endif
1643 }
1644
1645 /* enable or disable single step mode. EXCP_DEBUG is returned by the
1646    CPU loop after each instruction */
1647 void cpu_single_step(CPUArchState *env, int enabled)
1648 {
1649 #if defined(TARGET_HAS_ICE)
1650     if (env->singlestep_enabled != enabled) {
1651         env->singlestep_enabled = enabled;
1652         if (kvm_enabled())
1653             kvm_update_guest_debug(env, 0);
1654         else {
1655             /* must flush all the translated code to avoid inconsistencies */
1656             /* XXX: only flush what is necessary */
1657             tb_flush(env);
1658         }
1659     }
1660 #endif
1661 }
1662
1663 /* enable or disable low levels log */
1664 void cpu_set_log(int log_flags)
1665 {
1666     loglevel = log_flags;
1667     if (loglevel && !logfile) {
1668         logfile = fopen(logfilename, log_append ? "a" : "w");
1669         if (!logfile) {
1670             perror(logfilename);
1671             _exit(1);
1672         }
1673 #if !defined(CONFIG_SOFTMMU)
1674         /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
1675         {
1676             static char logfile_buf[4096];
1677             setvbuf(logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));
1678         }
1679 #elif defined(_WIN32)
1680         /* Win32 doesn't support line-buffering, so use unbuffered output. */
1681         setvbuf(logfile, NULL, _IONBF, 0);
1682 #else
1683         setvbuf(logfile, NULL, _IOLBF, 0);
1684 #endif
1685         log_append = 1;
1686     }
1687     if (!loglevel && logfile) {
1688         fclose(logfile);
1689         logfile = NULL;
1690     }
1691 }
1692
1693 void cpu_set_log_filename(const char *filename)
1694 {
1695     logfilename = strdup(filename);
1696     if (logfile) {
1697         fclose(logfile);
1698         logfile = NULL;
1699     }
1700     cpu_set_log(loglevel);
1701 }
1702
1703 static void cpu_unlink_tb(CPUArchState *env)
1704 {
1705     /* FIXME: TB unchaining isn't SMP safe.  For now just ignore the
1706        problem and hope the cpu will stop of its own accord.  For userspace
1707        emulation this often isn't actually as bad as it sounds.  Often
1708        signals are used primarily to interrupt blocking syscalls.  */
1709     TranslationBlock *tb;
1710     static spinlock_t interrupt_lock = SPIN_LOCK_UNLOCKED;
1711
1712     spin_lock(&interrupt_lock);
1713     tb = env->current_tb;
1714     /* if the cpu is currently executing code, we must unlink it and
1715        all the potentially executing TB */
1716     if (tb) {
1717         env->current_tb = NULL;
1718         tb_reset_jump_recursive(tb);
1719     }
1720     spin_unlock(&interrupt_lock);
1721 }
1722
1723 #ifndef CONFIG_USER_ONLY
1724 /* mask must never be zero, except for A20 change call */
1725 static void tcg_handle_interrupt(CPUArchState *env, int mask)
1726 {
1727     int old_mask;
1728
1729     old_mask = env->interrupt_request;
1730     env->interrupt_request |= mask;
1731
1732     /*
1733      * If called from iothread context, wake the target cpu in
1734      * case its halted.
1735      */
1736     if (!qemu_cpu_is_self(env)) {
1737         qemu_cpu_kick(env);
1738         return;
1739     }
1740
1741     if (use_icount) {
1742         env->icount_decr.u16.high = 0xffff;
1743         if (!can_do_io(env)
1744             && (mask & ~old_mask) != 0) {
1745             cpu_abort(env, "Raised interrupt while not in I/O function");
1746         }
1747     } else {
1748         cpu_unlink_tb(env);
1749     }
1750 }
1751
1752 CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
1753
1754 #else /* CONFIG_USER_ONLY */
1755
1756 void cpu_interrupt(CPUArchState *env, int mask)
1757 {
1758     env->interrupt_request |= mask;
1759     cpu_unlink_tb(env);
1760 }
1761 #endif /* CONFIG_USER_ONLY */
1762
1763 void cpu_reset_interrupt(CPUArchState *env, int mask)
1764 {
1765     env->interrupt_request &= ~mask;
1766 }
1767
1768 void cpu_exit(CPUArchState *env)
1769 {
1770     env->exit_request = 1;
1771     cpu_unlink_tb(env);
1772 }
1773
1774 const CPULogItem cpu_log_items[] = {
1775     { CPU_LOG_TB_OUT_ASM, "out_asm",
1776       "show generated host assembly code for each compiled TB" },
1777     { CPU_LOG_TB_IN_ASM, "in_asm",
1778       "show target assembly code for each compiled TB" },
1779     { CPU_LOG_TB_OP, "op",
1780       "show micro ops for each compiled TB" },
1781     { CPU_LOG_TB_OP_OPT, "op_opt",
1782       "show micro ops "
1783 #ifdef TARGET_I386
1784       "before eflags optimization and "
1785 #endif
1786       "after liveness analysis" },
1787     { CPU_LOG_INT, "int",
1788       "show interrupts/exceptions in short format" },
1789     { CPU_LOG_EXEC, "exec",
1790       "show trace before each executed TB (lots of logs)" },
1791     { CPU_LOG_TB_CPU, "cpu",
1792       "show CPU state before block translation" },
1793 #ifdef TARGET_I386
1794     { CPU_LOG_PCALL, "pcall",
1795       "show protected mode far calls/returns/exceptions" },
1796     { CPU_LOG_RESET, "cpu_reset",
1797       "show CPU state before CPU resets" },
1798 #endif
1799 #ifdef DEBUG_IOPORT
1800     { CPU_LOG_IOPORT, "ioport",
1801       "show all i/o ports accesses" },
1802 #endif
1803     { 0, NULL, NULL },
1804 };
1805
1806 static int cmp1(const char *s1, int n, const char *s2)
1807 {
1808     if (strlen(s2) != n)
1809         return 0;
1810     return memcmp(s1, s2, n) == 0;
1811 }
1812
1813 /* takes a comma separated list of log masks. Return 0 if error. */
1814 int cpu_str_to_log_mask(const char *str)
1815 {
1816     const CPULogItem *item;
1817     int mask;
1818     const char *p, *p1;
1819
1820     p = str;
1821     mask = 0;
1822     for(;;) {
1823         p1 = strchr(p, ',');
1824         if (!p1)
1825             p1 = p + strlen(p);
1826         if(cmp1(p,p1-p,"all")) {
1827             for(item = cpu_log_items; item->mask != 0; item++) {
1828                 mask |= item->mask;
1829             }
1830         } else {
1831             for(item = cpu_log_items; item->mask != 0; item++) {
1832                 if (cmp1(p, p1 - p, item->name))
1833                     goto found;
1834             }
1835             return 0;
1836         }
1837     found:
1838         mask |= item->mask;
1839         if (*p1 != ',')
1840             break;
1841         p = p1 + 1;
1842     }
1843     return mask;
1844 }
1845
1846 void cpu_abort(CPUArchState *env, const char *fmt, ...)
1847 {
1848     va_list ap;
1849     va_list ap2;
1850
1851     va_start(ap, fmt);
1852     va_copy(ap2, ap);
1853     fprintf(stderr, "qemu: fatal: ");
1854     vfprintf(stderr, fmt, ap);
1855     fprintf(stderr, "\n");
1856 #ifdef TARGET_I386
1857     cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU | X86_DUMP_CCOP);
1858 #else
1859     cpu_dump_state(env, stderr, fprintf, 0);
1860 #endif
1861     if (qemu_log_enabled()) {
1862         qemu_log("qemu: fatal: ");
1863         qemu_log_vprintf(fmt, ap2);
1864         qemu_log("\n");
1865 #ifdef TARGET_I386
1866         log_cpu_state(env, X86_DUMP_FPU | X86_DUMP_CCOP);
1867 #else
1868         log_cpu_state(env, 0);
1869 #endif
1870         qemu_log_flush();
1871         qemu_log_close();
1872     }
1873     va_end(ap2);
1874     va_end(ap);
1875 #if defined(CONFIG_USER_ONLY)
1876     {
1877         struct sigaction act;
1878         sigfillset(&act.sa_mask);
1879         act.sa_handler = SIG_DFL;
1880         sigaction(SIGABRT, &act, NULL);
1881     }
1882 #endif
1883     abort();
1884 }
1885
1886 CPUArchState *cpu_copy(CPUArchState *env)
1887 {
1888     CPUArchState *new_env = cpu_init(env->cpu_model_str);
1889     CPUArchState *next_cpu = new_env->next_cpu;
1890     int cpu_index = new_env->cpu_index;
1891 #if defined(TARGET_HAS_ICE)
1892     CPUBreakpoint *bp;
1893     CPUWatchpoint *wp;
1894 #endif
1895
1896     memcpy(new_env, env, sizeof(CPUArchState));
1897
1898     /* Preserve chaining and index. */
1899     new_env->next_cpu = next_cpu;
1900     new_env->cpu_index = cpu_index;
1901
1902     /* Clone all break/watchpoints.
1903        Note: Once we support ptrace with hw-debug register access, make sure
1904        BP_CPU break/watchpoints are handled correctly on clone. */
1905     QTAILQ_INIT(&env->breakpoints);
1906     QTAILQ_INIT(&env->watchpoints);
1907 #if defined(TARGET_HAS_ICE)
1908     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
1909         cpu_breakpoint_insert(new_env, bp->pc, bp->flags, NULL);
1910     }
1911     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1912         cpu_watchpoint_insert(new_env, wp->vaddr, (~wp->len_mask) + 1,
1913                               wp->flags, NULL);
1914     }
1915 #endif
1916
1917     return new_env;
1918 }
1919
1920 #if !defined(CONFIG_USER_ONLY)
1921
1922 static inline void tlb_flush_jmp_cache(CPUArchState *env, target_ulong addr)
1923 {
1924     unsigned int i;
1925
1926     /* Discard jump cache entries for any tb which might potentially
1927        overlap the flushed page.  */
1928     i = tb_jmp_cache_hash_page(addr - TARGET_PAGE_SIZE);
1929     memset (&env->tb_jmp_cache[i], 0, 
1930             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1931
1932     i = tb_jmp_cache_hash_page(addr);
1933     memset (&env->tb_jmp_cache[i], 0, 
1934             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1935 }
1936
1937 static CPUTLBEntry s_cputlb_empty_entry = {
1938     .addr_read  = -1,
1939     .addr_write = -1,
1940     .addr_code  = -1,
1941     .addend     = -1,
1942 };
1943
1944 /* NOTE:
1945  * If flush_global is true (the usual case), flush all tlb entries.
1946  * If flush_global is false, flush (at least) all tlb entries not
1947  * marked global.
1948  *
1949  * Since QEMU doesn't currently implement a global/not-global flag
1950  * for tlb entries, at the moment tlb_flush() will also flush all
1951  * tlb entries in the flush_global == false case. This is OK because
1952  * CPU architectures generally permit an implementation to drop
1953  * entries from the TLB at any time, so flushing more entries than
1954  * required is only an efficiency issue, not a correctness issue.
1955  */
1956 void tlb_flush(CPUArchState *env, int flush_global)
1957 {
1958     int i;
1959
1960 #if defined(DEBUG_TLB)
1961     printf("tlb_flush:\n");
1962 #endif
1963     /* must reset current TB so that interrupts cannot modify the
1964        links while we are modifying them */
1965     env->current_tb = NULL;
1966
1967     for(i = 0; i < CPU_TLB_SIZE; i++) {
1968         int mmu_idx;
1969         for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
1970             env->tlb_table[mmu_idx][i] = s_cputlb_empty_entry;
1971         }
1972     }
1973
1974     memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *));
1975
1976     env->tlb_flush_addr = -1;
1977     env->tlb_flush_mask = 0;
1978     tlb_flush_count++;
1979 }
1980
1981 static inline void tlb_flush_entry(CPUTLBEntry *tlb_entry, target_ulong addr)
1982 {
1983     if (addr == (tlb_entry->addr_read &
1984                  (TARGET_PAGE_MASK | TLB_INVALID_MASK)) ||
1985         addr == (tlb_entry->addr_write &
1986                  (TARGET_PAGE_MASK | TLB_INVALID_MASK)) ||
1987         addr == (tlb_entry->addr_code &
1988                  (TARGET_PAGE_MASK | TLB_INVALID_MASK))) {
1989         *tlb_entry = s_cputlb_empty_entry;
1990     }
1991 }
1992
1993 void tlb_flush_page(CPUArchState *env, target_ulong addr)
1994 {
1995     int i;
1996     int mmu_idx;
1997
1998 #if defined(DEBUG_TLB)
1999     printf("tlb_flush_page: " TARGET_FMT_lx "\n", addr);
2000 #endif
2001     /* Check if we need to flush due to large pages.  */
2002     if ((addr & env->tlb_flush_mask) == env->tlb_flush_addr) {
2003 #if defined(DEBUG_TLB)
2004         printf("tlb_flush_page: forced full flush ("
2005                TARGET_FMT_lx "/" TARGET_FMT_lx ")\n",
2006                env->tlb_flush_addr, env->tlb_flush_mask);
2007 #endif
2008         tlb_flush(env, 1);
2009         return;
2010     }
2011     /* must reset current TB so that interrupts cannot modify the
2012        links while we are modifying them */
2013     env->current_tb = NULL;
2014
2015     addr &= TARGET_PAGE_MASK;
2016     i = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2017     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++)
2018         tlb_flush_entry(&env->tlb_table[mmu_idx][i], addr);
2019
2020     tlb_flush_jmp_cache(env, addr);
2021 }
2022
2023 /* update the TLBs so that writes to code in the virtual page 'addr'
2024    can be detected */
2025 static void tlb_protect_code(ram_addr_t ram_addr)
2026 {
2027     cpu_physical_memory_reset_dirty(ram_addr,
2028                                     ram_addr + TARGET_PAGE_SIZE,
2029                                     CODE_DIRTY_FLAG);
2030 }
2031
2032 /* update the TLB so that writes in physical page 'phys_addr' are no longer
2033    tested for self modifying code */
2034 static void tlb_unprotect_code_phys(CPUArchState *env, ram_addr_t ram_addr,
2035                                     target_ulong vaddr)
2036 {
2037     cpu_physical_memory_set_dirty_flags(ram_addr, CODE_DIRTY_FLAG);
2038 }
2039
2040 static bool tlb_is_dirty_ram(CPUTLBEntry *tlbe)
2041 {
2042     return (tlbe->addr_write & (TLB_INVALID_MASK|TLB_MMIO|TLB_NOTDIRTY)) == 0;
2043 }
2044
2045 static inline void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry,
2046                                          uintptr_t start, uintptr_t length)
2047 {
2048     uintptr_t addr;
2049     if (tlb_is_dirty_ram(tlb_entry)) {
2050         addr = (tlb_entry->addr_write & TARGET_PAGE_MASK) + tlb_entry->addend;
2051         if ((addr - start) < length) {
2052             tlb_entry->addr_write |= TLB_NOTDIRTY;
2053         }
2054     }
2055 }
2056
2057 /* Note: start and end must be within the same ram block.  */
2058 void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
2059                                      int dirty_flags)
2060 {
2061     CPUArchState *env;
2062     uintptr_t length, start1;
2063     int i;
2064
2065     start &= TARGET_PAGE_MASK;
2066     end = TARGET_PAGE_ALIGN(end);
2067
2068     length = end - start;
2069     if (length == 0)
2070         return;
2071     cpu_physical_memory_mask_dirty_range(start, length, dirty_flags);
2072
2073     /* we modify the TLB cache so that the dirty bit will be set again
2074        when accessing the range */
2075     start1 = (uintptr_t)qemu_safe_ram_ptr(start);
2076     /* Check that we don't span multiple blocks - this breaks the
2077        address comparisons below.  */
2078     if ((uintptr_t)qemu_safe_ram_ptr(end - 1) - start1
2079             != (end - 1) - start) {
2080         abort();
2081     }
2082
2083     for(env = first_cpu; env != NULL; env = env->next_cpu) {
2084         int mmu_idx;
2085         for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
2086             for(i = 0; i < CPU_TLB_SIZE; i++)
2087                 tlb_reset_dirty_range(&env->tlb_table[mmu_idx][i],
2088                                       start1, length);
2089         }
2090     }
2091 }
2092
2093 int cpu_physical_memory_set_dirty_tracking(int enable)
2094 {
2095     int ret = 0;
2096     in_migration = enable;
2097     return ret;
2098 }
2099
2100 static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry)
2101 {
2102     ram_addr_t ram_addr;
2103     void *p;
2104
2105     if (tlb_is_dirty_ram(tlb_entry)) {
2106         p = (void *)(uintptr_t)((tlb_entry->addr_write & TARGET_PAGE_MASK)
2107             + tlb_entry->addend);
2108         ram_addr = qemu_ram_addr_from_host_nofail(p);
2109         if (!cpu_physical_memory_is_dirty(ram_addr)) {
2110             tlb_entry->addr_write |= TLB_NOTDIRTY;
2111         }
2112     }
2113 }
2114
2115 /* update the TLB according to the current state of the dirty bits */
2116 void cpu_tlb_update_dirty(CPUArchState *env)
2117 {
2118     int i;
2119     int mmu_idx;
2120     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
2121         for(i = 0; i < CPU_TLB_SIZE; i++)
2122             tlb_update_dirty(&env->tlb_table[mmu_idx][i]);
2123     }
2124 }
2125
2126 static inline void tlb_set_dirty1(CPUTLBEntry *tlb_entry, target_ulong vaddr)
2127 {
2128     if (tlb_entry->addr_write == (vaddr | TLB_NOTDIRTY))
2129         tlb_entry->addr_write = vaddr;
2130 }
2131
2132 /* update the TLB corresponding to virtual page vaddr
2133    so that it is no longer dirty */
2134 static inline void tlb_set_dirty(CPUArchState *env, target_ulong vaddr)
2135 {
2136     int i;
2137     int mmu_idx;
2138
2139     vaddr &= TARGET_PAGE_MASK;
2140     i = (vaddr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2141     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++)
2142         tlb_set_dirty1(&env->tlb_table[mmu_idx][i], vaddr);
2143 }
2144
2145 /* Our TLB does not support large pages, so remember the area covered by
2146    large pages and trigger a full TLB flush if these are invalidated.  */
2147 static void tlb_add_large_page(CPUArchState *env, target_ulong vaddr,
2148                                target_ulong size)
2149 {
2150     target_ulong mask = ~(size - 1);
2151
2152     if (env->tlb_flush_addr == (target_ulong)-1) {
2153         env->tlb_flush_addr = vaddr & mask;
2154         env->tlb_flush_mask = mask;
2155         return;
2156     }
2157     /* Extend the existing region to include the new page.
2158        This is a compromise between unnecessary flushes and the cost
2159        of maintaining a full variable size TLB.  */
2160     mask &= env->tlb_flush_mask;
2161     while (((env->tlb_flush_addr ^ vaddr) & mask) != 0) {
2162         mask <<= 1;
2163     }
2164     env->tlb_flush_addr &= mask;
2165     env->tlb_flush_mask = mask;
2166 }
2167
2168 static bool is_ram_rom(MemoryRegionSection *s)
2169 {
2170     return memory_region_is_ram(s->mr);
2171 }
2172
2173 static bool is_romd(MemoryRegionSection *s)
2174 {
2175     MemoryRegion *mr = s->mr;
2176
2177     return mr->rom_device && mr->readable;
2178 }
2179
2180 static bool is_ram_rom_romd(MemoryRegionSection *s)
2181 {
2182     return is_ram_rom(s) || is_romd(s);
2183 }
2184
2185 /* Add a new TLB entry. At most one entry for a given virtual address
2186    is permitted. Only a single TARGET_PAGE_SIZE region is mapped, the
2187    supplied size is only used by tlb_flush_page.  */
2188 void tlb_set_page(CPUArchState *env, target_ulong vaddr,
2189                   target_phys_addr_t paddr, int prot,
2190                   int mmu_idx, target_ulong size)
2191 {
2192     MemoryRegionSection *section;
2193     unsigned int index;
2194     target_ulong address;
2195     target_ulong code_address;
2196     uintptr_t addend;
2197     CPUTLBEntry *te;
2198     CPUWatchpoint *wp;
2199     target_phys_addr_t iotlb;
2200
2201     assert(size >= TARGET_PAGE_SIZE);
2202     if (size != TARGET_PAGE_SIZE) {
2203         tlb_add_large_page(env, vaddr, size);
2204     }
2205     section = phys_page_find(paddr >> TARGET_PAGE_BITS);
2206 #if defined(DEBUG_TLB)
2207     printf("tlb_set_page: vaddr=" TARGET_FMT_lx " paddr=0x" TARGET_FMT_plx
2208            " prot=%x idx=%d pd=0x%08lx\n",
2209            vaddr, paddr, prot, mmu_idx, pd);
2210 #endif
2211
2212     address = vaddr;
2213     if (!is_ram_rom_romd(section)) {
2214         /* IO memory case (romd handled later) */
2215         address |= TLB_MMIO;
2216     }
2217     if (is_ram_rom_romd(section)) {
2218         addend = (uintptr_t)memory_region_get_ram_ptr(section->mr)
2219                                  + section_addr(section, paddr);
2220     } else {
2221         addend = 0;
2222     }
2223     if (is_ram_rom(section)) {
2224         /* Normal RAM.  */
2225         iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
2226             + section_addr(section, paddr);
2227         if (!section->readonly)
2228             iotlb |= phys_section_notdirty;
2229         else
2230             iotlb |= phys_section_rom;
2231     } else {
2232         /* IO handlers are currently passed a physical address.
2233            It would be nice to pass an offset from the base address
2234            of that region.  This would avoid having to special case RAM,
2235            and avoid full address decoding in every device.
2236            We can't use the high bits of pd for this because
2237            IO_MEM_ROMD uses these as a ram address.  */
2238         iotlb = section - phys_sections;
2239         iotlb += section_addr(section, paddr);
2240     }
2241
2242     code_address = address;
2243     /* Make accesses to pages with watchpoints go via the
2244        watchpoint trap routines.  */
2245     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
2246         if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) {
2247             /* Avoid trapping reads of pages with a write breakpoint. */
2248             if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
2249                 iotlb = phys_section_watch + paddr;
2250                 address |= TLB_MMIO;
2251                 break;
2252             }
2253         }
2254     }
2255
2256     index = (vaddr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2257     env->iotlb[mmu_idx][index] = iotlb - vaddr;
2258     te = &env->tlb_table[mmu_idx][index];
2259     te->addend = addend - vaddr;
2260     if (prot & PAGE_READ) {
2261         te->addr_read = address;
2262     } else {
2263         te->addr_read = -1;
2264     }
2265
2266     if (prot & PAGE_EXEC) {
2267         te->addr_code = code_address;
2268     } else {
2269         te->addr_code = -1;
2270     }
2271     if (prot & PAGE_WRITE) {
2272         if ((memory_region_is_ram(section->mr) && section->readonly)
2273             || is_romd(section)) {
2274             /* Write access calls the I/O callback.  */
2275             te->addr_write = address | TLB_MMIO;
2276         } else if (memory_region_is_ram(section->mr)
2277                    && !cpu_physical_memory_is_dirty(
2278                            section->mr->ram_addr
2279                            + section_addr(section, paddr))) {
2280             te->addr_write = address | TLB_NOTDIRTY;
2281         } else {
2282             te->addr_write = address;
2283         }
2284     } else {
2285         te->addr_write = -1;
2286     }
2287 }
2288
2289 #else
2290
2291 void tlb_flush(CPUArchState *env, int flush_global)
2292 {
2293 }
2294
2295 void tlb_flush_page(CPUArchState *env, target_ulong addr)
2296 {
2297 }
2298
2299 /*
2300  * Walks guest process memory "regions" one by one
2301  * and calls callback function 'fn' for each region.
2302  */
2303
2304 struct walk_memory_regions_data
2305 {
2306     walk_memory_regions_fn fn;
2307     void *priv;
2308     uintptr_t start;
2309     int prot;
2310 };
2311
2312 static int walk_memory_regions_end(struct walk_memory_regions_data *data,
2313                                    abi_ulong end, int new_prot)
2314 {
2315     if (data->start != -1ul) {
2316         int rc = data->fn(data->priv, data->start, end, data->prot);
2317         if (rc != 0) {
2318             return rc;
2319         }
2320     }
2321
2322     data->start = (new_prot ? end : -1ul);
2323     data->prot = new_prot;
2324
2325     return 0;
2326 }
2327
2328 static int walk_memory_regions_1(struct walk_memory_regions_data *data,
2329                                  abi_ulong base, int level, void **lp)
2330 {
2331     abi_ulong pa;
2332     int i, rc;
2333
2334     if (*lp == NULL) {
2335         return walk_memory_regions_end(data, base, 0);
2336     }
2337
2338     if (level == 0) {
2339         PageDesc *pd = *lp;
2340         for (i = 0; i < L2_SIZE; ++i) {
2341             int prot = pd[i].flags;
2342
2343             pa = base | (i << TARGET_PAGE_BITS);
2344             if (prot != data->prot) {
2345                 rc = walk_memory_regions_end(data, pa, prot);
2346                 if (rc != 0) {
2347                     return rc;
2348                 }
2349             }
2350         }
2351     } else {
2352         void **pp = *lp;
2353         for (i = 0; i < L2_SIZE; ++i) {
2354             pa = base | ((abi_ulong)i <<
2355                 (TARGET_PAGE_BITS + L2_BITS * level));
2356             rc = walk_memory_regions_1(data, pa, level - 1, pp + i);
2357             if (rc != 0) {
2358                 return rc;
2359             }
2360         }
2361     }
2362
2363     return 0;
2364 }
2365
2366 int walk_memory_regions(void *priv, walk_memory_regions_fn fn)
2367 {
2368     struct walk_memory_regions_data data;
2369     uintptr_t i;
2370
2371     data.fn = fn;
2372     data.priv = priv;
2373     data.start = -1ul;
2374     data.prot = 0;
2375
2376     for (i = 0; i < V_L1_SIZE; i++) {
2377         int rc = walk_memory_regions_1(&data, (abi_ulong)i << V_L1_SHIFT,
2378                                        V_L1_SHIFT / L2_BITS - 1, l1_map + i);
2379         if (rc != 0) {
2380             return rc;
2381         }
2382     }
2383
2384     return walk_memory_regions_end(&data, 0, 0);
2385 }
2386
2387 static int dump_region(void *priv, abi_ulong start,
2388     abi_ulong end, unsigned long prot)
2389 {
2390     FILE *f = (FILE *)priv;
2391
2392     (void) fprintf(f, TARGET_ABI_FMT_lx"-"TARGET_ABI_FMT_lx
2393         " "TARGET_ABI_FMT_lx" %c%c%c\n",
2394         start, end, end - start,
2395         ((prot & PAGE_READ) ? 'r' : '-'),
2396         ((prot & PAGE_WRITE) ? 'w' : '-'),
2397         ((prot & PAGE_EXEC) ? 'x' : '-'));
2398
2399     return (0);
2400 }
2401
2402 /* dump memory mappings */
2403 void page_dump(FILE *f)
2404 {
2405     (void) fprintf(f, "%-8s %-8s %-8s %s\n",
2406             "start", "end", "size", "prot");
2407     walk_memory_regions(f, dump_region);
2408 }
2409
2410 int page_get_flags(target_ulong address)
2411 {
2412     PageDesc *p;
2413
2414     p = page_find(address >> TARGET_PAGE_BITS);
2415     if (!p)
2416         return 0;
2417     return p->flags;
2418 }
2419
2420 /* Modify the flags of a page and invalidate the code if necessary.
2421    The flag PAGE_WRITE_ORG is positioned automatically depending
2422    on PAGE_WRITE.  The mmap_lock should already be held.  */
2423 void page_set_flags(target_ulong start, target_ulong end, int flags)
2424 {
2425     target_ulong addr, len;
2426
2427     /* This function should never be called with addresses outside the
2428        guest address space.  If this assert fires, it probably indicates
2429        a missing call to h2g_valid.  */
2430 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2431     assert(end < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2432 #endif
2433     assert(start < end);
2434
2435     start = start & TARGET_PAGE_MASK;
2436     end = TARGET_PAGE_ALIGN(end);
2437
2438     if (flags & PAGE_WRITE) {
2439         flags |= PAGE_WRITE_ORG;
2440     }
2441
2442     for (addr = start, len = end - start;
2443          len != 0;
2444          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2445         PageDesc *p = page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
2446
2447         /* If the write protection bit is set, then we invalidate
2448            the code inside.  */
2449         if (!(p->flags & PAGE_WRITE) &&
2450             (flags & PAGE_WRITE) &&
2451             p->first_tb) {
2452             tb_invalidate_phys_page(addr, 0, NULL);
2453         }
2454         p->flags = flags;
2455     }
2456 }
2457
2458 int page_check_range(target_ulong start, target_ulong len, int flags)
2459 {
2460     PageDesc *p;
2461     target_ulong end;
2462     target_ulong addr;
2463
2464     /* This function should never be called with addresses outside the
2465        guest address space.  If this assert fires, it probably indicates
2466        a missing call to h2g_valid.  */
2467 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2468     assert(start < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2469 #endif
2470
2471     if (len == 0) {
2472         return 0;
2473     }
2474     if (start + len - 1 < start) {
2475         /* We've wrapped around.  */
2476         return -1;
2477     }
2478
2479     end = TARGET_PAGE_ALIGN(start+len); /* must do before we loose bits in the next step */
2480     start = start & TARGET_PAGE_MASK;
2481
2482     for (addr = start, len = end - start;
2483          len != 0;
2484          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2485         p = page_find(addr >> TARGET_PAGE_BITS);
2486         if( !p )
2487             return -1;
2488         if( !(p->flags & PAGE_VALID) )
2489             return -1;
2490
2491         if ((flags & PAGE_READ) && !(p->flags & PAGE_READ))
2492             return -1;
2493         if (flags & PAGE_WRITE) {
2494             if (!(p->flags & PAGE_WRITE_ORG))
2495                 return -1;
2496             /* unprotect the page if it was put read-only because it
2497                contains translated code */
2498             if (!(p->flags & PAGE_WRITE)) {
2499                 if (!page_unprotect(addr, 0, NULL))
2500                     return -1;
2501             }
2502             return 0;
2503         }
2504     }
2505     return 0;
2506 }
2507
2508 /* called from signal handler: invalidate the code and unprotect the
2509    page. Return TRUE if the fault was successfully handled. */
2510 int page_unprotect(target_ulong address, uintptr_t pc, void *puc)
2511 {
2512     unsigned int prot;
2513     PageDesc *p;
2514     target_ulong host_start, host_end, addr;
2515
2516     /* Technically this isn't safe inside a signal handler.  However we
2517        know this only ever happens in a synchronous SEGV handler, so in
2518        practice it seems to be ok.  */
2519     mmap_lock();
2520
2521     p = page_find(address >> TARGET_PAGE_BITS);
2522     if (!p) {
2523         mmap_unlock();
2524         return 0;
2525     }
2526
2527     /* if the page was really writable, then we change its
2528        protection back to writable */
2529     if ((p->flags & PAGE_WRITE_ORG) && !(p->flags & PAGE_WRITE)) {
2530         host_start = address & qemu_host_page_mask;
2531         host_end = host_start + qemu_host_page_size;
2532
2533         prot = 0;
2534         for (addr = host_start ; addr < host_end ; addr += TARGET_PAGE_SIZE) {
2535             p = page_find(addr >> TARGET_PAGE_BITS);
2536             p->flags |= PAGE_WRITE;
2537             prot |= p->flags;
2538
2539             /* and since the content will be modified, we must invalidate
2540                the corresponding translated code. */
2541             tb_invalidate_phys_page(addr, pc, puc);
2542 #ifdef DEBUG_TB_CHECK
2543             tb_invalidate_check(addr);
2544 #endif
2545         }
2546         mprotect((void *)g2h(host_start), qemu_host_page_size,
2547                  prot & PAGE_BITS);
2548
2549         mmap_unlock();
2550         return 1;
2551     }
2552     mmap_unlock();
2553     return 0;
2554 }
2555
2556 static inline void tlb_set_dirty(CPUArchState *env,
2557                                  uintptr_t addr, target_ulong vaddr)
2558 {
2559 }
2560 #endif /* defined(CONFIG_USER_ONLY) */
2561
2562 #if !defined(CONFIG_USER_ONLY)
2563
2564 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
2565 typedef struct subpage_t {
2566     MemoryRegion iomem;
2567     target_phys_addr_t base;
2568     uint16_t sub_section[TARGET_PAGE_SIZE];
2569 } subpage_t;
2570
2571 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2572                              uint16_t section);
2573 static subpage_t *subpage_init(target_phys_addr_t base);
2574 static void destroy_page_desc(uint16_t section_index)
2575 {
2576     MemoryRegionSection *section = &phys_sections[section_index];
2577     MemoryRegion *mr = section->mr;
2578
2579     if (mr->subpage) {
2580         subpage_t *subpage = container_of(mr, subpage_t, iomem);
2581         memory_region_destroy(&subpage->iomem);
2582         g_free(subpage);
2583     }
2584 }
2585
2586 static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level)
2587 {
2588     unsigned i;
2589     PhysPageEntry *p;
2590
2591     if (lp->ptr == PHYS_MAP_NODE_NIL) {
2592         return;
2593     }
2594
2595     p = phys_map_nodes[lp->ptr];
2596     for (i = 0; i < L2_SIZE; ++i) {
2597         if (!p[i].is_leaf) {
2598             destroy_l2_mapping(&p[i], level - 1);
2599         } else {
2600             destroy_page_desc(p[i].ptr);
2601         }
2602     }
2603     lp->is_leaf = 0;
2604     lp->ptr = PHYS_MAP_NODE_NIL;
2605 }
2606
2607 static void destroy_all_mappings(void)
2608 {
2609     destroy_l2_mapping(&phys_map, P_L2_LEVELS - 1);
2610     phys_map_nodes_reset();
2611 }
2612
2613 static uint16_t phys_section_add(MemoryRegionSection *section)
2614 {
2615     if (phys_sections_nb == phys_sections_nb_alloc) {
2616         phys_sections_nb_alloc = MAX(phys_sections_nb_alloc * 2, 16);
2617         phys_sections = g_renew(MemoryRegionSection, phys_sections,
2618                                 phys_sections_nb_alloc);
2619     }
2620     phys_sections[phys_sections_nb] = *section;
2621     return phys_sections_nb++;
2622 }
2623
2624 static void phys_sections_clear(void)
2625 {
2626     phys_sections_nb = 0;
2627 }
2628
2629 /* register physical memory.
2630    For RAM, 'size' must be a multiple of the target page size.
2631    If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an
2632    io memory page.  The address used when calling the IO function is
2633    the offset from the start of the region, plus region_offset.  Both
2634    start_addr and region_offset are rounded down to a page boundary
2635    before calculating this offset.  This should not be a problem unless
2636    the low bits of start_addr and region_offset differ.  */
2637 static void register_subpage(MemoryRegionSection *section)
2638 {
2639     subpage_t *subpage;
2640     target_phys_addr_t base = section->offset_within_address_space
2641         & TARGET_PAGE_MASK;
2642     MemoryRegionSection *existing = phys_page_find(base >> TARGET_PAGE_BITS);
2643     MemoryRegionSection subsection = {
2644         .offset_within_address_space = base,
2645         .size = TARGET_PAGE_SIZE,
2646     };
2647     target_phys_addr_t start, end;
2648
2649     assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
2650
2651     if (!(existing->mr->subpage)) {
2652         subpage = subpage_init(base);
2653         subsection.mr = &subpage->iomem;
2654         phys_page_set(base >> TARGET_PAGE_BITS, 1,
2655                       phys_section_add(&subsection));
2656     } else {
2657         subpage = container_of(existing->mr, subpage_t, iomem);
2658     }
2659     start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
2660     end = start + section->size;
2661     subpage_register(subpage, start, end, phys_section_add(section));
2662 }
2663
2664
2665 static void register_multipage(MemoryRegionSection *section)
2666 {
2667     target_phys_addr_t start_addr = section->offset_within_address_space;
2668     ram_addr_t size = section->size;
2669     target_phys_addr_t addr;
2670     uint16_t section_index = phys_section_add(section);
2671
2672     assert(size);
2673
2674     addr = start_addr;
2675     phys_page_set(addr >> TARGET_PAGE_BITS, size >> TARGET_PAGE_BITS,
2676                   section_index);
2677 }
2678
2679 void cpu_register_physical_memory_log(MemoryRegionSection *section,
2680                                       bool readonly)
2681 {
2682     MemoryRegionSection now = *section, remain = *section;
2683
2684     if ((now.offset_within_address_space & ~TARGET_PAGE_MASK)
2685         || (now.size < TARGET_PAGE_SIZE)) {
2686         now.size = MIN(TARGET_PAGE_ALIGN(now.offset_within_address_space)
2687                        - now.offset_within_address_space,
2688                        now.size);
2689         register_subpage(&now);
2690         remain.size -= now.size;
2691         remain.offset_within_address_space += now.size;
2692         remain.offset_within_region += now.size;
2693     }
2694     now = remain;
2695     now.size &= TARGET_PAGE_MASK;
2696     if (now.size) {
2697         register_multipage(&now);
2698         remain.size -= now.size;
2699         remain.offset_within_address_space += now.size;
2700         remain.offset_within_region += now.size;
2701     }
2702     now = remain;
2703     if (now.size) {
2704         register_subpage(&now);
2705     }
2706 }
2707
2708
2709 void qemu_register_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2710 {
2711     if (kvm_enabled())
2712         kvm_coalesce_mmio_region(addr, size);
2713 }
2714
2715 void qemu_unregister_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2716 {
2717     if (kvm_enabled())
2718         kvm_uncoalesce_mmio_region(addr, size);
2719 }
2720
2721 void qemu_flush_coalesced_mmio_buffer(void)
2722 {
2723     if (kvm_enabled())
2724         kvm_flush_coalesced_mmio_buffer();
2725 }
2726
2727 #if defined(__linux__) && !defined(TARGET_S390X)
2728
2729 #include <sys/vfs.h>
2730
2731 #define HUGETLBFS_MAGIC       0x958458f6
2732
2733 static long gethugepagesize(const char *path)
2734 {
2735     struct statfs fs;
2736     int ret;
2737
2738     do {
2739         ret = statfs(path, &fs);
2740     } while (ret != 0 && errno == EINTR);
2741
2742     if (ret != 0) {
2743         perror(path);
2744         return 0;
2745     }
2746
2747     if (fs.f_type != HUGETLBFS_MAGIC)
2748         fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
2749
2750     return fs.f_bsize;
2751 }
2752
2753 static void *file_ram_alloc(RAMBlock *block,
2754                             ram_addr_t memory,
2755                             const char *path)
2756 {
2757     char *filename;
2758     void *area;
2759     int fd;
2760 #ifdef MAP_POPULATE
2761     int flags;
2762 #endif
2763     unsigned long hpagesize;
2764
2765     hpagesize = gethugepagesize(path);
2766     if (!hpagesize) {
2767         return NULL;
2768     }
2769
2770     if (memory < hpagesize) {
2771         return NULL;
2772     }
2773
2774     if (kvm_enabled() && !kvm_has_sync_mmu()) {
2775         fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n");
2776         return NULL;
2777     }
2778
2779     if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) {
2780         return NULL;
2781     }
2782
2783     fd = mkstemp(filename);
2784     if (fd < 0) {
2785         perror("unable to create backing store for hugepages");
2786         free(filename);
2787         return NULL;
2788     }
2789     unlink(filename);
2790     free(filename);
2791
2792     memory = (memory+hpagesize-1) & ~(hpagesize-1);
2793
2794     /*
2795      * ftruncate is not supported by hugetlbfs in older
2796      * hosts, so don't bother bailing out on errors.
2797      * If anything goes wrong with it under other filesystems,
2798      * mmap will fail.
2799      */
2800     if (ftruncate(fd, memory))
2801         perror("ftruncate");
2802
2803 #ifdef MAP_POPULATE
2804     /* NB: MAP_POPULATE won't exhaustively alloc all phys pages in the case
2805      * MAP_PRIVATE is requested.  For mem_prealloc we mmap as MAP_SHARED
2806      * to sidestep this quirk.
2807      */
2808     flags = mem_prealloc ? MAP_POPULATE | MAP_SHARED : MAP_PRIVATE;
2809     area = mmap(0, memory, PROT_READ | PROT_WRITE, flags, fd, 0);
2810 #else
2811     area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
2812 #endif
2813     if (area == MAP_FAILED) {
2814         perror("file_ram_alloc: can't mmap RAM pages");
2815         close(fd);
2816         return (NULL);
2817     }
2818     block->fd = fd;
2819     return area;
2820 }
2821 #endif
2822
2823 static ram_addr_t find_ram_offset(ram_addr_t size)
2824 {
2825     RAMBlock *block, *next_block;
2826     ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
2827
2828     if (QLIST_EMPTY(&ram_list.blocks))
2829         return 0;
2830
2831     QLIST_FOREACH(block, &ram_list.blocks, next) {
2832         ram_addr_t end, next = RAM_ADDR_MAX;
2833
2834         end = block->offset + block->length;
2835
2836         QLIST_FOREACH(next_block, &ram_list.blocks, next) {
2837             if (next_block->offset >= end) {
2838                 next = MIN(next, next_block->offset);
2839             }
2840         }
2841         if (next - end >= size && next - end < mingap) {
2842             offset = end;
2843             mingap = next - end;
2844         }
2845     }
2846
2847     if (offset == RAM_ADDR_MAX) {
2848         fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
2849                 (uint64_t)size);
2850         abort();
2851     }
2852
2853     return offset;
2854 }
2855
2856 static ram_addr_t last_ram_offset(void)
2857 {
2858     RAMBlock *block;
2859     ram_addr_t last = 0;
2860
2861     QLIST_FOREACH(block, &ram_list.blocks, next)
2862         last = MAX(last, block->offset + block->length);
2863
2864     return last;
2865 }
2866
2867 void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev)
2868 {
2869     RAMBlock *new_block, *block;
2870
2871     new_block = NULL;
2872     QLIST_FOREACH(block, &ram_list.blocks, next) {
2873         if (block->offset == addr) {
2874             new_block = block;
2875             break;
2876         }
2877     }
2878     assert(new_block);
2879     assert(!new_block->idstr[0]);
2880
2881     if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
2882         char *id = dev->parent_bus->info->get_dev_path(dev);
2883         if (id) {
2884             snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
2885             g_free(id);
2886         }
2887     }
2888     pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
2889
2890     QLIST_FOREACH(block, &ram_list.blocks, next) {
2891         if (block != new_block && !strcmp(block->idstr, new_block->idstr)) {
2892             fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
2893                     new_block->idstr);
2894             abort();
2895         }
2896     }
2897 }
2898
2899 ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
2900                                    MemoryRegion *mr)
2901 {
2902     RAMBlock *new_block;
2903
2904     size = TARGET_PAGE_ALIGN(size);
2905     new_block = g_malloc0(sizeof(*new_block));
2906
2907     new_block->mr = mr;
2908     new_block->offset = find_ram_offset(size);
2909     if (host) {
2910         new_block->host = host;
2911         new_block->flags |= RAM_PREALLOC_MASK;
2912     } else {
2913         if (mem_path) {
2914 #if defined (__linux__) && !defined(TARGET_S390X)
2915             new_block->host = file_ram_alloc(new_block, size, mem_path);
2916             if (!new_block->host) {
2917                 new_block->host = qemu_vmalloc(size);
2918                 qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
2919             }
2920 #else
2921             fprintf(stderr, "-mem-path option unsupported\n");
2922             exit(1);
2923 #endif
2924         } else {
2925 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
2926             /* S390 KVM requires the topmost vma of the RAM to be smaller than
2927                an system defined value, which is at least 256GB. Larger systems
2928                have larger values. We put the guest between the end of data
2929                segment (system break) and this value. We use 32GB as a base to
2930                have enough room for the system break to grow. */
2931             new_block->host = mmap((void*)0x800000000, size,
2932                                    PROT_EXEC|PROT_READ|PROT_WRITE,
2933                                    MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
2934             if (new_block->host == MAP_FAILED) {
2935                 fprintf(stderr, "Allocating RAM failed\n");
2936                 abort();
2937             }
2938 #else
2939             if (xen_enabled()) {
2940                 xen_ram_alloc(new_block->offset, size, mr);
2941             } else {
2942                 new_block->host = qemu_vmalloc(size);
2943             }
2944 #endif
2945             qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
2946         }
2947     }
2948     new_block->length = size;
2949
2950     QLIST_INSERT_HEAD(&ram_list.blocks, new_block, next);
2951
2952     ram_list.phys_dirty = g_realloc(ram_list.phys_dirty,
2953                                        last_ram_offset() >> TARGET_PAGE_BITS);
2954     memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS),
2955            0xff, size >> TARGET_PAGE_BITS);
2956
2957     if (kvm_enabled())
2958         kvm_setup_guest_memory(new_block->host, size);
2959
2960     return new_block->offset;
2961 }
2962
2963 ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr)
2964 {
2965     return qemu_ram_alloc_from_ptr(size, NULL, mr);
2966 }
2967
2968 void qemu_ram_free_from_ptr(ram_addr_t addr)
2969 {
2970     RAMBlock *block;
2971
2972     QLIST_FOREACH(block, &ram_list.blocks, next) {
2973         if (addr == block->offset) {
2974             QLIST_REMOVE(block, next);
2975             g_free(block);
2976             return;
2977         }
2978     }
2979 }
2980
2981 void qemu_ram_free(ram_addr_t addr)
2982 {
2983     RAMBlock *block;
2984
2985     QLIST_FOREACH(block, &ram_list.blocks, next) {
2986         if (addr == block->offset) {
2987             QLIST_REMOVE(block, next);
2988             if (block->flags & RAM_PREALLOC_MASK) {
2989                 ;
2990             } else if (mem_path) {
2991 #if defined (__linux__) && !defined(TARGET_S390X)
2992                 if (block->fd) {
2993                     munmap(block->host, block->length);
2994                     close(block->fd);
2995                 } else {
2996                     qemu_vfree(block->host);
2997                 }
2998 #else
2999                 abort();
3000 #endif
3001             } else {
3002 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
3003                 munmap(block->host, block->length);
3004 #else
3005                 if (xen_enabled()) {
3006                     xen_invalidate_map_cache_entry(block->host);
3007                 } else {
3008                     qemu_vfree(block->host);
3009                 }
3010 #endif
3011             }
3012             g_free(block);
3013             return;
3014         }
3015     }
3016
3017 }
3018
3019 #ifndef _WIN32
3020 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
3021 {
3022     RAMBlock *block;
3023     ram_addr_t offset;
3024     int flags;
3025     void *area, *vaddr;
3026
3027     QLIST_FOREACH(block, &ram_list.blocks, next) {
3028         offset = addr - block->offset;
3029         if (offset < block->length) {
3030             vaddr = block->host + offset;
3031             if (block->flags & RAM_PREALLOC_MASK) {
3032                 ;
3033             } else {
3034                 flags = MAP_FIXED;
3035                 munmap(vaddr, length);
3036                 if (mem_path) {
3037 #if defined(__linux__) && !defined(TARGET_S390X)
3038                     if (block->fd) {
3039 #ifdef MAP_POPULATE
3040                         flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
3041                             MAP_PRIVATE;
3042 #else
3043                         flags |= MAP_PRIVATE;
3044 #endif
3045                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3046                                     flags, block->fd, offset);
3047                     } else {
3048                         flags |= MAP_PRIVATE | MAP_ANONYMOUS;
3049                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3050                                     flags, -1, 0);
3051                     }
3052 #else
3053                     abort();
3054 #endif
3055                 } else {
3056 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
3057                     flags |= MAP_SHARED | MAP_ANONYMOUS;
3058                     area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE,
3059                                 flags, -1, 0);
3060 #else
3061                     flags |= MAP_PRIVATE | MAP_ANONYMOUS;
3062                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3063                                 flags, -1, 0);
3064 #endif
3065                 }
3066                 if (area != vaddr) {
3067                     fprintf(stderr, "Could not remap addr: "
3068                             RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
3069                             length, addr);
3070                     exit(1);
3071                 }
3072                 qemu_madvise(vaddr, length, QEMU_MADV_MERGEABLE);
3073             }
3074             return;
3075         }
3076     }
3077 }
3078 #endif /* !_WIN32 */
3079
3080 /* Return a host pointer to ram allocated with qemu_ram_alloc.
3081    With the exception of the softmmu code in this file, this should
3082    only be used for local memory (e.g. video ram) that the device owns,
3083    and knows it isn't going to access beyond the end of the block.
3084
3085    It should not be used for general purpose DMA.
3086    Use cpu_physical_memory_map/cpu_physical_memory_rw instead.
3087  */
3088 void *qemu_get_ram_ptr(ram_addr_t addr)
3089 {
3090     RAMBlock *block;
3091
3092     QLIST_FOREACH(block, &ram_list.blocks, next) {
3093         if (addr - block->offset < block->length) {
3094             /* Move this entry to to start of the list.  */
3095             if (block != QLIST_FIRST(&ram_list.blocks)) {
3096                 QLIST_REMOVE(block, next);
3097                 QLIST_INSERT_HEAD(&ram_list.blocks, block, next);
3098             }
3099             if (xen_enabled()) {
3100                 /* We need to check if the requested address is in the RAM
3101                  * because we don't want to map the entire memory in QEMU.
3102                  * In that case just map until the end of the page.
3103                  */
3104                 if (block->offset == 0) {
3105                     return xen_map_cache(addr, 0, 0);
3106                 } else if (block->host == NULL) {
3107                     block->host =
3108                         xen_map_cache(block->offset, block->length, 1);
3109                 }
3110             }
3111             return block->host + (addr - block->offset);
3112         }
3113     }
3114
3115     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
3116     abort();
3117
3118     return NULL;
3119 }
3120
3121 /* Return a host pointer to ram allocated with qemu_ram_alloc.
3122  * Same as qemu_get_ram_ptr but avoid reordering ramblocks.
3123  */
3124 void *qemu_safe_ram_ptr(ram_addr_t addr)
3125 {
3126     RAMBlock *block;
3127
3128     QLIST_FOREACH(block, &ram_list.blocks, next) {
3129         if (addr - block->offset < block->length) {
3130             if (xen_enabled()) {
3131                 /* We need to check if the requested address is in the RAM
3132                  * because we don't want to map the entire memory in QEMU.
3133                  * In that case just map until the end of the page.
3134                  */
3135                 if (block->offset == 0) {
3136                     return xen_map_cache(addr, 0, 0);
3137                 } else if (block->host == NULL) {
3138                     block->host =
3139                         xen_map_cache(block->offset, block->length, 1);
3140                 }
3141             }
3142             return block->host + (addr - block->offset);
3143         }
3144     }
3145
3146     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
3147     abort();
3148
3149     return NULL;
3150 }
3151
3152 /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
3153  * but takes a size argument */
3154 void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size)
3155 {
3156     if (*size == 0) {
3157         return NULL;
3158     }
3159     if (xen_enabled()) {
3160         return xen_map_cache(addr, *size, 1);
3161     } else {
3162         RAMBlock *block;
3163
3164         QLIST_FOREACH(block, &ram_list.blocks, next) {
3165             if (addr - block->offset < block->length) {
3166                 if (addr - block->offset + *size > block->length)
3167                     *size = block->length - addr + block->offset;
3168                 return block->host + (addr - block->offset);
3169             }
3170         }
3171
3172         fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
3173         abort();
3174     }
3175 }
3176
3177 void qemu_put_ram_ptr(void *addr)
3178 {
3179     trace_qemu_put_ram_ptr(addr);
3180 }
3181
3182 int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
3183 {
3184     RAMBlock *block;
3185     uint8_t *host = ptr;
3186
3187     if (xen_enabled()) {
3188         *ram_addr = xen_ram_addr_from_mapcache(ptr);
3189         return 0;
3190     }
3191
3192     QLIST_FOREACH(block, &ram_list.blocks, next) {
3193         /* This case append when the block is not mapped. */
3194         if (block->host == NULL) {
3195             continue;
3196         }
3197         if (host - block->host < block->length) {
3198             *ram_addr = block->offset + (host - block->host);
3199             return 0;
3200         }
3201     }
3202
3203     return -1;
3204 }
3205
3206 /* Some of the softmmu routines need to translate from a host pointer
3207    (typically a TLB entry) back to a ram offset.  */
3208 ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr)
3209 {
3210     ram_addr_t ram_addr;
3211
3212     if (qemu_ram_addr_from_host(ptr, &ram_addr)) {
3213         fprintf(stderr, "Bad ram pointer %p\n", ptr);
3214         abort();
3215     }
3216     return ram_addr;
3217 }
3218
3219 static uint64_t unassigned_mem_read(void *opaque, target_phys_addr_t addr,
3220                                     unsigned size)
3221 {
3222 #ifdef DEBUG_UNASSIGNED
3223     printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
3224 #endif
3225 #if defined(TARGET_ALPHA) || defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3226     cpu_unassigned_access(cpu_single_env, addr, 0, 0, 0, size);
3227 #endif
3228     return 0;
3229 }
3230
3231 static void unassigned_mem_write(void *opaque, target_phys_addr_t addr,
3232                                  uint64_t val, unsigned size)
3233 {
3234 #ifdef DEBUG_UNASSIGNED
3235     printf("Unassigned mem write " TARGET_FMT_plx " = 0x%"PRIx64"\n", addr, val);
3236 #endif
3237 #if defined(TARGET_ALPHA) || defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3238     cpu_unassigned_access(cpu_single_env, addr, 1, 0, 0, size);
3239 #endif
3240 }
3241
3242 static const MemoryRegionOps unassigned_mem_ops = {
3243     .read = unassigned_mem_read,
3244     .write = unassigned_mem_write,
3245     .endianness = DEVICE_NATIVE_ENDIAN,
3246 };
3247
3248 static uint64_t error_mem_read(void *opaque, target_phys_addr_t addr,
3249                                unsigned size)
3250 {
3251     abort();
3252 }
3253
3254 static void error_mem_write(void *opaque, target_phys_addr_t addr,
3255                             uint64_t value, unsigned size)
3256 {
3257     abort();
3258 }
3259
3260 static const MemoryRegionOps error_mem_ops = {
3261     .read = error_mem_read,
3262     .write = error_mem_write,
3263     .endianness = DEVICE_NATIVE_ENDIAN,
3264 };
3265
3266 static const MemoryRegionOps rom_mem_ops = {
3267     .read = error_mem_read,
3268     .write = unassigned_mem_write,
3269     .endianness = DEVICE_NATIVE_ENDIAN,
3270 };
3271
3272 static void notdirty_mem_write(void *opaque, target_phys_addr_t ram_addr,
3273                                uint64_t val, unsigned size)
3274 {
3275     int dirty_flags;
3276     dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3277     if (!(dirty_flags & CODE_DIRTY_FLAG)) {
3278 #if !defined(CONFIG_USER_ONLY)
3279         tb_invalidate_phys_page_fast(ram_addr, size);
3280         dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3281 #endif
3282     }
3283     switch (size) {
3284     case 1:
3285         stb_p(qemu_get_ram_ptr(ram_addr), val);
3286         break;
3287     case 2:
3288         stw_p(qemu_get_ram_ptr(ram_addr), val);
3289         break;
3290     case 4:
3291         stl_p(qemu_get_ram_ptr(ram_addr), val);
3292         break;
3293     default:
3294         abort();
3295     }
3296     dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
3297     cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
3298     /* we remove the notdirty callback only if the code has been
3299        flushed */
3300     if (dirty_flags == 0xff)
3301         tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
3302 }
3303
3304 static const MemoryRegionOps notdirty_mem_ops = {
3305     .read = error_mem_read,
3306     .write = notdirty_mem_write,
3307     .endianness = DEVICE_NATIVE_ENDIAN,
3308 };
3309
3310 /* Generate a debug exception if a watchpoint has been hit.  */
3311 static void check_watchpoint(int offset, int len_mask, int flags)
3312 {
3313     CPUArchState *env = cpu_single_env;
3314     target_ulong pc, cs_base;
3315     TranslationBlock *tb;
3316     target_ulong vaddr;
3317     CPUWatchpoint *wp;
3318     int cpu_flags;
3319
3320     if (env->watchpoint_hit) {
3321         /* We re-entered the check after replacing the TB. Now raise
3322          * the debug interrupt so that is will trigger after the
3323          * current instruction. */
3324         cpu_interrupt(env, CPU_INTERRUPT_DEBUG);
3325         return;
3326     }
3327     vaddr = (env->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
3328     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
3329         if ((vaddr == (wp->vaddr & len_mask) ||
3330              (vaddr & wp->len_mask) == wp->vaddr) && (wp->flags & flags)) {
3331             wp->flags |= BP_WATCHPOINT_HIT;
3332             if (!env->watchpoint_hit) {
3333                 env->watchpoint_hit = wp;
3334                 tb = tb_find_pc(env->mem_io_pc);
3335                 if (!tb) {
3336                     cpu_abort(env, "check_watchpoint: could not find TB for "
3337                               "pc=%p", (void *)env->mem_io_pc);
3338                 }
3339                 cpu_restore_state(tb, env, env->mem_io_pc);
3340                 tb_phys_invalidate(tb, -1);
3341                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
3342                     env->exception_index = EXCP_DEBUG;
3343                     cpu_loop_exit(env);
3344                 } else {
3345                     cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
3346                     tb_gen_code(env, pc, cs_base, cpu_flags, 1);
3347                     cpu_resume_from_signal(env, NULL);
3348                 }
3349             }
3350         } else {
3351             wp->flags &= ~BP_WATCHPOINT_HIT;
3352         }
3353     }
3354 }
3355
3356 /* Watchpoint access routines.  Watchpoints are inserted using TLB tricks,
3357    so these check for a hit then pass through to the normal out-of-line
3358    phys routines.  */
3359 static uint64_t watch_mem_read(void *opaque, target_phys_addr_t addr,
3360                                unsigned size)
3361 {
3362     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_READ);
3363     switch (size) {
3364     case 1: return ldub_phys(addr);
3365     case 2: return lduw_phys(addr);
3366     case 4: return ldl_phys(addr);
3367     default: abort();
3368     }
3369 }
3370
3371 static void watch_mem_write(void *opaque, target_phys_addr_t addr,
3372                             uint64_t val, unsigned size)
3373 {
3374     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_WRITE);
3375     switch (size) {
3376     case 1:
3377         stb_phys(addr, val);
3378         break;
3379     case 2:
3380         stw_phys(addr, val);
3381         break;
3382     case 4:
3383         stl_phys(addr, val);
3384         break;
3385     default: abort();
3386     }
3387 }
3388
3389 static const MemoryRegionOps watch_mem_ops = {
3390     .read = watch_mem_read,
3391     .write = watch_mem_write,
3392     .endianness = DEVICE_NATIVE_ENDIAN,
3393 };
3394
3395 static uint64_t subpage_read(void *opaque, target_phys_addr_t addr,
3396                              unsigned len)
3397 {
3398     subpage_t *mmio = opaque;
3399     unsigned int idx = SUBPAGE_IDX(addr);
3400     MemoryRegionSection *section;
3401 #if defined(DEBUG_SUBPAGE)
3402     printf("%s: subpage %p len %d addr " TARGET_FMT_plx " idx %d\n", __func__,
3403            mmio, len, addr, idx);
3404 #endif
3405
3406     section = &phys_sections[mmio->sub_section[idx]];
3407     addr += mmio->base;
3408     addr -= section->offset_within_address_space;
3409     addr += section->offset_within_region;
3410     return io_mem_read(section->mr, addr, len);
3411 }
3412
3413 static void subpage_write(void *opaque, target_phys_addr_t addr,
3414                           uint64_t value, unsigned len)
3415 {
3416     subpage_t *mmio = opaque;
3417     unsigned int idx = SUBPAGE_IDX(addr);
3418     MemoryRegionSection *section;
3419 #if defined(DEBUG_SUBPAGE)
3420     printf("%s: subpage %p len %d addr " TARGET_FMT_plx
3421            " idx %d value %"PRIx64"\n",
3422            __func__, mmio, len, addr, idx, value);
3423 #endif
3424
3425     section = &phys_sections[mmio->sub_section[idx]];
3426     addr += mmio->base;
3427     addr -= section->offset_within_address_space;
3428     addr += section->offset_within_region;
3429     io_mem_write(section->mr, addr, value, len);
3430 }
3431
3432 static const MemoryRegionOps subpage_ops = {
3433     .read = subpage_read,
3434     .write = subpage_write,
3435     .endianness = DEVICE_NATIVE_ENDIAN,
3436 };
3437
3438 static uint64_t subpage_ram_read(void *opaque, target_phys_addr_t addr,
3439                                  unsigned size)
3440 {
3441     ram_addr_t raddr = addr;
3442     void *ptr = qemu_get_ram_ptr(raddr);
3443     switch (size) {
3444     case 1: return ldub_p(ptr);
3445     case 2: return lduw_p(ptr);
3446     case 4: return ldl_p(ptr);
3447     default: abort();
3448     }
3449 }
3450
3451 static void subpage_ram_write(void *opaque, target_phys_addr_t addr,
3452                               uint64_t value, unsigned size)
3453 {
3454     ram_addr_t raddr = addr;
3455     void *ptr = qemu_get_ram_ptr(raddr);
3456     switch (size) {
3457     case 1: return stb_p(ptr, value);
3458     case 2: return stw_p(ptr, value);
3459     case 4: return stl_p(ptr, value);
3460     default: abort();
3461     }
3462 }
3463
3464 static const MemoryRegionOps subpage_ram_ops = {
3465     .read = subpage_ram_read,
3466     .write = subpage_ram_write,
3467     .endianness = DEVICE_NATIVE_ENDIAN,
3468 };
3469
3470 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
3471                              uint16_t section)
3472 {
3473     int idx, eidx;
3474
3475     if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
3476         return -1;
3477     idx = SUBPAGE_IDX(start);
3478     eidx = SUBPAGE_IDX(end);
3479 #if defined(DEBUG_SUBPAGE)
3480     printf("%s: %p start %08x end %08x idx %08x eidx %08x mem %ld\n", __func__,
3481            mmio, start, end, idx, eidx, memory);
3482 #endif
3483     if (memory_region_is_ram(phys_sections[section].mr)) {
3484         MemoryRegionSection new_section = phys_sections[section];
3485         new_section.mr = &io_mem_subpage_ram;
3486         section = phys_section_add(&new_section);
3487     }
3488     for (; idx <= eidx; idx++) {
3489         mmio->sub_section[idx] = section;
3490     }
3491
3492     return 0;
3493 }
3494
3495 static subpage_t *subpage_init(target_phys_addr_t base)
3496 {
3497     subpage_t *mmio;
3498
3499     mmio = g_malloc0(sizeof(subpage_t));
3500
3501     mmio->base = base;
3502     memory_region_init_io(&mmio->iomem, &subpage_ops, mmio,
3503                           "subpage", TARGET_PAGE_SIZE);
3504     mmio->iomem.subpage = true;
3505 #if defined(DEBUG_SUBPAGE)
3506     printf("%s: %p base " TARGET_FMT_plx " len %08x %d\n", __func__,
3507            mmio, base, TARGET_PAGE_SIZE, subpage_memory);
3508 #endif
3509     subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, phys_section_unassigned);
3510
3511     return mmio;
3512 }
3513
3514 static uint16_t dummy_section(MemoryRegion *mr)
3515 {
3516     MemoryRegionSection section = {
3517         .mr = mr,
3518         .offset_within_address_space = 0,
3519         .offset_within_region = 0,
3520         .size = UINT64_MAX,
3521     };
3522
3523     return phys_section_add(&section);
3524 }
3525
3526 MemoryRegion *iotlb_to_region(target_phys_addr_t index)
3527 {
3528     return phys_sections[index & ~TARGET_PAGE_MASK].mr;
3529 }
3530
3531 static void io_mem_init(void)
3532 {
3533     memory_region_init_io(&io_mem_ram, &error_mem_ops, NULL, "ram", UINT64_MAX);
3534     memory_region_init_io(&io_mem_rom, &rom_mem_ops, NULL, "rom", UINT64_MAX);
3535     memory_region_init_io(&io_mem_unassigned, &unassigned_mem_ops, NULL,
3536                           "unassigned", UINT64_MAX);
3537     memory_region_init_io(&io_mem_notdirty, &notdirty_mem_ops, NULL,
3538                           "notdirty", UINT64_MAX);
3539     memory_region_init_io(&io_mem_subpage_ram, &subpage_ram_ops, NULL,
3540                           "subpage-ram", UINT64_MAX);
3541     memory_region_init_io(&io_mem_watch, &watch_mem_ops, NULL,
3542                           "watch", UINT64_MAX);
3543 }
3544
3545 static void core_begin(MemoryListener *listener)
3546 {
3547     destroy_all_mappings();
3548     phys_sections_clear();
3549     phys_map.ptr = PHYS_MAP_NODE_NIL;
3550     phys_section_unassigned = dummy_section(&io_mem_unassigned);
3551     phys_section_notdirty = dummy_section(&io_mem_notdirty);
3552     phys_section_rom = dummy_section(&io_mem_rom);
3553     phys_section_watch = dummy_section(&io_mem_watch);
3554 }
3555
3556 static void core_commit(MemoryListener *listener)
3557 {
3558     CPUArchState *env;
3559
3560     /* since each CPU stores ram addresses in its TLB cache, we must
3561        reset the modified entries */
3562     /* XXX: slow ! */
3563     for(env = first_cpu; env != NULL; env = env->next_cpu) {
3564         tlb_flush(env, 1);
3565     }
3566 }
3567
3568 static void core_region_add(MemoryListener *listener,
3569                             MemoryRegionSection *section)
3570 {
3571     cpu_register_physical_memory_log(section, section->readonly);
3572 }
3573
3574 static void core_region_del(MemoryListener *listener,
3575                             MemoryRegionSection *section)
3576 {
3577 }
3578
3579 static void core_region_nop(MemoryListener *listener,
3580                             MemoryRegionSection *section)
3581 {
3582     cpu_register_physical_memory_log(section, section->readonly);
3583 }
3584
3585 static void core_log_start(MemoryListener *listener,
3586                            MemoryRegionSection *section)
3587 {
3588 }
3589
3590 static void core_log_stop(MemoryListener *listener,
3591                           MemoryRegionSection *section)
3592 {
3593 }
3594
3595 static void core_log_sync(MemoryListener *listener,
3596                           MemoryRegionSection *section)
3597 {
3598 }
3599
3600 static void core_log_global_start(MemoryListener *listener)
3601 {
3602     cpu_physical_memory_set_dirty_tracking(1);
3603 }
3604
3605 static void core_log_global_stop(MemoryListener *listener)
3606 {
3607     cpu_physical_memory_set_dirty_tracking(0);
3608 }
3609
3610 static void core_eventfd_add(MemoryListener *listener,
3611                              MemoryRegionSection *section,
3612                              bool match_data, uint64_t data, int fd)
3613 {
3614 }
3615
3616 static void core_eventfd_del(MemoryListener *listener,
3617                              MemoryRegionSection *section,
3618                              bool match_data, uint64_t data, int fd)
3619 {
3620 }
3621
3622 static void io_begin(MemoryListener *listener)
3623 {
3624 }
3625
3626 static void io_commit(MemoryListener *listener)
3627 {
3628 }
3629
3630 static void io_region_add(MemoryListener *listener,
3631                           MemoryRegionSection *section)
3632 {
3633     MemoryRegionIORange *mrio = g_new(MemoryRegionIORange, 1);
3634
3635     mrio->mr = section->mr;
3636     mrio->offset = section->offset_within_region;
3637     iorange_init(&mrio->iorange, &memory_region_iorange_ops,
3638                  section->offset_within_address_space, section->size);
3639     ioport_register(&mrio->iorange);
3640 }
3641
3642 static void io_region_del(MemoryListener *listener,
3643                           MemoryRegionSection *section)
3644 {
3645     isa_unassign_ioport(section->offset_within_address_space, section->size);
3646 }
3647
3648 static void io_region_nop(MemoryListener *listener,
3649                           MemoryRegionSection *section)
3650 {
3651 }
3652
3653 static void io_log_start(MemoryListener *listener,
3654                          MemoryRegionSection *section)
3655 {
3656 }
3657
3658 static void io_log_stop(MemoryListener *listener,
3659                         MemoryRegionSection *section)
3660 {
3661 }
3662
3663 static void io_log_sync(MemoryListener *listener,
3664                         MemoryRegionSection *section)
3665 {
3666 }
3667
3668 static void io_log_global_start(MemoryListener *listener)
3669 {
3670 }
3671
3672 static void io_log_global_stop(MemoryListener *listener)
3673 {
3674 }
3675
3676 static void io_eventfd_add(MemoryListener *listener,
3677                            MemoryRegionSection *section,
3678                            bool match_data, uint64_t data, int fd)
3679 {
3680 }
3681
3682 static void io_eventfd_del(MemoryListener *listener,
3683                            MemoryRegionSection *section,
3684                            bool match_data, uint64_t data, int fd)
3685 {
3686 }
3687
3688 static MemoryListener core_memory_listener = {
3689     .begin = core_begin,
3690     .commit = core_commit,
3691     .region_add = core_region_add,
3692     .region_del = core_region_del,
3693     .region_nop = core_region_nop,
3694     .log_start = core_log_start,
3695     .log_stop = core_log_stop,
3696     .log_sync = core_log_sync,
3697     .log_global_start = core_log_global_start,
3698     .log_global_stop = core_log_global_stop,
3699     .eventfd_add = core_eventfd_add,
3700     .eventfd_del = core_eventfd_del,
3701     .priority = 0,
3702 };
3703
3704 static MemoryListener io_memory_listener = {
3705     .begin = io_begin,
3706     .commit = io_commit,
3707     .region_add = io_region_add,
3708     .region_del = io_region_del,
3709     .region_nop = io_region_nop,
3710     .log_start = io_log_start,
3711     .log_stop = io_log_stop,
3712     .log_sync = io_log_sync,
3713     .log_global_start = io_log_global_start,
3714     .log_global_stop = io_log_global_stop,
3715     .eventfd_add = io_eventfd_add,
3716     .eventfd_del = io_eventfd_del,
3717     .priority = 0,
3718 };
3719
3720 static void memory_map_init(void)
3721 {
3722     system_memory = g_malloc(sizeof(*system_memory));
3723     memory_region_init(system_memory, "system", INT64_MAX);
3724     set_system_memory_map(system_memory);
3725
3726     system_io = g_malloc(sizeof(*system_io));
3727     memory_region_init(system_io, "io", 65536);
3728     set_system_io_map(system_io);
3729
3730     memory_listener_register(&core_memory_listener, system_memory);
3731     memory_listener_register(&io_memory_listener, system_io);
3732 }
3733
3734 MemoryRegion *get_system_memory(void)
3735 {
3736     return system_memory;
3737 }
3738
3739 MemoryRegion *get_system_io(void)
3740 {
3741     return system_io;
3742 }
3743
3744 #endif /* !defined(CONFIG_USER_ONLY) */
3745
3746 /* physical memory access (slow version, mainly for debug) */
3747 #if defined(CONFIG_USER_ONLY)
3748 int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr,
3749                         uint8_t *buf, int len, int is_write)
3750 {
3751     int l, flags;
3752     target_ulong page;
3753     void * p;
3754
3755     while (len > 0) {
3756         page = addr & TARGET_PAGE_MASK;
3757         l = (page + TARGET_PAGE_SIZE) - addr;
3758         if (l > len)
3759             l = len;
3760         flags = page_get_flags(page);
3761         if (!(flags & PAGE_VALID))
3762             return -1;
3763         if (is_write) {
3764             if (!(flags & PAGE_WRITE))
3765                 return -1;
3766             /* XXX: this code should not depend on lock_user */
3767             if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
3768                 return -1;
3769             memcpy(p, buf, l);
3770             unlock_user(p, addr, l);
3771         } else {
3772             if (!(flags & PAGE_READ))
3773                 return -1;
3774             /* XXX: this code should not depend on lock_user */
3775             if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
3776                 return -1;
3777             memcpy(buf, p, l);
3778             unlock_user(p, addr, 0);
3779         }
3780         len -= l;
3781         buf += l;
3782         addr += l;
3783     }
3784     return 0;
3785 }
3786
3787 #else
3788 void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
3789                             int len, int is_write)
3790 {
3791     int l;
3792     uint8_t *ptr;
3793     uint32_t val;
3794     target_phys_addr_t page;
3795     MemoryRegionSection *section;
3796
3797     while (len > 0) {
3798         page = addr & TARGET_PAGE_MASK;
3799         l = (page + TARGET_PAGE_SIZE) - addr;
3800         if (l > len)
3801             l = len;
3802         section = phys_page_find(page >> TARGET_PAGE_BITS);
3803
3804         if (is_write) {
3805             if (!memory_region_is_ram(section->mr)) {
3806                 target_phys_addr_t addr1;
3807                 addr1 = section_addr(section, addr);
3808                 /* XXX: could force cpu_single_env to NULL to avoid
3809                    potential bugs */
3810                 if (l >= 4 && ((addr1 & 3) == 0)) {
3811                     /* 32 bit write access */
3812                     val = ldl_p(buf);
3813                     io_mem_write(section->mr, addr1, val, 4);
3814                     l = 4;
3815                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3816                     /* 16 bit write access */
3817                     val = lduw_p(buf);
3818                     io_mem_write(section->mr, addr1, val, 2);
3819                     l = 2;
3820                 } else {
3821                     /* 8 bit write access */
3822                     val = ldub_p(buf);
3823                     io_mem_write(section->mr, addr1, val, 1);
3824                     l = 1;
3825                 }
3826             } else if (!section->readonly) {
3827                 ram_addr_t addr1;
3828                 addr1 = memory_region_get_ram_addr(section->mr)
3829                     + section_addr(section, addr);
3830                 /* RAM case */
3831                 ptr = qemu_get_ram_ptr(addr1);
3832                 memcpy(ptr, buf, l);
3833                 if (!cpu_physical_memory_is_dirty(addr1)) {
3834                     /* invalidate code */
3835                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
3836                     /* set dirty bit */
3837                     cpu_physical_memory_set_dirty_flags(
3838                         addr1, (0xff & ~CODE_DIRTY_FLAG));
3839                 }
3840                 qemu_put_ram_ptr(ptr);
3841             }
3842         } else {
3843             if (!is_ram_rom_romd(section)) {
3844                 target_phys_addr_t addr1;
3845                 /* I/O case */
3846                 addr1 = section_addr(section, addr);
3847                 if (l >= 4 && ((addr1 & 3) == 0)) {
3848                     /* 32 bit read access */
3849                     val = io_mem_read(section->mr, addr1, 4);
3850                     stl_p(buf, val);
3851                     l = 4;
3852                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3853                     /* 16 bit read access */
3854                     val = io_mem_read(section->mr, addr1, 2);
3855                     stw_p(buf, val);
3856                     l = 2;
3857                 } else {
3858                     /* 8 bit read access */
3859                     val = io_mem_read(section->mr, addr1, 1);
3860                     stb_p(buf, val);
3861                     l = 1;
3862                 }
3863             } else {
3864                 /* RAM case */
3865                 ptr = qemu_get_ram_ptr(section->mr->ram_addr
3866                                        + section_addr(section, addr));
3867                 memcpy(buf, ptr, l);
3868                 qemu_put_ram_ptr(ptr);
3869             }
3870         }
3871         len -= l;
3872         buf += l;
3873         addr += l;
3874     }
3875 }
3876
3877 /* used for ROM loading : can write in RAM and ROM */
3878 void cpu_physical_memory_write_rom(target_phys_addr_t addr,
3879                                    const uint8_t *buf, int len)
3880 {
3881     int l;
3882     uint8_t *ptr;
3883     target_phys_addr_t page;
3884     MemoryRegionSection *section;
3885
3886     while (len > 0) {
3887         page = addr & TARGET_PAGE_MASK;
3888         l = (page + TARGET_PAGE_SIZE) - addr;
3889         if (l > len)
3890             l = len;
3891         section = phys_page_find(page >> TARGET_PAGE_BITS);
3892
3893         if (!is_ram_rom_romd(section)) {
3894             /* do nothing */
3895         } else {
3896             unsigned long addr1;
3897             addr1 = memory_region_get_ram_addr(section->mr)
3898                 + section_addr(section, addr);
3899             /* ROM/RAM case */
3900             ptr = qemu_get_ram_ptr(addr1);
3901             memcpy(ptr, buf, l);
3902             qemu_put_ram_ptr(ptr);
3903         }
3904         len -= l;
3905         buf += l;
3906         addr += l;
3907     }
3908 }
3909
3910 typedef struct {
3911     void *buffer;
3912     target_phys_addr_t addr;
3913     target_phys_addr_t len;
3914 } BounceBuffer;
3915
3916 static BounceBuffer bounce;
3917
3918 typedef struct MapClient {
3919     void *opaque;
3920     void (*callback)(void *opaque);
3921     QLIST_ENTRY(MapClient) link;
3922 } MapClient;
3923
3924 static QLIST_HEAD(map_client_list, MapClient) map_client_list
3925     = QLIST_HEAD_INITIALIZER(map_client_list);
3926
3927 void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque))
3928 {
3929     MapClient *client = g_malloc(sizeof(*client));
3930
3931     client->opaque = opaque;
3932     client->callback = callback;
3933     QLIST_INSERT_HEAD(&map_client_list, client, link);
3934     return client;
3935 }
3936
3937 void cpu_unregister_map_client(void *_client)
3938 {
3939     MapClient *client = (MapClient *)_client;
3940
3941     QLIST_REMOVE(client, link);
3942     g_free(client);
3943 }
3944
3945 static void cpu_notify_map_clients(void)
3946 {
3947     MapClient *client;
3948
3949     while (!QLIST_EMPTY(&map_client_list)) {
3950         client = QLIST_FIRST(&map_client_list);
3951         client->callback(client->opaque);
3952         cpu_unregister_map_client(client);
3953     }
3954 }
3955
3956 /* Map a physical memory region into a host virtual address.
3957  * May map a subset of the requested range, given by and returned in *plen.
3958  * May return NULL if resources needed to perform the mapping are exhausted.
3959  * Use only for reads OR writes - not for read-modify-write operations.
3960  * Use cpu_register_map_client() to know when retrying the map operation is
3961  * likely to succeed.
3962  */
3963 void *cpu_physical_memory_map(target_phys_addr_t addr,
3964                               target_phys_addr_t *plen,
3965                               int is_write)
3966 {
3967     target_phys_addr_t len = *plen;
3968     target_phys_addr_t todo = 0;
3969     int l;
3970     target_phys_addr_t page;
3971     MemoryRegionSection *section;
3972     ram_addr_t raddr = RAM_ADDR_MAX;
3973     ram_addr_t rlen;
3974     void *ret;
3975
3976     while (len > 0) {
3977         page = addr & TARGET_PAGE_MASK;
3978         l = (page + TARGET_PAGE_SIZE) - addr;
3979         if (l > len)
3980             l = len;
3981         section = phys_page_find(page >> TARGET_PAGE_BITS);
3982
3983         if (!(memory_region_is_ram(section->mr) && !section->readonly)) {
3984             if (todo || bounce.buffer) {
3985                 break;
3986             }
3987             bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, TARGET_PAGE_SIZE);
3988             bounce.addr = addr;
3989             bounce.len = l;
3990             if (!is_write) {
3991                 cpu_physical_memory_read(addr, bounce.buffer, l);
3992             }
3993
3994             *plen = l;
3995             return bounce.buffer;
3996         }
3997         if (!todo) {
3998             raddr = memory_region_get_ram_addr(section->mr)
3999                 + section_addr(section, addr);
4000         }
4001
4002         len -= l;
4003         addr += l;
4004         todo += l;
4005     }
4006     rlen = todo;
4007     ret = qemu_ram_ptr_length(raddr, &rlen);
4008     *plen = rlen;
4009     return ret;
4010 }
4011
4012 /* Unmaps a memory region previously mapped by cpu_physical_memory_map().
4013  * Will also mark the memory as dirty if is_write == 1.  access_len gives
4014  * the amount of memory that was actually read or written by the caller.
4015  */
4016 void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
4017                                int is_write, target_phys_addr_t access_len)
4018 {
4019     if (buffer != bounce.buffer) {
4020         if (is_write) {
4021             ram_addr_t addr1 = qemu_ram_addr_from_host_nofail(buffer);
4022             while (access_len) {
4023                 unsigned l;
4024                 l = TARGET_PAGE_SIZE;
4025                 if (l > access_len)
4026                     l = access_len;
4027                 if (!cpu_physical_memory_is_dirty(addr1)) {
4028                     /* invalidate code */
4029                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
4030                     /* set dirty bit */
4031                     cpu_physical_memory_set_dirty_flags(
4032                         addr1, (0xff & ~CODE_DIRTY_FLAG));
4033                 }
4034                 addr1 += l;
4035                 access_len -= l;
4036             }
4037         }
4038         if (xen_enabled()) {
4039             xen_invalidate_map_cache_entry(buffer);
4040         }
4041         return;
4042     }
4043     if (is_write) {
4044         cpu_physical_memory_write(bounce.addr, bounce.buffer, access_len);
4045     }
4046     qemu_vfree(bounce.buffer);
4047     bounce.buffer = NULL;
4048     cpu_notify_map_clients();
4049 }
4050
4051 /* warning: addr must be aligned */
4052 static inline uint32_t ldl_phys_internal(target_phys_addr_t addr,
4053                                          enum device_endian endian)
4054 {
4055     uint8_t *ptr;
4056     uint32_t val;
4057     MemoryRegionSection *section;
4058
4059     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4060
4061     if (!is_ram_rom_romd(section)) {
4062         /* I/O case */
4063         addr = section_addr(section, addr);
4064         val = io_mem_read(section->mr, addr, 4);
4065 #if defined(TARGET_WORDS_BIGENDIAN)
4066         if (endian == DEVICE_LITTLE_ENDIAN) {
4067             val = bswap32(val);
4068         }
4069 #else
4070         if (endian == DEVICE_BIG_ENDIAN) {
4071             val = bswap32(val);
4072         }
4073 #endif
4074     } else {
4075         /* RAM case */
4076         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
4077                                 & TARGET_PAGE_MASK)
4078                                + section_addr(section, addr));
4079         switch (endian) {
4080         case DEVICE_LITTLE_ENDIAN:
4081             val = ldl_le_p(ptr);
4082             break;
4083         case DEVICE_BIG_ENDIAN:
4084             val = ldl_be_p(ptr);
4085             break;
4086         default:
4087             val = ldl_p(ptr);
4088             break;
4089         }
4090     }
4091     return val;
4092 }
4093
4094 uint32_t ldl_phys(target_phys_addr_t addr)
4095 {
4096     return ldl_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
4097 }
4098
4099 uint32_t ldl_le_phys(target_phys_addr_t addr)
4100 {
4101     return ldl_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
4102 }
4103
4104 uint32_t ldl_be_phys(target_phys_addr_t addr)
4105 {
4106     return ldl_phys_internal(addr, DEVICE_BIG_ENDIAN);
4107 }
4108
4109 /* warning: addr must be aligned */
4110 static inline uint64_t ldq_phys_internal(target_phys_addr_t addr,
4111                                          enum device_endian endian)
4112 {
4113     uint8_t *ptr;
4114     uint64_t val;
4115     MemoryRegionSection *section;
4116
4117     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4118
4119     if (!is_ram_rom_romd(section)) {
4120         /* I/O case */
4121         addr = section_addr(section, addr);
4122
4123         /* XXX This is broken when device endian != cpu endian.
4124                Fix and add "endian" variable check */
4125 #ifdef TARGET_WORDS_BIGENDIAN
4126         val = io_mem_read(section->mr, addr, 4) << 32;
4127         val |= io_mem_read(section->mr, addr + 4, 4);
4128 #else
4129         val = io_mem_read(section->mr, addr, 4);
4130         val |= io_mem_read(section->mr, addr + 4, 4) << 32;
4131 #endif
4132     } else {
4133         /* RAM case */
4134         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
4135                                 & TARGET_PAGE_MASK)
4136                                + section_addr(section, addr));
4137         switch (endian) {
4138         case DEVICE_LITTLE_ENDIAN:
4139             val = ldq_le_p(ptr);
4140             break;
4141         case DEVICE_BIG_ENDIAN:
4142             val = ldq_be_p(ptr);
4143             break;
4144         default:
4145             val = ldq_p(ptr);
4146             break;
4147         }
4148     }
4149     return val;
4150 }
4151
4152 uint64_t ldq_phys(target_phys_addr_t addr)
4153 {
4154     return ldq_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
4155 }
4156
4157 uint64_t ldq_le_phys(target_phys_addr_t addr)
4158 {
4159     return ldq_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
4160 }
4161
4162 uint64_t ldq_be_phys(target_phys_addr_t addr)
4163 {
4164     return ldq_phys_internal(addr, DEVICE_BIG_ENDIAN);
4165 }
4166
4167 /* XXX: optimize */
4168 uint32_t ldub_phys(target_phys_addr_t addr)
4169 {
4170     uint8_t val;
4171     cpu_physical_memory_read(addr, &val, 1);
4172     return val;
4173 }
4174
4175 /* warning: addr must be aligned */
4176 static inline uint32_t lduw_phys_internal(target_phys_addr_t addr,
4177                                           enum device_endian endian)
4178 {
4179     uint8_t *ptr;
4180     uint64_t val;
4181     MemoryRegionSection *section;
4182
4183     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4184
4185     if (!is_ram_rom_romd(section)) {
4186         /* I/O case */
4187         addr = section_addr(section, addr);
4188         val = io_mem_read(section->mr, addr, 2);
4189 #if defined(TARGET_WORDS_BIGENDIAN)
4190         if (endian == DEVICE_LITTLE_ENDIAN) {
4191             val = bswap16(val);
4192         }
4193 #else
4194         if (endian == DEVICE_BIG_ENDIAN) {
4195             val = bswap16(val);
4196         }
4197 #endif
4198     } else {
4199         /* RAM case */
4200         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
4201                                 & TARGET_PAGE_MASK)
4202                                + section_addr(section, addr));
4203         switch (endian) {
4204         case DEVICE_LITTLE_ENDIAN:
4205             val = lduw_le_p(ptr);
4206             break;
4207         case DEVICE_BIG_ENDIAN:
4208             val = lduw_be_p(ptr);
4209             break;
4210         default:
4211             val = lduw_p(ptr);
4212             break;
4213         }
4214     }
4215     return val;
4216 }
4217
4218 uint32_t lduw_phys(target_phys_addr_t addr)
4219 {
4220     return lduw_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
4221 }
4222
4223 uint32_t lduw_le_phys(target_phys_addr_t addr)
4224 {
4225     return lduw_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
4226 }
4227
4228 uint32_t lduw_be_phys(target_phys_addr_t addr)
4229 {
4230     return lduw_phys_internal(addr, DEVICE_BIG_ENDIAN);
4231 }
4232
4233 /* warning: addr must be aligned. The ram page is not masked as dirty
4234    and the code inside is not invalidated. It is useful if the dirty
4235    bits are used to track modified PTEs */
4236 void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val)
4237 {
4238     uint8_t *ptr;
4239     MemoryRegionSection *section;
4240
4241     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4242
4243     if (!memory_region_is_ram(section->mr) || section->readonly) {
4244         addr = section_addr(section, addr);
4245         if (memory_region_is_ram(section->mr)) {
4246             section = &phys_sections[phys_section_rom];
4247         }
4248         io_mem_write(section->mr, addr, val, 4);
4249     } else {
4250         unsigned long addr1 = (memory_region_get_ram_addr(section->mr)
4251                                & TARGET_PAGE_MASK)
4252             + section_addr(section, addr);
4253         ptr = qemu_get_ram_ptr(addr1);
4254         stl_p(ptr, val);
4255
4256         if (unlikely(in_migration)) {
4257             if (!cpu_physical_memory_is_dirty(addr1)) {
4258                 /* invalidate code */
4259                 tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
4260                 /* set dirty bit */
4261                 cpu_physical_memory_set_dirty_flags(
4262                     addr1, (0xff & ~CODE_DIRTY_FLAG));
4263             }
4264         }
4265     }
4266 }
4267
4268 void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val)
4269 {
4270     uint8_t *ptr;
4271     MemoryRegionSection *section;
4272
4273     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4274
4275     if (!memory_region_is_ram(section->mr) || section->readonly) {
4276         addr = section_addr(section, addr);
4277         if (memory_region_is_ram(section->mr)) {
4278             section = &phys_sections[phys_section_rom];
4279         }
4280 #ifdef TARGET_WORDS_BIGENDIAN
4281         io_mem_write(section->mr, addr, val >> 32, 4);
4282         io_mem_write(section->mr, addr + 4, (uint32_t)val, 4);
4283 #else
4284         io_mem_write(section->mr, addr, (uint32_t)val, 4);
4285         io_mem_write(section->mr, addr + 4, val >> 32, 4);
4286 #endif
4287     } else {
4288         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
4289                                 & TARGET_PAGE_MASK)
4290                                + section_addr(section, addr));
4291         stq_p(ptr, val);
4292     }
4293 }
4294
4295 /* warning: addr must be aligned */
4296 static inline void stl_phys_internal(target_phys_addr_t addr, uint32_t val,
4297                                      enum device_endian endian)
4298 {
4299     uint8_t *ptr;
4300     MemoryRegionSection *section;
4301
4302     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4303
4304     if (!memory_region_is_ram(section->mr) || section->readonly) {
4305         addr = section_addr(section, addr);
4306         if (memory_region_is_ram(section->mr)) {
4307             section = &phys_sections[phys_section_rom];
4308         }
4309 #if defined(TARGET_WORDS_BIGENDIAN)
4310         if (endian == DEVICE_LITTLE_ENDIAN) {
4311             val = bswap32(val);
4312         }
4313 #else
4314         if (endian == DEVICE_BIG_ENDIAN) {
4315             val = bswap32(val);
4316         }
4317 #endif
4318         io_mem_write(section->mr, addr, val, 4);
4319     } else {
4320         unsigned long addr1;
4321         addr1 = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
4322             + section_addr(section, addr);
4323         /* RAM case */
4324         ptr = qemu_get_ram_ptr(addr1);
4325         switch (endian) {
4326         case DEVICE_LITTLE_ENDIAN:
4327             stl_le_p(ptr, val);
4328             break;
4329         case DEVICE_BIG_ENDIAN:
4330             stl_be_p(ptr, val);
4331             break;
4332         default:
4333             stl_p(ptr, val);
4334             break;
4335         }
4336         if (!cpu_physical_memory_is_dirty(addr1)) {
4337             /* invalidate code */
4338             tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
4339             /* set dirty bit */
4340             cpu_physical_memory_set_dirty_flags(addr1,
4341                 (0xff & ~CODE_DIRTY_FLAG));
4342         }
4343     }
4344 }
4345
4346 void stl_phys(target_phys_addr_t addr, uint32_t val)
4347 {
4348     stl_phys_internal(addr, val, DEVICE_NATIVE_ENDIAN);
4349 }
4350
4351 void stl_le_phys(target_phys_addr_t addr, uint32_t val)
4352 {
4353     stl_phys_internal(addr, val, DEVICE_LITTLE_ENDIAN);
4354 }
4355
4356 void stl_be_phys(target_phys_addr_t addr, uint32_t val)
4357 {
4358     stl_phys_internal(addr, val, DEVICE_BIG_ENDIAN);
4359 }
4360
4361 /* XXX: optimize */
4362 void stb_phys(target_phys_addr_t addr, uint32_t val)
4363 {
4364     uint8_t v = val;
4365     cpu_physical_memory_write(addr, &v, 1);
4366 }
4367
4368 /* warning: addr must be aligned */
4369 static inline void stw_phys_internal(target_phys_addr_t addr, uint32_t val,
4370                                      enum device_endian endian)
4371 {
4372     uint8_t *ptr;
4373     MemoryRegionSection *section;
4374
4375     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4376
4377     if (!memory_region_is_ram(section->mr) || section->readonly) {
4378         addr = section_addr(section, addr);
4379         if (memory_region_is_ram(section->mr)) {
4380             section = &phys_sections[phys_section_rom];
4381         }
4382 #if defined(TARGET_WORDS_BIGENDIAN)
4383         if (endian == DEVICE_LITTLE_ENDIAN) {
4384             val = bswap16(val);
4385         }
4386 #else
4387         if (endian == DEVICE_BIG_ENDIAN) {
4388             val = bswap16(val);
4389         }
4390 #endif
4391         io_mem_write(section->mr, addr, val, 2);
4392     } else {
4393         unsigned long addr1;
4394         addr1 = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
4395             + section_addr(section, addr);
4396         /* RAM case */
4397         ptr = qemu_get_ram_ptr(addr1);
4398         switch (endian) {
4399         case DEVICE_LITTLE_ENDIAN:
4400             stw_le_p(ptr, val);
4401             break;
4402         case DEVICE_BIG_ENDIAN:
4403             stw_be_p(ptr, val);
4404             break;
4405         default:
4406             stw_p(ptr, val);
4407             break;
4408         }
4409         if (!cpu_physical_memory_is_dirty(addr1)) {
4410             /* invalidate code */
4411             tb_invalidate_phys_page_range(addr1, addr1 + 2, 0);
4412             /* set dirty bit */
4413             cpu_physical_memory_set_dirty_flags(addr1,
4414                 (0xff & ~CODE_DIRTY_FLAG));
4415         }
4416     }
4417 }
4418
4419 void stw_phys(target_phys_addr_t addr, uint32_t val)
4420 {
4421     stw_phys_internal(addr, val, DEVICE_NATIVE_ENDIAN);
4422 }
4423
4424 void stw_le_phys(target_phys_addr_t addr, uint32_t val)
4425 {
4426     stw_phys_internal(addr, val, DEVICE_LITTLE_ENDIAN);
4427 }
4428
4429 void stw_be_phys(target_phys_addr_t addr, uint32_t val)
4430 {
4431     stw_phys_internal(addr, val, DEVICE_BIG_ENDIAN);
4432 }
4433
4434 /* XXX: optimize */
4435 void stq_phys(target_phys_addr_t addr, uint64_t val)
4436 {
4437     val = tswap64(val);
4438     cpu_physical_memory_write(addr, &val, 8);
4439 }
4440
4441 void stq_le_phys(target_phys_addr_t addr, uint64_t val)
4442 {
4443     val = cpu_to_le64(val);
4444     cpu_physical_memory_write(addr, &val, 8);
4445 }
4446
4447 void stq_be_phys(target_phys_addr_t addr, uint64_t val)
4448 {
4449     val = cpu_to_be64(val);
4450     cpu_physical_memory_write(addr, &val, 8);
4451 }
4452
4453 /* virtual memory access for debug (includes writing to ROM) */
4454 int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr,
4455                         uint8_t *buf, int len, int is_write)
4456 {
4457     int l;
4458     target_phys_addr_t phys_addr;
4459     target_ulong page;
4460
4461     while (len > 0) {
4462         page = addr & TARGET_PAGE_MASK;
4463         phys_addr = cpu_get_phys_page_debug(env, page);
4464         /* if no physical page mapped, return an error */
4465         if (phys_addr == -1)
4466             return -1;
4467         l = (page + TARGET_PAGE_SIZE) - addr;
4468         if (l > len)
4469             l = len;
4470         phys_addr += (addr & ~TARGET_PAGE_MASK);
4471         if (is_write)
4472             cpu_physical_memory_write_rom(phys_addr, buf, l);
4473         else
4474             cpu_physical_memory_rw(phys_addr, buf, l, is_write);
4475         len -= l;
4476         buf += l;
4477         addr += l;
4478     }
4479     return 0;
4480 }
4481 #endif
4482
4483 /* in deterministic execution mode, instructions doing device I/Os
4484    must be at the end of the TB */
4485 void cpu_io_recompile(CPUArchState *env, uintptr_t retaddr)
4486 {
4487     TranslationBlock *tb;
4488     uint32_t n, cflags;
4489     target_ulong pc, cs_base;
4490     uint64_t flags;
4491
4492     tb = tb_find_pc(retaddr);
4493     if (!tb) {
4494         cpu_abort(env, "cpu_io_recompile: could not find TB for pc=%p", 
4495                   (void *)retaddr);
4496     }
4497     n = env->icount_decr.u16.low + tb->icount;
4498     cpu_restore_state(tb, env, retaddr);
4499     /* Calculate how many instructions had been executed before the fault
4500        occurred.  */
4501     n = n - env->icount_decr.u16.low;
4502     /* Generate a new TB ending on the I/O insn.  */
4503     n++;
4504     /* On MIPS and SH, delay slot instructions can only be restarted if
4505        they were already the first instruction in the TB.  If this is not
4506        the first instruction in a TB then re-execute the preceding
4507        branch.  */
4508 #if defined(TARGET_MIPS)
4509     if ((env->hflags & MIPS_HFLAG_BMASK) != 0 && n > 1) {
4510         env->active_tc.PC -= 4;
4511         env->icount_decr.u16.low++;
4512         env->hflags &= ~MIPS_HFLAG_BMASK;
4513     }
4514 #elif defined(TARGET_SH4)
4515     if ((env->flags & ((DELAY_SLOT | DELAY_SLOT_CONDITIONAL))) != 0
4516             && n > 1) {
4517         env->pc -= 2;
4518         env->icount_decr.u16.low++;
4519         env->flags &= ~(DELAY_SLOT | DELAY_SLOT_CONDITIONAL);
4520     }
4521 #endif
4522     /* This should never happen.  */
4523     if (n > CF_COUNT_MASK)
4524         cpu_abort(env, "TB too big during recompile");
4525
4526     cflags = n | CF_LAST_IO;
4527     pc = tb->pc;
4528     cs_base = tb->cs_base;
4529     flags = tb->flags;
4530     tb_phys_invalidate(tb, -1);
4531     /* FIXME: In theory this could raise an exception.  In practice
4532        we have already translated the block once so it's probably ok.  */
4533     tb_gen_code(env, pc, cs_base, flags, cflags);
4534     /* TODO: If env->pc != tb->pc (i.e. the faulting instruction was not
4535        the first in the TB) then we end up generating a whole new TB and
4536        repeating the fault, which is horribly inefficient.
4537        Better would be to execute just this insn uncached, or generate a
4538        second new TB.  */
4539     cpu_resume_from_signal(env, NULL);
4540 }
4541
4542 #if !defined(CONFIG_USER_ONLY)
4543
4544 void dump_exec_info(FILE *f, fprintf_function cpu_fprintf)
4545 {
4546     int i, target_code_size, max_target_code_size;
4547     int direct_jmp_count, direct_jmp2_count, cross_page;
4548     TranslationBlock *tb;
4549
4550     target_code_size = 0;
4551     max_target_code_size = 0;
4552     cross_page = 0;
4553     direct_jmp_count = 0;
4554     direct_jmp2_count = 0;
4555     for(i = 0; i < nb_tbs; i++) {
4556         tb = &tbs[i];
4557         target_code_size += tb->size;
4558         if (tb->size > max_target_code_size)
4559             max_target_code_size = tb->size;
4560         if (tb->page_addr[1] != -1)
4561             cross_page++;
4562         if (tb->tb_next_offset[0] != 0xffff) {
4563             direct_jmp_count++;
4564             if (tb->tb_next_offset[1] != 0xffff) {
4565                 direct_jmp2_count++;
4566             }
4567         }
4568     }
4569     /* XXX: avoid using doubles ? */
4570     cpu_fprintf(f, "Translation buffer state:\n");
4571     cpu_fprintf(f, "gen code size       %td/%ld\n",
4572                 code_gen_ptr - code_gen_buffer, code_gen_buffer_max_size);
4573     cpu_fprintf(f, "TB count            %d/%d\n", 
4574                 nb_tbs, code_gen_max_blocks);
4575     cpu_fprintf(f, "TB avg target size  %d max=%d bytes\n",
4576                 nb_tbs ? target_code_size / nb_tbs : 0,
4577                 max_target_code_size);
4578     cpu_fprintf(f, "TB avg host size    %td bytes (expansion ratio: %0.1f)\n",
4579                 nb_tbs ? (code_gen_ptr - code_gen_buffer) / nb_tbs : 0,
4580                 target_code_size ? (double) (code_gen_ptr - code_gen_buffer) / target_code_size : 0);
4581     cpu_fprintf(f, "cross page TB count %d (%d%%)\n",
4582             cross_page,
4583             nb_tbs ? (cross_page * 100) / nb_tbs : 0);
4584     cpu_fprintf(f, "direct jump count   %d (%d%%) (2 jumps=%d %d%%)\n",
4585                 direct_jmp_count,
4586                 nb_tbs ? (direct_jmp_count * 100) / nb_tbs : 0,
4587                 direct_jmp2_count,
4588                 nb_tbs ? (direct_jmp2_count * 100) / nb_tbs : 0);
4589     cpu_fprintf(f, "\nStatistics:\n");
4590     cpu_fprintf(f, "TB flush count      %d\n", tb_flush_count);
4591     cpu_fprintf(f, "TB invalidate count %d\n", tb_phys_invalidate_count);
4592     cpu_fprintf(f, "TLB flush count     %d\n", tlb_flush_count);
4593     tcg_dump_info(f, cpu_fprintf);
4594 }
4595
4596 /* NOTE: this function can trigger an exception */
4597 /* NOTE2: the returned address is not exactly the physical address: it
4598    is the offset relative to phys_ram_base */
4599 tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr)
4600 {
4601     int mmu_idx, page_index, pd;
4602     void *p;
4603     MemoryRegion *mr;
4604
4605     page_index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
4606     mmu_idx = cpu_mmu_index(env1);
4607     if (unlikely(env1->tlb_table[mmu_idx][page_index].addr_code !=
4608                  (addr & TARGET_PAGE_MASK))) {
4609 #ifdef CONFIG_TCG_PASS_AREG0
4610         cpu_ldub_code(env1, addr);
4611 #else
4612         ldub_code(addr);
4613 #endif
4614     }
4615     pd = env1->iotlb[mmu_idx][page_index] & ~TARGET_PAGE_MASK;
4616     mr = iotlb_to_region(pd);
4617     if (mr != &io_mem_ram && mr != &io_mem_rom
4618         && mr != &io_mem_notdirty && !mr->rom_device
4619         && mr != &io_mem_watch) {
4620 #if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SPARC)
4621         cpu_unassigned_access(env1, addr, 0, 1, 0, 4);
4622 #else
4623         cpu_abort(env1, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
4624 #endif
4625     }
4626     p = (void *)((uintptr_t)addr + env1->tlb_table[mmu_idx][page_index].addend);
4627     return qemu_ram_addr_from_host_nofail(p);
4628 }
4629
4630 /*
4631  * A helper function for the _utterly broken_ virtio device model to find out if
4632  * it's running on a big endian machine. Don't do this at home kids!
4633  */
4634 bool virtio_is_big_endian(void);
4635 bool virtio_is_big_endian(void)
4636 {
4637 #if defined(TARGET_WORDS_BIGENDIAN)
4638     return true;
4639 #else
4640     return false;
4641 #endif
4642 }
4643
4644 #define MMUSUFFIX _cmmu
4645 #undef GETPC
4646 #define GETPC() ((uintptr_t)0)
4647 #define env cpu_single_env
4648 #define SOFTMMU_CODE_ACCESS
4649
4650 #define SHIFT 0
4651 #include "softmmu_template.h"
4652
4653 #define SHIFT 1
4654 #include "softmmu_template.h"
4655
4656 #define SHIFT 2
4657 #include "softmmu_template.h"
4658
4659 #define SHIFT 3
4660 #include "softmmu_template.h"
4661
4662 #undef env
4663
4664 #endif
This page took 0.267057 seconds and 4 git commands to generate.