]> Git Repo - qemu.git/blob - exec.c
CPUPhysMemoryClient: batch addresses in catchup
[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 struct last_map {
1754     target_phys_addr_t start_addr;
1755     ram_addr_t size;
1756     ram_addr_t phys_offset;
1757 };
1758
1759 /* The l1_phys_map provides the upper P_L1_BITs of the guest physical
1760  * address.  Each intermediate table provides the next L2_BITs of guest
1761  * physical address space.  The number of levels vary based on host and
1762  * guest configuration, making it efficient to build the final guest
1763  * physical address by seeding the L1 offset and shifting and adding in
1764  * each L2 offset as we recurse through them. */
1765 static void phys_page_for_each_1(CPUPhysMemoryClient *client, int level,
1766                                  void **lp, target_phys_addr_t addr,
1767                                  struct last_map *map)
1768 {
1769     int i;
1770
1771     if (*lp == NULL) {
1772         return;
1773     }
1774     if (level == 0) {
1775         PhysPageDesc *pd = *lp;
1776         addr <<= L2_BITS + TARGET_PAGE_BITS;
1777         for (i = 0; i < L2_SIZE; ++i) {
1778             if (pd[i].phys_offset != IO_MEM_UNASSIGNED) {
1779                 target_phys_addr_t start_addr = addr | i << TARGET_PAGE_BITS;
1780
1781                 if (map->size &&
1782                     start_addr == map->start_addr + map->size &&
1783                     pd[i].phys_offset == map->phys_offset + map->size) {
1784
1785                     map->size += TARGET_PAGE_SIZE;
1786                     continue;
1787                 } else if (map->size) {
1788                     client->set_memory(client, map->start_addr,
1789                                        map->size, map->phys_offset, false);
1790                 }
1791
1792                 map->start_addr = start_addr;
1793                 map->size = TARGET_PAGE_SIZE;
1794                 map->phys_offset = pd[i].phys_offset;
1795             }
1796         }
1797     } else {
1798         void **pp = *lp;
1799         for (i = 0; i < L2_SIZE; ++i) {
1800             phys_page_for_each_1(client, level - 1, pp + i,
1801                                  (addr << L2_BITS) | i, map);
1802         }
1803     }
1804 }
1805
1806 static void phys_page_for_each(CPUPhysMemoryClient *client)
1807 {
1808     int i;
1809     struct last_map map = { };
1810
1811     for (i = 0; i < P_L1_SIZE; ++i) {
1812         phys_page_for_each_1(client, P_L1_SHIFT / L2_BITS - 1,
1813                              l1_phys_map + i, i, &map);
1814     }
1815     if (map.size) {
1816         client->set_memory(client, map.start_addr, map.size, map.phys_offset,
1817                            false);
1818     }
1819 }
1820
1821 void cpu_register_phys_memory_client(CPUPhysMemoryClient *client)
1822 {
1823     QLIST_INSERT_HEAD(&memory_client_list, client, list);
1824     phys_page_for_each(client);
1825 }
1826
1827 void cpu_unregister_phys_memory_client(CPUPhysMemoryClient *client)
1828 {
1829     QLIST_REMOVE(client, list);
1830 }
1831 #endif
1832
1833 static int cmp1(const char *s1, int n, const char *s2)
1834 {
1835     if (strlen(s2) != n)
1836         return 0;
1837     return memcmp(s1, s2, n) == 0;
1838 }
1839
1840 /* takes a comma separated list of log masks. Return 0 if error. */
1841 int cpu_str_to_log_mask(const char *str)
1842 {
1843     const CPULogItem *item;
1844     int mask;
1845     const char *p, *p1;
1846
1847     p = str;
1848     mask = 0;
1849     for(;;) {
1850         p1 = strchr(p, ',');
1851         if (!p1)
1852             p1 = p + strlen(p);
1853         if(cmp1(p,p1-p,"all")) {
1854             for(item = cpu_log_items; item->mask != 0; item++) {
1855                 mask |= item->mask;
1856             }
1857         } else {
1858             for(item = cpu_log_items; item->mask != 0; item++) {
1859                 if (cmp1(p, p1 - p, item->name))
1860                     goto found;
1861             }
1862             return 0;
1863         }
1864     found:
1865         mask |= item->mask;
1866         if (*p1 != ',')
1867             break;
1868         p = p1 + 1;
1869     }
1870     return mask;
1871 }
1872
1873 void cpu_abort(CPUState *env, const char *fmt, ...)
1874 {
1875     va_list ap;
1876     va_list ap2;
1877
1878     va_start(ap, fmt);
1879     va_copy(ap2, ap);
1880     fprintf(stderr, "qemu: fatal: ");
1881     vfprintf(stderr, fmt, ap);
1882     fprintf(stderr, "\n");
1883 #ifdef TARGET_I386
1884     cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU | X86_DUMP_CCOP);
1885 #else
1886     cpu_dump_state(env, stderr, fprintf, 0);
1887 #endif
1888     if (qemu_log_enabled()) {
1889         qemu_log("qemu: fatal: ");
1890         qemu_log_vprintf(fmt, ap2);
1891         qemu_log("\n");
1892 #ifdef TARGET_I386
1893         log_cpu_state(env, X86_DUMP_FPU | X86_DUMP_CCOP);
1894 #else
1895         log_cpu_state(env, 0);
1896 #endif
1897         qemu_log_flush();
1898         qemu_log_close();
1899     }
1900     va_end(ap2);
1901     va_end(ap);
1902 #if defined(CONFIG_USER_ONLY)
1903     {
1904         struct sigaction act;
1905         sigfillset(&act.sa_mask);
1906         act.sa_handler = SIG_DFL;
1907         sigaction(SIGABRT, &act, NULL);
1908     }
1909 #endif
1910     abort();
1911 }
1912
1913 CPUState *cpu_copy(CPUState *env)
1914 {
1915     CPUState *new_env = cpu_init(env->cpu_model_str);
1916     CPUState *next_cpu = new_env->next_cpu;
1917     int cpu_index = new_env->cpu_index;
1918 #if defined(TARGET_HAS_ICE)
1919     CPUBreakpoint *bp;
1920     CPUWatchpoint *wp;
1921 #endif
1922
1923     memcpy(new_env, env, sizeof(CPUState));
1924
1925     /* Preserve chaining and index. */
1926     new_env->next_cpu = next_cpu;
1927     new_env->cpu_index = cpu_index;
1928
1929     /* Clone all break/watchpoints.
1930        Note: Once we support ptrace with hw-debug register access, make sure
1931        BP_CPU break/watchpoints are handled correctly on clone. */
1932     QTAILQ_INIT(&env->breakpoints);
1933     QTAILQ_INIT(&env->watchpoints);
1934 #if defined(TARGET_HAS_ICE)
1935     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
1936         cpu_breakpoint_insert(new_env, bp->pc, bp->flags, NULL);
1937     }
1938     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1939         cpu_watchpoint_insert(new_env, wp->vaddr, (~wp->len_mask) + 1,
1940                               wp->flags, NULL);
1941     }
1942 #endif
1943
1944     return new_env;
1945 }
1946
1947 #if !defined(CONFIG_USER_ONLY)
1948
1949 static inline void tlb_flush_jmp_cache(CPUState *env, target_ulong addr)
1950 {
1951     unsigned int i;
1952
1953     /* Discard jump cache entries for any tb which might potentially
1954        overlap the flushed page.  */
1955     i = tb_jmp_cache_hash_page(addr - TARGET_PAGE_SIZE);
1956     memset (&env->tb_jmp_cache[i], 0, 
1957             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1958
1959     i = tb_jmp_cache_hash_page(addr);
1960     memset (&env->tb_jmp_cache[i], 0, 
1961             TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
1962 }
1963
1964 static CPUTLBEntry s_cputlb_empty_entry = {
1965     .addr_read  = -1,
1966     .addr_write = -1,
1967     .addr_code  = -1,
1968     .addend     = -1,
1969 };
1970
1971 /* NOTE: if flush_global is true, also flush global entries (not
1972    implemented yet) */
1973 void tlb_flush(CPUState *env, int flush_global)
1974 {
1975     int i;
1976
1977 #if defined(DEBUG_TLB)
1978     printf("tlb_flush:\n");
1979 #endif
1980     /* must reset current TB so that interrupts cannot modify the
1981        links while we are modifying them */
1982     env->current_tb = NULL;
1983
1984     for(i = 0; i < CPU_TLB_SIZE; i++) {
1985         int mmu_idx;
1986         for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
1987             env->tlb_table[mmu_idx][i] = s_cputlb_empty_entry;
1988         }
1989     }
1990
1991     memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *));
1992
1993     env->tlb_flush_addr = -1;
1994     env->tlb_flush_mask = 0;
1995     tlb_flush_count++;
1996 }
1997
1998 static inline void tlb_flush_entry(CPUTLBEntry *tlb_entry, target_ulong addr)
1999 {
2000     if (addr == (tlb_entry->addr_read &
2001                  (TARGET_PAGE_MASK | TLB_INVALID_MASK)) ||
2002         addr == (tlb_entry->addr_write &
2003                  (TARGET_PAGE_MASK | TLB_INVALID_MASK)) ||
2004         addr == (tlb_entry->addr_code &
2005                  (TARGET_PAGE_MASK | TLB_INVALID_MASK))) {
2006         *tlb_entry = s_cputlb_empty_entry;
2007     }
2008 }
2009
2010 void tlb_flush_page(CPUState *env, target_ulong addr)
2011 {
2012     int i;
2013     int mmu_idx;
2014
2015 #if defined(DEBUG_TLB)
2016     printf("tlb_flush_page: " TARGET_FMT_lx "\n", addr);
2017 #endif
2018     /* Check if we need to flush due to large pages.  */
2019     if ((addr & env->tlb_flush_mask) == env->tlb_flush_addr) {
2020 #if defined(DEBUG_TLB)
2021         printf("tlb_flush_page: forced full flush ("
2022                TARGET_FMT_lx "/" TARGET_FMT_lx ")\n",
2023                env->tlb_flush_addr, env->tlb_flush_mask);
2024 #endif
2025         tlb_flush(env, 1);
2026         return;
2027     }
2028     /* must reset current TB so that interrupts cannot modify the
2029        links while we are modifying them */
2030     env->current_tb = NULL;
2031
2032     addr &= TARGET_PAGE_MASK;
2033     i = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2034     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++)
2035         tlb_flush_entry(&env->tlb_table[mmu_idx][i], addr);
2036
2037     tlb_flush_jmp_cache(env, addr);
2038 }
2039
2040 /* update the TLBs so that writes to code in the virtual page 'addr'
2041    can be detected */
2042 static void tlb_protect_code(ram_addr_t ram_addr)
2043 {
2044     cpu_physical_memory_reset_dirty(ram_addr,
2045                                     ram_addr + TARGET_PAGE_SIZE,
2046                                     CODE_DIRTY_FLAG);
2047 }
2048
2049 /* update the TLB so that writes in physical page 'phys_addr' are no longer
2050    tested for self modifying code */
2051 static void tlb_unprotect_code_phys(CPUState *env, ram_addr_t ram_addr,
2052                                     target_ulong vaddr)
2053 {
2054     cpu_physical_memory_set_dirty_flags(ram_addr, CODE_DIRTY_FLAG);
2055 }
2056
2057 static inline void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry,
2058                                          unsigned long start, unsigned long length)
2059 {
2060     unsigned long addr;
2061     if ((tlb_entry->addr_write & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
2062         addr = (tlb_entry->addr_write & TARGET_PAGE_MASK) + tlb_entry->addend;
2063         if ((addr - start) < length) {
2064             tlb_entry->addr_write = (tlb_entry->addr_write & TARGET_PAGE_MASK) | TLB_NOTDIRTY;
2065         }
2066     }
2067 }
2068
2069 /* Note: start and end must be within the same ram block.  */
2070 void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
2071                                      int dirty_flags)
2072 {
2073     CPUState *env;
2074     unsigned long length, start1;
2075     int i;
2076
2077     start &= TARGET_PAGE_MASK;
2078     end = TARGET_PAGE_ALIGN(end);
2079
2080     length = end - start;
2081     if (length == 0)
2082         return;
2083     cpu_physical_memory_mask_dirty_range(start, length, dirty_flags);
2084
2085     /* we modify the TLB cache so that the dirty bit will be set again
2086        when accessing the range */
2087     start1 = (unsigned long)qemu_safe_ram_ptr(start);
2088     /* Chek that we don't span multiple blocks - this breaks the
2089        address comparisons below.  */
2090     if ((unsigned long)qemu_safe_ram_ptr(end - 1) - start1
2091             != (end - 1) - start) {
2092         abort();
2093     }
2094
2095     for(env = first_cpu; env != NULL; env = env->next_cpu) {
2096         int mmu_idx;
2097         for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
2098             for(i = 0; i < CPU_TLB_SIZE; i++)
2099                 tlb_reset_dirty_range(&env->tlb_table[mmu_idx][i],
2100                                       start1, length);
2101         }
2102     }
2103 }
2104
2105 int cpu_physical_memory_set_dirty_tracking(int enable)
2106 {
2107     int ret = 0;
2108     in_migration = enable;
2109     ret = cpu_notify_migration_log(!!enable);
2110     return ret;
2111 }
2112
2113 int cpu_physical_memory_get_dirty_tracking(void)
2114 {
2115     return in_migration;
2116 }
2117
2118 int cpu_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
2119                                    target_phys_addr_t end_addr)
2120 {
2121     int ret;
2122
2123     ret = cpu_notify_sync_dirty_bitmap(start_addr, end_addr);
2124     return ret;
2125 }
2126
2127 int cpu_physical_log_start(target_phys_addr_t start_addr,
2128                            ram_addr_t size)
2129 {
2130     CPUPhysMemoryClient *client;
2131     QLIST_FOREACH(client, &memory_client_list, list) {
2132         if (client->log_start) {
2133             int r = client->log_start(client, start_addr, size);
2134             if (r < 0) {
2135                 return r;
2136             }
2137         }
2138     }
2139     return 0;
2140 }
2141
2142 int cpu_physical_log_stop(target_phys_addr_t start_addr,
2143                           ram_addr_t size)
2144 {
2145     CPUPhysMemoryClient *client;
2146     QLIST_FOREACH(client, &memory_client_list, list) {
2147         if (client->log_stop) {
2148             int r = client->log_stop(client, start_addr, size);
2149             if (r < 0) {
2150                 return r;
2151             }
2152         }
2153     }
2154     return 0;
2155 }
2156
2157 static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry)
2158 {
2159     ram_addr_t ram_addr;
2160     void *p;
2161
2162     if ((tlb_entry->addr_write & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
2163         p = (void *)(unsigned long)((tlb_entry->addr_write & TARGET_PAGE_MASK)
2164             + tlb_entry->addend);
2165         ram_addr = qemu_ram_addr_from_host_nofail(p);
2166         if (!cpu_physical_memory_is_dirty(ram_addr)) {
2167             tlb_entry->addr_write |= TLB_NOTDIRTY;
2168         }
2169     }
2170 }
2171
2172 /* update the TLB according to the current state of the dirty bits */
2173 void cpu_tlb_update_dirty(CPUState *env)
2174 {
2175     int i;
2176     int mmu_idx;
2177     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++) {
2178         for(i = 0; i < CPU_TLB_SIZE; i++)
2179             tlb_update_dirty(&env->tlb_table[mmu_idx][i]);
2180     }
2181 }
2182
2183 static inline void tlb_set_dirty1(CPUTLBEntry *tlb_entry, target_ulong vaddr)
2184 {
2185     if (tlb_entry->addr_write == (vaddr | TLB_NOTDIRTY))
2186         tlb_entry->addr_write = vaddr;
2187 }
2188
2189 /* update the TLB corresponding to virtual page vaddr
2190    so that it is no longer dirty */
2191 static inline void tlb_set_dirty(CPUState *env, target_ulong vaddr)
2192 {
2193     int i;
2194     int mmu_idx;
2195
2196     vaddr &= TARGET_PAGE_MASK;
2197     i = (vaddr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2198     for (mmu_idx = 0; mmu_idx < NB_MMU_MODES; mmu_idx++)
2199         tlb_set_dirty1(&env->tlb_table[mmu_idx][i], vaddr);
2200 }
2201
2202 /* Our TLB does not support large pages, so remember the area covered by
2203    large pages and trigger a full TLB flush if these are invalidated.  */
2204 static void tlb_add_large_page(CPUState *env, target_ulong vaddr,
2205                                target_ulong size)
2206 {
2207     target_ulong mask = ~(size - 1);
2208
2209     if (env->tlb_flush_addr == (target_ulong)-1) {
2210         env->tlb_flush_addr = vaddr & mask;
2211         env->tlb_flush_mask = mask;
2212         return;
2213     }
2214     /* Extend the existing region to include the new page.
2215        This is a compromise between unnecessary flushes and the cost
2216        of maintaining a full variable size TLB.  */
2217     mask &= env->tlb_flush_mask;
2218     while (((env->tlb_flush_addr ^ vaddr) & mask) != 0) {
2219         mask <<= 1;
2220     }
2221     env->tlb_flush_addr &= mask;
2222     env->tlb_flush_mask = mask;
2223 }
2224
2225 /* Add a new TLB entry. At most one entry for a given virtual address
2226    is permitted. Only a single TARGET_PAGE_SIZE region is mapped, the
2227    supplied size is only used by tlb_flush_page.  */
2228 void tlb_set_page(CPUState *env, target_ulong vaddr,
2229                   target_phys_addr_t paddr, int prot,
2230                   int mmu_idx, target_ulong size)
2231 {
2232     PhysPageDesc *p;
2233     unsigned long pd;
2234     unsigned int index;
2235     target_ulong address;
2236     target_ulong code_address;
2237     unsigned long addend;
2238     CPUTLBEntry *te;
2239     CPUWatchpoint *wp;
2240     target_phys_addr_t iotlb;
2241
2242     assert(size >= TARGET_PAGE_SIZE);
2243     if (size != TARGET_PAGE_SIZE) {
2244         tlb_add_large_page(env, vaddr, size);
2245     }
2246     p = phys_page_find(paddr >> TARGET_PAGE_BITS);
2247     if (!p) {
2248         pd = IO_MEM_UNASSIGNED;
2249     } else {
2250         pd = p->phys_offset;
2251     }
2252 #if defined(DEBUG_TLB)
2253     printf("tlb_set_page: vaddr=" TARGET_FMT_lx " paddr=0x" TARGET_FMT_plx
2254            " prot=%x idx=%d pd=0x%08lx\n",
2255            vaddr, paddr, prot, mmu_idx, pd);
2256 #endif
2257
2258     address = vaddr;
2259     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
2260         /* IO memory case (romd handled later) */
2261         address |= TLB_MMIO;
2262     }
2263     addend = (unsigned long)qemu_get_ram_ptr(pd & TARGET_PAGE_MASK);
2264     if ((pd & ~TARGET_PAGE_MASK) <= IO_MEM_ROM) {
2265         /* Normal RAM.  */
2266         iotlb = pd & TARGET_PAGE_MASK;
2267         if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM)
2268             iotlb |= IO_MEM_NOTDIRTY;
2269         else
2270             iotlb |= IO_MEM_ROM;
2271     } else {
2272         /* IO handlers are currently passed a physical address.
2273            It would be nice to pass an offset from the base address
2274            of that region.  This would avoid having to special case RAM,
2275            and avoid full address decoding in every device.
2276            We can't use the high bits of pd for this because
2277            IO_MEM_ROMD uses these as a ram address.  */
2278         iotlb = (pd & ~TARGET_PAGE_MASK);
2279         if (p) {
2280             iotlb += p->region_offset;
2281         } else {
2282             iotlb += paddr;
2283         }
2284     }
2285
2286     code_address = address;
2287     /* Make accesses to pages with watchpoints go via the
2288        watchpoint trap routines.  */
2289     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
2290         if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) {
2291             /* Avoid trapping reads of pages with a write breakpoint. */
2292             if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
2293                 iotlb = io_mem_watch + paddr;
2294                 address |= TLB_MMIO;
2295                 break;
2296             }
2297         }
2298     }
2299
2300     index = (vaddr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
2301     env->iotlb[mmu_idx][index] = iotlb - vaddr;
2302     te = &env->tlb_table[mmu_idx][index];
2303     te->addend = addend - vaddr;
2304     if (prot & PAGE_READ) {
2305         te->addr_read = address;
2306     } else {
2307         te->addr_read = -1;
2308     }
2309
2310     if (prot & PAGE_EXEC) {
2311         te->addr_code = code_address;
2312     } else {
2313         te->addr_code = -1;
2314     }
2315     if (prot & PAGE_WRITE) {
2316         if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_ROM ||
2317             (pd & IO_MEM_ROMD)) {
2318             /* Write access calls the I/O callback.  */
2319             te->addr_write = address | TLB_MMIO;
2320         } else if ((pd & ~TARGET_PAGE_MASK) == IO_MEM_RAM &&
2321                    !cpu_physical_memory_is_dirty(pd)) {
2322             te->addr_write = address | TLB_NOTDIRTY;
2323         } else {
2324             te->addr_write = address;
2325         }
2326     } else {
2327         te->addr_write = -1;
2328     }
2329 }
2330
2331 #else
2332
2333 void tlb_flush(CPUState *env, int flush_global)
2334 {
2335 }
2336
2337 void tlb_flush_page(CPUState *env, target_ulong addr)
2338 {
2339 }
2340
2341 /*
2342  * Walks guest process memory "regions" one by one
2343  * and calls callback function 'fn' for each region.
2344  */
2345
2346 struct walk_memory_regions_data
2347 {
2348     walk_memory_regions_fn fn;
2349     void *priv;
2350     unsigned long start;
2351     int prot;
2352 };
2353
2354 static int walk_memory_regions_end(struct walk_memory_regions_data *data,
2355                                    abi_ulong end, int new_prot)
2356 {
2357     if (data->start != -1ul) {
2358         int rc = data->fn(data->priv, data->start, end, data->prot);
2359         if (rc != 0) {
2360             return rc;
2361         }
2362     }
2363
2364     data->start = (new_prot ? end : -1ul);
2365     data->prot = new_prot;
2366
2367     return 0;
2368 }
2369
2370 static int walk_memory_regions_1(struct walk_memory_regions_data *data,
2371                                  abi_ulong base, int level, void **lp)
2372 {
2373     abi_ulong pa;
2374     int i, rc;
2375
2376     if (*lp == NULL) {
2377         return walk_memory_regions_end(data, base, 0);
2378     }
2379
2380     if (level == 0) {
2381         PageDesc *pd = *lp;
2382         for (i = 0; i < L2_SIZE; ++i) {
2383             int prot = pd[i].flags;
2384
2385             pa = base | (i << TARGET_PAGE_BITS);
2386             if (prot != data->prot) {
2387                 rc = walk_memory_regions_end(data, pa, prot);
2388                 if (rc != 0) {
2389                     return rc;
2390                 }
2391             }
2392         }
2393     } else {
2394         void **pp = *lp;
2395         for (i = 0; i < L2_SIZE; ++i) {
2396             pa = base | ((abi_ulong)i <<
2397                 (TARGET_PAGE_BITS + L2_BITS * level));
2398             rc = walk_memory_regions_1(data, pa, level - 1, pp + i);
2399             if (rc != 0) {
2400                 return rc;
2401             }
2402         }
2403     }
2404
2405     return 0;
2406 }
2407
2408 int walk_memory_regions(void *priv, walk_memory_regions_fn fn)
2409 {
2410     struct walk_memory_regions_data data;
2411     unsigned long i;
2412
2413     data.fn = fn;
2414     data.priv = priv;
2415     data.start = -1ul;
2416     data.prot = 0;
2417
2418     for (i = 0; i < V_L1_SIZE; i++) {
2419         int rc = walk_memory_regions_1(&data, (abi_ulong)i << V_L1_SHIFT,
2420                                        V_L1_SHIFT / L2_BITS - 1, l1_map + i);
2421         if (rc != 0) {
2422             return rc;
2423         }
2424     }
2425
2426     return walk_memory_regions_end(&data, 0, 0);
2427 }
2428
2429 static int dump_region(void *priv, abi_ulong start,
2430     abi_ulong end, unsigned long prot)
2431 {
2432     FILE *f = (FILE *)priv;
2433
2434     (void) fprintf(f, TARGET_ABI_FMT_lx"-"TARGET_ABI_FMT_lx
2435         " "TARGET_ABI_FMT_lx" %c%c%c\n",
2436         start, end, end - start,
2437         ((prot & PAGE_READ) ? 'r' : '-'),
2438         ((prot & PAGE_WRITE) ? 'w' : '-'),
2439         ((prot & PAGE_EXEC) ? 'x' : '-'));
2440
2441     return (0);
2442 }
2443
2444 /* dump memory mappings */
2445 void page_dump(FILE *f)
2446 {
2447     (void) fprintf(f, "%-8s %-8s %-8s %s\n",
2448             "start", "end", "size", "prot");
2449     walk_memory_regions(f, dump_region);
2450 }
2451
2452 int page_get_flags(target_ulong address)
2453 {
2454     PageDesc *p;
2455
2456     p = page_find(address >> TARGET_PAGE_BITS);
2457     if (!p)
2458         return 0;
2459     return p->flags;
2460 }
2461
2462 /* Modify the flags of a page and invalidate the code if necessary.
2463    The flag PAGE_WRITE_ORG is positioned automatically depending
2464    on PAGE_WRITE.  The mmap_lock should already be held.  */
2465 void page_set_flags(target_ulong start, target_ulong end, int flags)
2466 {
2467     target_ulong addr, len;
2468
2469     /* This function should never be called with addresses outside the
2470        guest address space.  If this assert fires, it probably indicates
2471        a missing call to h2g_valid.  */
2472 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2473     assert(end < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2474 #endif
2475     assert(start < end);
2476
2477     start = start & TARGET_PAGE_MASK;
2478     end = TARGET_PAGE_ALIGN(end);
2479
2480     if (flags & PAGE_WRITE) {
2481         flags |= PAGE_WRITE_ORG;
2482     }
2483
2484     for (addr = start, len = end - start;
2485          len != 0;
2486          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2487         PageDesc *p = page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
2488
2489         /* If the write protection bit is set, then we invalidate
2490            the code inside.  */
2491         if (!(p->flags & PAGE_WRITE) &&
2492             (flags & PAGE_WRITE) &&
2493             p->first_tb) {
2494             tb_invalidate_phys_page(addr, 0, NULL);
2495         }
2496         p->flags = flags;
2497     }
2498 }
2499
2500 int page_check_range(target_ulong start, target_ulong len, int flags)
2501 {
2502     PageDesc *p;
2503     target_ulong end;
2504     target_ulong addr;
2505
2506     /* This function should never be called with addresses outside the
2507        guest address space.  If this assert fires, it probably indicates
2508        a missing call to h2g_valid.  */
2509 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2510     assert(start < ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2511 #endif
2512
2513     if (len == 0) {
2514         return 0;
2515     }
2516     if (start + len - 1 < start) {
2517         /* We've wrapped around.  */
2518         return -1;
2519     }
2520
2521     end = TARGET_PAGE_ALIGN(start+len); /* must do before we loose bits in the next step */
2522     start = start & TARGET_PAGE_MASK;
2523
2524     for (addr = start, len = end - start;
2525          len != 0;
2526          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2527         p = page_find(addr >> TARGET_PAGE_BITS);
2528         if( !p )
2529             return -1;
2530         if( !(p->flags & PAGE_VALID) )
2531             return -1;
2532
2533         if ((flags & PAGE_READ) && !(p->flags & PAGE_READ))
2534             return -1;
2535         if (flags & PAGE_WRITE) {
2536             if (!(p->flags & PAGE_WRITE_ORG))
2537                 return -1;
2538             /* unprotect the page if it was put read-only because it
2539                contains translated code */
2540             if (!(p->flags & PAGE_WRITE)) {
2541                 if (!page_unprotect(addr, 0, NULL))
2542                     return -1;
2543             }
2544             return 0;
2545         }
2546     }
2547     return 0;
2548 }
2549
2550 /* called from signal handler: invalidate the code and unprotect the
2551    page. Return TRUE if the fault was successfully handled. */
2552 int page_unprotect(target_ulong address, unsigned long pc, void *puc)
2553 {
2554     unsigned int prot;
2555     PageDesc *p;
2556     target_ulong host_start, host_end, addr;
2557
2558     /* Technically this isn't safe inside a signal handler.  However we
2559        know this only ever happens in a synchronous SEGV handler, so in
2560        practice it seems to be ok.  */
2561     mmap_lock();
2562
2563     p = page_find(address >> TARGET_PAGE_BITS);
2564     if (!p) {
2565         mmap_unlock();
2566         return 0;
2567     }
2568
2569     /* if the page was really writable, then we change its
2570        protection back to writable */
2571     if ((p->flags & PAGE_WRITE_ORG) && !(p->flags & PAGE_WRITE)) {
2572         host_start = address & qemu_host_page_mask;
2573         host_end = host_start + qemu_host_page_size;
2574
2575         prot = 0;
2576         for (addr = host_start ; addr < host_end ; addr += TARGET_PAGE_SIZE) {
2577             p = page_find(addr >> TARGET_PAGE_BITS);
2578             p->flags |= PAGE_WRITE;
2579             prot |= p->flags;
2580
2581             /* and since the content will be modified, we must invalidate
2582                the corresponding translated code. */
2583             tb_invalidate_phys_page(addr, pc, puc);
2584 #ifdef DEBUG_TB_CHECK
2585             tb_invalidate_check(addr);
2586 #endif
2587         }
2588         mprotect((void *)g2h(host_start), qemu_host_page_size,
2589                  prot & PAGE_BITS);
2590
2591         mmap_unlock();
2592         return 1;
2593     }
2594     mmap_unlock();
2595     return 0;
2596 }
2597
2598 static inline void tlb_set_dirty(CPUState *env,
2599                                  unsigned long addr, target_ulong vaddr)
2600 {
2601 }
2602 #endif /* defined(CONFIG_USER_ONLY) */
2603
2604 #if !defined(CONFIG_USER_ONLY)
2605
2606 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
2607 typedef struct subpage_t {
2608     target_phys_addr_t base;
2609     ram_addr_t sub_io_index[TARGET_PAGE_SIZE];
2610     ram_addr_t region_offset[TARGET_PAGE_SIZE];
2611 } subpage_t;
2612
2613 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2614                              ram_addr_t memory, ram_addr_t region_offset);
2615 static subpage_t *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
2616                                 ram_addr_t orig_memory,
2617                                 ram_addr_t region_offset);
2618 #define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \
2619                       need_subpage)                                     \
2620     do {                                                                \
2621         if (addr > start_addr)                                          \
2622             start_addr2 = 0;                                            \
2623         else {                                                          \
2624             start_addr2 = start_addr & ~TARGET_PAGE_MASK;               \
2625             if (start_addr2 > 0)                                        \
2626                 need_subpage = 1;                                       \
2627         }                                                               \
2628                                                                         \
2629         if ((start_addr + orig_size) - addr >= TARGET_PAGE_SIZE)        \
2630             end_addr2 = TARGET_PAGE_SIZE - 1;                           \
2631         else {                                                          \
2632             end_addr2 = (start_addr + orig_size - 1) & ~TARGET_PAGE_MASK; \
2633             if (end_addr2 < TARGET_PAGE_SIZE - 1)                       \
2634                 need_subpage = 1;                                       \
2635         }                                                               \
2636     } while (0)
2637
2638 /* register physical memory.
2639    For RAM, 'size' must be a multiple of the target page size.
2640    If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an
2641    io memory page.  The address used when calling the IO function is
2642    the offset from the start of the region, plus region_offset.  Both
2643    start_addr and region_offset are rounded down to a page boundary
2644    before calculating this offset.  This should not be a problem unless
2645    the low bits of start_addr and region_offset differ.  */
2646 void cpu_register_physical_memory_log(target_phys_addr_t start_addr,
2647                                          ram_addr_t size,
2648                                          ram_addr_t phys_offset,
2649                                          ram_addr_t region_offset,
2650                                          bool log_dirty)
2651 {
2652     target_phys_addr_t addr, end_addr;
2653     PhysPageDesc *p;
2654     CPUState *env;
2655     ram_addr_t orig_size = size;
2656     subpage_t *subpage;
2657
2658     assert(size);
2659     cpu_notify_set_memory(start_addr, size, phys_offset, log_dirty);
2660
2661     if (phys_offset == IO_MEM_UNASSIGNED) {
2662         region_offset = start_addr;
2663     }
2664     region_offset &= TARGET_PAGE_MASK;
2665     size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;
2666     end_addr = start_addr + (target_phys_addr_t)size;
2667
2668     addr = start_addr;
2669     do {
2670         p = phys_page_find(addr >> TARGET_PAGE_BITS);
2671         if (p && p->phys_offset != IO_MEM_UNASSIGNED) {
2672             ram_addr_t orig_memory = p->phys_offset;
2673             target_phys_addr_t start_addr2, end_addr2;
2674             int need_subpage = 0;
2675
2676             CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2,
2677                           need_subpage);
2678             if (need_subpage) {
2679                 if (!(orig_memory & IO_MEM_SUBPAGE)) {
2680                     subpage = subpage_init((addr & TARGET_PAGE_MASK),
2681                                            &p->phys_offset, orig_memory,
2682                                            p->region_offset);
2683                 } else {
2684                     subpage = io_mem_opaque[(orig_memory & ~TARGET_PAGE_MASK)
2685                                             >> IO_MEM_SHIFT];
2686                 }
2687                 subpage_register(subpage, start_addr2, end_addr2, phys_offset,
2688                                  region_offset);
2689                 p->region_offset = 0;
2690             } else {
2691                 p->phys_offset = phys_offset;
2692                 if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM ||
2693                     (phys_offset & IO_MEM_ROMD))
2694                     phys_offset += TARGET_PAGE_SIZE;
2695             }
2696         } else {
2697             p = phys_page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
2698             p->phys_offset = phys_offset;
2699             p->region_offset = region_offset;
2700             if ((phys_offset & ~TARGET_PAGE_MASK) <= IO_MEM_ROM ||
2701                 (phys_offset & IO_MEM_ROMD)) {
2702                 phys_offset += TARGET_PAGE_SIZE;
2703             } else {
2704                 target_phys_addr_t start_addr2, end_addr2;
2705                 int need_subpage = 0;
2706
2707                 CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr,
2708                               end_addr2, need_subpage);
2709
2710                 if (need_subpage) {
2711                     subpage = subpage_init((addr & TARGET_PAGE_MASK),
2712                                            &p->phys_offset, IO_MEM_UNASSIGNED,
2713                                            addr & TARGET_PAGE_MASK);
2714                     subpage_register(subpage, start_addr2, end_addr2,
2715                                      phys_offset, region_offset);
2716                     p->region_offset = 0;
2717                 }
2718             }
2719         }
2720         region_offset += TARGET_PAGE_SIZE;
2721         addr += TARGET_PAGE_SIZE;
2722     } while (addr != end_addr);
2723
2724     /* since each CPU stores ram addresses in its TLB cache, we must
2725        reset the modified entries */
2726     /* XXX: slow ! */
2727     for(env = first_cpu; env != NULL; env = env->next_cpu) {
2728         tlb_flush(env, 1);
2729     }
2730 }
2731
2732 /* XXX: temporary until new memory mapping API */
2733 ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr)
2734 {
2735     PhysPageDesc *p;
2736
2737     p = phys_page_find(addr >> TARGET_PAGE_BITS);
2738     if (!p)
2739         return IO_MEM_UNASSIGNED;
2740     return p->phys_offset;
2741 }
2742
2743 void qemu_register_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2744 {
2745     if (kvm_enabled())
2746         kvm_coalesce_mmio_region(addr, size);
2747 }
2748
2749 void qemu_unregister_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size)
2750 {
2751     if (kvm_enabled())
2752         kvm_uncoalesce_mmio_region(addr, size);
2753 }
2754
2755 void qemu_flush_coalesced_mmio_buffer(void)
2756 {
2757     if (kvm_enabled())
2758         kvm_flush_coalesced_mmio_buffer();
2759 }
2760
2761 #if defined(__linux__) && !defined(TARGET_S390X)
2762
2763 #include <sys/vfs.h>
2764
2765 #define HUGETLBFS_MAGIC       0x958458f6
2766
2767 static long gethugepagesize(const char *path)
2768 {
2769     struct statfs fs;
2770     int ret;
2771
2772     do {
2773         ret = statfs(path, &fs);
2774     } while (ret != 0 && errno == EINTR);
2775
2776     if (ret != 0) {
2777         perror(path);
2778         return 0;
2779     }
2780
2781     if (fs.f_type != HUGETLBFS_MAGIC)
2782         fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
2783
2784     return fs.f_bsize;
2785 }
2786
2787 static void *file_ram_alloc(RAMBlock *block,
2788                             ram_addr_t memory,
2789                             const char *path)
2790 {
2791     char *filename;
2792     void *area;
2793     int fd;
2794 #ifdef MAP_POPULATE
2795     int flags;
2796 #endif
2797     unsigned long hpagesize;
2798
2799     hpagesize = gethugepagesize(path);
2800     if (!hpagesize) {
2801         return NULL;
2802     }
2803
2804     if (memory < hpagesize) {
2805         return NULL;
2806     }
2807
2808     if (kvm_enabled() && !kvm_has_sync_mmu()) {
2809         fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n");
2810         return NULL;
2811     }
2812
2813     if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) {
2814         return NULL;
2815     }
2816
2817     fd = mkstemp(filename);
2818     if (fd < 0) {
2819         perror("unable to create backing store for hugepages");
2820         free(filename);
2821         return NULL;
2822     }
2823     unlink(filename);
2824     free(filename);
2825
2826     memory = (memory+hpagesize-1) & ~(hpagesize-1);
2827
2828     /*
2829      * ftruncate is not supported by hugetlbfs in older
2830      * hosts, so don't bother bailing out on errors.
2831      * If anything goes wrong with it under other filesystems,
2832      * mmap will fail.
2833      */
2834     if (ftruncate(fd, memory))
2835         perror("ftruncate");
2836
2837 #ifdef MAP_POPULATE
2838     /* NB: MAP_POPULATE won't exhaustively alloc all phys pages in the case
2839      * MAP_PRIVATE is requested.  For mem_prealloc we mmap as MAP_SHARED
2840      * to sidestep this quirk.
2841      */
2842     flags = mem_prealloc ? MAP_POPULATE | MAP_SHARED : MAP_PRIVATE;
2843     area = mmap(0, memory, PROT_READ | PROT_WRITE, flags, fd, 0);
2844 #else
2845     area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
2846 #endif
2847     if (area == MAP_FAILED) {
2848         perror("file_ram_alloc: can't mmap RAM pages");
2849         close(fd);
2850         return (NULL);
2851     }
2852     block->fd = fd;
2853     return area;
2854 }
2855 #endif
2856
2857 static ram_addr_t find_ram_offset(ram_addr_t size)
2858 {
2859     RAMBlock *block, *next_block;
2860     ram_addr_t offset = 0, mingap = ULONG_MAX;
2861
2862     if (QLIST_EMPTY(&ram_list.blocks))
2863         return 0;
2864
2865     QLIST_FOREACH(block, &ram_list.blocks, next) {
2866         ram_addr_t end, next = ULONG_MAX;
2867
2868         end = block->offset + block->length;
2869
2870         QLIST_FOREACH(next_block, &ram_list.blocks, next) {
2871             if (next_block->offset >= end) {
2872                 next = MIN(next, next_block->offset);
2873             }
2874         }
2875         if (next - end >= size && next - end < mingap) {
2876             offset =  end;
2877             mingap = next - end;
2878         }
2879     }
2880     return offset;
2881 }
2882
2883 static ram_addr_t last_ram_offset(void)
2884 {
2885     RAMBlock *block;
2886     ram_addr_t last = 0;
2887
2888     QLIST_FOREACH(block, &ram_list.blocks, next)
2889         last = MAX(last, block->offset + block->length);
2890
2891     return last;
2892 }
2893
2894 ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
2895                                    ram_addr_t size, void *host)
2896 {
2897     RAMBlock *new_block, *block;
2898
2899     size = TARGET_PAGE_ALIGN(size);
2900     new_block = qemu_mallocz(sizeof(*new_block));
2901
2902     if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
2903         char *id = dev->parent_bus->info->get_dev_path(dev);
2904         if (id) {
2905             snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
2906             qemu_free(id);
2907         }
2908     }
2909     pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
2910
2911     QLIST_FOREACH(block, &ram_list.blocks, next) {
2912         if (!strcmp(block->idstr, new_block->idstr)) {
2913             fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
2914                     new_block->idstr);
2915             abort();
2916         }
2917     }
2918
2919     if (host) {
2920         new_block->host = host;
2921         new_block->flags |= RAM_PREALLOC_MASK;
2922     } else {
2923         if (mem_path) {
2924 #if defined (__linux__) && !defined(TARGET_S390X)
2925             new_block->host = file_ram_alloc(new_block, size, mem_path);
2926             if (!new_block->host) {
2927                 new_block->host = qemu_vmalloc(size);
2928                 qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
2929             }
2930 #else
2931             fprintf(stderr, "-mem-path option unsupported\n");
2932             exit(1);
2933 #endif
2934         } else {
2935 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
2936             /* XXX S390 KVM requires the topmost vma of the RAM to be < 256GB */
2937             new_block->host = mmap((void*)0x1000000, size,
2938                                    PROT_EXEC|PROT_READ|PROT_WRITE,
2939                                    MAP_SHARED | MAP_ANONYMOUS, -1, 0);
2940 #else
2941             new_block->host = qemu_vmalloc(size);
2942 #endif
2943             qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
2944         }
2945     }
2946
2947     new_block->offset = find_ram_offset(size);
2948     new_block->length = size;
2949
2950     QLIST_INSERT_HEAD(&ram_list.blocks, new_block, next);
2951
2952     ram_list.phys_dirty = qemu_realloc(ram_list.phys_dirty,
2953                                        last_ram_offset() >> TARGET_PAGE_BITS);
2954     memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS),
2955            0xff, size >> TARGET_PAGE_BITS);
2956
2957     if (kvm_enabled())
2958         kvm_setup_guest_memory(new_block->host, size);
2959
2960     return new_block->offset;
2961 }
2962
2963 ram_addr_t qemu_ram_alloc(DeviceState *dev, const char *name, ram_addr_t size)
2964 {
2965     return qemu_ram_alloc_from_ptr(dev, name, size, NULL);
2966 }
2967
2968 void qemu_ram_free(ram_addr_t addr)
2969 {
2970     RAMBlock *block;
2971
2972     QLIST_FOREACH(block, &ram_list.blocks, next) {
2973         if (addr == block->offset) {
2974             QLIST_REMOVE(block, next);
2975             if (block->flags & RAM_PREALLOC_MASK) {
2976                 ;
2977             } else if (mem_path) {
2978 #if defined (__linux__) && !defined(TARGET_S390X)
2979                 if (block->fd) {
2980                     munmap(block->host, block->length);
2981                     close(block->fd);
2982                 } else {
2983                     qemu_vfree(block->host);
2984                 }
2985 #else
2986                 abort();
2987 #endif
2988             } else {
2989 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
2990                 munmap(block->host, block->length);
2991 #else
2992                 qemu_vfree(block->host);
2993 #endif
2994             }
2995             qemu_free(block);
2996             return;
2997         }
2998     }
2999
3000 }
3001
3002 #ifndef _WIN32
3003 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
3004 {
3005     RAMBlock *block;
3006     ram_addr_t offset;
3007     int flags;
3008     void *area, *vaddr;
3009
3010     QLIST_FOREACH(block, &ram_list.blocks, next) {
3011         offset = addr - block->offset;
3012         if (offset < block->length) {
3013             vaddr = block->host + offset;
3014             if (block->flags & RAM_PREALLOC_MASK) {
3015                 ;
3016             } else {
3017                 flags = MAP_FIXED;
3018                 munmap(vaddr, length);
3019                 if (mem_path) {
3020 #if defined(__linux__) && !defined(TARGET_S390X)
3021                     if (block->fd) {
3022 #ifdef MAP_POPULATE
3023                         flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
3024                             MAP_PRIVATE;
3025 #else
3026                         flags |= MAP_PRIVATE;
3027 #endif
3028                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3029                                     flags, block->fd, offset);
3030                     } else {
3031                         flags |= MAP_PRIVATE | MAP_ANONYMOUS;
3032                         area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3033                                     flags, -1, 0);
3034                     }
3035 #else
3036                     abort();
3037 #endif
3038                 } else {
3039 #if defined(TARGET_S390X) && defined(CONFIG_KVM)
3040                     flags |= MAP_SHARED | MAP_ANONYMOUS;
3041                     area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE,
3042                                 flags, -1, 0);
3043 #else
3044                     flags |= MAP_PRIVATE | MAP_ANONYMOUS;
3045                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
3046                                 flags, -1, 0);
3047 #endif
3048                 }
3049                 if (area != vaddr) {
3050                     fprintf(stderr, "Could not remap addr: %lx@%lx\n",
3051                             length, addr);
3052                     exit(1);
3053                 }
3054                 qemu_madvise(vaddr, length, QEMU_MADV_MERGEABLE);
3055             }
3056             return;
3057         }
3058     }
3059 }
3060 #endif /* !_WIN32 */
3061
3062 /* Return a host pointer to ram allocated with qemu_ram_alloc.
3063    With the exception of the softmmu code in this file, this should
3064    only be used for local memory (e.g. video ram) that the device owns,
3065    and knows it isn't going to access beyond the end of the block.
3066
3067    It should not be used for general purpose DMA.
3068    Use cpu_physical_memory_map/cpu_physical_memory_rw instead.
3069  */
3070 void *qemu_get_ram_ptr(ram_addr_t addr)
3071 {
3072     RAMBlock *block;
3073
3074     QLIST_FOREACH(block, &ram_list.blocks, next) {
3075         if (addr - block->offset < block->length) {
3076             /* Move this entry to to start of the list.  */
3077             if (block != QLIST_FIRST(&ram_list.blocks)) {
3078                 QLIST_REMOVE(block, next);
3079                 QLIST_INSERT_HEAD(&ram_list.blocks, block, next);
3080             }
3081             return block->host + (addr - block->offset);
3082         }
3083     }
3084
3085     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
3086     abort();
3087
3088     return NULL;
3089 }
3090
3091 /* Return a host pointer to ram allocated with qemu_ram_alloc.
3092  * Same as qemu_get_ram_ptr but avoid reordering ramblocks.
3093  */
3094 void *qemu_safe_ram_ptr(ram_addr_t addr)
3095 {
3096     RAMBlock *block;
3097
3098     QLIST_FOREACH(block, &ram_list.blocks, next) {
3099         if (addr - block->offset < block->length) {
3100             return block->host + (addr - block->offset);
3101         }
3102     }
3103
3104     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
3105     abort();
3106
3107     return NULL;
3108 }
3109
3110 int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
3111 {
3112     RAMBlock *block;
3113     uint8_t *host = ptr;
3114
3115     QLIST_FOREACH(block, &ram_list.blocks, next) {
3116         if (host - block->host < block->length) {
3117             *ram_addr = block->offset + (host - block->host);
3118             return 0;
3119         }
3120     }
3121     return -1;
3122 }
3123
3124 /* Some of the softmmu routines need to translate from a host pointer
3125    (typically a TLB entry) back to a ram offset.  */
3126 ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr)
3127 {
3128     ram_addr_t ram_addr;
3129
3130     if (qemu_ram_addr_from_host(ptr, &ram_addr)) {
3131         fprintf(stderr, "Bad ram pointer %p\n", ptr);
3132         abort();
3133     }
3134     return ram_addr;
3135 }
3136
3137 static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)
3138 {
3139 #ifdef DEBUG_UNASSIGNED
3140     printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
3141 #endif
3142 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3143     do_unassigned_access(addr, 0, 0, 0, 1);
3144 #endif
3145     return 0;
3146 }
3147
3148 static uint32_t unassigned_mem_readw(void *opaque, target_phys_addr_t addr)
3149 {
3150 #ifdef DEBUG_UNASSIGNED
3151     printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
3152 #endif
3153 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3154     do_unassigned_access(addr, 0, 0, 0, 2);
3155 #endif
3156     return 0;
3157 }
3158
3159 static uint32_t unassigned_mem_readl(void *opaque, target_phys_addr_t addr)
3160 {
3161 #ifdef DEBUG_UNASSIGNED
3162     printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
3163 #endif
3164 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3165     do_unassigned_access(addr, 0, 0, 0, 4);
3166 #endif
3167     return 0;
3168 }
3169
3170 static void unassigned_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
3171 {
3172 #ifdef DEBUG_UNASSIGNED
3173     printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
3174 #endif
3175 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3176     do_unassigned_access(addr, 1, 0, 0, 1);
3177 #endif
3178 }
3179
3180 static void unassigned_mem_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
3181 {
3182 #ifdef DEBUG_UNASSIGNED
3183     printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
3184 #endif
3185 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3186     do_unassigned_access(addr, 1, 0, 0, 2);
3187 #endif
3188 }
3189
3190 static void unassigned_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
3191 {
3192 #ifdef DEBUG_UNASSIGNED
3193     printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
3194 #endif
3195 #if defined(TARGET_SPARC) || defined(TARGET_MICROBLAZE)
3196     do_unassigned_access(addr, 1, 0, 0, 4);
3197 #endif
3198 }
3199
3200 static CPUReadMemoryFunc * const unassigned_mem_read[3] = {
3201     unassigned_mem_readb,
3202     unassigned_mem_readw,
3203     unassigned_mem_readl,
3204 };
3205
3206 static CPUWriteMemoryFunc * const unassigned_mem_write[3] = {
3207     unassigned_mem_writeb,
3208     unassigned_mem_writew,
3209     unassigned_mem_writel,
3210 };
3211
3212 static void notdirty_mem_writeb(void *opaque, target_phys_addr_t ram_addr,
3213                                 uint32_t val)
3214 {
3215     int dirty_flags;
3216     dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3217     if (!(dirty_flags & CODE_DIRTY_FLAG)) {
3218 #if !defined(CONFIG_USER_ONLY)
3219         tb_invalidate_phys_page_fast(ram_addr, 1);
3220         dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3221 #endif
3222     }
3223     stb_p(qemu_get_ram_ptr(ram_addr), val);
3224     dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
3225     cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
3226     /* we remove the notdirty callback only if the code has been
3227        flushed */
3228     if (dirty_flags == 0xff)
3229         tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
3230 }
3231
3232 static void notdirty_mem_writew(void *opaque, target_phys_addr_t ram_addr,
3233                                 uint32_t val)
3234 {
3235     int dirty_flags;
3236     dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3237     if (!(dirty_flags & CODE_DIRTY_FLAG)) {
3238 #if !defined(CONFIG_USER_ONLY)
3239         tb_invalidate_phys_page_fast(ram_addr, 2);
3240         dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3241 #endif
3242     }
3243     stw_p(qemu_get_ram_ptr(ram_addr), val);
3244     dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
3245     cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
3246     /* we remove the notdirty callback only if the code has been
3247        flushed */
3248     if (dirty_flags == 0xff)
3249         tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
3250 }
3251
3252 static void notdirty_mem_writel(void *opaque, target_phys_addr_t ram_addr,
3253                                 uint32_t val)
3254 {
3255     int dirty_flags;
3256     dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3257     if (!(dirty_flags & CODE_DIRTY_FLAG)) {
3258 #if !defined(CONFIG_USER_ONLY)
3259         tb_invalidate_phys_page_fast(ram_addr, 4);
3260         dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr);
3261 #endif
3262     }
3263     stl_p(qemu_get_ram_ptr(ram_addr), val);
3264     dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
3265     cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
3266     /* we remove the notdirty callback only if the code has been
3267        flushed */
3268     if (dirty_flags == 0xff)
3269         tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
3270 }
3271
3272 static CPUReadMemoryFunc * const error_mem_read[3] = {
3273     NULL, /* never used */
3274     NULL, /* never used */
3275     NULL, /* never used */
3276 };
3277
3278 static CPUWriteMemoryFunc * const notdirty_mem_write[3] = {
3279     notdirty_mem_writeb,
3280     notdirty_mem_writew,
3281     notdirty_mem_writel,
3282 };
3283
3284 /* Generate a debug exception if a watchpoint has been hit.  */
3285 static void check_watchpoint(int offset, int len_mask, int flags)
3286 {
3287     CPUState *env = cpu_single_env;
3288     target_ulong pc, cs_base;
3289     TranslationBlock *tb;
3290     target_ulong vaddr;
3291     CPUWatchpoint *wp;
3292     int cpu_flags;
3293
3294     if (env->watchpoint_hit) {
3295         /* We re-entered the check after replacing the TB. Now raise
3296          * the debug interrupt so that is will trigger after the
3297          * current instruction. */
3298         cpu_interrupt(env, CPU_INTERRUPT_DEBUG);
3299         return;
3300     }
3301     vaddr = (env->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
3302     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
3303         if ((vaddr == (wp->vaddr & len_mask) ||
3304              (vaddr & wp->len_mask) == wp->vaddr) && (wp->flags & flags)) {
3305             wp->flags |= BP_WATCHPOINT_HIT;
3306             if (!env->watchpoint_hit) {
3307                 env->watchpoint_hit = wp;
3308                 tb = tb_find_pc(env->mem_io_pc);
3309                 if (!tb) {
3310                     cpu_abort(env, "check_watchpoint: could not find TB for "
3311                               "pc=%p", (void *)env->mem_io_pc);
3312                 }
3313                 cpu_restore_state(tb, env, env->mem_io_pc);
3314                 tb_phys_invalidate(tb, -1);
3315                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
3316                     env->exception_index = EXCP_DEBUG;
3317                 } else {
3318                     cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
3319                     tb_gen_code(env, pc, cs_base, cpu_flags, 1);
3320                 }
3321                 cpu_resume_from_signal(env, NULL);
3322             }
3323         } else {
3324             wp->flags &= ~BP_WATCHPOINT_HIT;
3325         }
3326     }
3327 }
3328
3329 /* Watchpoint access routines.  Watchpoints are inserted using TLB tricks,
3330    so these check for a hit then pass through to the normal out-of-line
3331    phys routines.  */
3332 static uint32_t watch_mem_readb(void *opaque, target_phys_addr_t addr)
3333 {
3334     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x0, BP_MEM_READ);
3335     return ldub_phys(addr);
3336 }
3337
3338 static uint32_t watch_mem_readw(void *opaque, target_phys_addr_t addr)
3339 {
3340     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x1, BP_MEM_READ);
3341     return lduw_phys(addr);
3342 }
3343
3344 static uint32_t watch_mem_readl(void *opaque, target_phys_addr_t addr)
3345 {
3346     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x3, BP_MEM_READ);
3347     return ldl_phys(addr);
3348 }
3349
3350 static void watch_mem_writeb(void *opaque, target_phys_addr_t addr,
3351                              uint32_t val)
3352 {
3353     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x0, BP_MEM_WRITE);
3354     stb_phys(addr, val);
3355 }
3356
3357 static void watch_mem_writew(void *opaque, target_phys_addr_t addr,
3358                              uint32_t val)
3359 {
3360     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x1, BP_MEM_WRITE);
3361     stw_phys(addr, val);
3362 }
3363
3364 static void watch_mem_writel(void *opaque, target_phys_addr_t addr,
3365                              uint32_t val)
3366 {
3367     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~0x3, BP_MEM_WRITE);
3368     stl_phys(addr, val);
3369 }
3370
3371 static CPUReadMemoryFunc * const watch_mem_read[3] = {
3372     watch_mem_readb,
3373     watch_mem_readw,
3374     watch_mem_readl,
3375 };
3376
3377 static CPUWriteMemoryFunc * const watch_mem_write[3] = {
3378     watch_mem_writeb,
3379     watch_mem_writew,
3380     watch_mem_writel,
3381 };
3382
3383 static inline uint32_t subpage_readlen (subpage_t *mmio,
3384                                         target_phys_addr_t addr,
3385                                         unsigned int len)
3386 {
3387     unsigned int idx = SUBPAGE_IDX(addr);
3388 #if defined(DEBUG_SUBPAGE)
3389     printf("%s: subpage %p len %d addr " TARGET_FMT_plx " idx %d\n", __func__,
3390            mmio, len, addr, idx);
3391 #endif
3392
3393     addr += mmio->region_offset[idx];
3394     idx = mmio->sub_io_index[idx];
3395     return io_mem_read[idx][len](io_mem_opaque[idx], addr);
3396 }
3397
3398 static inline void subpage_writelen (subpage_t *mmio, target_phys_addr_t addr,
3399                                      uint32_t value, unsigned int len)
3400 {
3401     unsigned int idx = SUBPAGE_IDX(addr);
3402 #if defined(DEBUG_SUBPAGE)
3403     printf("%s: subpage %p len %d addr " TARGET_FMT_plx " idx %d value %08x\n",
3404            __func__, mmio, len, addr, idx, value);
3405 #endif
3406
3407     addr += mmio->region_offset[idx];
3408     idx = mmio->sub_io_index[idx];
3409     io_mem_write[idx][len](io_mem_opaque[idx], addr, value);
3410 }
3411
3412 static uint32_t subpage_readb (void *opaque, target_phys_addr_t addr)
3413 {
3414     return subpage_readlen(opaque, addr, 0);
3415 }
3416
3417 static void subpage_writeb (void *opaque, target_phys_addr_t addr,
3418                             uint32_t value)
3419 {
3420     subpage_writelen(opaque, addr, value, 0);
3421 }
3422
3423 static uint32_t subpage_readw (void *opaque, target_phys_addr_t addr)
3424 {
3425     return subpage_readlen(opaque, addr, 1);
3426 }
3427
3428 static void subpage_writew (void *opaque, target_phys_addr_t addr,
3429                             uint32_t value)
3430 {
3431     subpage_writelen(opaque, addr, value, 1);
3432 }
3433
3434 static uint32_t subpage_readl (void *opaque, target_phys_addr_t addr)
3435 {
3436     return subpage_readlen(opaque, addr, 2);
3437 }
3438
3439 static void subpage_writel (void *opaque, target_phys_addr_t addr,
3440                             uint32_t value)
3441 {
3442     subpage_writelen(opaque, addr, value, 2);
3443 }
3444
3445 static CPUReadMemoryFunc * const subpage_read[] = {
3446     &subpage_readb,
3447     &subpage_readw,
3448     &subpage_readl,
3449 };
3450
3451 static CPUWriteMemoryFunc * const subpage_write[] = {
3452     &subpage_writeb,
3453     &subpage_writew,
3454     &subpage_writel,
3455 };
3456
3457 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
3458                              ram_addr_t memory, ram_addr_t region_offset)
3459 {
3460     int idx, eidx;
3461
3462     if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
3463         return -1;
3464     idx = SUBPAGE_IDX(start);
3465     eidx = SUBPAGE_IDX(end);
3466 #if defined(DEBUG_SUBPAGE)
3467     printf("%s: %p start %08x end %08x idx %08x eidx %08x mem %ld\n", __func__,
3468            mmio, start, end, idx, eidx, memory);
3469 #endif
3470     if ((memory & ~TARGET_PAGE_MASK) == IO_MEM_RAM)
3471         memory = IO_MEM_UNASSIGNED;
3472     memory = (memory >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
3473     for (; idx <= eidx; idx++) {
3474         mmio->sub_io_index[idx] = memory;
3475         mmio->region_offset[idx] = region_offset;
3476     }
3477
3478     return 0;
3479 }
3480
3481 static subpage_t *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
3482                                 ram_addr_t orig_memory,
3483                                 ram_addr_t region_offset)
3484 {
3485     subpage_t *mmio;
3486     int subpage_memory;
3487
3488     mmio = qemu_mallocz(sizeof(subpage_t));
3489
3490     mmio->base = base;
3491     subpage_memory = cpu_register_io_memory(subpage_read, subpage_write, mmio,
3492                                             DEVICE_NATIVE_ENDIAN);
3493 #if defined(DEBUG_SUBPAGE)
3494     printf("%s: %p base " TARGET_FMT_plx " len %08x %d\n", __func__,
3495            mmio, base, TARGET_PAGE_SIZE, subpage_memory);
3496 #endif
3497     *phys = subpage_memory | IO_MEM_SUBPAGE;
3498     subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, orig_memory, region_offset);
3499
3500     return mmio;
3501 }
3502
3503 static int get_free_io_mem_idx(void)
3504 {
3505     int i;
3506
3507     for (i = 0; i<IO_MEM_NB_ENTRIES; i++)
3508         if (!io_mem_used[i]) {
3509             io_mem_used[i] = 1;
3510             return i;
3511         }
3512     fprintf(stderr, "RAN out out io_mem_idx, max %d !\n", IO_MEM_NB_ENTRIES);
3513     return -1;
3514 }
3515
3516 /*
3517  * Usually, devices operate in little endian mode. There are devices out
3518  * there that operate in big endian too. Each device gets byte swapped
3519  * mmio if plugged onto a CPU that does the other endianness.
3520  *
3521  * CPU          Device           swap?
3522  *
3523  * little       little           no
3524  * little       big              yes
3525  * big          little           yes
3526  * big          big              no
3527  */
3528
3529 typedef struct SwapEndianContainer {
3530     CPUReadMemoryFunc *read[3];
3531     CPUWriteMemoryFunc *write[3];
3532     void *opaque;
3533 } SwapEndianContainer;
3534
3535 static uint32_t swapendian_mem_readb (void *opaque, target_phys_addr_t addr)
3536 {
3537     uint32_t val;
3538     SwapEndianContainer *c = opaque;
3539     val = c->read[0](c->opaque, addr);
3540     return val;
3541 }
3542
3543 static uint32_t swapendian_mem_readw(void *opaque, target_phys_addr_t addr)
3544 {
3545     uint32_t val;
3546     SwapEndianContainer *c = opaque;
3547     val = bswap16(c->read[1](c->opaque, addr));
3548     return val;
3549 }
3550
3551 static uint32_t swapendian_mem_readl(void *opaque, target_phys_addr_t addr)
3552 {
3553     uint32_t val;
3554     SwapEndianContainer *c = opaque;
3555     val = bswap32(c->read[2](c->opaque, addr));
3556     return val;
3557 }
3558
3559 static CPUReadMemoryFunc * const swapendian_readfn[3]={
3560     swapendian_mem_readb,
3561     swapendian_mem_readw,
3562     swapendian_mem_readl
3563 };
3564
3565 static void swapendian_mem_writeb(void *opaque, target_phys_addr_t addr,
3566                                   uint32_t val)
3567 {
3568     SwapEndianContainer *c = opaque;
3569     c->write[0](c->opaque, addr, val);
3570 }
3571
3572 static void swapendian_mem_writew(void *opaque, target_phys_addr_t addr,
3573                                   uint32_t val)
3574 {
3575     SwapEndianContainer *c = opaque;
3576     c->write[1](c->opaque, addr, bswap16(val));
3577 }
3578
3579 static void swapendian_mem_writel(void *opaque, target_phys_addr_t addr,
3580                                   uint32_t val)
3581 {
3582     SwapEndianContainer *c = opaque;
3583     c->write[2](c->opaque, addr, bswap32(val));
3584 }
3585
3586 static CPUWriteMemoryFunc * const swapendian_writefn[3]={
3587     swapendian_mem_writeb,
3588     swapendian_mem_writew,
3589     swapendian_mem_writel
3590 };
3591
3592 static void swapendian_init(int io_index)
3593 {
3594     SwapEndianContainer *c = qemu_malloc(sizeof(SwapEndianContainer));
3595     int i;
3596
3597     /* Swap mmio for big endian targets */
3598     c->opaque = io_mem_opaque[io_index];
3599     for (i = 0; i < 3; i++) {
3600         c->read[i] = io_mem_read[io_index][i];
3601         c->write[i] = io_mem_write[io_index][i];
3602
3603         io_mem_read[io_index][i] = swapendian_readfn[i];
3604         io_mem_write[io_index][i] = swapendian_writefn[i];
3605     }
3606     io_mem_opaque[io_index] = c;
3607 }
3608
3609 static void swapendian_del(int io_index)
3610 {
3611     if (io_mem_read[io_index][0] == swapendian_readfn[0]) {
3612         qemu_free(io_mem_opaque[io_index]);
3613     }
3614 }
3615
3616 /* mem_read and mem_write are arrays of functions containing the
3617    function to access byte (index 0), word (index 1) and dword (index
3618    2). Functions can be omitted with a NULL function pointer.
3619    If io_index is non zero, the corresponding io zone is
3620    modified. If it is zero, a new io zone is allocated. The return
3621    value can be used with cpu_register_physical_memory(). (-1) is
3622    returned if error. */
3623 static int cpu_register_io_memory_fixed(int io_index,
3624                                         CPUReadMemoryFunc * const *mem_read,
3625                                         CPUWriteMemoryFunc * const *mem_write,
3626                                         void *opaque, enum device_endian endian)
3627 {
3628     int i;
3629
3630     if (io_index <= 0) {
3631         io_index = get_free_io_mem_idx();
3632         if (io_index == -1)
3633             return io_index;
3634     } else {
3635         io_index >>= IO_MEM_SHIFT;
3636         if (io_index >= IO_MEM_NB_ENTRIES)
3637             return -1;
3638     }
3639
3640     for (i = 0; i < 3; ++i) {
3641         io_mem_read[io_index][i]
3642             = (mem_read[i] ? mem_read[i] : unassigned_mem_read[i]);
3643     }
3644     for (i = 0; i < 3; ++i) {
3645         io_mem_write[io_index][i]
3646             = (mem_write[i] ? mem_write[i] : unassigned_mem_write[i]);
3647     }
3648     io_mem_opaque[io_index] = opaque;
3649
3650     switch (endian) {
3651     case DEVICE_BIG_ENDIAN:
3652 #ifndef TARGET_WORDS_BIGENDIAN
3653         swapendian_init(io_index);
3654 #endif
3655         break;
3656     case DEVICE_LITTLE_ENDIAN:
3657 #ifdef TARGET_WORDS_BIGENDIAN
3658         swapendian_init(io_index);
3659 #endif
3660         break;
3661     case DEVICE_NATIVE_ENDIAN:
3662     default:
3663         break;
3664     }
3665
3666     return (io_index << IO_MEM_SHIFT);
3667 }
3668
3669 int cpu_register_io_memory(CPUReadMemoryFunc * const *mem_read,
3670                            CPUWriteMemoryFunc * const *mem_write,
3671                            void *opaque, enum device_endian endian)
3672 {
3673     return cpu_register_io_memory_fixed(0, mem_read, mem_write, opaque, endian);
3674 }
3675
3676 void cpu_unregister_io_memory(int io_table_address)
3677 {
3678     int i;
3679     int io_index = io_table_address >> IO_MEM_SHIFT;
3680
3681     swapendian_del(io_index);
3682
3683     for (i=0;i < 3; i++) {
3684         io_mem_read[io_index][i] = unassigned_mem_read[i];
3685         io_mem_write[io_index][i] = unassigned_mem_write[i];
3686     }
3687     io_mem_opaque[io_index] = NULL;
3688     io_mem_used[io_index] = 0;
3689 }
3690
3691 static void io_mem_init(void)
3692 {
3693     int i;
3694
3695     cpu_register_io_memory_fixed(IO_MEM_ROM, error_mem_read,
3696                                  unassigned_mem_write, NULL,
3697                                  DEVICE_NATIVE_ENDIAN);
3698     cpu_register_io_memory_fixed(IO_MEM_UNASSIGNED, unassigned_mem_read,
3699                                  unassigned_mem_write, NULL,
3700                                  DEVICE_NATIVE_ENDIAN);
3701     cpu_register_io_memory_fixed(IO_MEM_NOTDIRTY, error_mem_read,
3702                                  notdirty_mem_write, NULL,
3703                                  DEVICE_NATIVE_ENDIAN);
3704     for (i=0; i<5; i++)
3705         io_mem_used[i] = 1;
3706
3707     io_mem_watch = cpu_register_io_memory(watch_mem_read,
3708                                           watch_mem_write, NULL,
3709                                           DEVICE_NATIVE_ENDIAN);
3710 }
3711
3712 #endif /* !defined(CONFIG_USER_ONLY) */
3713
3714 /* physical memory access (slow version, mainly for debug) */
3715 #if defined(CONFIG_USER_ONLY)
3716 int cpu_memory_rw_debug(CPUState *env, target_ulong addr,
3717                         uint8_t *buf, int len, int is_write)
3718 {
3719     int l, flags;
3720     target_ulong page;
3721     void * p;
3722
3723     while (len > 0) {
3724         page = addr & TARGET_PAGE_MASK;
3725         l = (page + TARGET_PAGE_SIZE) - addr;
3726         if (l > len)
3727             l = len;
3728         flags = page_get_flags(page);
3729         if (!(flags & PAGE_VALID))
3730             return -1;
3731         if (is_write) {
3732             if (!(flags & PAGE_WRITE))
3733                 return -1;
3734             /* XXX: this code should not depend on lock_user */
3735             if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
3736                 return -1;
3737             memcpy(p, buf, l);
3738             unlock_user(p, addr, l);
3739         } else {
3740             if (!(flags & PAGE_READ))
3741                 return -1;
3742             /* XXX: this code should not depend on lock_user */
3743             if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
3744                 return -1;
3745             memcpy(buf, p, l);
3746             unlock_user(p, addr, 0);
3747         }
3748         len -= l;
3749         buf += l;
3750         addr += l;
3751     }
3752     return 0;
3753 }
3754
3755 #else
3756 void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
3757                             int len, int is_write)
3758 {
3759     int l, io_index;
3760     uint8_t *ptr;
3761     uint32_t val;
3762     target_phys_addr_t page;
3763     unsigned long pd;
3764     PhysPageDesc *p;
3765
3766     while (len > 0) {
3767         page = addr & TARGET_PAGE_MASK;
3768         l = (page + TARGET_PAGE_SIZE) - addr;
3769         if (l > len)
3770             l = len;
3771         p = phys_page_find(page >> TARGET_PAGE_BITS);
3772         if (!p) {
3773             pd = IO_MEM_UNASSIGNED;
3774         } else {
3775             pd = p->phys_offset;
3776         }
3777
3778         if (is_write) {
3779             if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
3780                 target_phys_addr_t addr1 = addr;
3781                 io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
3782                 if (p)
3783                     addr1 = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
3784                 /* XXX: could force cpu_single_env to NULL to avoid
3785                    potential bugs */
3786                 if (l >= 4 && ((addr1 & 3) == 0)) {
3787                     /* 32 bit write access */
3788                     val = ldl_p(buf);
3789                     io_mem_write[io_index][2](io_mem_opaque[io_index], addr1, val);
3790                     l = 4;
3791                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3792                     /* 16 bit write access */
3793                     val = lduw_p(buf);
3794                     io_mem_write[io_index][1](io_mem_opaque[io_index], addr1, val);
3795                     l = 2;
3796                 } else {
3797                     /* 8 bit write access */
3798                     val = ldub_p(buf);
3799                     io_mem_write[io_index][0](io_mem_opaque[io_index], addr1, val);
3800                     l = 1;
3801                 }
3802             } else {
3803                 unsigned long addr1;
3804                 addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
3805                 /* RAM case */
3806                 ptr = qemu_get_ram_ptr(addr1);
3807                 memcpy(ptr, buf, l);
3808                 if (!cpu_physical_memory_is_dirty(addr1)) {
3809                     /* invalidate code */
3810                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
3811                     /* set dirty bit */
3812                     cpu_physical_memory_set_dirty_flags(
3813                         addr1, (0xff & ~CODE_DIRTY_FLAG));
3814                 }
3815             }
3816         } else {
3817             if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
3818                 !(pd & IO_MEM_ROMD)) {
3819                 target_phys_addr_t addr1 = addr;
3820                 /* I/O case */
3821                 io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
3822                 if (p)
3823                     addr1 = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
3824                 if (l >= 4 && ((addr1 & 3) == 0)) {
3825                     /* 32 bit read access */
3826                     val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr1);
3827                     stl_p(buf, val);
3828                     l = 4;
3829                 } else if (l >= 2 && ((addr1 & 1) == 0)) {
3830                     /* 16 bit read access */
3831                     val = io_mem_read[io_index][1](io_mem_opaque[io_index], addr1);
3832                     stw_p(buf, val);
3833                     l = 2;
3834                 } else {
3835                     /* 8 bit read access */
3836                     val = io_mem_read[io_index][0](io_mem_opaque[io_index], addr1);
3837                     stb_p(buf, val);
3838                     l = 1;
3839                 }
3840             } else {
3841                 /* RAM case */
3842                 ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
3843                     (addr & ~TARGET_PAGE_MASK);
3844                 memcpy(buf, ptr, l);
3845             }
3846         }
3847         len -= l;
3848         buf += l;
3849         addr += l;
3850     }
3851 }
3852
3853 /* used for ROM loading : can write in RAM and ROM */
3854 void cpu_physical_memory_write_rom(target_phys_addr_t addr,
3855                                    const uint8_t *buf, int len)
3856 {
3857     int l;
3858     uint8_t *ptr;
3859     target_phys_addr_t page;
3860     unsigned long pd;
3861     PhysPageDesc *p;
3862
3863     while (len > 0) {
3864         page = addr & TARGET_PAGE_MASK;
3865         l = (page + TARGET_PAGE_SIZE) - addr;
3866         if (l > len)
3867             l = len;
3868         p = phys_page_find(page >> TARGET_PAGE_BITS);
3869         if (!p) {
3870             pd = IO_MEM_UNASSIGNED;
3871         } else {
3872             pd = p->phys_offset;
3873         }
3874
3875         if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM &&
3876             (pd & ~TARGET_PAGE_MASK) != IO_MEM_ROM &&
3877             !(pd & IO_MEM_ROMD)) {
3878             /* do nothing */
3879         } else {
3880             unsigned long addr1;
3881             addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
3882             /* ROM/RAM case */
3883             ptr = qemu_get_ram_ptr(addr1);
3884             memcpy(ptr, buf, l);
3885         }
3886         len -= l;
3887         buf += l;
3888         addr += l;
3889     }
3890 }
3891
3892 typedef struct {
3893     void *buffer;
3894     target_phys_addr_t addr;
3895     target_phys_addr_t len;
3896 } BounceBuffer;
3897
3898 static BounceBuffer bounce;
3899
3900 typedef struct MapClient {
3901     void *opaque;
3902     void (*callback)(void *opaque);
3903     QLIST_ENTRY(MapClient) link;
3904 } MapClient;
3905
3906 static QLIST_HEAD(map_client_list, MapClient) map_client_list
3907     = QLIST_HEAD_INITIALIZER(map_client_list);
3908
3909 void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque))
3910 {
3911     MapClient *client = qemu_malloc(sizeof(*client));
3912
3913     client->opaque = opaque;
3914     client->callback = callback;
3915     QLIST_INSERT_HEAD(&map_client_list, client, link);
3916     return client;
3917 }
3918
3919 void cpu_unregister_map_client(void *_client)
3920 {
3921     MapClient *client = (MapClient *)_client;
3922
3923     QLIST_REMOVE(client, link);
3924     qemu_free(client);
3925 }
3926
3927 static void cpu_notify_map_clients(void)
3928 {
3929     MapClient *client;
3930
3931     while (!QLIST_EMPTY(&map_client_list)) {
3932         client = QLIST_FIRST(&map_client_list);
3933         client->callback(client->opaque);
3934         cpu_unregister_map_client(client);
3935     }
3936 }
3937
3938 /* Map a physical memory region into a host virtual address.
3939  * May map a subset of the requested range, given by and returned in *plen.
3940  * May return NULL if resources needed to perform the mapping are exhausted.
3941  * Use only for reads OR writes - not for read-modify-write operations.
3942  * Use cpu_register_map_client() to know when retrying the map operation is
3943  * likely to succeed.
3944  */
3945 void *cpu_physical_memory_map(target_phys_addr_t addr,
3946                               target_phys_addr_t *plen,
3947                               int is_write)
3948 {
3949     target_phys_addr_t len = *plen;
3950     target_phys_addr_t done = 0;
3951     int l;
3952     uint8_t *ret = NULL;
3953     uint8_t *ptr;
3954     target_phys_addr_t page;
3955     unsigned long pd;
3956     PhysPageDesc *p;
3957     unsigned long addr1;
3958
3959     while (len > 0) {
3960         page = addr & TARGET_PAGE_MASK;
3961         l = (page + TARGET_PAGE_SIZE) - addr;
3962         if (l > len)
3963             l = len;
3964         p = phys_page_find(page >> TARGET_PAGE_BITS);
3965         if (!p) {
3966             pd = IO_MEM_UNASSIGNED;
3967         } else {
3968             pd = p->phys_offset;
3969         }
3970
3971         if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
3972             if (done || bounce.buffer) {
3973                 break;
3974             }
3975             bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, TARGET_PAGE_SIZE);
3976             bounce.addr = addr;
3977             bounce.len = l;
3978             if (!is_write) {
3979                 cpu_physical_memory_read(addr, bounce.buffer, l);
3980             }
3981             ptr = bounce.buffer;
3982         } else {
3983             addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
3984             ptr = qemu_get_ram_ptr(addr1);
3985         }
3986         if (!done) {
3987             ret = ptr;
3988         } else if (ret + done != ptr) {
3989             break;
3990         }
3991
3992         len -= l;
3993         addr += l;
3994         done += l;
3995     }
3996     *plen = done;
3997     return ret;
3998 }
3999
4000 /* Unmaps a memory region previously mapped by cpu_physical_memory_map().
4001  * Will also mark the memory as dirty if is_write == 1.  access_len gives
4002  * the amount of memory that was actually read or written by the caller.
4003  */
4004 void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
4005                                int is_write, target_phys_addr_t access_len)
4006 {
4007     if (buffer != bounce.buffer) {
4008         if (is_write) {
4009             ram_addr_t addr1 = qemu_ram_addr_from_host_nofail(buffer);
4010             while (access_len) {
4011                 unsigned l;
4012                 l = TARGET_PAGE_SIZE;
4013                 if (l > access_len)
4014                     l = access_len;
4015                 if (!cpu_physical_memory_is_dirty(addr1)) {
4016                     /* invalidate code */
4017                     tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
4018                     /* set dirty bit */
4019                     cpu_physical_memory_set_dirty_flags(
4020                         addr1, (0xff & ~CODE_DIRTY_FLAG));
4021                 }
4022                 addr1 += l;
4023                 access_len -= l;
4024             }
4025         }
4026         return;
4027     }
4028     if (is_write) {
4029         cpu_physical_memory_write(bounce.addr, bounce.buffer, access_len);
4030     }
4031     qemu_vfree(bounce.buffer);
4032     bounce.buffer = NULL;
4033     cpu_notify_map_clients();
4034 }
4035
4036 /* warning: addr must be aligned */
4037 uint32_t ldl_phys(target_phys_addr_t addr)
4038 {
4039     int io_index;
4040     uint8_t *ptr;
4041     uint32_t val;
4042     unsigned long pd;
4043     PhysPageDesc *p;
4044
4045     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4046     if (!p) {
4047         pd = IO_MEM_UNASSIGNED;
4048     } else {
4049         pd = p->phys_offset;
4050     }
4051
4052     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
4053         !(pd & IO_MEM_ROMD)) {
4054         /* I/O case */
4055         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4056         if (p)
4057             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4058         val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);
4059     } else {
4060         /* RAM case */
4061         ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
4062             (addr & ~TARGET_PAGE_MASK);
4063         val = ldl_p(ptr);
4064     }
4065     return val;
4066 }
4067
4068 /* warning: addr must be aligned */
4069 uint64_t ldq_phys(target_phys_addr_t addr)
4070 {
4071     int io_index;
4072     uint8_t *ptr;
4073     uint64_t val;
4074     unsigned long pd;
4075     PhysPageDesc *p;
4076
4077     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4078     if (!p) {
4079         pd = IO_MEM_UNASSIGNED;
4080     } else {
4081         pd = p->phys_offset;
4082     }
4083
4084     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
4085         !(pd & IO_MEM_ROMD)) {
4086         /* I/O case */
4087         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4088         if (p)
4089             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4090 #ifdef TARGET_WORDS_BIGENDIAN
4091         val = (uint64_t)io_mem_read[io_index][2](io_mem_opaque[io_index], addr) << 32;
4092         val |= io_mem_read[io_index][2](io_mem_opaque[io_index], addr + 4);
4093 #else
4094         val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);
4095         val |= (uint64_t)io_mem_read[io_index][2](io_mem_opaque[io_index], addr + 4) << 32;
4096 #endif
4097     } else {
4098         /* RAM case */
4099         ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
4100             (addr & ~TARGET_PAGE_MASK);
4101         val = ldq_p(ptr);
4102     }
4103     return val;
4104 }
4105
4106 /* XXX: optimize */
4107 uint32_t ldub_phys(target_phys_addr_t addr)
4108 {
4109     uint8_t val;
4110     cpu_physical_memory_read(addr, &val, 1);
4111     return val;
4112 }
4113
4114 /* warning: addr must be aligned */
4115 uint32_t lduw_phys(target_phys_addr_t addr)
4116 {
4117     int io_index;
4118     uint8_t *ptr;
4119     uint64_t val;
4120     unsigned long pd;
4121     PhysPageDesc *p;
4122
4123     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4124     if (!p) {
4125         pd = IO_MEM_UNASSIGNED;
4126     } else {
4127         pd = p->phys_offset;
4128     }
4129
4130     if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
4131         !(pd & IO_MEM_ROMD)) {
4132         /* I/O case */
4133         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4134         if (p)
4135             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4136         val = io_mem_read[io_index][1](io_mem_opaque[io_index], addr);
4137     } else {
4138         /* RAM case */
4139         ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
4140             (addr & ~TARGET_PAGE_MASK);
4141         val = lduw_p(ptr);
4142     }
4143     return val;
4144 }
4145
4146 /* warning: addr must be aligned. The ram page is not masked as dirty
4147    and the code inside is not invalidated. It is useful if the dirty
4148    bits are used to track modified PTEs */
4149 void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val)
4150 {
4151     int io_index;
4152     uint8_t *ptr;
4153     unsigned long pd;
4154     PhysPageDesc *p;
4155
4156     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4157     if (!p) {
4158         pd = IO_MEM_UNASSIGNED;
4159     } else {
4160         pd = p->phys_offset;
4161     }
4162
4163     if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
4164         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4165         if (p)
4166             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4167         io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);
4168     } else {
4169         unsigned long addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
4170         ptr = qemu_get_ram_ptr(addr1);
4171         stl_p(ptr, val);
4172
4173         if (unlikely(in_migration)) {
4174             if (!cpu_physical_memory_is_dirty(addr1)) {
4175                 /* invalidate code */
4176                 tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
4177                 /* set dirty bit */
4178                 cpu_physical_memory_set_dirty_flags(
4179                     addr1, (0xff & ~CODE_DIRTY_FLAG));
4180             }
4181         }
4182     }
4183 }
4184
4185 void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val)
4186 {
4187     int io_index;
4188     uint8_t *ptr;
4189     unsigned long pd;
4190     PhysPageDesc *p;
4191
4192     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4193     if (!p) {
4194         pd = IO_MEM_UNASSIGNED;
4195     } else {
4196         pd = p->phys_offset;
4197     }
4198
4199     if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
4200         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4201         if (p)
4202             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4203 #ifdef TARGET_WORDS_BIGENDIAN
4204         io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val >> 32);
4205         io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val);
4206 #else
4207         io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);
4208         io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val >> 32);
4209 #endif
4210     } else {
4211         ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
4212             (addr & ~TARGET_PAGE_MASK);
4213         stq_p(ptr, val);
4214     }
4215 }
4216
4217 /* warning: addr must be aligned */
4218 void stl_phys(target_phys_addr_t addr, uint32_t val)
4219 {
4220     int io_index;
4221     uint8_t *ptr;
4222     unsigned long pd;
4223     PhysPageDesc *p;
4224
4225     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4226     if (!p) {
4227         pd = IO_MEM_UNASSIGNED;
4228     } else {
4229         pd = p->phys_offset;
4230     }
4231
4232     if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
4233         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4234         if (p)
4235             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4236         io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);
4237     } else {
4238         unsigned long addr1;
4239         addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
4240         /* RAM case */
4241         ptr = qemu_get_ram_ptr(addr1);
4242         stl_p(ptr, val);
4243         if (!cpu_physical_memory_is_dirty(addr1)) {
4244             /* invalidate code */
4245             tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
4246             /* set dirty bit */
4247             cpu_physical_memory_set_dirty_flags(addr1,
4248                 (0xff & ~CODE_DIRTY_FLAG));
4249         }
4250     }
4251 }
4252
4253 /* XXX: optimize */
4254 void stb_phys(target_phys_addr_t addr, uint32_t val)
4255 {
4256     uint8_t v = val;
4257     cpu_physical_memory_write(addr, &v, 1);
4258 }
4259
4260 /* warning: addr must be aligned */
4261 void stw_phys(target_phys_addr_t addr, uint32_t val)
4262 {
4263     int io_index;
4264     uint8_t *ptr;
4265     unsigned long pd;
4266     PhysPageDesc *p;
4267
4268     p = phys_page_find(addr >> TARGET_PAGE_BITS);
4269     if (!p) {
4270         pd = IO_MEM_UNASSIGNED;
4271     } else {
4272         pd = p->phys_offset;
4273     }
4274
4275     if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {
4276         io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
4277         if (p)
4278             addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
4279         io_mem_write[io_index][1](io_mem_opaque[io_index], addr, val);
4280     } else {
4281         unsigned long addr1;
4282         addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
4283         /* RAM case */
4284         ptr = qemu_get_ram_ptr(addr1);
4285         stw_p(ptr, val);
4286         if (!cpu_physical_memory_is_dirty(addr1)) {
4287             /* invalidate code */
4288             tb_invalidate_phys_page_range(addr1, addr1 + 2, 0);
4289             /* set dirty bit */
4290             cpu_physical_memory_set_dirty_flags(addr1,
4291                 (0xff & ~CODE_DIRTY_FLAG));
4292         }
4293     }
4294 }
4295
4296 /* XXX: optimize */
4297 void stq_phys(target_phys_addr_t addr, uint64_t val)
4298 {
4299     val = tswap64(val);
4300     cpu_physical_memory_write(addr, &val, 8);
4301 }
4302
4303 /* virtual memory access for debug (includes writing to ROM) */
4304 int cpu_memory_rw_debug(CPUState *env, target_ulong addr,
4305                         uint8_t *buf, int len, int is_write)
4306 {
4307     int l;
4308     target_phys_addr_t phys_addr;
4309     target_ulong page;
4310
4311     while (len > 0) {
4312         page = addr & TARGET_PAGE_MASK;
4313         phys_addr = cpu_get_phys_page_debug(env, page);
4314         /* if no physical page mapped, return an error */
4315         if (phys_addr == -1)
4316             return -1;
4317         l = (page + TARGET_PAGE_SIZE) - addr;
4318         if (l > len)
4319             l = len;
4320         phys_addr += (addr & ~TARGET_PAGE_MASK);
4321         if (is_write)
4322             cpu_physical_memory_write_rom(phys_addr, buf, l);
4323         else
4324             cpu_physical_memory_rw(phys_addr, buf, l, is_write);
4325         len -= l;
4326         buf += l;
4327         addr += l;
4328     }
4329     return 0;
4330 }
4331 #endif
4332
4333 /* in deterministic execution mode, instructions doing device I/Os
4334    must be at the end of the TB */
4335 void cpu_io_recompile(CPUState *env, void *retaddr)
4336 {
4337     TranslationBlock *tb;
4338     uint32_t n, cflags;
4339     target_ulong pc, cs_base;
4340     uint64_t flags;
4341
4342     tb = tb_find_pc((unsigned long)retaddr);
4343     if (!tb) {
4344         cpu_abort(env, "cpu_io_recompile: could not find TB for pc=%p", 
4345                   retaddr);
4346     }
4347     n = env->icount_decr.u16.low + tb->icount;
4348     cpu_restore_state(tb, env, (unsigned long)retaddr);
4349     /* Calculate how many instructions had been executed before the fault
4350        occurred.  */
4351     n = n - env->icount_decr.u16.low;
4352     /* Generate a new TB ending on the I/O insn.  */
4353     n++;
4354     /* On MIPS and SH, delay slot instructions can only be restarted if
4355        they were already the first instruction in the TB.  If this is not
4356        the first instruction in a TB then re-execute the preceding
4357        branch.  */
4358 #if defined(TARGET_MIPS)
4359     if ((env->hflags & MIPS_HFLAG_BMASK) != 0 && n > 1) {
4360         env->active_tc.PC -= 4;
4361         env->icount_decr.u16.low++;
4362         env->hflags &= ~MIPS_HFLAG_BMASK;
4363     }
4364 #elif defined(TARGET_SH4)
4365     if ((env->flags & ((DELAY_SLOT | DELAY_SLOT_CONDITIONAL))) != 0
4366             && n > 1) {
4367         env->pc -= 2;
4368         env->icount_decr.u16.low++;
4369         env->flags &= ~(DELAY_SLOT | DELAY_SLOT_CONDITIONAL);
4370     }
4371 #endif
4372     /* This should never happen.  */
4373     if (n > CF_COUNT_MASK)
4374         cpu_abort(env, "TB too big during recompile");
4375
4376     cflags = n | CF_LAST_IO;
4377     pc = tb->pc;
4378     cs_base = tb->cs_base;
4379     flags = tb->flags;
4380     tb_phys_invalidate(tb, -1);
4381     /* FIXME: In theory this could raise an exception.  In practice
4382        we have already translated the block once so it's probably ok.  */
4383     tb_gen_code(env, pc, cs_base, flags, cflags);
4384     /* TODO: If env->pc != tb->pc (i.e. the faulting instruction was not
4385        the first in the TB) then we end up generating a whole new TB and
4386        repeating the fault, which is horribly inefficient.
4387        Better would be to execute just this insn uncached, or generate a
4388        second new TB.  */
4389     cpu_resume_from_signal(env, NULL);
4390 }
4391
4392 #if !defined(CONFIG_USER_ONLY)
4393
4394 void dump_exec_info(FILE *f, fprintf_function cpu_fprintf)
4395 {
4396     int i, target_code_size, max_target_code_size;
4397     int direct_jmp_count, direct_jmp2_count, cross_page;
4398     TranslationBlock *tb;
4399
4400     target_code_size = 0;
4401     max_target_code_size = 0;
4402     cross_page = 0;
4403     direct_jmp_count = 0;
4404     direct_jmp2_count = 0;
4405     for(i = 0; i < nb_tbs; i++) {
4406         tb = &tbs[i];
4407         target_code_size += tb->size;
4408         if (tb->size > max_target_code_size)
4409             max_target_code_size = tb->size;
4410         if (tb->page_addr[1] != -1)
4411             cross_page++;
4412         if (tb->tb_next_offset[0] != 0xffff) {
4413             direct_jmp_count++;
4414             if (tb->tb_next_offset[1] != 0xffff) {
4415                 direct_jmp2_count++;
4416             }
4417         }
4418     }
4419     /* XXX: avoid using doubles ? */
4420     cpu_fprintf(f, "Translation buffer state:\n");
4421     cpu_fprintf(f, "gen code size       %td/%ld\n",
4422                 code_gen_ptr - code_gen_buffer, code_gen_buffer_max_size);
4423     cpu_fprintf(f, "TB count            %d/%d\n", 
4424                 nb_tbs, code_gen_max_blocks);
4425     cpu_fprintf(f, "TB avg target size  %d max=%d bytes\n",
4426                 nb_tbs ? target_code_size / nb_tbs : 0,
4427                 max_target_code_size);
4428     cpu_fprintf(f, "TB avg host size    %td bytes (expansion ratio: %0.1f)\n",
4429                 nb_tbs ? (code_gen_ptr - code_gen_buffer) / nb_tbs : 0,
4430                 target_code_size ? (double) (code_gen_ptr - code_gen_buffer) / target_code_size : 0);
4431     cpu_fprintf(f, "cross page TB count %d (%d%%)\n",
4432             cross_page,
4433             nb_tbs ? (cross_page * 100) / nb_tbs : 0);
4434     cpu_fprintf(f, "direct jump count   %d (%d%%) (2 jumps=%d %d%%)\n",
4435                 direct_jmp_count,
4436                 nb_tbs ? (direct_jmp_count * 100) / nb_tbs : 0,
4437                 direct_jmp2_count,
4438                 nb_tbs ? (direct_jmp2_count * 100) / nb_tbs : 0);
4439     cpu_fprintf(f, "\nStatistics:\n");
4440     cpu_fprintf(f, "TB flush count      %d\n", tb_flush_count);
4441     cpu_fprintf(f, "TB invalidate count %d\n", tb_phys_invalidate_count);
4442     cpu_fprintf(f, "TLB flush count     %d\n", tlb_flush_count);
4443     tcg_dump_info(f, cpu_fprintf);
4444 }
4445
4446 #define MMUSUFFIX _cmmu
4447 #define GETPC() NULL
4448 #define env cpu_single_env
4449 #define SOFTMMU_CODE_ACCESS
4450
4451 #define SHIFT 0
4452 #include "softmmu_template.h"
4453
4454 #define SHIFT 1
4455 #include "softmmu_template.h"
4456
4457 #define SHIFT 2
4458 #include "softmmu_template.h"
4459
4460 #define SHIFT 3
4461 #include "softmmu_template.h"
4462
4463 #undef env
4464
4465 #endif
This page took 0.264807 seconds and 4 git commands to generate.