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