]> Git Repo - qemu.git/blob - exec.c
add a boot parameter to set reboot timeout
[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 #include "cputlb.h"
61
62 #define WANT_EXEC_OBSOLETE
63 #include "exec-obsolete.h"
64
65 //#define DEBUG_TB_INVALIDATE
66 //#define DEBUG_FLUSH
67 //#define DEBUG_UNASSIGNED
68
69 /* make various TB consistency checks */
70 //#define DEBUG_TB_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__)
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 /* statistics */
220 static int tb_flush_count;
221 static int tb_phys_invalidate_count;
222
223 #ifdef _WIN32
224 static void map_exec(void *addr, long size)
225 {
226     DWORD old_protect;
227     VirtualProtect(addr, size,
228                    PAGE_EXECUTE_READWRITE, &old_protect);
229     
230 }
231 #else
232 static void map_exec(void *addr, long size)
233 {
234     unsigned long start, end, page_size;
235     
236     page_size = getpagesize();
237     start = (unsigned long)addr;
238     start &= ~(page_size - 1);
239     
240     end = (unsigned long)addr + size;
241     end += page_size - 1;
242     end &= ~(page_size - 1);
243     
244     mprotect((void *)start, end - start,
245              PROT_READ | PROT_WRITE | PROT_EXEC);
246 }
247 #endif
248
249 static void page_init(void)
250 {
251     /* NOTE: we can always suppose that qemu_host_page_size >=
252        TARGET_PAGE_SIZE */
253 #ifdef _WIN32
254     {
255         SYSTEM_INFO system_info;
256
257         GetSystemInfo(&system_info);
258         qemu_real_host_page_size = system_info.dwPageSize;
259     }
260 #else
261     qemu_real_host_page_size = getpagesize();
262 #endif
263     if (qemu_host_page_size == 0)
264         qemu_host_page_size = qemu_real_host_page_size;
265     if (qemu_host_page_size < TARGET_PAGE_SIZE)
266         qemu_host_page_size = TARGET_PAGE_SIZE;
267     qemu_host_page_mask = ~(qemu_host_page_size - 1);
268
269 #if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY)
270     {
271 #ifdef HAVE_KINFO_GETVMMAP
272         struct kinfo_vmentry *freep;
273         int i, cnt;
274
275         freep = kinfo_getvmmap(getpid(), &cnt);
276         if (freep) {
277             mmap_lock();
278             for (i = 0; i < cnt; i++) {
279                 unsigned long startaddr, endaddr;
280
281                 startaddr = freep[i].kve_start;
282                 endaddr = freep[i].kve_end;
283                 if (h2g_valid(startaddr)) {
284                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
285
286                     if (h2g_valid(endaddr)) {
287                         endaddr = h2g(endaddr);
288                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
289                     } else {
290 #if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS
291                         endaddr = ~0ul;
292                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
293 #endif
294                     }
295                 }
296             }
297             free(freep);
298             mmap_unlock();
299         }
300 #else
301         FILE *f;
302
303         last_brk = (unsigned long)sbrk(0);
304
305         f = fopen("/compat/linux/proc/self/maps", "r");
306         if (f) {
307             mmap_lock();
308
309             do {
310                 unsigned long startaddr, endaddr;
311                 int n;
312
313                 n = fscanf (f, "%lx-%lx %*[^\n]\n", &startaddr, &endaddr);
314
315                 if (n == 2 && h2g_valid(startaddr)) {
316                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
317
318                     if (h2g_valid(endaddr)) {
319                         endaddr = h2g(endaddr);
320                     } else {
321                         endaddr = ~0ul;
322                     }
323                     page_set_flags(startaddr, endaddr, PAGE_RESERVED);
324                 }
325             } while (!feof(f));
326
327             fclose(f);
328             mmap_unlock();
329         }
330 #endif
331     }
332 #endif
333 }
334
335 static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
336 {
337     PageDesc *pd;
338     void **lp;
339     int i;
340
341 #if defined(CONFIG_USER_ONLY)
342     /* We can't use g_malloc because it may recurse into a locked mutex. */
343 # define ALLOC(P, SIZE)                                 \
344     do {                                                \
345         P = mmap(NULL, SIZE, PROT_READ | PROT_WRITE,    \
346                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);   \
347     } while (0)
348 #else
349 # define ALLOC(P, SIZE) \
350     do { P = g_malloc0(SIZE); } while (0)
351 #endif
352
353     /* Level 1.  Always allocated.  */
354     lp = l1_map + ((index >> V_L1_SHIFT) & (V_L1_SIZE - 1));
355
356     /* Level 2..N-1.  */
357     for (i = V_L1_SHIFT / L2_BITS - 1; i > 0; i--) {
358         void **p = *lp;
359
360         if (p == NULL) {
361             if (!alloc) {
362                 return NULL;
363             }
364             ALLOC(p, sizeof(void *) * L2_SIZE);
365             *lp = p;
366         }
367
368         lp = p + ((index >> (i * L2_BITS)) & (L2_SIZE - 1));
369     }
370
371     pd = *lp;
372     if (pd == NULL) {
373         if (!alloc) {
374             return NULL;
375         }
376         ALLOC(pd, sizeof(PageDesc) * L2_SIZE);
377         *lp = pd;
378     }
379
380 #undef ALLOC
381
382     return pd + (index & (L2_SIZE - 1));
383 }
384
385 static inline PageDesc *page_find(tb_page_addr_t index)
386 {
387     return page_find_alloc(index, 0);
388 }
389
390 #if !defined(CONFIG_USER_ONLY)
391
392 static void phys_map_node_reserve(unsigned nodes)
393 {
394     if (phys_map_nodes_nb + nodes > phys_map_nodes_nb_alloc) {
395         typedef PhysPageEntry Node[L2_SIZE];
396         phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc * 2, 16);
397         phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc,
398                                       phys_map_nodes_nb + nodes);
399         phys_map_nodes = g_renew(Node, phys_map_nodes,
400                                  phys_map_nodes_nb_alloc);
401     }
402 }
403
404 static uint16_t phys_map_node_alloc(void)
405 {
406     unsigned i;
407     uint16_t ret;
408
409     ret = phys_map_nodes_nb++;
410     assert(ret != PHYS_MAP_NODE_NIL);
411     assert(ret != phys_map_nodes_nb_alloc);
412     for (i = 0; i < L2_SIZE; ++i) {
413         phys_map_nodes[ret][i].is_leaf = 0;
414         phys_map_nodes[ret][i].ptr = PHYS_MAP_NODE_NIL;
415     }
416     return ret;
417 }
418
419 static void phys_map_nodes_reset(void)
420 {
421     phys_map_nodes_nb = 0;
422 }
423
424
425 static void phys_page_set_level(PhysPageEntry *lp, target_phys_addr_t *index,
426                                 target_phys_addr_t *nb, uint16_t leaf,
427                                 int level)
428 {
429     PhysPageEntry *p;
430     int i;
431     target_phys_addr_t step = (target_phys_addr_t)1 << (level * L2_BITS);
432
433     if (!lp->is_leaf && lp->ptr == PHYS_MAP_NODE_NIL) {
434         lp->ptr = phys_map_node_alloc();
435         p = phys_map_nodes[lp->ptr];
436         if (level == 0) {
437             for (i = 0; i < L2_SIZE; i++) {
438                 p[i].is_leaf = 1;
439                 p[i].ptr = phys_section_unassigned;
440             }
441         }
442     } else {
443         p = phys_map_nodes[lp->ptr];
444     }
445     lp = &p[(*index >> (level * L2_BITS)) & (L2_SIZE - 1)];
446
447     while (*nb && lp < &p[L2_SIZE]) {
448         if ((*index & (step - 1)) == 0 && *nb >= step) {
449             lp->is_leaf = true;
450             lp->ptr = leaf;
451             *index += step;
452             *nb -= step;
453         } else {
454             phys_page_set_level(lp, index, nb, leaf, level - 1);
455         }
456         ++lp;
457     }
458 }
459
460 static void phys_page_set(target_phys_addr_t index, target_phys_addr_t nb,
461                           uint16_t leaf)
462 {
463     /* Wildly overreserve - it doesn't matter much. */
464     phys_map_node_reserve(3 * P_L2_LEVELS);
465
466     phys_page_set_level(&phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
467 }
468
469 MemoryRegionSection *phys_page_find(target_phys_addr_t index)
470 {
471     PhysPageEntry lp = phys_map;
472     PhysPageEntry *p;
473     int i;
474     uint16_t s_index = phys_section_unassigned;
475
476     for (i = P_L2_LEVELS - 1; i >= 0 && !lp.is_leaf; i--) {
477         if (lp.ptr == PHYS_MAP_NODE_NIL) {
478             goto not_found;
479         }
480         p = phys_map_nodes[lp.ptr];
481         lp = p[(index >> (i * L2_BITS)) & (L2_SIZE - 1)];
482     }
483
484     s_index = lp.ptr;
485 not_found:
486     return &phys_sections[s_index];
487 }
488
489 bool memory_region_is_unassigned(MemoryRegion *mr)
490 {
491     return mr != &io_mem_ram && mr != &io_mem_rom
492         && mr != &io_mem_notdirty && !mr->rom_device
493         && mr != &io_mem_watch;
494 }
495
496 #define mmap_lock() do { } while(0)
497 #define mmap_unlock() do { } while(0)
498 #endif
499
500 #define DEFAULT_CODE_GEN_BUFFER_SIZE (32 * 1024 * 1024)
501
502 #if defined(CONFIG_USER_ONLY)
503 /* Currently it is not recommended to allocate big chunks of data in
504    user mode. It will change when a dedicated libc will be used */
505 #define USE_STATIC_CODE_GEN_BUFFER
506 #endif
507
508 #ifdef USE_STATIC_CODE_GEN_BUFFER
509 static uint8_t static_code_gen_buffer[DEFAULT_CODE_GEN_BUFFER_SIZE]
510                __attribute__((aligned (CODE_GEN_ALIGN)));
511 #endif
512
513 static void code_gen_alloc(unsigned long tb_size)
514 {
515 #ifdef USE_STATIC_CODE_GEN_BUFFER
516     code_gen_buffer = static_code_gen_buffer;
517     code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
518     map_exec(code_gen_buffer, code_gen_buffer_size);
519 #else
520     code_gen_buffer_size = tb_size;
521     if (code_gen_buffer_size == 0) {
522 #if defined(CONFIG_USER_ONLY)
523         code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
524 #else
525         /* XXX: needs adjustments */
526         code_gen_buffer_size = (unsigned long)(ram_size / 4);
527 #endif
528     }
529     if (code_gen_buffer_size < MIN_CODE_GEN_BUFFER_SIZE)
530         code_gen_buffer_size = MIN_CODE_GEN_BUFFER_SIZE;
531     /* The code gen buffer location may have constraints depending on
532        the host cpu and OS */
533 #if defined(__linux__) 
534     {
535         int flags;
536         void *start = NULL;
537
538         flags = MAP_PRIVATE | MAP_ANONYMOUS;
539 #if defined(__x86_64__)
540         flags |= MAP_32BIT;
541         /* Cannot map more than that */
542         if (code_gen_buffer_size > (800 * 1024 * 1024))
543             code_gen_buffer_size = (800 * 1024 * 1024);
544 #elif defined(__sparc__) && HOST_LONG_BITS == 64
545         // Map the buffer below 2G, so we can use direct calls and branches
546         start = (void *) 0x40000000UL;
547         if (code_gen_buffer_size > (512 * 1024 * 1024))
548             code_gen_buffer_size = (512 * 1024 * 1024);
549 #elif defined(__arm__)
550         /* Keep the buffer no bigger than 16MB to branch between blocks */
551         if (code_gen_buffer_size > 16 * 1024 * 1024)
552             code_gen_buffer_size = 16 * 1024 * 1024;
553 #elif defined(__s390x__)
554         /* Map the buffer so that we can use direct calls and branches.  */
555         /* We have a +- 4GB range on the branches; leave some slop.  */
556         if (code_gen_buffer_size > (3ul * 1024 * 1024 * 1024)) {
557             code_gen_buffer_size = 3ul * 1024 * 1024 * 1024;
558         }
559         start = (void *)0x90000000UL;
560 #endif
561         code_gen_buffer = mmap(start, code_gen_buffer_size,
562                                PROT_WRITE | PROT_READ | PROT_EXEC,
563                                flags, -1, 0);
564         if (code_gen_buffer == MAP_FAILED) {
565             fprintf(stderr, "Could not allocate dynamic translator buffer\n");
566             exit(1);
567         }
568     }
569 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
570     || defined(__DragonFly__) || defined(__OpenBSD__) \
571     || defined(__NetBSD__)
572     {
573         int flags;
574         void *addr = NULL;
575         flags = MAP_PRIVATE | MAP_ANONYMOUS;
576 #if defined(__x86_64__)
577         /* FreeBSD doesn't have MAP_32BIT, use MAP_FIXED and assume
578          * 0x40000000 is free */
579         flags |= MAP_FIXED;
580         addr = (void *)0x40000000;
581         /* Cannot map more than that */
582         if (code_gen_buffer_size > (800 * 1024 * 1024))
583             code_gen_buffer_size = (800 * 1024 * 1024);
584 #elif defined(__sparc__) && HOST_LONG_BITS == 64
585         // Map the buffer below 2G, so we can use direct calls and branches
586         addr = (void *) 0x40000000UL;
587         if (code_gen_buffer_size > (512 * 1024 * 1024)) {
588             code_gen_buffer_size = (512 * 1024 * 1024);
589         }
590 #endif
591         code_gen_buffer = mmap(addr, code_gen_buffer_size,
592                                PROT_WRITE | PROT_READ | PROT_EXEC, 
593                                flags, -1, 0);
594         if (code_gen_buffer == MAP_FAILED) {
595             fprintf(stderr, "Could not allocate dynamic translator buffer\n");
596             exit(1);
597         }
598     }
599 #else
600     code_gen_buffer = g_malloc(code_gen_buffer_size);
601     map_exec(code_gen_buffer, code_gen_buffer_size);
602 #endif
603 #endif /* !USE_STATIC_CODE_GEN_BUFFER */
604     map_exec(code_gen_prologue, sizeof(code_gen_prologue));
605     code_gen_buffer_max_size = code_gen_buffer_size -
606         (TCG_MAX_OP_SIZE * OPC_BUF_SIZE);
607     code_gen_max_blocks = code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE;
608     tbs = g_malloc(code_gen_max_blocks * sizeof(TranslationBlock));
609 }
610
611 /* Must be called before using the QEMU cpus. 'tb_size' is the size
612    (in bytes) allocated to the translation buffer. Zero means default
613    size. */
614 void tcg_exec_init(unsigned long tb_size)
615 {
616     cpu_gen_init();
617     code_gen_alloc(tb_size);
618     code_gen_ptr = code_gen_buffer;
619     tcg_register_jit(code_gen_buffer, code_gen_buffer_size);
620     page_init();
621 #if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE)
622     /* There's no guest base to take into account, so go ahead and
623        initialize the prologue now.  */
624     tcg_prologue_init(&tcg_ctx);
625 #endif
626 }
627
628 bool tcg_enabled(void)
629 {
630     return code_gen_buffer != NULL;
631 }
632
633 void cpu_exec_init_all(void)
634 {
635 #if !defined(CONFIG_USER_ONLY)
636     memory_map_init();
637     io_mem_init();
638 #endif
639 }
640
641 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
642
643 static int cpu_common_post_load(void *opaque, int version_id)
644 {
645     CPUArchState *env = opaque;
646
647     /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
648        version_id is increased. */
649     env->interrupt_request &= ~0x01;
650     tlb_flush(env, 1);
651
652     return 0;
653 }
654
655 static const VMStateDescription vmstate_cpu_common = {
656     .name = "cpu_common",
657     .version_id = 1,
658     .minimum_version_id = 1,
659     .minimum_version_id_old = 1,
660     .post_load = cpu_common_post_load,
661     .fields      = (VMStateField []) {
662         VMSTATE_UINT32(halted, CPUArchState),
663         VMSTATE_UINT32(interrupt_request, CPUArchState),
664         VMSTATE_END_OF_LIST()
665     }
666 };
667 #endif
668
669 CPUArchState *qemu_get_cpu(int cpu)
670 {
671     CPUArchState *env = first_cpu;
672
673     while (env) {
674         if (env->cpu_index == cpu)
675             break;
676         env = env->next_cpu;
677     }
678
679     return env;
680 }
681
682 void cpu_exec_init(CPUArchState *env)
683 {
684     CPUArchState **penv;
685     int cpu_index;
686
687 #if defined(CONFIG_USER_ONLY)
688     cpu_list_lock();
689 #endif
690     env->next_cpu = NULL;
691     penv = &first_cpu;
692     cpu_index = 0;
693     while (*penv != NULL) {
694         penv = &(*penv)->next_cpu;
695         cpu_index++;
696     }
697     env->cpu_index = cpu_index;
698     env->numa_node = 0;
699     QTAILQ_INIT(&env->breakpoints);
700     QTAILQ_INIT(&env->watchpoints);
701 #ifndef CONFIG_USER_ONLY
702     env->thread_id = qemu_get_thread_id();
703 #endif
704     *penv = env;
705 #if defined(CONFIG_USER_ONLY)
706     cpu_list_unlock();
707 #endif
708 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
709     vmstate_register(NULL, cpu_index, &vmstate_cpu_common, env);
710     register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
711                     cpu_save, cpu_load, env);
712 #endif
713 }
714
715 /* Allocate a new translation block. Flush the translation buffer if
716    too many translation blocks or too much generated code. */
717 static TranslationBlock *tb_alloc(target_ulong pc)
718 {
719     TranslationBlock *tb;
720
721     if (nb_tbs >= code_gen_max_blocks ||
722         (code_gen_ptr - code_gen_buffer) >= code_gen_buffer_max_size)
723         return NULL;
724     tb = &tbs[nb_tbs++];
725     tb->pc = pc;
726     tb->cflags = 0;
727     return tb;
728 }
729
730 void tb_free(TranslationBlock *tb)
731 {
732     /* In practice this is mostly used for single use temporary TB
733        Ignore the hard cases and just back up if this TB happens to
734        be the last one generated.  */
735     if (nb_tbs > 0 && tb == &tbs[nb_tbs - 1]) {
736         code_gen_ptr = tb->tc_ptr;
737         nb_tbs--;
738     }
739 }
740
741 static inline void invalidate_page_bitmap(PageDesc *p)
742 {
743     if (p->code_bitmap) {
744         g_free(p->code_bitmap);
745         p->code_bitmap = NULL;
746     }
747     p->code_write_count = 0;
748 }
749
750 /* Set to NULL all the 'first_tb' fields in all PageDescs. */
751
752 static void page_flush_tb_1 (int level, void **lp)
753 {
754     int i;
755
756     if (*lp == NULL) {
757         return;
758     }
759     if (level == 0) {
760         PageDesc *pd = *lp;
761         for (i = 0; i < L2_SIZE; ++i) {
762             pd[i].first_tb = NULL;
763             invalidate_page_bitmap(pd + i);
764         }
765     } else {
766         void **pp = *lp;
767         for (i = 0; i < L2_SIZE; ++i) {
768             page_flush_tb_1 (level - 1, pp + i);
769         }
770     }
771 }
772
773 static void page_flush_tb(void)
774 {
775     int i;
776     for (i = 0; i < V_L1_SIZE; i++) {
777         page_flush_tb_1(V_L1_SHIFT / L2_BITS - 1, l1_map + i);
778     }
779 }
780
781 /* flush all the translation blocks */
782 /* XXX: tb_flush is currently not thread safe */
783 void tb_flush(CPUArchState *env1)
784 {
785     CPUArchState *env;
786 #if defined(DEBUG_FLUSH)
787     printf("qemu: flush code_size=%ld nb_tbs=%d avg_tb_size=%ld\n",
788            (unsigned long)(code_gen_ptr - code_gen_buffer),
789            nb_tbs, nb_tbs > 0 ?
790            ((unsigned long)(code_gen_ptr - code_gen_buffer)) / nb_tbs : 0);
791 #endif
792     if ((unsigned long)(code_gen_ptr - code_gen_buffer) > code_gen_buffer_size)
793         cpu_abort(env1, "Internal error: code buffer overflow\n");
794
795     nb_tbs = 0;
796
797     for(env = first_cpu; env != NULL; env = env->next_cpu) {
798         memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *));
799     }
800
801     memset (tb_phys_hash, 0, CODE_GEN_PHYS_HASH_SIZE * sizeof (void *));
802     page_flush_tb();
803
804     code_gen_ptr = code_gen_buffer;
805     /* XXX: flush processor icache at this point if cache flush is
806        expensive */
807     tb_flush_count++;
808 }
809
810 #ifdef DEBUG_TB_CHECK
811
812 static void tb_invalidate_check(target_ulong address)
813 {
814     TranslationBlock *tb;
815     int i;
816     address &= TARGET_PAGE_MASK;
817     for(i = 0;i < CODE_GEN_PHYS_HASH_SIZE; i++) {
818         for(tb = tb_phys_hash[i]; tb != NULL; tb = tb->phys_hash_next) {
819             if (!(address + TARGET_PAGE_SIZE <= tb->pc ||
820                   address >= tb->pc + tb->size)) {
821                 printf("ERROR invalidate: address=" TARGET_FMT_lx
822                        " PC=%08lx size=%04x\n",
823                        address, (long)tb->pc, tb->size);
824             }
825         }
826     }
827 }
828
829 /* verify that all the pages have correct rights for code */
830 static void tb_page_check(void)
831 {
832     TranslationBlock *tb;
833     int i, flags1, flags2;
834
835     for(i = 0;i < CODE_GEN_PHYS_HASH_SIZE; i++) {
836         for(tb = tb_phys_hash[i]; tb != NULL; tb = tb->phys_hash_next) {
837             flags1 = page_get_flags(tb->pc);
838             flags2 = page_get_flags(tb->pc + tb->size - 1);
839             if ((flags1 & PAGE_WRITE) || (flags2 & PAGE_WRITE)) {
840                 printf("ERROR page flags: PC=%08lx size=%04x f1=%x f2=%x\n",
841                        (long)tb->pc, tb->size, flags1, flags2);
842             }
843         }
844     }
845 }
846
847 #endif
848
849 /* invalidate one TB */
850 static inline void tb_remove(TranslationBlock **ptb, TranslationBlock *tb,
851                              int next_offset)
852 {
853     TranslationBlock *tb1;
854     for(;;) {
855         tb1 = *ptb;
856         if (tb1 == tb) {
857             *ptb = *(TranslationBlock **)((char *)tb1 + next_offset);
858             break;
859         }
860         ptb = (TranslationBlock **)((char *)tb1 + next_offset);
861     }
862 }
863
864 static inline void tb_page_remove(TranslationBlock **ptb, TranslationBlock *tb)
865 {
866     TranslationBlock *tb1;
867     unsigned int n1;
868
869     for(;;) {
870         tb1 = *ptb;
871         n1 = (uintptr_t)tb1 & 3;
872         tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
873         if (tb1 == tb) {
874             *ptb = tb1->page_next[n1];
875             break;
876         }
877         ptb = &tb1->page_next[n1];
878     }
879 }
880
881 static inline void tb_jmp_remove(TranslationBlock *tb, int n)
882 {
883     TranslationBlock *tb1, **ptb;
884     unsigned int n1;
885
886     ptb = &tb->jmp_next[n];
887     tb1 = *ptb;
888     if (tb1) {
889         /* find tb(n) in circular list */
890         for(;;) {
891             tb1 = *ptb;
892             n1 = (uintptr_t)tb1 & 3;
893             tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
894             if (n1 == n && tb1 == tb)
895                 break;
896             if (n1 == 2) {
897                 ptb = &tb1->jmp_first;
898             } else {
899                 ptb = &tb1->jmp_next[n1];
900             }
901         }
902         /* now we can suppress tb(n) from the list */
903         *ptb = tb->jmp_next[n];
904
905         tb->jmp_next[n] = NULL;
906     }
907 }
908
909 /* reset the jump entry 'n' of a TB so that it is not chained to
910    another TB */
911 static inline void tb_reset_jump(TranslationBlock *tb, int n)
912 {
913     tb_set_jmp_target(tb, n, (uintptr_t)(tb->tc_ptr + tb->tb_next_offset[n]));
914 }
915
916 void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr)
917 {
918     CPUArchState *env;
919     PageDesc *p;
920     unsigned int h, n1;
921     tb_page_addr_t phys_pc;
922     TranslationBlock *tb1, *tb2;
923
924     /* remove the TB from the hash list */
925     phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
926     h = tb_phys_hash_func(phys_pc);
927     tb_remove(&tb_phys_hash[h], tb,
928               offsetof(TranslationBlock, phys_hash_next));
929
930     /* remove the TB from the page list */
931     if (tb->page_addr[0] != page_addr) {
932         p = page_find(tb->page_addr[0] >> TARGET_PAGE_BITS);
933         tb_page_remove(&p->first_tb, tb);
934         invalidate_page_bitmap(p);
935     }
936     if (tb->page_addr[1] != -1 && tb->page_addr[1] != page_addr) {
937         p = page_find(tb->page_addr[1] >> TARGET_PAGE_BITS);
938         tb_page_remove(&p->first_tb, tb);
939         invalidate_page_bitmap(p);
940     }
941
942     tb_invalidated_flag = 1;
943
944     /* remove the TB from the hash list */
945     h = tb_jmp_cache_hash_func(tb->pc);
946     for(env = first_cpu; env != NULL; env = env->next_cpu) {
947         if (env->tb_jmp_cache[h] == tb)
948             env->tb_jmp_cache[h] = NULL;
949     }
950
951     /* suppress this TB from the two jump lists */
952     tb_jmp_remove(tb, 0);
953     tb_jmp_remove(tb, 1);
954
955     /* suppress any remaining jumps to this TB */
956     tb1 = tb->jmp_first;
957     for(;;) {
958         n1 = (uintptr_t)tb1 & 3;
959         if (n1 == 2)
960             break;
961         tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
962         tb2 = tb1->jmp_next[n1];
963         tb_reset_jump(tb1, n1);
964         tb1->jmp_next[n1] = NULL;
965         tb1 = tb2;
966     }
967     tb->jmp_first = (TranslationBlock *)((uintptr_t)tb | 2); /* fail safe */
968
969     tb_phys_invalidate_count++;
970 }
971
972 static inline void set_bits(uint8_t *tab, int start, int len)
973 {
974     int end, mask, end1;
975
976     end = start + len;
977     tab += start >> 3;
978     mask = 0xff << (start & 7);
979     if ((start & ~7) == (end & ~7)) {
980         if (start < end) {
981             mask &= ~(0xff << (end & 7));
982             *tab |= mask;
983         }
984     } else {
985         *tab++ |= mask;
986         start = (start + 8) & ~7;
987         end1 = end & ~7;
988         while (start < end1) {
989             *tab++ = 0xff;
990             start += 8;
991         }
992         if (start < end) {
993             mask = ~(0xff << (end & 7));
994             *tab |= mask;
995         }
996     }
997 }
998
999 static void build_page_bitmap(PageDesc *p)
1000 {
1001     int n, tb_start, tb_end;
1002     TranslationBlock *tb;
1003
1004     p->code_bitmap = g_malloc0(TARGET_PAGE_SIZE / 8);
1005
1006     tb = p->first_tb;
1007     while (tb != NULL) {
1008         n = (uintptr_t)tb & 3;
1009         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1010         /* NOTE: this is subtle as a TB may span two physical pages */
1011         if (n == 0) {
1012             /* NOTE: tb_end may be after the end of the page, but
1013                it is not a problem */
1014             tb_start = tb->pc & ~TARGET_PAGE_MASK;
1015             tb_end = tb_start + tb->size;
1016             if (tb_end > TARGET_PAGE_SIZE)
1017                 tb_end = TARGET_PAGE_SIZE;
1018         } else {
1019             tb_start = 0;
1020             tb_end = ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);
1021         }
1022         set_bits(p->code_bitmap, tb_start, tb_end - tb_start);
1023         tb = tb->page_next[n];
1024     }
1025 }
1026
1027 TranslationBlock *tb_gen_code(CPUArchState *env,
1028                               target_ulong pc, target_ulong cs_base,
1029                               int flags, int cflags)
1030 {
1031     TranslationBlock *tb;
1032     uint8_t *tc_ptr;
1033     tb_page_addr_t phys_pc, phys_page2;
1034     target_ulong virt_page2;
1035     int code_gen_size;
1036
1037     phys_pc = get_page_addr_code(env, pc);
1038     tb = tb_alloc(pc);
1039     if (!tb) {
1040         /* flush must be done */
1041         tb_flush(env);
1042         /* cannot fail at this point */
1043         tb = tb_alloc(pc);
1044         /* Don't forget to invalidate previous TB info.  */
1045         tb_invalidated_flag = 1;
1046     }
1047     tc_ptr = code_gen_ptr;
1048     tb->tc_ptr = tc_ptr;
1049     tb->cs_base = cs_base;
1050     tb->flags = flags;
1051     tb->cflags = cflags;
1052     cpu_gen_code(env, tb, &code_gen_size);
1053     code_gen_ptr = (void *)(((uintptr_t)code_gen_ptr + code_gen_size +
1054                              CODE_GEN_ALIGN - 1) & ~(CODE_GEN_ALIGN - 1));
1055
1056     /* check next page if needed */
1057     virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;
1058     phys_page2 = -1;
1059     if ((pc & TARGET_PAGE_MASK) != virt_page2) {
1060         phys_page2 = get_page_addr_code(env, virt_page2);
1061     }
1062     tb_link_page(tb, phys_pc, phys_page2);
1063     return tb;
1064 }
1065
1066 /*
1067  * Invalidate all TBs which intersect with the target physical address range
1068  * [start;end[. NOTE: start and end may refer to *different* physical pages.
1069  * 'is_cpu_write_access' should be true if called from a real cpu write
1070  * access: the virtual CPU will exit the current TB if code is modified inside
1071  * this TB.
1072  */
1073 void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end,
1074                               int is_cpu_write_access)
1075 {
1076     while (start < end) {
1077         tb_invalidate_phys_page_range(start, end, is_cpu_write_access);
1078         start &= TARGET_PAGE_MASK;
1079         start += TARGET_PAGE_SIZE;
1080     }
1081 }
1082
1083 /*
1084  * Invalidate all TBs which intersect with the target physical address range
1085  * [start;end[. NOTE: start and end must refer to the *same* physical page.
1086  * 'is_cpu_write_access' should be true if called from a real cpu write
1087  * access: the virtual CPU will exit the current TB if code is modified inside
1088  * this TB.
1089  */
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         + memory_region_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             (pc & ~TARGET_PAGE_MASK));
1487 }
1488 #endif
1489 #endif /* TARGET_HAS_ICE */
1490
1491 #if defined(CONFIG_USER_ONLY)
1492 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
1493
1494 {
1495 }
1496
1497 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
1498                           int flags, CPUWatchpoint **watchpoint)
1499 {
1500     return -ENOSYS;
1501 }
1502 #else
1503 /* Add a watchpoint.  */
1504 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
1505                           int flags, CPUWatchpoint **watchpoint)
1506 {
1507     target_ulong len_mask = ~(len - 1);
1508     CPUWatchpoint *wp;
1509
1510     /* sanity checks: allow power-of-2 lengths, deny unaligned watchpoints */
1511     if ((len & (len - 1)) || (addr & ~len_mask) ||
1512             len == 0 || len > TARGET_PAGE_SIZE) {
1513         fprintf(stderr, "qemu: tried to set invalid watchpoint at "
1514                 TARGET_FMT_lx ", len=" TARGET_FMT_lu "\n", addr, len);
1515         return -EINVAL;
1516     }
1517     wp = g_malloc(sizeof(*wp));
1518
1519     wp->vaddr = addr;
1520     wp->len_mask = len_mask;
1521     wp->flags = flags;
1522
1523     /* keep all GDB-injected watchpoints in front */
1524     if (flags & BP_GDB)
1525         QTAILQ_INSERT_HEAD(&env->watchpoints, wp, entry);
1526     else
1527         QTAILQ_INSERT_TAIL(&env->watchpoints, wp, entry);
1528
1529     tlb_flush_page(env, addr);
1530
1531     if (watchpoint)
1532         *watchpoint = wp;
1533     return 0;
1534 }
1535
1536 /* Remove a specific watchpoint.  */
1537 int cpu_watchpoint_remove(CPUArchState *env, target_ulong addr, target_ulong len,
1538                           int flags)
1539 {
1540     target_ulong len_mask = ~(len - 1);
1541     CPUWatchpoint *wp;
1542
1543     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1544         if (addr == wp->vaddr && len_mask == wp->len_mask
1545                 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
1546             cpu_watchpoint_remove_by_ref(env, wp);
1547             return 0;
1548         }
1549     }
1550     return -ENOENT;
1551 }
1552
1553 /* Remove a specific watchpoint by reference.  */
1554 void cpu_watchpoint_remove_by_ref(CPUArchState *env, CPUWatchpoint *watchpoint)
1555 {
1556     QTAILQ_REMOVE(&env->watchpoints, watchpoint, entry);
1557
1558     tlb_flush_page(env, watchpoint->vaddr);
1559
1560     g_free(watchpoint);
1561 }
1562
1563 /* Remove all matching watchpoints.  */
1564 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
1565 {
1566     CPUWatchpoint *wp, *next;
1567
1568     QTAILQ_FOREACH_SAFE(wp, &env->watchpoints, entry, next) {
1569         if (wp->flags & mask)
1570             cpu_watchpoint_remove_by_ref(env, wp);
1571     }
1572 }
1573 #endif
1574
1575 /* Add a breakpoint.  */
1576 int cpu_breakpoint_insert(CPUArchState *env, target_ulong pc, int flags,
1577                           CPUBreakpoint **breakpoint)
1578 {
1579 #if defined(TARGET_HAS_ICE)
1580     CPUBreakpoint *bp;
1581
1582     bp = g_malloc(sizeof(*bp));
1583
1584     bp->pc = pc;
1585     bp->flags = flags;
1586
1587     /* keep all GDB-injected breakpoints in front */
1588     if (flags & BP_GDB)
1589         QTAILQ_INSERT_HEAD(&env->breakpoints, bp, entry);
1590     else
1591         QTAILQ_INSERT_TAIL(&env->breakpoints, bp, entry);
1592
1593     breakpoint_invalidate(env, pc);
1594
1595     if (breakpoint)
1596         *breakpoint = bp;
1597     return 0;
1598 #else
1599     return -ENOSYS;
1600 #endif
1601 }
1602
1603 /* Remove a specific breakpoint.  */
1604 int cpu_breakpoint_remove(CPUArchState *env, target_ulong pc, int flags)
1605 {
1606 #if defined(TARGET_HAS_ICE)
1607     CPUBreakpoint *bp;
1608
1609     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
1610         if (bp->pc == pc && bp->flags == flags) {
1611             cpu_breakpoint_remove_by_ref(env, bp);
1612             return 0;
1613         }
1614     }
1615     return -ENOENT;
1616 #else
1617     return -ENOSYS;
1618 #endif
1619 }
1620
1621 /* Remove a specific breakpoint by reference.  */
1622 void cpu_breakpoint_remove_by_ref(CPUArchState *env, CPUBreakpoint *breakpoint)
1623 {
1624 #if defined(TARGET_HAS_ICE)
1625     QTAILQ_REMOVE(&env->breakpoints, breakpoint, entry);
1626
1627     breakpoint_invalidate(env, breakpoint->pc);
1628
1629     g_free(breakpoint);
1630 #endif
1631 }
1632
1633 /* Remove all matching breakpoints. */
1634 void cpu_breakpoint_remove_all(CPUArchState *env, int mask)
1635 {
1636 #if defined(TARGET_HAS_ICE)
1637     CPUBreakpoint *bp, *next;
1638
1639     QTAILQ_FOREACH_SAFE(bp, &env->breakpoints, entry, next) {
1640         if (bp->flags & mask)
1641             cpu_breakpoint_remove_by_ref(env, bp);
1642     }
1643 #endif
1644 }
1645
1646 /* enable or disable single step mode. EXCP_DEBUG is returned by the
1647    CPU loop after each instruction */
1648 void cpu_single_step(CPUArchState *env, int enabled)
1649 {
1650 #if defined(TARGET_HAS_ICE)
1651     if (env->singlestep_enabled != enabled) {
1652         env->singlestep_enabled = enabled;
1653         if (kvm_enabled())
1654             kvm_update_guest_debug(env, 0);
1655         else {
1656             /* must flush all the translated code to avoid inconsistencies */
1657             /* XXX: only flush what is necessary */
1658             tb_flush(env);
1659         }
1660     }
1661 #endif
1662 }
1663
1664 static void cpu_unlink_tb(CPUArchState *env)
1665 {
1666     /* FIXME: TB unchaining isn't SMP safe.  For now just ignore the
1667        problem and hope the cpu will stop of its own accord.  For userspace
1668        emulation this often isn't actually as bad as it sounds.  Often
1669        signals are used primarily to interrupt blocking syscalls.  */
1670     TranslationBlock *tb;
1671     static spinlock_t interrupt_lock = SPIN_LOCK_UNLOCKED;
1672
1673     spin_lock(&interrupt_lock);
1674     tb = env->current_tb;
1675     /* if the cpu is currently executing code, we must unlink it and
1676        all the potentially executing TB */
1677     if (tb) {
1678         env->current_tb = NULL;
1679         tb_reset_jump_recursive(tb);
1680     }
1681     spin_unlock(&interrupt_lock);
1682 }
1683
1684 #ifndef CONFIG_USER_ONLY
1685 /* mask must never be zero, except for A20 change call */
1686 static void tcg_handle_interrupt(CPUArchState *env, int mask)
1687 {
1688     int old_mask;
1689
1690     old_mask = env->interrupt_request;
1691     env->interrupt_request |= mask;
1692
1693     /*
1694      * If called from iothread context, wake the target cpu in
1695      * case its halted.
1696      */
1697     if (!qemu_cpu_is_self(env)) {
1698         qemu_cpu_kick(env);
1699         return;
1700     }
1701
1702     if (use_icount) {
1703         env->icount_decr.u16.high = 0xffff;
1704         if (!can_do_io(env)
1705             && (mask & ~old_mask) != 0) {
1706             cpu_abort(env, "Raised interrupt while not in I/O function");
1707         }
1708     } else {
1709         cpu_unlink_tb(env);
1710     }
1711 }
1712
1713 CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
1714
1715 #else /* CONFIG_USER_ONLY */
1716
1717 void cpu_interrupt(CPUArchState *env, int mask)
1718 {
1719     env->interrupt_request |= mask;
1720     cpu_unlink_tb(env);
1721 }
1722 #endif /* CONFIG_USER_ONLY */
1723
1724 void cpu_reset_interrupt(CPUArchState *env, int mask)
1725 {
1726     env->interrupt_request &= ~mask;
1727 }
1728
1729 void cpu_exit(CPUArchState *env)
1730 {
1731     env->exit_request = 1;
1732     cpu_unlink_tb(env);
1733 }
1734
1735 void cpu_abort(CPUArchState *env, const char *fmt, ...)
1736 {
1737     va_list ap;
1738     va_list ap2;
1739
1740     va_start(ap, fmt);
1741     va_copy(ap2, ap);
1742     fprintf(stderr, "qemu: fatal: ");
1743     vfprintf(stderr, fmt, ap);
1744     fprintf(stderr, "\n");
1745 #ifdef TARGET_I386
1746     cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU | X86_DUMP_CCOP);
1747 #else
1748     cpu_dump_state(env, stderr, fprintf, 0);
1749 #endif
1750     if (qemu_log_enabled()) {
1751         qemu_log("qemu: fatal: ");
1752         qemu_log_vprintf(fmt, ap2);
1753         qemu_log("\n");
1754 #ifdef TARGET_I386
1755         log_cpu_state(env, X86_DUMP_FPU | X86_DUMP_CCOP);
1756 #else
1757         log_cpu_state(env, 0);
1758 #endif
1759         qemu_log_flush();
1760         qemu_log_close();
1761     }
1762     va_end(ap2);
1763     va_end(ap);
1764 #if defined(CONFIG_USER_ONLY)
1765     {
1766         struct sigaction act;
1767         sigfillset(&act.sa_mask);
1768         act.sa_handler = SIG_DFL;
1769         sigaction(SIGABRT, &act, NULL);
1770     }
1771 #endif
1772     abort();
1773 }
1774
1775 CPUArchState *cpu_copy(CPUArchState *env)
1776 {
1777     CPUArchState *new_env = cpu_init(env->cpu_model_str);
1778     CPUArchState *next_cpu = new_env->next_cpu;
1779     int cpu_index = new_env->cpu_index;
1780 #if defined(TARGET_HAS_ICE)
1781     CPUBreakpoint *bp;
1782     CPUWatchpoint *wp;
1783 #endif
1784
1785     memcpy(new_env, env, sizeof(CPUArchState));
1786
1787     /* Preserve chaining and index. */
1788     new_env->next_cpu = next_cpu;
1789     new_env->cpu_index = cpu_index;
1790
1791     /* Clone all break/watchpoints.
1792        Note: Once we support ptrace with hw-debug register access, make sure
1793        BP_CPU break/watchpoints are handled correctly on clone. */
1794     QTAILQ_INIT(&env->breakpoints);
1795     QTAILQ_INIT(&env->watchpoints);
1796 #if defined(TARGET_HAS_ICE)
1797     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
1798         cpu_breakpoint_insert(new_env, bp->pc, bp->flags, NULL);
1799     }
1800     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1801         cpu_watchpoint_insert(new_env, wp->vaddr, (~wp->len_mask) + 1,
1802                               wp->flags, NULL);
1803     }
1804 #endif
1805
1806     return new_env;
1807 }
1808
1809 #if !defined(CONFIG_USER_ONLY)
1810 void tb_flush_jmp_cache(CPUArchState *env, target_ulong addr)
1811 {
1812     unsigned int i;
1813
1814     /* Discard jump cache entries for any tb which might potentially
1815        overlap the flushed page.  */
1816     i = tb_jmp_cache_hash_page(addr - TARGET_PAGE_SIZE);
1817     memset (&env->tb_jmp_cache[i], 0, 
1818             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1819
1820     i = tb_jmp_cache_hash_page(addr);
1821     memset (&env->tb_jmp_cache[i], 0, 
1822             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1823 }
1824
1825 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t end,
1826                                       uintptr_t length)
1827 {
1828     uintptr_t start1;
1829
1830     /* we modify the TLB cache so that the dirty bit will be set again
1831        when accessing the range */
1832     start1 = (uintptr_t)qemu_safe_ram_ptr(start);
1833     /* Check that we don't span multiple blocks - this breaks the
1834        address comparisons below.  */
1835     if ((uintptr_t)qemu_safe_ram_ptr(end - 1) - start1
1836             != (end - 1) - start) {
1837         abort();
1838     }
1839     cpu_tlb_reset_dirty_all(start1, length);
1840
1841 }
1842
1843 /* Note: start and end must be within the same ram block.  */
1844 void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
1845                                      int dirty_flags)
1846 {
1847     uintptr_t length;
1848
1849     start &= TARGET_PAGE_MASK;
1850     end = TARGET_PAGE_ALIGN(end);
1851
1852     length = end - start;
1853     if (length == 0)
1854         return;
1855     cpu_physical_memory_mask_dirty_range(start, length, dirty_flags);
1856
1857     if (tcg_enabled()) {
1858         tlb_reset_dirty_range_all(start, end, length);
1859     }
1860 }
1861
1862 int cpu_physical_memory_set_dirty_tracking(int enable)
1863 {
1864     int ret = 0;
1865     in_migration = enable;
1866     return ret;
1867 }
1868
1869 target_phys_addr_t memory_region_section_get_iotlb(CPUArchState *env,
1870                                                    MemoryRegionSection *section,
1871                                                    target_ulong vaddr,
1872                                                    target_phys_addr_t paddr,
1873                                                    int prot,
1874                                                    target_ulong *address)
1875 {
1876     target_phys_addr_t iotlb;
1877     CPUWatchpoint *wp;
1878
1879     if (memory_region_is_ram(section->mr)) {
1880         /* Normal RAM.  */
1881         iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
1882             + memory_region_section_addr(section, paddr);
1883         if (!section->readonly) {
1884             iotlb |= phys_section_notdirty;
1885         } else {
1886             iotlb |= phys_section_rom;
1887         }
1888     } else {
1889         /* IO handlers are currently passed a physical address.
1890            It would be nice to pass an offset from the base address
1891            of that region.  This would avoid having to special case RAM,
1892            and avoid full address decoding in every device.
1893            We can't use the high bits of pd for this because
1894            IO_MEM_ROMD uses these as a ram address.  */
1895         iotlb = section - phys_sections;
1896         iotlb += memory_region_section_addr(section, paddr);
1897     }
1898
1899     /* Make accesses to pages with watchpoints go via the
1900        watchpoint trap routines.  */
1901     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1902         if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) {
1903             /* Avoid trapping reads of pages with a write breakpoint. */
1904             if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
1905                 iotlb = phys_section_watch + paddr;
1906                 *address |= TLB_MMIO;
1907                 break;
1908             }
1909         }
1910     }
1911
1912     return iotlb;
1913 }
1914
1915 #else
1916 /*
1917  * Walks guest process memory "regions" one by one
1918  * and calls callback function 'fn' for each region.
1919  */
1920
1921 struct walk_memory_regions_data
1922 {
1923     walk_memory_regions_fn fn;
1924     void *priv;
1925     uintptr_t start;
1926     int prot;
1927 };
1928
1929 static int walk_memory_regions_end(struct walk_memory_regions_data *data,
1930                                    abi_ulong end, int new_prot)
1931 {
1932     if (data->start != -1ul) {
1933         int rc = data->fn(data->priv, data->start, end, data->prot);
1934         if (rc != 0) {
1935             return rc;
1936         }
1937     }
1938
1939     data->start = (new_prot ? end : -1ul);
1940     data->prot = new_prot;
1941
1942     return 0;
1943 }
1944
1945 static int walk_memory_regions_1(struct walk_memory_regions_data *data,
1946                                  abi_ulong base, int level, void **lp)
1947 {
1948     abi_ulong pa;
1949     int i, rc;
1950
1951     if (*lp == NULL) {
1952         return walk_memory_regions_end(data, base, 0);
1953     }
1954
1955     if (level == 0) {
1956         PageDesc *pd = *lp;
1957         for (i = 0; i < L2_SIZE; ++i) {
1958             int prot = pd[i].flags;
1959
1960             pa = base | (i << TARGET_PAGE_BITS);
1961             if (prot != data->prot) {
1962                 rc = walk_memory_regions_end(data, pa, prot);
1963                 if (rc != 0) {
1964                     return rc;
1965                 }
1966             }
1967         }
1968     } else {
1969         void **pp = *lp;
1970         for (i = 0; i < L2_SIZE; ++i) {
1971             pa = base | ((abi_ulong)i <<
1972                 (TARGET_PAGE_BITS + L2_BITS * level));
1973             rc = walk_memory_regions_1(data, pa, level - 1, pp + i);
1974             if (rc != 0) {
1975                 return rc;
1976             }
1977         }
1978     }
1979
1980     return 0;
1981 }
1982
1983 int walk_memory_regions(void *priv, walk_memory_regions_fn fn)
1984 {
1985     struct walk_memory_regions_data data;
1986     uintptr_t i;
1987
1988     data.fn = fn;
1989     data.priv = priv;
1990     data.start = -1ul;
1991     data.prot = 0;
1992
1993     for (i = 0; i < V_L1_SIZE; i++) {
1994         int rc = walk_memory_regions_1(&data, (abi_ulong)i << V_L1_SHIFT,
1995                                        V_L1_SHIFT / L2_BITS - 1, l1_map + i);
1996         if (rc != 0) {
1997             return rc;
1998         }
1999     }
2000
2001     return walk_memory_regions_end(&data, 0, 0);
2002 }
2003
2004 static int dump_region(void *priv, abi_ulong start,
2005     abi_ulong end, unsigned long prot)
2006 {
2007     FILE *f = (FILE *)priv;
2008
2009     (void) fprintf(f, TARGET_ABI_FMT_lx"-"TARGET_ABI_FMT_lx
2010         " "TARGET_ABI_FMT_lx" %c%c%c\n",
2011         start, end, end - start,
2012         ((prot & PAGE_READ) ? 'r' : '-'),
2013         ((prot & PAGE_WRITE) ? 'w' : '-'),
2014         ((prot & PAGE_EXEC) ? 'x' : '-'));
2015
2016     return (0);
2017 }
2018
2019 /* dump memory mappings */
2020 void page_dump(FILE *f)
2021 {
2022     (void) fprintf(f, "%-8s %-8s %-8s %s\n",
2023             "start", "end", "size", "prot");
2024     walk_memory_regions(f, dump_region);
2025 }
2026
2027 int page_get_flags(target_ulong address)
2028 {
2029     PageDesc *p;
2030
2031     p = page_find(address >> TARGET_PAGE_BITS);
2032     if (!p)
2033         return 0;
2034     return p->flags;
2035 }
2036
2037 /* Modify the flags of a page and invalidate the code if necessary.
2038    The flag PAGE_WRITE_ORG is positioned automatically depending
2039    on PAGE_WRITE.  The mmap_lock should already be held.  */
2040 void page_set_flags(target_ulong start, target_ulong end, int flags)
2041 {
2042     target_ulong addr, len;
2043
2044     /* This function should never be called with addresses outside the
2045        guest address space.  If this assert fires, it probably indicates
2046        a missing call to h2g_valid.  */
2047 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2048     assert(end < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2049 #endif
2050     assert(start < end);
2051
2052     start = start & TARGET_PAGE_MASK;
2053     end = TARGET_PAGE_ALIGN(end);
2054
2055     if (flags & PAGE_WRITE) {
2056         flags |= PAGE_WRITE_ORG;
2057     }
2058
2059     for (addr = start, len = end - start;
2060          len != 0;
2061          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2062         PageDesc *p = page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
2063
2064         /* If the write protection bit is set, then we invalidate
2065            the code inside.  */
2066         if (!(p->flags & PAGE_WRITE) &&
2067             (flags & PAGE_WRITE) &&
2068             p->first_tb) {
2069             tb_invalidate_phys_page(addr, 0, NULL);
2070         }
2071         p->flags = flags;
2072     }
2073 }
2074
2075 int page_check_range(target_ulong start, target_ulong len, int flags)
2076 {
2077     PageDesc *p;
2078     target_ulong end;
2079     target_ulong addr;
2080
2081     /* This function should never be called with addresses outside the
2082        guest address space.  If this assert fires, it probably indicates
2083        a missing call to h2g_valid.  */
2084 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2085     assert(start < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2086 #endif
2087
2088     if (len == 0) {
2089         return 0;
2090     }
2091     if (start + len - 1 < start) {
2092         /* We've wrapped around.  */
2093         return -1;
2094     }
2095
2096     end = TARGET_PAGE_ALIGN(start+len); /* must do before we loose bits in the next step */
2097     start = start & TARGET_PAGE_MASK;
2098
2099     for (addr = start, len = end - start;
2100          len != 0;
2101          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2102         p = page_find(addr >> TARGET_PAGE_BITS);
2103         if( !p )
2104             return -1;
2105         if( !(p->flags & PAGE_VALID) )
2106             return -1;
2107
2108         if ((flags & PAGE_READ) && !(p->flags & PAGE_READ))
2109             return -1;
2110         if (flags & PAGE_WRITE) {
2111             if (!(p->flags & PAGE_WRITE_ORG))
2112                 return -1;
2113             /* unprotect the page if it was put read-only because it
2114                contains translated code */
2115             if (!(p->flags & PAGE_WRITE)) {
2116                 if (!page_unprotect(addr, 0, NULL))
2117                     return -1;
2118             }
2119             return 0;
2120         }
2121     }
2122     return 0;
2123 }
2124
2125 /* called from signal handler: invalidate the code and unprotect the
2126    page. Return TRUE if the fault was successfully handled. */
2127 int page_unprotect(target_ulong address, uintptr_t pc, void *puc)
2128 {
2129     unsigned int prot;
2130     PageDesc *p;
2131     target_ulong host_start, host_end, addr;
2132
2133     /* Technically this isn't safe inside a signal handler.  However we
2134        know this only ever happens in a synchronous SEGV handler, so in
2135        practice it seems to be ok.  */
2136     mmap_lock();
2137
2138     p = page_find(address >> TARGET_PAGE_BITS);
2139     if (!p) {
2140         mmap_unlock();
2141         return 0;
2142     }
2143
2144     /* if the page was really writable, then we change its
2145        protection back to writable */
2146     if ((p->flags & PAGE_WRITE_ORG) && !(p->flags & PAGE_WRITE)) {
2147         host_start = address & qemu_host_page_mask;
2148         host_end = host_start + qemu_host_page_size;
2149
2150         prot = 0;
2151         for (addr = host_start ; addr < host_end ; addr += TARGET_PAGE_SIZE) {
2152             p = page_find(addr >> TARGET_PAGE_BITS);
2153             p->flags |= PAGE_WRITE;
2154             prot |= p->flags;
2155
2156             /* and since the content will be modified, we must invalidate
2157                the corresponding translated code. */
2158             tb_invalidate_phys_page(addr, pc, puc);
2159 #ifdef DEBUG_TB_CHECK
2160             tb_invalidate_check(addr);
2161 #endif
2162         }
2163         mprotect((void *)g2h(host_start), qemu_host_page_size,
2164                  prot & PAGE_BITS);
2165
2166         mmap_unlock();
2167         return 1;
2168     }
2169     mmap_unlock();
2170     return 0;
2171 }
2172 #endif /* defined(CONFIG_USER_ONLY) */
2173
2174 #if !defined(CONFIG_USER_ONLY)
2175
2176 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
2177 typedef struct subpage_t {
2178     MemoryRegion iomem;
2179     target_phys_addr_t base;
2180     uint16_t sub_section[TARGET_PAGE_SIZE];
2181 } subpage_t;
2182
2183 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2184                              uint16_t section);
2185 static subpage_t *subpage_init(target_phys_addr_t base);
2186 static void destroy_page_desc(uint16_t section_index)
2187 {
2188     MemoryRegionSection *section = &phys_sections[section_index];
2189     MemoryRegion *mr = section->mr;
2190
2191     if (mr->subpage) {
2192         subpage_t *subpage = container_of(mr, subpage_t, iomem);
2193         memory_region_destroy(&subpage->iomem);
2194         g_free(subpage);
2195     }
2196 }
2197
2198 static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level)
2199 {
2200     unsigned i;
2201     PhysPageEntry *p;
2202
2203     if (lp->ptr == PHYS_MAP_NODE_NIL) {
2204         return;
2205     }
2206
2207     p = phys_map_nodes[lp->ptr];
2208     for (i = 0; i < L2_SIZE; ++i) {
2209         if (!p[i].is_leaf) {
2210             destroy_l2_mapping(&p[i], level - 1);
2211         } else {
2212             destroy_page_desc(p[i].ptr);
2213         }
2214     }
2215     lp->is_leaf = 0;
2216     lp->ptr = PHYS_MAP_NODE_NIL;
2217 }
2218
2219 static void destroy_all_mappings(void)
2220 {
2221     destroy_l2_mapping(&phys_map, P_L2_LEVELS - 1);
2222     phys_map_nodes_reset();
2223 }
2224
2225 static uint16_t phys_section_add(MemoryRegionSection *section)
2226 {
2227     if (phys_sections_nb == phys_sections_nb_alloc) {
2228         phys_sections_nb_alloc = MAX(phys_sections_nb_alloc * 2, 16);
2229         phys_sections = g_renew(MemoryRegionSection, phys_sections,
2230                                 phys_sections_nb_alloc);
2231     }
2232     phys_sections[phys_sections_nb] = *section;
2233     return phys_sections_nb++;
2234 }
2235
2236 static void phys_sections_clear(void)
2237 {
2238     phys_sections_nb = 0;
2239 }
2240
2241 static void register_subpage(MemoryRegionSection *section)
2242 {
2243     subpage_t *subpage;
2244     target_phys_addr_t base = section->offset_within_address_space
2245         & TARGET_PAGE_MASK;
2246     MemoryRegionSection *existing = phys_page_find(base >> TARGET_PAGE_BITS);
2247     MemoryRegionSection subsection = {
2248         .offset_within_address_space = base,
2249         .size = TARGET_PAGE_SIZE,
2250     };
2251     target_phys_addr_t start, end;
2252
2253     assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
2254
2255     if (!(existing->mr->subpage)) {
2256         subpage = subpage_init(base);
2257         subsection.mr = &subpage->iomem;
2258         phys_page_set(base >> TARGET_PAGE_BITS, 1,
2259                       phys_section_add(&subsection));
2260     } else {
2261         subpage = container_of(existing->mr, subpage_t, iomem);
2262     }
2263     start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
2264     end = start + section->size - 1;
2265     subpage_register(subpage, start, end, phys_section_add(section));
2266 }
2267
2268
2269 static void register_multipage(MemoryRegionSection *section)
2270 {
2271     target_phys_addr_t start_addr = section->offset_within_address_space;
2272     ram_addr_t size = section->size;
2273     target_phys_addr_t addr;
2274     uint16_t section_index = phys_section_add(section);
2275
2276     assert(size);
2277
2278     addr = start_addr;
2279     phys_page_set(addr >> TARGET_PAGE_BITS, size >> TARGET_PAGE_BITS,
2280                   section_index);
2281 }
2282
2283 void cpu_register_physical_memory_log(MemoryRegionSection *section,
2284                                       bool readonly)
2285 {
2286     MemoryRegionSection now = *section, remain = *section;
2287
2288     if ((now.offset_within_address_space & ~TARGET_PAGE_MASK)
2289         || (now.size < TARGET_PAGE_SIZE)) {
2290         now.size = MIN(TARGET_PAGE_ALIGN(now.offset_within_address_space)
2291                        - now.offset_within_address_space,
2292                        now.size);
2293         register_subpage(&now);
2294         remain.size -= now.size;
2295         remain.offset_within_address_space += now.size;
2296         remain.offset_within_region += now.size;
2297     }
2298     while (remain.size >= TARGET_PAGE_SIZE) {
2299         now = remain;
2300         if (remain.offset_within_region & ~TARGET_PAGE_MASK) {
2301             now.size = TARGET_PAGE_SIZE;
2302             register_subpage(&now);
2303         } else {
2304             now.size &= TARGET_PAGE_MASK;
2305             register_multipage(&now);
2306         }
2307         remain.size -= now.size;
2308         remain.offset_within_address_space += now.size;
2309         remain.offset_within_region += now.size;
2310     }
2311     now = remain;
2312     if (now.size) {
2313         register_subpage(&now);
2314     }
2315 }
2316
2317
2318 void qemu_register_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2319 {
2320     if (kvm_enabled())
2321         kvm_coalesce_mmio_region(addr, size);
2322 }
2323
2324 void qemu_unregister_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2325 {
2326     if (kvm_enabled())
2327         kvm_uncoalesce_mmio_region(addr, size);
2328 }
2329
2330 void qemu_flush_coalesced_mmio_buffer(void)
2331 {
2332     if (kvm_enabled())
2333         kvm_flush_coalesced_mmio_buffer();
2334 }
2335
2336 #if defined(__linux__) && !defined(TARGET_S390X)
2337
2338 #include <sys/vfs.h>
2339
2340 #define HUGETLBFS_MAGIC       0x958458f6
2341
2342 static long gethugepagesize(const char *path)
2343 {
2344     struct statfs fs;
2345     int ret;
2346
2347     do {
2348         ret = statfs(path, &fs);
2349     } while (ret != 0 && errno == EINTR);
2350
2351     if (ret != 0) {
2352         perror(path);
2353         return 0;
2354     }
2355
2356     if (fs.f_type != HUGETLBFS_MAGIC)
2357         fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
2358
2359     return fs.f_bsize;
2360 }
2361
2362 static void *file_ram_alloc(RAMBlock *block,
2363                             ram_addr_t memory,
2364                             const char *path)
2365 {
2366     char *filename;
2367     void *area;
2368     int fd;
2369 #ifdef MAP_POPULATE
2370     int flags;
2371 #endif
2372     unsigned long hpagesize;
2373
2374     hpagesize = gethugepagesize(path);
2375     if (!hpagesize) {
2376         return NULL;
2377     }
2378
2379     if (memory < hpagesize) {
2380         return NULL;
2381     }
2382
2383     if (kvm_enabled() && !kvm_has_sync_mmu()) {
2384         fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n");
2385         return NULL;
2386     }
2387
2388     if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) {
2389         return NULL;
2390     }
2391
2392     fd = mkstemp(filename);
2393     if (fd < 0) {
2394         perror("unable to create backing store for hugepages");
2395         free(filename);
2396         return NULL;
2397     }
2398     unlink(filename);
2399     free(filename);
2400
2401     memory = (memory+hpagesize-1) & ~(hpagesize-1);
2402
2403     /*
2404      * ftruncate is not supported by hugetlbfs in older
2405      * hosts, so don't bother bailing out on errors.
2406      * If anything goes wrong with it under other filesystems,
2407      * mmap will fail.
2408      */
2409     if (ftruncate(fd, memory))
2410         perror("ftruncate");
2411
2412 #ifdef MAP_POPULATE
2413     /* NB: MAP_POPULATE won't exhaustively alloc all phys pages in the case
2414      * MAP_PRIVATE is requested.  For mem_prealloc we mmap as MAP_SHARED
2415      * to sidestep this quirk.
2416      */
2417     flags = mem_prealloc ? MAP_POPULATE | MAP_SHARED : MAP_PRIVATE;
2418     area = mmap(0, memory, PROT_READ | PROT_WRITE, flags, fd, 0);
2419 #else
2420     area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
2421 #endif
2422     if (area == MAP_FAILED) {
2423         perror("file_ram_alloc: can't mmap RAM pages");
2424         close(fd);
2425         return (NULL);
2426     }
2427     block->fd = fd;
2428     return area;
2429 }
2430 #endif
2431
2432 static ram_addr_t find_ram_offset(ram_addr_t size)
2433 {
2434     RAMBlock *block, *next_block;
2435     ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
2436
2437     if (QLIST_EMPTY(&ram_list.blocks))
2438         return 0;
2439
2440     QLIST_FOREACH(block, &ram_list.blocks, next) {
2441         ram_addr_t end, next = RAM_ADDR_MAX;
2442
2443         end = block->offset + block->length;
2444
2445         QLIST_FOREACH(next_block, &ram_list.blocks, next) {
2446             if (next_block->offset >= end) {
2447                 next = MIN(next, next_block->offset);
2448             }
2449         }
2450         if (next - end >= size && next - end < mingap) {
2451             offset = end;
2452             mingap = next - end;
2453         }
2454     }
2455
2456     if (offset == RAM_ADDR_MAX) {
2457         fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
2458                 (uint64_t)size);
2459         abort();
2460     }
2461
2462     return offset;
2463 }
2464
2465 static ram_addr_t last_ram_offset(void)
2466 {
2467     RAMBlock *block;
2468     ram_addr_t last = 0;
2469
2470     QLIST_FOREACH(block, &ram_list.blocks, next)
2471         last = MAX(last, block->offset + block->length);
2472
2473     return last;
2474 }
2475
2476 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
2477 {
2478     int ret;
2479     QemuOpts *machine_opts;
2480
2481     /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
2482     machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
2483     if (machine_opts &&
2484         !qemu_opt_get_bool(machine_opts, "dump-guest-core", true)) {
2485         ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
2486         if (ret) {
2487             perror("qemu_madvise");
2488             fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
2489                             "but dump_guest_core=off specified\n");
2490         }
2491     }
2492 }
2493
2494 void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev)
2495 {
2496     RAMBlock *new_block, *block;
2497
2498     new_block = NULL;
2499     QLIST_FOREACH(block, &ram_list.blocks, next) {
2500         if (block->offset == addr) {
2501             new_block = block;
2502             break;
2503         }
2504     }
2505     assert(new_block);
2506     assert(!new_block->idstr[0]);
2507
2508     if (dev) {
2509         char *id = qdev_get_dev_path(dev);
2510         if (id) {
2511             snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
2512             g_free(id);
2513         }
2514     }
2515     pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
2516
2517     QLIST_FOREACH(block, &ram_list.blocks, next) {
2518         if (block != new_block && !strcmp(block->idstr, new_block->idstr)) {
2519             fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
2520                     new_block->idstr);
2521             abort();
2522         }
2523     }
2524 }
2525
2526 static int memory_try_enable_merging(void *addr, size_t len)
2527 {
2528     QemuOpts *opts;
2529
2530     opts = qemu_opts_find(qemu_find_opts("machine"), 0);
2531     if (opts && !qemu_opt_get_bool(opts, "mem-merge", true)) {
2532         /* disabled by the user */
2533         return 0;
2534     }
2535
2536     return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
2537 }
2538
2539 ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
2540                                    MemoryRegion *mr)
2541 {
2542     RAMBlock *new_block;
2543
2544     size = TARGET_PAGE_ALIGN(size);
2545     new_block = g_malloc0(sizeof(*new_block));
2546
2547     new_block->mr = mr;
2548     new_block->offset = find_ram_offset(size);
2549     if (host) {
2550         new_block->host = host;
2551         new_block->flags |= RAM_PREALLOC_MASK;
2552     } else {
2553         if (mem_path) {
2554 #if defined (__linux__) && !defined(TARGET_S390X)
2555             new_block->host = file_ram_alloc(new_block, size, mem_path);
2556             if (!new_block->host) {
2557                 new_block->host = qemu_vmalloc(size);
2558                 memory_try_enable_merging(new_block->host, size);
2559             }
2560 #else
2561             fprintf(stderr, "-mem-path option unsupported\n");
2562             exit(1);
2563 #endif
2564         } else {
2565             if (xen_enabled()) {
2566                 xen_ram_alloc(new_block->offset, size, mr);
2567             } else if (kvm_enabled()) {
2568                 /* some s390/kvm configurations have special constraints */
2569                 new_block->host = kvm_vmalloc(size);
2570             } else {
2571                 new_block->host = qemu_vmalloc(size);
2572             }
2573             memory_try_enable_merging(new_block->host, size);
2574         }
2575     }
2576     new_block->length = size;
2577
2578     QLIST_INSERT_HEAD(&ram_list.blocks, new_block, next);
2579
2580     ram_list.phys_dirty = g_realloc(ram_list.phys_dirty,
2581                                        last_ram_offset() >> TARGET_PAGE_BITS);
2582     memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS),
2583            0, size >> TARGET_PAGE_BITS);
2584     cpu_physical_memory_set_dirty_range(new_block->offset, size, 0xff);
2585
2586     qemu_ram_setup_dump(new_block->host, size);
2587
2588     if (kvm_enabled())
2589         kvm_setup_guest_memory(new_block->host, size);
2590
2591     return new_block->offset;
2592 }
2593
2594 ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr)
2595 {
2596     return qemu_ram_alloc_from_ptr(size, NULL, mr);
2597 }
2598
2599 void qemu_ram_free_from_ptr(ram_addr_t addr)
2600 {
2601     RAMBlock *block;
2602
2603     QLIST_FOREACH(block, &ram_list.blocks, next) {
2604         if (addr == block->offset) {
2605             QLIST_REMOVE(block, next);
2606             g_free(block);
2607             return;
2608         }
2609     }
2610 }
2611
2612 void qemu_ram_free(ram_addr_t addr)
2613 {
2614     RAMBlock *block;
2615
2616     QLIST_FOREACH(block, &ram_list.blocks, next) {
2617         if (addr == block->offset) {
2618             QLIST_REMOVE(block, next);
2619             if (block->flags & RAM_PREALLOC_MASK) {
2620                 ;
2621             } else if (mem_path) {
2622 #if defined (__linux__) && !defined(TARGET_S390X)
2623                 if (block->fd) {
2624                     munmap(block->host, block->length);
2625                     close(block->fd);
2626                 } else {
2627                     qemu_vfree(block->host);
2628                 }
2629 #else
2630                 abort();
2631 #endif
2632             } else {
2633 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
2634                 munmap(block->host, block->length);
2635 #else
2636                 if (xen_enabled()) {
2637                     xen_invalidate_map_cache_entry(block->host);
2638                 } else {
2639                     qemu_vfree(block->host);
2640                 }
2641 #endif
2642             }
2643             g_free(block);
2644             return;
2645         }
2646     }
2647
2648 }
2649
2650 #ifndef _WIN32
2651 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
2652 {
2653     RAMBlock *block;
2654     ram_addr_t offset;
2655     int flags;
2656     void *area, *vaddr;
2657
2658     QLIST_FOREACH(block, &ram_list.blocks, next) {
2659         offset = addr - block->offset;
2660         if (offset < block->length) {
2661             vaddr = block->host + offset;
2662             if (block->flags & RAM_PREALLOC_MASK) {
2663                 ;
2664             } else {
2665                 flags = MAP_FIXED;
2666                 munmap(vaddr, length);
2667                 if (mem_path) {
2668 #if defined(__linux__) && !defined(TARGET_S390X)
2669                     if (block->fd) {
2670 #ifdef MAP_POPULATE
2671                         flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
2672                             MAP_PRIVATE;
2673 #else
2674                         flags |= MAP_PRIVATE;
2675 #endif
2676                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
2677                                     flags, block->fd, offset);
2678                     } else {
2679                         flags |= MAP_PRIVATE | MAP_ANONYMOUS;
2680                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
2681                                     flags, -1, 0);
2682                     }
2683 #else
2684                     abort();
2685 #endif
2686                 } else {
2687 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
2688                     flags |= MAP_SHARED | MAP_ANONYMOUS;
2689                     area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE,
2690                                 flags, -1, 0);
2691 #else
2692                     flags |= MAP_PRIVATE | MAP_ANONYMOUS;
2693                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
2694                                 flags, -1, 0);
2695 #endif
2696                 }
2697                 if (area != vaddr) {
2698                     fprintf(stderr, "Could not remap addr: "
2699                             RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
2700                             length, addr);
2701                     exit(1);
2702                 }
2703                 memory_try_enable_merging(vaddr, length);
2704                 qemu_ram_setup_dump(vaddr, length);
2705             }
2706             return;
2707         }
2708     }
2709 }
2710 #endif /* !_WIN32 */
2711
2712 /* Return a host pointer to ram allocated with qemu_ram_alloc.
2713    With the exception of the softmmu code in this file, this should
2714    only be used for local memory (e.g. video ram) that the device owns,
2715    and knows it isn't going to access beyond the end of the block.
2716
2717    It should not be used for general purpose DMA.
2718    Use cpu_physical_memory_map/cpu_physical_memory_rw instead.
2719  */
2720 void *qemu_get_ram_ptr(ram_addr_t addr)
2721 {
2722     RAMBlock *block;
2723
2724     QLIST_FOREACH(block, &ram_list.blocks, next) {
2725         if (addr - block->offset < block->length) {
2726             /* Move this entry to to start of the list.  */
2727             if (block != QLIST_FIRST(&ram_list.blocks)) {
2728                 QLIST_REMOVE(block, next);
2729                 QLIST_INSERT_HEAD(&ram_list.blocks, block, next);
2730             }
2731             if (xen_enabled()) {
2732                 /* We need to check if the requested address is in the RAM
2733                  * because we don't want to map the entire memory in QEMU.
2734                  * In that case just map until the end of the page.
2735                  */
2736                 if (block->offset == 0) {
2737                     return xen_map_cache(addr, 0, 0);
2738                 } else if (block->host == NULL) {
2739                     block->host =
2740                         xen_map_cache(block->offset, block->length, 1);
2741                 }
2742             }
2743             return block->host + (addr - block->offset);
2744         }
2745     }
2746
2747     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
2748     abort();
2749
2750     return NULL;
2751 }
2752
2753 /* Return a host pointer to ram allocated with qemu_ram_alloc.
2754  * Same as qemu_get_ram_ptr but avoid reordering ramblocks.
2755  */
2756 void *qemu_safe_ram_ptr(ram_addr_t addr)
2757 {
2758     RAMBlock *block;
2759
2760     QLIST_FOREACH(block, &ram_list.blocks, next) {
2761         if (addr - block->offset < block->length) {
2762             if (xen_enabled()) {
2763                 /* We need to check if the requested address is in the RAM
2764                  * because we don't want to map the entire memory in QEMU.
2765                  * In that case just map until the end of the page.
2766                  */
2767                 if (block->offset == 0) {
2768                     return xen_map_cache(addr, 0, 0);
2769                 } else if (block->host == NULL) {
2770                     block->host =
2771                         xen_map_cache(block->offset, block->length, 1);
2772                 }
2773             }
2774             return block->host + (addr - block->offset);
2775         }
2776     }
2777
2778     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
2779     abort();
2780
2781     return NULL;
2782 }
2783
2784 /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
2785  * but takes a size argument */
2786 void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size)
2787 {
2788     if (*size == 0) {
2789         return NULL;
2790     }
2791     if (xen_enabled()) {
2792         return xen_map_cache(addr, *size, 1);
2793     } else {
2794         RAMBlock *block;
2795
2796         QLIST_FOREACH(block, &ram_list.blocks, next) {
2797             if (addr - block->offset < block->length) {
2798                 if (addr - block->offset + *size > block->length)
2799                     *size = block->length - addr + block->offset;
2800                 return block->host + (addr - block->offset);
2801             }
2802         }
2803
2804         fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
2805         abort();
2806     }
2807 }
2808
2809 void qemu_put_ram_ptr(void *addr)
2810 {
2811     trace_qemu_put_ram_ptr(addr);
2812 }
2813
2814 int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
2815 {
2816     RAMBlock *block;
2817     uint8_t *host = ptr;
2818
2819     if (xen_enabled()) {
2820         *ram_addr = xen_ram_addr_from_mapcache(ptr);
2821         return 0;
2822     }
2823
2824     QLIST_FOREACH(block, &ram_list.blocks, next) {
2825         /* This case append when the block is not mapped. */
2826         if (block->host == NULL) {
2827             continue;
2828         }
2829         if (host - block->host < block->length) {
2830             *ram_addr = block->offset + (host - block->host);
2831             return 0;
2832         }
2833     }
2834
2835     return -1;
2836 }
2837
2838 /* Some of the softmmu routines need to translate from a host pointer
2839    (typically a TLB entry) back to a ram offset.  */
2840 ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr)
2841 {
2842     ram_addr_t ram_addr;
2843
2844     if (qemu_ram_addr_from_host(ptr, &ram_addr)) {
2845         fprintf(stderr, "Bad ram pointer %p\n", ptr);
2846         abort();
2847     }
2848     return ram_addr;
2849 }
2850
2851 static uint64_t unassigned_mem_read(void *opaque, target_phys_addr_t addr,
2852                                     unsigned size)
2853 {
2854 #ifdef DEBUG_UNASSIGNED
2855     printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
2856 #endif
2857 #if defined(TARGET_ALPHA) || defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
2858     cpu_unassigned_access(cpu_single_env, addr, 0, 0, 0, size);
2859 #endif
2860     return 0;
2861 }
2862
2863 static void unassigned_mem_write(void *opaque, target_phys_addr_t addr,
2864                                  uint64_t val, unsigned size)
2865 {
2866 #ifdef DEBUG_UNASSIGNED
2867     printf("Unassigned mem write " TARGET_FMT_plx " = 0x%"PRIx64"\n", addr, val);
2868 #endif
2869 #if defined(TARGET_ALPHA) || defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
2870     cpu_unassigned_access(cpu_single_env, addr, 1, 0, 0, size);
2871 #endif
2872 }
2873
2874 static const MemoryRegionOps unassigned_mem_ops = {
2875     .read = unassigned_mem_read,
2876     .write = unassigned_mem_write,
2877     .endianness = DEVICE_NATIVE_ENDIAN,
2878 };
2879
2880 static uint64_t error_mem_read(void *opaque, target_phys_addr_t addr,
2881                                unsigned size)
2882 {
2883     abort();
2884 }
2885
2886 static void error_mem_write(void *opaque, target_phys_addr_t addr,
2887                             uint64_t value, unsigned size)
2888 {
2889     abort();
2890 }
2891
2892 static const MemoryRegionOps error_mem_ops = {
2893     .read = error_mem_read,
2894     .write = error_mem_write,
2895     .endianness = DEVICE_NATIVE_ENDIAN,
2896 };
2897
2898 static const MemoryRegionOps rom_mem_ops = {
2899     .read = error_mem_read,
2900     .write = unassigned_mem_write,
2901     .endianness = DEVICE_NATIVE_ENDIAN,
2902 };
2903
2904 static void notdirty_mem_write(void *opaque, target_phys_addr_t ram_addr,
2905                                uint64_t val, unsigned size)
2906 {
2907     int dirty_flags;
2908     dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
2909     if (!(dirty_flags & CODE_DIRTY_FLAG)) {
2910 #if !defined(CONFIG_USER_ONLY)
2911         tb_invalidate_phys_page_fast(ram_addr, size);
2912         dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
2913 #endif
2914     }
2915     switch (size) {
2916     case 1:
2917         stb_p(qemu_get_ram_ptr(ram_addr), val);
2918         break;
2919     case 2:
2920         stw_p(qemu_get_ram_ptr(ram_addr), val);
2921         break;
2922     case 4:
2923         stl_p(qemu_get_ram_ptr(ram_addr), val);
2924         break;
2925     default:
2926         abort();
2927     }
2928     dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
2929     cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
2930     /* we remove the notdirty callback only if the code has been
2931        flushed */
2932     if (dirty_flags == 0xff)
2933         tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
2934 }
2935
2936 static const MemoryRegionOps notdirty_mem_ops = {
2937     .read = error_mem_read,
2938     .write = notdirty_mem_write,
2939     .endianness = DEVICE_NATIVE_ENDIAN,
2940 };
2941
2942 /* Generate a debug exception if a watchpoint has been hit.  */
2943 static void check_watchpoint(int offset, int len_mask, int flags)
2944 {
2945     CPUArchState *env = cpu_single_env;
2946     target_ulong pc, cs_base;
2947     TranslationBlock *tb;
2948     target_ulong vaddr;
2949     CPUWatchpoint *wp;
2950     int cpu_flags;
2951
2952     if (env->watchpoint_hit) {
2953         /* We re-entered the check after replacing the TB. Now raise
2954          * the debug interrupt so that is will trigger after the
2955          * current instruction. */
2956         cpu_interrupt(env, CPU_INTERRUPT_DEBUG);
2957         return;
2958     }
2959     vaddr = (env->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
2960     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
2961         if ((vaddr == (wp->vaddr & len_mask) ||
2962              (vaddr & wp->len_mask) == wp->vaddr) && (wp->flags & flags)) {
2963             wp->flags |= BP_WATCHPOINT_HIT;
2964             if (!env->watchpoint_hit) {
2965                 env->watchpoint_hit = wp;
2966                 tb = tb_find_pc(env->mem_io_pc);
2967                 if (!tb) {
2968                     cpu_abort(env, "check_watchpoint: could not find TB for "
2969                               "pc=%p", (void *)env->mem_io_pc);
2970                 }
2971                 cpu_restore_state(tb, env, env->mem_io_pc);
2972                 tb_phys_invalidate(tb, -1);
2973                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
2974                     env->exception_index = EXCP_DEBUG;
2975                     cpu_loop_exit(env);
2976                 } else {
2977                     cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
2978                     tb_gen_code(env, pc, cs_base, cpu_flags, 1);
2979                     cpu_resume_from_signal(env, NULL);
2980                 }
2981             }
2982         } else {
2983             wp->flags &= ~BP_WATCHPOINT_HIT;
2984         }
2985     }
2986 }
2987
2988 /* Watchpoint access routines.  Watchpoints are inserted using TLB tricks,
2989    so these check for a hit then pass through to the normal out-of-line
2990    phys routines.  */
2991 static uint64_t watch_mem_read(void *opaque, target_phys_addr_t addr,
2992                                unsigned size)
2993 {
2994     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_READ);
2995     switch (size) {
2996     case 1: return ldub_phys(addr);
2997     case 2: return lduw_phys(addr);
2998     case 4: return ldl_phys(addr);
2999     default: abort();
3000     }
3001 }
3002
3003 static void watch_mem_write(void *opaque, target_phys_addr_t addr,
3004                             uint64_t val, unsigned size)
3005 {
3006     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_WRITE);
3007     switch (size) {
3008     case 1:
3009         stb_phys(addr, val);
3010         break;
3011     case 2:
3012         stw_phys(addr, val);
3013         break;
3014     case 4:
3015         stl_phys(addr, val);
3016         break;
3017     default: abort();
3018     }
3019 }
3020
3021 static const MemoryRegionOps watch_mem_ops = {
3022     .read = watch_mem_read,
3023     .write = watch_mem_write,
3024     .endianness = DEVICE_NATIVE_ENDIAN,
3025 };
3026
3027 static uint64_t subpage_read(void *opaque, target_phys_addr_t addr,
3028                              unsigned len)
3029 {
3030     subpage_t *mmio = opaque;
3031     unsigned int idx = SUBPAGE_IDX(addr);
3032     MemoryRegionSection *section;
3033 #if defined(DEBUG_SUBPAGE)
3034     printf("%s: subpage %p len %d addr " TARGET_FMT_plx " idx %d\n", __func__,
3035            mmio, len, addr, idx);
3036 #endif
3037
3038     section = &phys_sections[mmio->sub_section[idx]];
3039     addr += mmio->base;
3040     addr -= section->offset_within_address_space;
3041     addr += section->offset_within_region;
3042     return io_mem_read(section->mr, addr, len);
3043 }
3044
3045 static void subpage_write(void *opaque, target_phys_addr_t addr,
3046                           uint64_t value, unsigned len)
3047 {
3048     subpage_t *mmio = opaque;
3049     unsigned int idx = SUBPAGE_IDX(addr);
3050     MemoryRegionSection *section;
3051 #if defined(DEBUG_SUBPAGE)
3052     printf("%s: subpage %p len %d addr " TARGET_FMT_plx
3053            " idx %d value %"PRIx64"\n",
3054            __func__, mmio, len, addr, idx, value);
3055 #endif
3056
3057     section = &phys_sections[mmio->sub_section[idx]];
3058     addr += mmio->base;
3059     addr -= section->offset_within_address_space;
3060     addr += section->offset_within_region;
3061     io_mem_write(section->mr, addr, value, len);
3062 }
3063
3064 static const MemoryRegionOps subpage_ops = {
3065     .read = subpage_read,
3066     .write = subpage_write,
3067     .endianness = DEVICE_NATIVE_ENDIAN,
3068 };
3069
3070 static uint64_t subpage_ram_read(void *opaque, target_phys_addr_t addr,
3071                                  unsigned size)
3072 {
3073     ram_addr_t raddr = addr;
3074     void *ptr = qemu_get_ram_ptr(raddr);
3075     switch (size) {
3076     case 1: return ldub_p(ptr);
3077     case 2: return lduw_p(ptr);
3078     case 4: return ldl_p(ptr);
3079     default: abort();
3080     }
3081 }
3082
3083 static void subpage_ram_write(void *opaque, target_phys_addr_t addr,
3084                               uint64_t value, unsigned size)
3085 {
3086     ram_addr_t raddr = addr;
3087     void *ptr = qemu_get_ram_ptr(raddr);
3088     switch (size) {
3089     case 1: return stb_p(ptr, value);
3090     case 2: return stw_p(ptr, value);
3091     case 4: return stl_p(ptr, value);
3092     default: abort();
3093     }
3094 }
3095
3096 static const MemoryRegionOps subpage_ram_ops = {
3097     .read = subpage_ram_read,
3098     .write = subpage_ram_write,
3099     .endianness = DEVICE_NATIVE_ENDIAN,
3100 };
3101
3102 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
3103                              uint16_t section)
3104 {
3105     int idx, eidx;
3106
3107     if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
3108         return -1;
3109     idx = SUBPAGE_IDX(start);
3110     eidx = SUBPAGE_IDX(end);
3111 #if defined(DEBUG_SUBPAGE)
3112     printf("%s: %p start %08x end %08x idx %08x eidx %08x mem %ld\n", __func__,
3113            mmio, start, end, idx, eidx, memory);
3114 #endif
3115     if (memory_region_is_ram(phys_sections[section].mr)) {
3116         MemoryRegionSection new_section = phys_sections[section];
3117         new_section.mr = &io_mem_subpage_ram;
3118         section = phys_section_add(&new_section);
3119     }
3120     for (; idx <= eidx; idx++) {
3121         mmio->sub_section[idx] = section;
3122     }
3123
3124     return 0;
3125 }
3126
3127 static subpage_t *subpage_init(target_phys_addr_t base)
3128 {
3129     subpage_t *mmio;
3130
3131     mmio = g_malloc0(sizeof(subpage_t));
3132
3133     mmio->base = base;
3134     memory_region_init_io(&mmio->iomem, &subpage_ops, mmio,
3135                           "subpage", TARGET_PAGE_SIZE);
3136     mmio->iomem.subpage = true;
3137 #if defined(DEBUG_SUBPAGE)
3138     printf("%s: %p base " TARGET_FMT_plx " len %08x %d\n", __func__,
3139            mmio, base, TARGET_PAGE_SIZE, subpage_memory);
3140 #endif
3141     subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, phys_section_unassigned);
3142
3143     return mmio;
3144 }
3145
3146 static uint16_t dummy_section(MemoryRegion *mr)
3147 {
3148     MemoryRegionSection section = {
3149         .mr = mr,
3150         .offset_within_address_space = 0,
3151         .offset_within_region = 0,
3152         .size = UINT64_MAX,
3153     };
3154
3155     return phys_section_add(&section);
3156 }
3157
3158 MemoryRegion *iotlb_to_region(target_phys_addr_t index)
3159 {
3160     return phys_sections[index & ~TARGET_PAGE_MASK].mr;
3161 }
3162
3163 static void io_mem_init(void)
3164 {
3165     memory_region_init_io(&io_mem_ram, &error_mem_ops, NULL, "ram", UINT64_MAX);
3166     memory_region_init_io(&io_mem_rom, &rom_mem_ops, NULL, "rom", UINT64_MAX);
3167     memory_region_init_io(&io_mem_unassigned, &unassigned_mem_ops, NULL,
3168                           "unassigned", UINT64_MAX);
3169     memory_region_init_io(&io_mem_notdirty, &notdirty_mem_ops, NULL,
3170                           "notdirty", UINT64_MAX);
3171     memory_region_init_io(&io_mem_subpage_ram, &subpage_ram_ops, NULL,
3172                           "subpage-ram", UINT64_MAX);
3173     memory_region_init_io(&io_mem_watch, &watch_mem_ops, NULL,
3174                           "watch", UINT64_MAX);
3175 }
3176
3177 static void core_begin(MemoryListener *listener)
3178 {
3179     destroy_all_mappings();
3180     phys_sections_clear();
3181     phys_map.ptr = PHYS_MAP_NODE_NIL;
3182     phys_section_unassigned = dummy_section(&io_mem_unassigned);
3183     phys_section_notdirty = dummy_section(&io_mem_notdirty);
3184     phys_section_rom = dummy_section(&io_mem_rom);
3185     phys_section_watch = dummy_section(&io_mem_watch);
3186 }
3187
3188 static void core_commit(MemoryListener *listener)
3189 {
3190     CPUArchState *env;
3191
3192     /* since each CPU stores ram addresses in its TLB cache, we must
3193        reset the modified entries */
3194     /* XXX: slow ! */
3195     for(env = first_cpu; env != NULL; env = env->next_cpu) {
3196         tlb_flush(env, 1);
3197     }
3198 }
3199
3200 static void core_region_add(MemoryListener *listener,
3201                             MemoryRegionSection *section)
3202 {
3203     cpu_register_physical_memory_log(section, section->readonly);
3204 }
3205
3206 static void core_region_del(MemoryListener *listener,
3207                             MemoryRegionSection *section)
3208 {
3209 }
3210
3211 static void core_region_nop(MemoryListener *listener,
3212                             MemoryRegionSection *section)
3213 {
3214     cpu_register_physical_memory_log(section, section->readonly);
3215 }
3216
3217 static void core_log_start(MemoryListener *listener,
3218                            MemoryRegionSection *section)
3219 {
3220 }
3221
3222 static void core_log_stop(MemoryListener *listener,
3223                           MemoryRegionSection *section)
3224 {
3225 }
3226
3227 static void core_log_sync(MemoryListener *listener,
3228                           MemoryRegionSection *section)
3229 {
3230 }
3231
3232 static void core_log_global_start(MemoryListener *listener)
3233 {
3234     cpu_physical_memory_set_dirty_tracking(1);
3235 }
3236
3237 static void core_log_global_stop(MemoryListener *listener)
3238 {
3239     cpu_physical_memory_set_dirty_tracking(0);
3240 }
3241
3242 static void core_eventfd_add(MemoryListener *listener,
3243                              MemoryRegionSection *section,
3244                              bool match_data, uint64_t data, EventNotifier *e)
3245 {
3246 }
3247
3248 static void core_eventfd_del(MemoryListener *listener,
3249                              MemoryRegionSection *section,
3250                              bool match_data, uint64_t data, EventNotifier *e)
3251 {
3252 }
3253
3254 static void io_begin(MemoryListener *listener)
3255 {
3256 }
3257
3258 static void io_commit(MemoryListener *listener)
3259 {
3260 }
3261
3262 static void io_region_add(MemoryListener *listener,
3263                           MemoryRegionSection *section)
3264 {
3265     MemoryRegionIORange *mrio = g_new(MemoryRegionIORange, 1);
3266
3267     mrio->mr = section->mr;
3268     mrio->offset = section->offset_within_region;
3269     iorange_init(&mrio->iorange, &memory_region_iorange_ops,
3270                  section->offset_within_address_space, section->size);
3271     ioport_register(&mrio->iorange);
3272 }
3273
3274 static void io_region_del(MemoryListener *listener,
3275                           MemoryRegionSection *section)
3276 {
3277     isa_unassign_ioport(section->offset_within_address_space, section->size);
3278 }
3279
3280 static void io_region_nop(MemoryListener *listener,
3281                           MemoryRegionSection *section)
3282 {
3283 }
3284
3285 static void io_log_start(MemoryListener *listener,
3286                          MemoryRegionSection *section)
3287 {
3288 }
3289
3290 static void io_log_stop(MemoryListener *listener,
3291                         MemoryRegionSection *section)
3292 {
3293 }
3294
3295 static void io_log_sync(MemoryListener *listener,
3296                         MemoryRegionSection *section)
3297 {
3298 }
3299
3300 static void io_log_global_start(MemoryListener *listener)
3301 {
3302 }
3303
3304 static void io_log_global_stop(MemoryListener *listener)
3305 {
3306 }
3307
3308 static void io_eventfd_add(MemoryListener *listener,
3309                            MemoryRegionSection *section,
3310                            bool match_data, uint64_t data, EventNotifier *e)
3311 {
3312 }
3313
3314 static void io_eventfd_del(MemoryListener *listener,
3315                            MemoryRegionSection *section,
3316                            bool match_data, uint64_t data, EventNotifier *e)
3317 {
3318 }
3319
3320 static MemoryListener core_memory_listener = {
3321     .begin = core_begin,
3322     .commit = core_commit,
3323     .region_add = core_region_add,
3324     .region_del = core_region_del,
3325     .region_nop = core_region_nop,
3326     .log_start = core_log_start,
3327     .log_stop = core_log_stop,
3328     .log_sync = core_log_sync,
3329     .log_global_start = core_log_global_start,
3330     .log_global_stop = core_log_global_stop,
3331     .eventfd_add = core_eventfd_add,
3332     .eventfd_del = core_eventfd_del,
3333     .priority = 0,
3334 };
3335
3336 static MemoryListener io_memory_listener = {
3337     .begin = io_begin,
3338     .commit = io_commit,
3339     .region_add = io_region_add,
3340     .region_del = io_region_del,
3341     .region_nop = io_region_nop,
3342     .log_start = io_log_start,
3343     .log_stop = io_log_stop,
3344     .log_sync = io_log_sync,
3345     .log_global_start = io_log_global_start,
3346     .log_global_stop = io_log_global_stop,
3347     .eventfd_add = io_eventfd_add,
3348     .eventfd_del = io_eventfd_del,
3349     .priority = 0,
3350 };
3351
3352 static void memory_map_init(void)
3353 {
3354     system_memory = g_malloc(sizeof(*system_memory));
3355     memory_region_init(system_memory, "system", INT64_MAX);
3356     set_system_memory_map(system_memory);
3357
3358     system_io = g_malloc(sizeof(*system_io));
3359     memory_region_init(system_io, "io", 65536);
3360     set_system_io_map(system_io);
3361
3362     memory_listener_register(&core_memory_listener, system_memory);
3363     memory_listener_register(&io_memory_listener, system_io);
3364 }
3365
3366 MemoryRegion *get_system_memory(void)
3367 {
3368     return system_memory;
3369 }
3370
3371 MemoryRegion *get_system_io(void)
3372 {
3373     return system_io;
3374 }
3375
3376 #endif /* !defined(CONFIG_USER_ONLY) */
3377
3378 /* physical memory access (slow version, mainly for debug) */
3379 #if defined(CONFIG_USER_ONLY)
3380 int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr,
3381                         uint8_t *buf, int len, int is_write)
3382 {
3383     int l, flags;
3384     target_ulong page;
3385     void * p;
3386
3387     while (len > 0) {
3388         page = addr & TARGET_PAGE_MASK;
3389         l = (page + TARGET_PAGE_SIZE) - addr;
3390         if (l > len)
3391             l = len;
3392         flags = page_get_flags(page);
3393         if (!(flags & PAGE_VALID))
3394             return -1;
3395         if (is_write) {
3396             if (!(flags & PAGE_WRITE))
3397                 return -1;
3398             /* XXX: this code should not depend on lock_user */
3399             if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
3400                 return -1;
3401             memcpy(p, buf, l);
3402             unlock_user(p, addr, l);
3403         } else {
3404             if (!(flags & PAGE_READ))
3405                 return -1;
3406             /* XXX: this code should not depend on lock_user */
3407             if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
3408                 return -1;
3409             memcpy(buf, p, l);
3410             unlock_user(p, addr, 0);
3411         }
3412         len -= l;
3413         buf += l;
3414         addr += l;
3415     }
3416     return 0;
3417 }
3418
3419 #else
3420 void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
3421                             int len, int is_write)
3422 {
3423     int l;
3424     uint8_t *ptr;
3425     uint32_t val;
3426     target_phys_addr_t page;
3427     MemoryRegionSection *section;
3428
3429     while (len > 0) {
3430         page = addr & TARGET_PAGE_MASK;
3431         l = (page + TARGET_PAGE_SIZE) - addr;
3432         if (l > len)
3433             l = len;
3434         section = phys_page_find(page >> TARGET_PAGE_BITS);
3435
3436         if (is_write) {
3437             if (!memory_region_is_ram(section->mr)) {
3438                 target_phys_addr_t addr1;
3439                 addr1 = memory_region_section_addr(section, addr);
3440                 /* XXX: could force cpu_single_env to NULL to avoid
3441                    potential bugs */
3442                 if (l >= 4 && ((addr1 & 3) == 0)) {
3443                     /* 32 bit write access */
3444                     val = ldl_p(buf);
3445                     io_mem_write(section->mr, addr1, val, 4);
3446                     l = 4;
3447                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3448                     /* 16 bit write access */
3449                     val = lduw_p(buf);
3450                     io_mem_write(section->mr, addr1, val, 2);
3451                     l = 2;
3452                 } else {
3453                     /* 8 bit write access */
3454                     val = ldub_p(buf);
3455                     io_mem_write(section->mr, addr1, val, 1);
3456                     l = 1;
3457                 }
3458             } else if (!section->readonly) {
3459                 ram_addr_t addr1;
3460                 addr1 = memory_region_get_ram_addr(section->mr)
3461                     + memory_region_section_addr(section, addr);
3462                 /* RAM case */
3463                 ptr = qemu_get_ram_ptr(addr1);
3464                 memcpy(ptr, buf, l);
3465                 if (!cpu_physical_memory_is_dirty(addr1)) {
3466                     /* invalidate code */
3467                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
3468                     /* set dirty bit */
3469                     cpu_physical_memory_set_dirty_flags(
3470                         addr1, (0xff & ~CODE_DIRTY_FLAG));
3471                 }
3472                 qemu_put_ram_ptr(ptr);
3473             }
3474         } else {
3475             if (!(memory_region_is_ram(section->mr) ||
3476                   memory_region_is_romd(section->mr))) {
3477                 target_phys_addr_t addr1;
3478                 /* I/O case */
3479                 addr1 = memory_region_section_addr(section, addr);
3480                 if (l >= 4 && ((addr1 & 3) == 0)) {
3481                     /* 32 bit read access */
3482                     val = io_mem_read(section->mr, addr1, 4);
3483                     stl_p(buf, val);
3484                     l = 4;
3485                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3486                     /* 16 bit read access */
3487                     val = io_mem_read(section->mr, addr1, 2);
3488                     stw_p(buf, val);
3489                     l = 2;
3490                 } else {
3491                     /* 8 bit read access */
3492                     val = io_mem_read(section->mr, addr1, 1);
3493                     stb_p(buf, val);
3494                     l = 1;
3495                 }
3496             } else {
3497                 /* RAM case */
3498                 ptr = qemu_get_ram_ptr(section->mr->ram_addr
3499                                        + memory_region_section_addr(section,
3500                                                                     addr));
3501                 memcpy(buf, ptr, l);
3502                 qemu_put_ram_ptr(ptr);
3503             }
3504         }
3505         len -= l;
3506         buf += l;
3507         addr += l;
3508     }
3509 }
3510
3511 /* used for ROM loading : can write in RAM and ROM */
3512 void cpu_physical_memory_write_rom(target_phys_addr_t addr,
3513                                    const uint8_t *buf, int len)
3514 {
3515     int l;
3516     uint8_t *ptr;
3517     target_phys_addr_t page;
3518     MemoryRegionSection *section;
3519
3520     while (len > 0) {
3521         page = addr & TARGET_PAGE_MASK;
3522         l = (page + TARGET_PAGE_SIZE) - addr;
3523         if (l > len)
3524             l = len;
3525         section = phys_page_find(page >> TARGET_PAGE_BITS);
3526
3527         if (!(memory_region_is_ram(section->mr) ||
3528               memory_region_is_romd(section->mr))) {
3529             /* do nothing */
3530         } else {
3531             unsigned long addr1;
3532             addr1 = memory_region_get_ram_addr(section->mr)
3533                 + memory_region_section_addr(section, addr);
3534             /* ROM/RAM case */
3535             ptr = qemu_get_ram_ptr(addr1);
3536             memcpy(ptr, buf, l);
3537             if (!cpu_physical_memory_is_dirty(addr1)) {
3538                 /* invalidate code */
3539                 tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
3540                 /* set dirty bit */
3541                 cpu_physical_memory_set_dirty_flags(
3542                     addr1, (0xff & ~CODE_DIRTY_FLAG));
3543             }
3544             qemu_put_ram_ptr(ptr);
3545         }
3546         len -= l;
3547         buf += l;
3548         addr += l;
3549     }
3550 }
3551
3552 typedef struct {
3553     void *buffer;
3554     target_phys_addr_t addr;
3555     target_phys_addr_t len;
3556 } BounceBuffer;
3557
3558 static BounceBuffer bounce;
3559
3560 typedef struct MapClient {
3561     void *opaque;
3562     void (*callback)(void *opaque);
3563     QLIST_ENTRY(MapClient) link;
3564 } MapClient;
3565
3566 static QLIST_HEAD(map_client_list, MapClient) map_client_list
3567     = QLIST_HEAD_INITIALIZER(map_client_list);
3568
3569 void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque))
3570 {
3571     MapClient *client = g_malloc(sizeof(*client));
3572
3573     client->opaque = opaque;
3574     client->callback = callback;
3575     QLIST_INSERT_HEAD(&map_client_list, client, link);
3576     return client;
3577 }
3578
3579 void cpu_unregister_map_client(void *_client)
3580 {
3581     MapClient *client = (MapClient *)_client;
3582
3583     QLIST_REMOVE(client, link);
3584     g_free(client);
3585 }
3586
3587 static void cpu_notify_map_clients(void)
3588 {
3589     MapClient *client;
3590
3591     while (!QLIST_EMPTY(&map_client_list)) {
3592         client = QLIST_FIRST(&map_client_list);
3593         client->callback(client->opaque);
3594         cpu_unregister_map_client(client);
3595     }
3596 }
3597
3598 /* Map a physical memory region into a host virtual address.
3599  * May map a subset of the requested range, given by and returned in *plen.
3600  * May return NULL if resources needed to perform the mapping are exhausted.
3601  * Use only for reads OR writes - not for read-modify-write operations.
3602  * Use cpu_register_map_client() to know when retrying the map operation is
3603  * likely to succeed.
3604  */
3605 void *cpu_physical_memory_map(target_phys_addr_t addr,
3606                               target_phys_addr_t *plen,
3607                               int is_write)
3608 {
3609     target_phys_addr_t len = *plen;
3610     target_phys_addr_t todo = 0;
3611     int l;
3612     target_phys_addr_t page;
3613     MemoryRegionSection *section;
3614     ram_addr_t raddr = RAM_ADDR_MAX;
3615     ram_addr_t rlen;
3616     void *ret;
3617
3618     while (len > 0) {
3619         page = addr & TARGET_PAGE_MASK;
3620         l = (page + TARGET_PAGE_SIZE) - addr;
3621         if (l > len)
3622             l = len;
3623         section = phys_page_find(page >> TARGET_PAGE_BITS);
3624
3625         if (!(memory_region_is_ram(section->mr) && !section->readonly)) {
3626             if (todo || bounce.buffer) {
3627                 break;
3628             }
3629             bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, TARGET_PAGE_SIZE);
3630             bounce.addr = addr;
3631             bounce.len = l;
3632             if (!is_write) {
3633                 cpu_physical_memory_read(addr, bounce.buffer, l);
3634             }
3635
3636             *plen = l;
3637             return bounce.buffer;
3638         }
3639         if (!todo) {
3640             raddr = memory_region_get_ram_addr(section->mr)
3641                 + memory_region_section_addr(section, addr);
3642         }
3643
3644         len -= l;
3645         addr += l;
3646         todo += l;
3647     }
3648     rlen = todo;
3649     ret = qemu_ram_ptr_length(raddr, &rlen);
3650     *plen = rlen;
3651     return ret;
3652 }
3653
3654 /* Unmaps a memory region previously mapped by cpu_physical_memory_map().
3655  * Will also mark the memory as dirty if is_write == 1.  access_len gives
3656  * the amount of memory that was actually read or written by the caller.
3657  */
3658 void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
3659                                int is_write, target_phys_addr_t access_len)
3660 {
3661     if (buffer != bounce.buffer) {
3662         if (is_write) {
3663             ram_addr_t addr1 = qemu_ram_addr_from_host_nofail(buffer);
3664             while (access_len) {
3665                 unsigned l;
3666                 l = TARGET_PAGE_SIZE;
3667                 if (l > access_len)
3668                     l = access_len;
3669                 if (!cpu_physical_memory_is_dirty(addr1)) {
3670                     /* invalidate code */
3671                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
3672                     /* set dirty bit */
3673                     cpu_physical_memory_set_dirty_flags(
3674                         addr1, (0xff & ~CODE_DIRTY_FLAG));
3675                 }
3676                 addr1 += l;
3677                 access_len -= l;
3678             }
3679         }
3680         if (xen_enabled()) {
3681             xen_invalidate_map_cache_entry(buffer);
3682         }
3683         return;
3684     }
3685     if (is_write) {
3686         cpu_physical_memory_write(bounce.addr, bounce.buffer, access_len);
3687     }
3688     qemu_vfree(bounce.buffer);
3689     bounce.buffer = NULL;
3690     cpu_notify_map_clients();
3691 }
3692
3693 /* warning: addr must be aligned */
3694 static inline uint32_t ldl_phys_internal(target_phys_addr_t addr,
3695                                          enum device_endian endian)
3696 {
3697     uint8_t *ptr;
3698     uint32_t val;
3699     MemoryRegionSection *section;
3700
3701     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3702
3703     if (!(memory_region_is_ram(section->mr) ||
3704           memory_region_is_romd(section->mr))) {
3705         /* I/O case */
3706         addr = memory_region_section_addr(section, addr);
3707         val = io_mem_read(section->mr, addr, 4);
3708 #if defined(TARGET_WORDS_BIGENDIAN)
3709         if (endian == DEVICE_LITTLE_ENDIAN) {
3710             val = bswap32(val);
3711         }
3712 #else
3713         if (endian == DEVICE_BIG_ENDIAN) {
3714             val = bswap32(val);
3715         }
3716 #endif
3717     } else {
3718         /* RAM case */
3719         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
3720                                 & TARGET_PAGE_MASK)
3721                                + memory_region_section_addr(section, addr));
3722         switch (endian) {
3723         case DEVICE_LITTLE_ENDIAN:
3724             val = ldl_le_p(ptr);
3725             break;
3726         case DEVICE_BIG_ENDIAN:
3727             val = ldl_be_p(ptr);
3728             break;
3729         default:
3730             val = ldl_p(ptr);
3731             break;
3732         }
3733     }
3734     return val;
3735 }
3736
3737 uint32_t ldl_phys(target_phys_addr_t addr)
3738 {
3739     return ldl_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
3740 }
3741
3742 uint32_t ldl_le_phys(target_phys_addr_t addr)
3743 {
3744     return ldl_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
3745 }
3746
3747 uint32_t ldl_be_phys(target_phys_addr_t addr)
3748 {
3749     return ldl_phys_internal(addr, DEVICE_BIG_ENDIAN);
3750 }
3751
3752 /* warning: addr must be aligned */
3753 static inline uint64_t ldq_phys_internal(target_phys_addr_t addr,
3754                                          enum device_endian endian)
3755 {
3756     uint8_t *ptr;
3757     uint64_t val;
3758     MemoryRegionSection *section;
3759
3760     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3761
3762     if (!(memory_region_is_ram(section->mr) ||
3763           memory_region_is_romd(section->mr))) {
3764         /* I/O case */
3765         addr = memory_region_section_addr(section, addr);
3766
3767         /* XXX This is broken when device endian != cpu endian.
3768                Fix and add "endian" variable check */
3769 #ifdef TARGET_WORDS_BIGENDIAN
3770         val = io_mem_read(section->mr, addr, 4) << 32;
3771         val |= io_mem_read(section->mr, addr + 4, 4);
3772 #else
3773         val = io_mem_read(section->mr, addr, 4);
3774         val |= io_mem_read(section->mr, addr + 4, 4) << 32;
3775 #endif
3776     } else {
3777         /* RAM case */
3778         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
3779                                 & TARGET_PAGE_MASK)
3780                                + memory_region_section_addr(section, addr));
3781         switch (endian) {
3782         case DEVICE_LITTLE_ENDIAN:
3783             val = ldq_le_p(ptr);
3784             break;
3785         case DEVICE_BIG_ENDIAN:
3786             val = ldq_be_p(ptr);
3787             break;
3788         default:
3789             val = ldq_p(ptr);
3790             break;
3791         }
3792     }
3793     return val;
3794 }
3795
3796 uint64_t ldq_phys(target_phys_addr_t addr)
3797 {
3798     return ldq_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
3799 }
3800
3801 uint64_t ldq_le_phys(target_phys_addr_t addr)
3802 {
3803     return ldq_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
3804 }
3805
3806 uint64_t ldq_be_phys(target_phys_addr_t addr)
3807 {
3808     return ldq_phys_internal(addr, DEVICE_BIG_ENDIAN);
3809 }
3810
3811 /* XXX: optimize */
3812 uint32_t ldub_phys(target_phys_addr_t addr)
3813 {
3814     uint8_t val;
3815     cpu_physical_memory_read(addr, &val, 1);
3816     return val;
3817 }
3818
3819 /* warning: addr must be aligned */
3820 static inline uint32_t lduw_phys_internal(target_phys_addr_t addr,
3821                                           enum device_endian endian)
3822 {
3823     uint8_t *ptr;
3824     uint64_t val;
3825     MemoryRegionSection *section;
3826
3827     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3828
3829     if (!(memory_region_is_ram(section->mr) ||
3830           memory_region_is_romd(section->mr))) {
3831         /* I/O case */
3832         addr = memory_region_section_addr(section, addr);
3833         val = io_mem_read(section->mr, addr, 2);
3834 #if defined(TARGET_WORDS_BIGENDIAN)
3835         if (endian == DEVICE_LITTLE_ENDIAN) {
3836             val = bswap16(val);
3837         }
3838 #else
3839         if (endian == DEVICE_BIG_ENDIAN) {
3840             val = bswap16(val);
3841         }
3842 #endif
3843     } else {
3844         /* RAM case */
3845         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
3846                                 & TARGET_PAGE_MASK)
3847                                + memory_region_section_addr(section, addr));
3848         switch (endian) {
3849         case DEVICE_LITTLE_ENDIAN:
3850             val = lduw_le_p(ptr);
3851             break;
3852         case DEVICE_BIG_ENDIAN:
3853             val = lduw_be_p(ptr);
3854             break;
3855         default:
3856             val = lduw_p(ptr);
3857             break;
3858         }
3859     }
3860     return val;
3861 }
3862
3863 uint32_t lduw_phys(target_phys_addr_t addr)
3864 {
3865     return lduw_phys_internal(addr, DEVICE_NATIVE_ENDIAN);
3866 }
3867
3868 uint32_t lduw_le_phys(target_phys_addr_t addr)
3869 {
3870     return lduw_phys_internal(addr, DEVICE_LITTLE_ENDIAN);
3871 }
3872
3873 uint32_t lduw_be_phys(target_phys_addr_t addr)
3874 {
3875     return lduw_phys_internal(addr, DEVICE_BIG_ENDIAN);
3876 }
3877
3878 /* warning: addr must be aligned. The ram page is not masked as dirty
3879    and the code inside is not invalidated. It is useful if the dirty
3880    bits are used to track modified PTEs */
3881 void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val)
3882 {
3883     uint8_t *ptr;
3884     MemoryRegionSection *section;
3885
3886     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3887
3888     if (!memory_region_is_ram(section->mr) || section->readonly) {
3889         addr = memory_region_section_addr(section, addr);
3890         if (memory_region_is_ram(section->mr)) {
3891             section = &phys_sections[phys_section_rom];
3892         }
3893         io_mem_write(section->mr, addr, val, 4);
3894     } else {
3895         unsigned long addr1 = (memory_region_get_ram_addr(section->mr)
3896                                & TARGET_PAGE_MASK)
3897             + memory_region_section_addr(section, addr);
3898         ptr = qemu_get_ram_ptr(addr1);
3899         stl_p(ptr, val);
3900
3901         if (unlikely(in_migration)) {
3902             if (!cpu_physical_memory_is_dirty(addr1)) {
3903                 /* invalidate code */
3904                 tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
3905                 /* set dirty bit */
3906                 cpu_physical_memory_set_dirty_flags(
3907                     addr1, (0xff & ~CODE_DIRTY_FLAG));
3908             }
3909         }
3910     }
3911 }
3912
3913 void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val)
3914 {
3915     uint8_t *ptr;
3916     MemoryRegionSection *section;
3917
3918     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3919
3920     if (!memory_region_is_ram(section->mr) || section->readonly) {
3921         addr = memory_region_section_addr(section, addr);
3922         if (memory_region_is_ram(section->mr)) {
3923             section = &phys_sections[phys_section_rom];
3924         }
3925 #ifdef TARGET_WORDS_BIGENDIAN
3926         io_mem_write(section->mr, addr, val >> 32, 4);
3927         io_mem_write(section->mr, addr + 4, (uint32_t)val, 4);
3928 #else
3929         io_mem_write(section->mr, addr, (uint32_t)val, 4);
3930         io_mem_write(section->mr, addr + 4, val >> 32, 4);
3931 #endif
3932     } else {
3933         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(section->mr)
3934                                 & TARGET_PAGE_MASK)
3935                                + memory_region_section_addr(section, addr));
3936         stq_p(ptr, val);
3937     }
3938 }
3939
3940 /* warning: addr must be aligned */
3941 static inline void stl_phys_internal(target_phys_addr_t addr, uint32_t val,
3942                                      enum device_endian endian)
3943 {
3944     uint8_t *ptr;
3945     MemoryRegionSection *section;
3946
3947     section = phys_page_find(addr >> TARGET_PAGE_BITS);
3948
3949     if (!memory_region_is_ram(section->mr) || section->readonly) {
3950         addr = memory_region_section_addr(section, addr);
3951         if (memory_region_is_ram(section->mr)) {
3952             section = &phys_sections[phys_section_rom];
3953         }
3954 #if defined(TARGET_WORDS_BIGENDIAN)
3955         if (endian == DEVICE_LITTLE_ENDIAN) {
3956             val = bswap32(val);
3957         }
3958 #else
3959         if (endian == DEVICE_BIG_ENDIAN) {
3960             val = bswap32(val);
3961         }
3962 #endif
3963         io_mem_write(section->mr, addr, val, 4);
3964     } else {
3965         unsigned long addr1;
3966         addr1 = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
3967             + memory_region_section_addr(section, addr);
3968         /* RAM case */
3969         ptr = qemu_get_ram_ptr(addr1);
3970         switch (endian) {
3971         case DEVICE_LITTLE_ENDIAN:
3972             stl_le_p(ptr, val);
3973             break;
3974         case DEVICE_BIG_ENDIAN:
3975             stl_be_p(ptr, val);
3976             break;
3977         default:
3978             stl_p(ptr, val);
3979             break;
3980         }
3981         if (!cpu_physical_memory_is_dirty(addr1)) {
3982             /* invalidate code */
3983             tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
3984             /* set dirty bit */
3985             cpu_physical_memory_set_dirty_flags(addr1,
3986                 (0xff & ~CODE_DIRTY_FLAG));
3987         }
3988     }
3989 }
3990
3991 void stl_phys(target_phys_addr_t addr, uint32_t val)
3992 {
3993     stl_phys_internal(addr, val, DEVICE_NATIVE_ENDIAN);
3994 }
3995
3996 void stl_le_phys(target_phys_addr_t addr, uint32_t val)
3997 {
3998     stl_phys_internal(addr, val, DEVICE_LITTLE_ENDIAN);
3999 }
4000
4001 void stl_be_phys(target_phys_addr_t addr, uint32_t val)
4002 {
4003     stl_phys_internal(addr, val, DEVICE_BIG_ENDIAN);
4004 }
4005
4006 /* XXX: optimize */
4007 void stb_phys(target_phys_addr_t addr, uint32_t val)
4008 {
4009     uint8_t v = val;
4010     cpu_physical_memory_write(addr, &v, 1);
4011 }
4012
4013 /* warning: addr must be aligned */
4014 static inline void stw_phys_internal(target_phys_addr_t addr, uint32_t val,
4015                                      enum device_endian endian)
4016 {
4017     uint8_t *ptr;
4018     MemoryRegionSection *section;
4019
4020     section = phys_page_find(addr >> TARGET_PAGE_BITS);
4021
4022     if (!memory_region_is_ram(section->mr) || section->readonly) {
4023         addr = memory_region_section_addr(section, addr);
4024         if (memory_region_is_ram(section->mr)) {
4025             section = &phys_sections[phys_section_rom];
4026         }
4027 #if defined(TARGET_WORDS_BIGENDIAN)
4028         if (endian == DEVICE_LITTLE_ENDIAN) {
4029             val = bswap16(val);
4030         }
4031 #else
4032         if (endian == DEVICE_BIG_ENDIAN) {
4033             val = bswap16(val);
4034         }
4035 #endif
4036         io_mem_write(section->mr, addr, val, 2);
4037     } else {
4038         unsigned long addr1;
4039         addr1 = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
4040             + memory_region_section_addr(section, addr);
4041         /* RAM case */
4042         ptr = qemu_get_ram_ptr(addr1);
4043         switch (endian) {
4044         case DEVICE_LITTLE_ENDIAN:
4045             stw_le_p(ptr, val);
4046             break;
4047         case DEVICE_BIG_ENDIAN:
4048             stw_be_p(ptr, val);
4049             break;
4050         default:
4051             stw_p(ptr, val);
4052             break;
4053         }
4054         if (!cpu_physical_memory_is_dirty(addr1)) {
4055             /* invalidate code */
4056             tb_invalidate_phys_page_range(addr1, addr1 + 2, 0);
4057             /* set dirty bit */
4058             cpu_physical_memory_set_dirty_flags(addr1,
4059                 (0xff & ~CODE_DIRTY_FLAG));
4060         }
4061     }
4062 }
4063
4064 void stw_phys(target_phys_addr_t addr, uint32_t val)
4065 {
4066     stw_phys_internal(addr, val, DEVICE_NATIVE_ENDIAN);
4067 }
4068
4069 void stw_le_phys(target_phys_addr_t addr, uint32_t val)
4070 {
4071     stw_phys_internal(addr, val, DEVICE_LITTLE_ENDIAN);
4072 }
4073
4074 void stw_be_phys(target_phys_addr_t addr, uint32_t val)
4075 {
4076     stw_phys_internal(addr, val, DEVICE_BIG_ENDIAN);
4077 }
4078
4079 /* XXX: optimize */
4080 void stq_phys(target_phys_addr_t addr, uint64_t val)
4081 {
4082     val = tswap64(val);
4083     cpu_physical_memory_write(addr, &val, 8);
4084 }
4085
4086 void stq_le_phys(target_phys_addr_t addr, uint64_t val)
4087 {
4088     val = cpu_to_le64(val);
4089     cpu_physical_memory_write(addr, &val, 8);
4090 }
4091
4092 void stq_be_phys(target_phys_addr_t addr, uint64_t val)
4093 {
4094     val = cpu_to_be64(val);
4095     cpu_physical_memory_write(addr, &val, 8);
4096 }
4097
4098 /* virtual memory access for debug (includes writing to ROM) */
4099 int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr,
4100                         uint8_t *buf, int len, int is_write)
4101 {
4102     int l;
4103     target_phys_addr_t phys_addr;
4104     target_ulong page;
4105
4106     while (len > 0) {
4107         page = addr & TARGET_PAGE_MASK;
4108         phys_addr = cpu_get_phys_page_debug(env, page);
4109         /* if no physical page mapped, return an error */
4110         if (phys_addr == -1)
4111             return -1;
4112         l = (page + TARGET_PAGE_SIZE) - addr;
4113         if (l > len)
4114             l = len;
4115         phys_addr += (addr & ~TARGET_PAGE_MASK);
4116         if (is_write)
4117             cpu_physical_memory_write_rom(phys_addr, buf, l);
4118         else
4119             cpu_physical_memory_rw(phys_addr, buf, l, is_write);
4120         len -= l;
4121         buf += l;
4122         addr += l;
4123     }
4124     return 0;
4125 }
4126 #endif
4127
4128 /* in deterministic execution mode, instructions doing device I/Os
4129    must be at the end of the TB */
4130 void cpu_io_recompile(CPUArchState *env, uintptr_t retaddr)
4131 {
4132     TranslationBlock *tb;
4133     uint32_t n, cflags;
4134     target_ulong pc, cs_base;
4135     uint64_t flags;
4136
4137     tb = tb_find_pc(retaddr);
4138     if (!tb) {
4139         cpu_abort(env, "cpu_io_recompile: could not find TB for pc=%p", 
4140                   (void *)retaddr);
4141     }
4142     n = env->icount_decr.u16.low + tb->icount;
4143     cpu_restore_state(tb, env, retaddr);
4144     /* Calculate how many instructions had been executed before the fault
4145        occurred.  */
4146     n = n - env->icount_decr.u16.low;
4147     /* Generate a new TB ending on the I/O insn.  */
4148     n++;
4149     /* On MIPS and SH, delay slot instructions can only be restarted if
4150        they were already the first instruction in the TB.  If this is not
4151        the first instruction in a TB then re-execute the preceding
4152        branch.  */
4153 #if defined(TARGET_MIPS)
4154     if ((env->hflags & MIPS_HFLAG_BMASK) != 0 && n > 1) {
4155         env->active_tc.PC -= 4;
4156         env->icount_decr.u16.low++;
4157         env->hflags &= ~MIPS_HFLAG_BMASK;
4158     }
4159 #elif defined(TARGET_SH4)
4160     if ((env->flags & ((DELAY_SLOT | DELAY_SLOT_CONDITIONAL))) != 0
4161             && n > 1) {
4162         env->pc -= 2;
4163         env->icount_decr.u16.low++;
4164         env->flags &= ~(DELAY_SLOT | DELAY_SLOT_CONDITIONAL);
4165     }
4166 #endif
4167     /* This should never happen.  */
4168     if (n > CF_COUNT_MASK)
4169         cpu_abort(env, "TB too big during recompile");
4170
4171     cflags = n | CF_LAST_IO;
4172     pc = tb->pc;
4173     cs_base = tb->cs_base;
4174     flags = tb->flags;
4175     tb_phys_invalidate(tb, -1);
4176     /* FIXME: In theory this could raise an exception.  In practice
4177        we have already translated the block once so it's probably ok.  */
4178     tb_gen_code(env, pc, cs_base, flags, cflags);
4179     /* TODO: If env->pc != tb->pc (i.e. the faulting instruction was not
4180        the first in the TB) then we end up generating a whole new TB and
4181        repeating the fault, which is horribly inefficient.
4182        Better would be to execute just this insn uncached, or generate a
4183        second new TB.  */
4184     cpu_resume_from_signal(env, NULL);
4185 }
4186
4187 #if !defined(CONFIG_USER_ONLY)
4188
4189 void dump_exec_info(FILE *f, fprintf_function cpu_fprintf)
4190 {
4191     int i, target_code_size, max_target_code_size;
4192     int direct_jmp_count, direct_jmp2_count, cross_page;
4193     TranslationBlock *tb;
4194
4195     target_code_size = 0;
4196     max_target_code_size = 0;
4197     cross_page = 0;
4198     direct_jmp_count = 0;
4199     direct_jmp2_count = 0;
4200     for(i = 0; i < nb_tbs; i++) {
4201         tb = &tbs[i];
4202         target_code_size += tb->size;
4203         if (tb->size > max_target_code_size)
4204             max_target_code_size = tb->size;
4205         if (tb->page_addr[1] != -1)
4206             cross_page++;
4207         if (tb->tb_next_offset[0] != 0xffff) {
4208             direct_jmp_count++;
4209             if (tb->tb_next_offset[1] != 0xffff) {
4210                 direct_jmp2_count++;
4211             }
4212         }
4213     }
4214     /* XXX: avoid using doubles ? */
4215     cpu_fprintf(f, "Translation buffer state:\n");
4216     cpu_fprintf(f, "gen code size       %td/%ld\n",
4217                 code_gen_ptr - code_gen_buffer, code_gen_buffer_max_size);
4218     cpu_fprintf(f, "TB count            %d/%d\n", 
4219                 nb_tbs, code_gen_max_blocks);
4220     cpu_fprintf(f, "TB avg target size  %d max=%d bytes\n",
4221                 nb_tbs ? target_code_size / nb_tbs : 0,
4222                 max_target_code_size);
4223     cpu_fprintf(f, "TB avg host size    %td bytes (expansion ratio: %0.1f)\n",
4224                 nb_tbs ? (code_gen_ptr - code_gen_buffer) / nb_tbs : 0,
4225                 target_code_size ? (double) (code_gen_ptr - code_gen_buffer) / target_code_size : 0);
4226     cpu_fprintf(f, "cross page TB count %d (%d%%)\n",
4227             cross_page,
4228             nb_tbs ? (cross_page * 100) / nb_tbs : 0);
4229     cpu_fprintf(f, "direct jump count   %d (%d%%) (2 jumps=%d %d%%)\n",
4230                 direct_jmp_count,
4231                 nb_tbs ? (direct_jmp_count * 100) / nb_tbs : 0,
4232                 direct_jmp2_count,
4233                 nb_tbs ? (direct_jmp2_count * 100) / nb_tbs : 0);
4234     cpu_fprintf(f, "\nStatistics:\n");
4235     cpu_fprintf(f, "TB flush count      %d\n", tb_flush_count);
4236     cpu_fprintf(f, "TB invalidate count %d\n", tb_phys_invalidate_count);
4237     cpu_fprintf(f, "TLB flush count     %d\n", tlb_flush_count);
4238     tcg_dump_info(f, cpu_fprintf);
4239 }
4240
4241 /*
4242  * A helper function for the _utterly broken_ virtio device model to find out if
4243  * it's running on a big endian machine. Don't do this at home kids!
4244  */
4245 bool virtio_is_big_endian(void);
4246 bool virtio_is_big_endian(void)
4247 {
4248 #if defined(TARGET_WORDS_BIGENDIAN)
4249     return true;
4250 #else
4251     return false;
4252 #endif
4253 }
4254
4255 #endif
4256
4257 #ifndef CONFIG_USER_ONLY
4258 bool cpu_physical_memory_is_io(target_phys_addr_t phys_addr)
4259 {
4260     MemoryRegionSection *section;
4261
4262     section = phys_page_find(phys_addr >> TARGET_PAGE_BITS);
4263
4264     return !(memory_region_is_ram(section->mr) ||
4265              memory_region_is_romd(section->mr));
4266 }
4267 #endif
This page took 0.251183 seconds and 4 git commands to generate.