xref: /openbmc/qemu/accel/tcg/translate-all.c (revision 8e2b7299)
1 /*
2  *  Host code generation
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 #ifdef _WIN32
20 #include <windows.h>
21 #endif
22 #include "qemu/osdep.h"
23 
24 
25 #include "qemu-common.h"
26 #define NO_CPU_IO_DEFS
27 #include "cpu.h"
28 #include "trace.h"
29 #include "disas/disas.h"
30 #include "exec/exec-all.h"
31 #include "tcg.h"
32 #if defined(CONFIG_USER_ONLY)
33 #include "qemu.h"
34 #include "exec/exec-all.h"
35 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
36 #include <sys/param.h>
37 #if __FreeBSD_version >= 700104
38 #define HAVE_KINFO_GETVMMAP
39 #define sigqueue sigqueue_freebsd  /* avoid redefinition */
40 #include <sys/proc.h>
41 #include <machine/profile.h>
42 #define _KERNEL
43 #include <sys/user.h>
44 #undef _KERNEL
45 #undef sigqueue
46 #include <libutil.h>
47 #endif
48 #endif
49 #else
50 #include "exec/address-spaces.h"
51 #endif
52 
53 #include "exec/cputlb.h"
54 #include "exec/tb-hash.h"
55 #include "translate-all.h"
56 #include "qemu/bitmap.h"
57 #include "qemu/timer.h"
58 #include "qemu/main-loop.h"
59 #include "exec/log.h"
60 #include "sysemu/cpus.h"
61 
62 /* #define DEBUG_TB_INVALIDATE */
63 /* #define DEBUG_TB_FLUSH */
64 /* make various TB consistency checks */
65 /* #define DEBUG_TB_CHECK */
66 
67 #if !defined(CONFIG_USER_ONLY)
68 /* TB consistency checks only implemented for usermode emulation.  */
69 #undef DEBUG_TB_CHECK
70 #endif
71 
72 /* Access to the various translations structures need to be serialised via locks
73  * for consistency. This is automatic for SoftMMU based system
74  * emulation due to its single threaded nature. In user-mode emulation
75  * access to the memory related structures are protected with the
76  * mmap_lock.
77  */
78 #ifdef CONFIG_SOFTMMU
79 #define assert_memory_lock() tcg_debug_assert(have_tb_lock)
80 #else
81 #define assert_memory_lock() tcg_debug_assert(have_mmap_lock())
82 #endif
83 
84 #define SMC_BITMAP_USE_THRESHOLD 10
85 
86 typedef struct PageDesc {
87     /* list of TBs intersecting this ram page */
88     TranslationBlock *first_tb;
89 #ifdef CONFIG_SOFTMMU
90     /* in order to optimize self modifying code, we count the number
91        of lookups we do to a given page to use a bitmap */
92     unsigned int code_write_count;
93     unsigned long *code_bitmap;
94 #else
95     unsigned long flags;
96 #endif
97 } PageDesc;
98 
99 /* In system mode we want L1_MAP to be based on ram offsets,
100    while in user mode we want it to be based on virtual addresses.  */
101 #if !defined(CONFIG_USER_ONLY)
102 #if HOST_LONG_BITS < TARGET_PHYS_ADDR_SPACE_BITS
103 # define L1_MAP_ADDR_SPACE_BITS  HOST_LONG_BITS
104 #else
105 # define L1_MAP_ADDR_SPACE_BITS  TARGET_PHYS_ADDR_SPACE_BITS
106 #endif
107 #else
108 # define L1_MAP_ADDR_SPACE_BITS  TARGET_VIRT_ADDR_SPACE_BITS
109 #endif
110 
111 /* Size of the L2 (and L3, etc) page tables.  */
112 #define V_L2_BITS 10
113 #define V_L2_SIZE (1 << V_L2_BITS)
114 
115 /*
116  * L1 Mapping properties
117  */
118 static int v_l1_size;
119 static int v_l1_shift;
120 static int v_l2_levels;
121 
122 /* The bottom level has pointers to PageDesc, and is indexed by
123  * anything from 4 to (V_L2_BITS + 3) bits, depending on target page size.
124  */
125 #define V_L1_MIN_BITS 4
126 #define V_L1_MAX_BITS (V_L2_BITS + 3)
127 #define V_L1_MAX_SIZE (1 << V_L1_MAX_BITS)
128 
129 static void *l1_map[V_L1_MAX_SIZE];
130 
131 /* code generation context */
132 TCGContext tcg_ctx;
133 bool parallel_cpus;
134 
135 /* translation block context */
136 __thread int have_tb_lock;
137 
138 static void page_table_config_init(void)
139 {
140     uint32_t v_l1_bits;
141 
142     assert(TARGET_PAGE_BITS);
143     /* The bits remaining after N lower levels of page tables.  */
144     v_l1_bits = (L1_MAP_ADDR_SPACE_BITS - TARGET_PAGE_BITS) % V_L2_BITS;
145     if (v_l1_bits < V_L1_MIN_BITS) {
146         v_l1_bits += V_L2_BITS;
147     }
148 
149     v_l1_size = 1 << v_l1_bits;
150     v_l1_shift = L1_MAP_ADDR_SPACE_BITS - TARGET_PAGE_BITS - v_l1_bits;
151     v_l2_levels = v_l1_shift / V_L2_BITS - 1;
152 
153     assert(v_l1_bits <= V_L1_MAX_BITS);
154     assert(v_l1_shift % V_L2_BITS == 0);
155     assert(v_l2_levels >= 0);
156 }
157 
158 #define assert_tb_locked() tcg_debug_assert(have_tb_lock)
159 #define assert_tb_unlocked() tcg_debug_assert(!have_tb_lock)
160 
161 void tb_lock(void)
162 {
163     assert_tb_unlocked();
164     qemu_mutex_lock(&tcg_ctx.tb_ctx.tb_lock);
165     have_tb_lock++;
166 }
167 
168 void tb_unlock(void)
169 {
170     assert_tb_locked();
171     have_tb_lock--;
172     qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock);
173 }
174 
175 void tb_lock_reset(void)
176 {
177     if (have_tb_lock) {
178         qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock);
179         have_tb_lock = 0;
180     }
181 }
182 
183 static TranslationBlock *tb_find_pc(uintptr_t tc_ptr);
184 
185 void cpu_gen_init(void)
186 {
187     tcg_context_init(&tcg_ctx);
188 }
189 
190 /* Encode VAL as a signed leb128 sequence at P.
191    Return P incremented past the encoded value.  */
192 static uint8_t *encode_sleb128(uint8_t *p, target_long val)
193 {
194     int more, byte;
195 
196     do {
197         byte = val & 0x7f;
198         val >>= 7;
199         more = !((val == 0 && (byte & 0x40) == 0)
200                  || (val == -1 && (byte & 0x40) != 0));
201         if (more) {
202             byte |= 0x80;
203         }
204         *p++ = byte;
205     } while (more);
206 
207     return p;
208 }
209 
210 /* Decode a signed leb128 sequence at *PP; increment *PP past the
211    decoded value.  Return the decoded value.  */
212 static target_long decode_sleb128(uint8_t **pp)
213 {
214     uint8_t *p = *pp;
215     target_long val = 0;
216     int byte, shift = 0;
217 
218     do {
219         byte = *p++;
220         val |= (target_ulong)(byte & 0x7f) << shift;
221         shift += 7;
222     } while (byte & 0x80);
223     if (shift < TARGET_LONG_BITS && (byte & 0x40)) {
224         val |= -(target_ulong)1 << shift;
225     }
226 
227     *pp = p;
228     return val;
229 }
230 
231 /* Encode the data collected about the instructions while compiling TB.
232    Place the data at BLOCK, and return the number of bytes consumed.
233 
234    The logical table consisits of TARGET_INSN_START_WORDS target_ulong's,
235    which come from the target's insn_start data, followed by a uintptr_t
236    which comes from the host pc of the end of the code implementing the insn.
237 
238    Each line of the table is encoded as sleb128 deltas from the previous
239    line.  The seed for the first line is { tb->pc, 0..., tb->tc_ptr }.
240    That is, the first column is seeded with the guest pc, the last column
241    with the host pc, and the middle columns with zeros.  */
242 
243 static int encode_search(TranslationBlock *tb, uint8_t *block)
244 {
245     uint8_t *highwater = tcg_ctx.code_gen_highwater;
246     uint8_t *p = block;
247     int i, j, n;
248 
249     tb->tc_search = block;
250 
251     for (i = 0, n = tb->icount; i < n; ++i) {
252         target_ulong prev;
253 
254         for (j = 0; j < TARGET_INSN_START_WORDS; ++j) {
255             if (i == 0) {
256                 prev = (j == 0 ? tb->pc : 0);
257             } else {
258                 prev = tcg_ctx.gen_insn_data[i - 1][j];
259             }
260             p = encode_sleb128(p, tcg_ctx.gen_insn_data[i][j] - prev);
261         }
262         prev = (i == 0 ? 0 : tcg_ctx.gen_insn_end_off[i - 1]);
263         p = encode_sleb128(p, tcg_ctx.gen_insn_end_off[i] - prev);
264 
265         /* Test for (pending) buffer overflow.  The assumption is that any
266            one row beginning below the high water mark cannot overrun
267            the buffer completely.  Thus we can test for overflow after
268            encoding a row without having to check during encoding.  */
269         if (unlikely(p > highwater)) {
270             return -1;
271         }
272     }
273 
274     return p - block;
275 }
276 
277 /* The cpu state corresponding to 'searched_pc' is restored.
278  * Called with tb_lock held.
279  */
280 static int cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
281                                      uintptr_t searched_pc)
282 {
283     target_ulong data[TARGET_INSN_START_WORDS] = { tb->pc };
284     uintptr_t host_pc = (uintptr_t)tb->tc_ptr;
285     CPUArchState *env = cpu->env_ptr;
286     uint8_t *p = tb->tc_search;
287     int i, j, num_insns = tb->icount;
288 #ifdef CONFIG_PROFILER
289     int64_t ti = profile_getclock();
290 #endif
291 
292     searched_pc -= GETPC_ADJ;
293 
294     if (searched_pc < host_pc) {
295         return -1;
296     }
297 
298     /* Reconstruct the stored insn data while looking for the point at
299        which the end of the insn exceeds the searched_pc.  */
300     for (i = 0; i < num_insns; ++i) {
301         for (j = 0; j < TARGET_INSN_START_WORDS; ++j) {
302             data[j] += decode_sleb128(&p);
303         }
304         host_pc += decode_sleb128(&p);
305         if (host_pc > searched_pc) {
306             goto found;
307         }
308     }
309     return -1;
310 
311  found:
312     if (tb->cflags & CF_USE_ICOUNT) {
313         assert(use_icount);
314         /* Reset the cycle counter to the start of the block.  */
315         cpu->icount_decr.u16.low += num_insns;
316         /* Clear the IO flag.  */
317         cpu->can_do_io = 0;
318     }
319     cpu->icount_decr.u16.low -= i;
320     restore_state_to_opc(env, tb, data);
321 
322 #ifdef CONFIG_PROFILER
323     tcg_ctx.restore_time += profile_getclock() - ti;
324     tcg_ctx.restore_count++;
325 #endif
326     return 0;
327 }
328 
329 bool cpu_restore_state(CPUState *cpu, uintptr_t retaddr)
330 {
331     TranslationBlock *tb;
332     bool r = false;
333 
334     /* A retaddr of zero is invalid so we really shouldn't have ended
335      * up here. The target code has likely forgotten to check retaddr
336      * != 0 before attempting to restore state. We return early to
337      * avoid blowing up on a recursive tb_lock(). The target must have
338      * previously survived a failed cpu_restore_state because
339      * tb_find_pc(0) would have failed anyway. It still should be
340      * fixed though.
341      */
342 
343     if (!retaddr) {
344         return r;
345     }
346 
347     tb_lock();
348     tb = tb_find_pc(retaddr);
349     if (tb) {
350         cpu_restore_state_from_tb(cpu, tb, retaddr);
351         if (tb->cflags & CF_NOCACHE) {
352             /* one-shot translation, invalidate it immediately */
353             tb_phys_invalidate(tb, -1);
354             tb_free(tb);
355         }
356         r = true;
357     }
358     tb_unlock();
359 
360     return r;
361 }
362 
363 static void page_init(void)
364 {
365     page_size_init();
366     page_table_config_init();
367 
368 #if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY)
369     {
370 #ifdef HAVE_KINFO_GETVMMAP
371         struct kinfo_vmentry *freep;
372         int i, cnt;
373 
374         freep = kinfo_getvmmap(getpid(), &cnt);
375         if (freep) {
376             mmap_lock();
377             for (i = 0; i < cnt; i++) {
378                 unsigned long startaddr, endaddr;
379 
380                 startaddr = freep[i].kve_start;
381                 endaddr = freep[i].kve_end;
382                 if (h2g_valid(startaddr)) {
383                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
384 
385                     if (h2g_valid(endaddr)) {
386                         endaddr = h2g(endaddr);
387                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
388                     } else {
389 #if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS
390                         endaddr = ~0ul;
391                         page_set_flags(startaddr, endaddr, PAGE_RESERVED);
392 #endif
393                     }
394                 }
395             }
396             free(freep);
397             mmap_unlock();
398         }
399 #else
400         FILE *f;
401 
402         last_brk = (unsigned long)sbrk(0);
403 
404         f = fopen("/compat/linux/proc/self/maps", "r");
405         if (f) {
406             mmap_lock();
407 
408             do {
409                 unsigned long startaddr, endaddr;
410                 int n;
411 
412                 n = fscanf(f, "%lx-%lx %*[^\n]\n", &startaddr, &endaddr);
413 
414                 if (n == 2 && h2g_valid(startaddr)) {
415                     startaddr = h2g(startaddr) & TARGET_PAGE_MASK;
416 
417                     if (h2g_valid(endaddr)) {
418                         endaddr = h2g(endaddr);
419                     } else {
420                         endaddr = ~0ul;
421                     }
422                     page_set_flags(startaddr, endaddr, PAGE_RESERVED);
423                 }
424             } while (!feof(f));
425 
426             fclose(f);
427             mmap_unlock();
428         }
429 #endif
430     }
431 #endif
432 }
433 
434 /* If alloc=1:
435  * Called with tb_lock held for system emulation.
436  * Called with mmap_lock held for user-mode emulation.
437  */
438 static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
439 {
440     PageDesc *pd;
441     void **lp;
442     int i;
443 
444     if (alloc) {
445         assert_memory_lock();
446     }
447 
448     /* Level 1.  Always allocated.  */
449     lp = l1_map + ((index >> v_l1_shift) & (v_l1_size - 1));
450 
451     /* Level 2..N-1.  */
452     for (i = v_l2_levels; i > 0; i--) {
453         void **p = atomic_rcu_read(lp);
454 
455         if (p == NULL) {
456             if (!alloc) {
457                 return NULL;
458             }
459             p = g_new0(void *, V_L2_SIZE);
460             atomic_rcu_set(lp, p);
461         }
462 
463         lp = p + ((index >> (i * V_L2_BITS)) & (V_L2_SIZE - 1));
464     }
465 
466     pd = atomic_rcu_read(lp);
467     if (pd == NULL) {
468         if (!alloc) {
469             return NULL;
470         }
471         pd = g_new0(PageDesc, V_L2_SIZE);
472         atomic_rcu_set(lp, pd);
473     }
474 
475     return pd + (index & (V_L2_SIZE - 1));
476 }
477 
478 static inline PageDesc *page_find(tb_page_addr_t index)
479 {
480     return page_find_alloc(index, 0);
481 }
482 
483 #if defined(CONFIG_USER_ONLY)
484 /* Currently it is not recommended to allocate big chunks of data in
485    user mode. It will change when a dedicated libc will be used.  */
486 /* ??? 64-bit hosts ought to have no problem mmaping data outside the
487    region in which the guest needs to run.  Revisit this.  */
488 #define USE_STATIC_CODE_GEN_BUFFER
489 #endif
490 
491 /* Minimum size of the code gen buffer.  This number is randomly chosen,
492    but not so small that we can't have a fair number of TB's live.  */
493 #define MIN_CODE_GEN_BUFFER_SIZE     (1024u * 1024)
494 
495 /* Maximum size of the code gen buffer we'd like to use.  Unless otherwise
496    indicated, this is constrained by the range of direct branches on the
497    host cpu, as used by the TCG implementation of goto_tb.  */
498 #if defined(__x86_64__)
499 # define MAX_CODE_GEN_BUFFER_SIZE  (2ul * 1024 * 1024 * 1024)
500 #elif defined(__sparc__)
501 # define MAX_CODE_GEN_BUFFER_SIZE  (2ul * 1024 * 1024 * 1024)
502 #elif defined(__powerpc64__)
503 # define MAX_CODE_GEN_BUFFER_SIZE  (2ul * 1024 * 1024 * 1024)
504 #elif defined(__powerpc__)
505 # define MAX_CODE_GEN_BUFFER_SIZE  (32u * 1024 * 1024)
506 #elif defined(__aarch64__)
507 # define MAX_CODE_GEN_BUFFER_SIZE  (128ul * 1024 * 1024)
508 #elif defined(__s390x__)
509   /* We have a +- 4GB range on the branches; leave some slop.  */
510 # define MAX_CODE_GEN_BUFFER_SIZE  (3ul * 1024 * 1024 * 1024)
511 #elif defined(__mips__)
512   /* We have a 256MB branch region, but leave room to make sure the
513      main executable is also within that region.  */
514 # define MAX_CODE_GEN_BUFFER_SIZE  (128ul * 1024 * 1024)
515 #else
516 # define MAX_CODE_GEN_BUFFER_SIZE  ((size_t)-1)
517 #endif
518 
519 #define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (32u * 1024 * 1024)
520 
521 #define DEFAULT_CODE_GEN_BUFFER_SIZE \
522   (DEFAULT_CODE_GEN_BUFFER_SIZE_1 < MAX_CODE_GEN_BUFFER_SIZE \
523    ? DEFAULT_CODE_GEN_BUFFER_SIZE_1 : MAX_CODE_GEN_BUFFER_SIZE)
524 
525 static inline size_t size_code_gen_buffer(size_t tb_size)
526 {
527     /* Size the buffer.  */
528     if (tb_size == 0) {
529 #ifdef USE_STATIC_CODE_GEN_BUFFER
530         tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
531 #else
532         /* ??? Needs adjustments.  */
533         /* ??? If we relax the requirement that CONFIG_USER_ONLY use the
534            static buffer, we could size this on RESERVED_VA, on the text
535            segment size of the executable, or continue to use the default.  */
536         tb_size = (unsigned long)(ram_size / 4);
537 #endif
538     }
539     if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {
540         tb_size = MIN_CODE_GEN_BUFFER_SIZE;
541     }
542     if (tb_size > MAX_CODE_GEN_BUFFER_SIZE) {
543         tb_size = MAX_CODE_GEN_BUFFER_SIZE;
544     }
545     return tb_size;
546 }
547 
548 #ifdef __mips__
549 /* In order to use J and JAL within the code_gen_buffer, we require
550    that the buffer not cross a 256MB boundary.  */
551 static inline bool cross_256mb(void *addr, size_t size)
552 {
553     return ((uintptr_t)addr ^ ((uintptr_t)addr + size)) & ~0x0ffffffful;
554 }
555 
556 /* We weren't able to allocate a buffer without crossing that boundary,
557    so make do with the larger portion of the buffer that doesn't cross.
558    Returns the new base of the buffer, and adjusts code_gen_buffer_size.  */
559 static inline void *split_cross_256mb(void *buf1, size_t size1)
560 {
561     void *buf2 = (void *)(((uintptr_t)buf1 + size1) & ~0x0ffffffful);
562     size_t size2 = buf1 + size1 - buf2;
563 
564     size1 = buf2 - buf1;
565     if (size1 < size2) {
566         size1 = size2;
567         buf1 = buf2;
568     }
569 
570     tcg_ctx.code_gen_buffer_size = size1;
571     return buf1;
572 }
573 #endif
574 
575 #ifdef USE_STATIC_CODE_GEN_BUFFER
576 static uint8_t static_code_gen_buffer[DEFAULT_CODE_GEN_BUFFER_SIZE]
577     __attribute__((aligned(CODE_GEN_ALIGN)));
578 
579 # ifdef _WIN32
580 static inline void do_protect(void *addr, long size, int prot)
581 {
582     DWORD old_protect;
583     VirtualProtect(addr, size, prot, &old_protect);
584 }
585 
586 static inline void map_exec(void *addr, long size)
587 {
588     do_protect(addr, size, PAGE_EXECUTE_READWRITE);
589 }
590 
591 static inline void map_none(void *addr, long size)
592 {
593     do_protect(addr, size, PAGE_NOACCESS);
594 }
595 # else
596 static inline void do_protect(void *addr, long size, int prot)
597 {
598     uintptr_t start, end;
599 
600     start = (uintptr_t)addr;
601     start &= qemu_real_host_page_mask;
602 
603     end = (uintptr_t)addr + size;
604     end = ROUND_UP(end, qemu_real_host_page_size);
605 
606     mprotect((void *)start, end - start, prot);
607 }
608 
609 static inline void map_exec(void *addr, long size)
610 {
611     do_protect(addr, size, PROT_READ | PROT_WRITE | PROT_EXEC);
612 }
613 
614 static inline void map_none(void *addr, long size)
615 {
616     do_protect(addr, size, PROT_NONE);
617 }
618 # endif /* WIN32 */
619 
620 static inline void *alloc_code_gen_buffer(void)
621 {
622     void *buf = static_code_gen_buffer;
623     size_t full_size, size;
624 
625     /* The size of the buffer, rounded down to end on a page boundary.  */
626     full_size = (((uintptr_t)buf + sizeof(static_code_gen_buffer))
627                  & qemu_real_host_page_mask) - (uintptr_t)buf;
628 
629     /* Reserve a guard page.  */
630     size = full_size - qemu_real_host_page_size;
631 
632     /* Honor a command-line option limiting the size of the buffer.  */
633     if (size > tcg_ctx.code_gen_buffer_size) {
634         size = (((uintptr_t)buf + tcg_ctx.code_gen_buffer_size)
635                 & qemu_real_host_page_mask) - (uintptr_t)buf;
636     }
637     tcg_ctx.code_gen_buffer_size = size;
638 
639 #ifdef __mips__
640     if (cross_256mb(buf, size)) {
641         buf = split_cross_256mb(buf, size);
642         size = tcg_ctx.code_gen_buffer_size;
643     }
644 #endif
645 
646     map_exec(buf, size);
647     map_none(buf + size, qemu_real_host_page_size);
648     qemu_madvise(buf, size, QEMU_MADV_HUGEPAGE);
649 
650     return buf;
651 }
652 #elif defined(_WIN32)
653 static inline void *alloc_code_gen_buffer(void)
654 {
655     size_t size = tcg_ctx.code_gen_buffer_size;
656     void *buf1, *buf2;
657 
658     /* Perform the allocation in two steps, so that the guard page
659        is reserved but uncommitted.  */
660     buf1 = VirtualAlloc(NULL, size + qemu_real_host_page_size,
661                         MEM_RESERVE, PAGE_NOACCESS);
662     if (buf1 != NULL) {
663         buf2 = VirtualAlloc(buf1, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
664         assert(buf1 == buf2);
665     }
666 
667     return buf1;
668 }
669 #else
670 static inline void *alloc_code_gen_buffer(void)
671 {
672     int flags = MAP_PRIVATE | MAP_ANONYMOUS;
673     uintptr_t start = 0;
674     size_t size = tcg_ctx.code_gen_buffer_size;
675     void *buf;
676 
677     /* Constrain the position of the buffer based on the host cpu.
678        Note that these addresses are chosen in concert with the
679        addresses assigned in the relevant linker script file.  */
680 # if defined(__PIE__) || defined(__PIC__)
681     /* Don't bother setting a preferred location if we're building
682        a position-independent executable.  We're more likely to get
683        an address near the main executable if we let the kernel
684        choose the address.  */
685 # elif defined(__x86_64__) && defined(MAP_32BIT)
686     /* Force the memory down into low memory with the executable.
687        Leave the choice of exact location with the kernel.  */
688     flags |= MAP_32BIT;
689     /* Cannot expect to map more than 800MB in low memory.  */
690     if (size > 800u * 1024 * 1024) {
691         tcg_ctx.code_gen_buffer_size = size = 800u * 1024 * 1024;
692     }
693 # elif defined(__sparc__)
694     start = 0x40000000ul;
695 # elif defined(__s390x__)
696     start = 0x90000000ul;
697 # elif defined(__mips__)
698 #  if _MIPS_SIM == _ABI64
699     start = 0x128000000ul;
700 #  else
701     start = 0x08000000ul;
702 #  endif
703 # endif
704 
705     buf = mmap((void *)start, size + qemu_real_host_page_size,
706                PROT_NONE, flags, -1, 0);
707     if (buf == MAP_FAILED) {
708         return NULL;
709     }
710 
711 #ifdef __mips__
712     if (cross_256mb(buf, size)) {
713         /* Try again, with the original still mapped, to avoid re-acquiring
714            that 256mb crossing.  This time don't specify an address.  */
715         size_t size2;
716         void *buf2 = mmap(NULL, size + qemu_real_host_page_size,
717                           PROT_NONE, flags, -1, 0);
718         switch ((int)(buf2 != MAP_FAILED)) {
719         case 1:
720             if (!cross_256mb(buf2, size)) {
721                 /* Success!  Use the new buffer.  */
722                 munmap(buf, size + qemu_real_host_page_size);
723                 break;
724             }
725             /* Failure.  Work with what we had.  */
726             munmap(buf2, size + qemu_real_host_page_size);
727             /* fallthru */
728         default:
729             /* Split the original buffer.  Free the smaller half.  */
730             buf2 = split_cross_256mb(buf, size);
731             size2 = tcg_ctx.code_gen_buffer_size;
732             if (buf == buf2) {
733                 munmap(buf + size2 + qemu_real_host_page_size, size - size2);
734             } else {
735                 munmap(buf, size - size2);
736             }
737             size = size2;
738             break;
739         }
740         buf = buf2;
741     }
742 #endif
743 
744     /* Make the final buffer accessible.  The guard page at the end
745        will remain inaccessible with PROT_NONE.  */
746     mprotect(buf, size, PROT_WRITE | PROT_READ | PROT_EXEC);
747 
748     /* Request large pages for the buffer.  */
749     qemu_madvise(buf, size, QEMU_MADV_HUGEPAGE);
750 
751     return buf;
752 }
753 #endif /* USE_STATIC_CODE_GEN_BUFFER, WIN32, POSIX */
754 
755 static inline void code_gen_alloc(size_t tb_size)
756 {
757     tcg_ctx.code_gen_buffer_size = size_code_gen_buffer(tb_size);
758     tcg_ctx.code_gen_buffer = alloc_code_gen_buffer();
759     if (tcg_ctx.code_gen_buffer == NULL) {
760         fprintf(stderr, "Could not allocate dynamic translator buffer\n");
761         exit(1);
762     }
763 
764     /* size this conservatively -- realloc later if needed */
765     tcg_ctx.tb_ctx.tbs_size =
766         tcg_ctx.code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE / 8;
767     if (unlikely(!tcg_ctx.tb_ctx.tbs_size)) {
768         tcg_ctx.tb_ctx.tbs_size = 64 * 1024;
769     }
770     tcg_ctx.tb_ctx.tbs = g_new(TranslationBlock *, tcg_ctx.tb_ctx.tbs_size);
771 
772     qemu_mutex_init(&tcg_ctx.tb_ctx.tb_lock);
773 }
774 
775 static void tb_htable_init(void)
776 {
777     unsigned int mode = QHT_MODE_AUTO_RESIZE;
778 
779     qht_init(&tcg_ctx.tb_ctx.htable, CODE_GEN_HTABLE_SIZE, mode);
780 }
781 
782 /* Must be called before using the QEMU cpus. 'tb_size' is the size
783    (in bytes) allocated to the translation buffer. Zero means default
784    size. */
785 void tcg_exec_init(unsigned long tb_size)
786 {
787     tcg_allowed = true;
788     cpu_gen_init();
789     page_init();
790     tb_htable_init();
791     code_gen_alloc(tb_size);
792 #if defined(CONFIG_SOFTMMU)
793     /* There's no guest base to take into account, so go ahead and
794        initialize the prologue now.  */
795     tcg_prologue_init(&tcg_ctx);
796 #endif
797 }
798 
799 /*
800  * Allocate a new translation block. Flush the translation buffer if
801  * too many translation blocks or too much generated code.
802  *
803  * Called with tb_lock held.
804  */
805 static TranslationBlock *tb_alloc(target_ulong pc)
806 {
807     TranslationBlock *tb;
808     TBContext *ctx;
809 
810     assert_tb_locked();
811 
812     tb = tcg_tb_alloc(&tcg_ctx);
813     if (unlikely(tb == NULL)) {
814         return NULL;
815     }
816     ctx = &tcg_ctx.tb_ctx;
817     if (unlikely(ctx->nb_tbs == ctx->tbs_size)) {
818         ctx->tbs_size *= 2;
819         ctx->tbs = g_renew(TranslationBlock *, ctx->tbs, ctx->tbs_size);
820     }
821     ctx->tbs[ctx->nb_tbs++] = tb;
822     return tb;
823 }
824 
825 /* Called with tb_lock held.  */
826 void tb_free(TranslationBlock *tb)
827 {
828     assert_tb_locked();
829 
830     /* In practice this is mostly used for single use temporary TB
831        Ignore the hard cases and just back up if this TB happens to
832        be the last one generated.  */
833     if (tcg_ctx.tb_ctx.nb_tbs > 0 &&
834             tb == tcg_ctx.tb_ctx.tbs[tcg_ctx.tb_ctx.nb_tbs - 1]) {
835         size_t struct_size = ROUND_UP(sizeof(*tb), qemu_icache_linesize);
836 
837         tcg_ctx.code_gen_ptr = tb->tc_ptr - struct_size;
838         tcg_ctx.tb_ctx.nb_tbs--;
839     }
840 }
841 
842 static inline void invalidate_page_bitmap(PageDesc *p)
843 {
844 #ifdef CONFIG_SOFTMMU
845     g_free(p->code_bitmap);
846     p->code_bitmap = NULL;
847     p->code_write_count = 0;
848 #endif
849 }
850 
851 /* Set to NULL all the 'first_tb' fields in all PageDescs. */
852 static void page_flush_tb_1(int level, void **lp)
853 {
854     int i;
855 
856     if (*lp == NULL) {
857         return;
858     }
859     if (level == 0) {
860         PageDesc *pd = *lp;
861 
862         for (i = 0; i < V_L2_SIZE; ++i) {
863             pd[i].first_tb = NULL;
864             invalidate_page_bitmap(pd + i);
865         }
866     } else {
867         void **pp = *lp;
868 
869         for (i = 0; i < V_L2_SIZE; ++i) {
870             page_flush_tb_1(level - 1, pp + i);
871         }
872     }
873 }
874 
875 static void page_flush_tb(void)
876 {
877     int i, l1_sz = v_l1_size;
878 
879     for (i = 0; i < l1_sz; i++) {
880         page_flush_tb_1(v_l2_levels, l1_map + i);
881     }
882 }
883 
884 /* flush all the translation blocks */
885 static void do_tb_flush(CPUState *cpu, run_on_cpu_data tb_flush_count)
886 {
887     tb_lock();
888 
889     /* If it is already been done on request of another CPU,
890      * just retry.
891      */
892     if (tcg_ctx.tb_ctx.tb_flush_count != tb_flush_count.host_int) {
893         goto done;
894     }
895 
896 #if defined(DEBUG_TB_FLUSH)
897     printf("qemu: flush code_size=%ld nb_tbs=%d avg_tb_size=%ld\n",
898            (unsigned long)(tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer),
899            tcg_ctx.tb_ctx.nb_tbs, tcg_ctx.tb_ctx.nb_tbs > 0 ?
900            ((unsigned long)(tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer)) /
901            tcg_ctx.tb_ctx.nb_tbs : 0);
902 #endif
903     if ((unsigned long)(tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer)
904         > tcg_ctx.code_gen_buffer_size) {
905         cpu_abort(cpu, "Internal error: code buffer overflow\n");
906     }
907 
908     CPU_FOREACH(cpu) {
909         cpu_tb_jmp_cache_clear(cpu);
910     }
911 
912     tcg_ctx.tb_ctx.nb_tbs = 0;
913     qht_reset_size(&tcg_ctx.tb_ctx.htable, CODE_GEN_HTABLE_SIZE);
914     page_flush_tb();
915 
916     tcg_ctx.code_gen_ptr = tcg_ctx.code_gen_buffer;
917     /* XXX: flush processor icache at this point if cache flush is
918        expensive */
919     atomic_mb_set(&tcg_ctx.tb_ctx.tb_flush_count,
920                   tcg_ctx.tb_ctx.tb_flush_count + 1);
921 
922 done:
923     tb_unlock();
924 }
925 
926 void tb_flush(CPUState *cpu)
927 {
928     if (tcg_enabled()) {
929         unsigned tb_flush_count = atomic_mb_read(&tcg_ctx.tb_ctx.tb_flush_count);
930         async_safe_run_on_cpu(cpu, do_tb_flush,
931                               RUN_ON_CPU_HOST_INT(tb_flush_count));
932     }
933 }
934 
935 #ifdef DEBUG_TB_CHECK
936 
937 static void
938 do_tb_invalidate_check(struct qht *ht, void *p, uint32_t hash, void *userp)
939 {
940     TranslationBlock *tb = p;
941     target_ulong addr = *(target_ulong *)userp;
942 
943     if (!(addr + TARGET_PAGE_SIZE <= tb->pc || addr >= tb->pc + tb->size)) {
944         printf("ERROR invalidate: address=" TARGET_FMT_lx
945                " PC=%08lx size=%04x\n", addr, (long)tb->pc, tb->size);
946     }
947 }
948 
949 /* verify that all the pages have correct rights for code
950  *
951  * Called with tb_lock held.
952  */
953 static void tb_invalidate_check(target_ulong address)
954 {
955     address &= TARGET_PAGE_MASK;
956     qht_iter(&tcg_ctx.tb_ctx.htable, do_tb_invalidate_check, &address);
957 }
958 
959 static void
960 do_tb_page_check(struct qht *ht, void *p, uint32_t hash, void *userp)
961 {
962     TranslationBlock *tb = p;
963     int flags1, flags2;
964 
965     flags1 = page_get_flags(tb->pc);
966     flags2 = page_get_flags(tb->pc + tb->size - 1);
967     if ((flags1 & PAGE_WRITE) || (flags2 & PAGE_WRITE)) {
968         printf("ERROR page flags: PC=%08lx size=%04x f1=%x f2=%x\n",
969                (long)tb->pc, tb->size, flags1, flags2);
970     }
971 }
972 
973 /* verify that all the pages have correct rights for code */
974 static void tb_page_check(void)
975 {
976     qht_iter(&tcg_ctx.tb_ctx.htable, do_tb_page_check, NULL);
977 }
978 
979 #endif
980 
981 static inline void tb_page_remove(TranslationBlock **ptb, TranslationBlock *tb)
982 {
983     TranslationBlock *tb1;
984     unsigned int n1;
985 
986     for (;;) {
987         tb1 = *ptb;
988         n1 = (uintptr_t)tb1 & 3;
989         tb1 = (TranslationBlock *)((uintptr_t)tb1 & ~3);
990         if (tb1 == tb) {
991             *ptb = tb1->page_next[n1];
992             break;
993         }
994         ptb = &tb1->page_next[n1];
995     }
996 }
997 
998 /* remove the TB from a list of TBs jumping to the n-th jump target of the TB */
999 static inline void tb_remove_from_jmp_list(TranslationBlock *tb, int n)
1000 {
1001     TranslationBlock *tb1;
1002     uintptr_t *ptb, ntb;
1003     unsigned int n1;
1004 
1005     ptb = &tb->jmp_list_next[n];
1006     if (*ptb) {
1007         /* find tb(n) in circular list */
1008         for (;;) {
1009             ntb = *ptb;
1010             n1 = ntb & 3;
1011             tb1 = (TranslationBlock *)(ntb & ~3);
1012             if (n1 == n && tb1 == tb) {
1013                 break;
1014             }
1015             if (n1 == 2) {
1016                 ptb = &tb1->jmp_list_first;
1017             } else {
1018                 ptb = &tb1->jmp_list_next[n1];
1019             }
1020         }
1021         /* now we can suppress tb(n) from the list */
1022         *ptb = tb->jmp_list_next[n];
1023 
1024         tb->jmp_list_next[n] = (uintptr_t)NULL;
1025     }
1026 }
1027 
1028 /* reset the jump entry 'n' of a TB so that it is not chained to
1029    another TB */
1030 static inline void tb_reset_jump(TranslationBlock *tb, int n)
1031 {
1032     uintptr_t addr = (uintptr_t)(tb->tc_ptr + tb->jmp_reset_offset[n]);
1033     tb_set_jmp_target(tb, n, addr);
1034 }
1035 
1036 /* remove any jumps to the TB */
1037 static inline void tb_jmp_unlink(TranslationBlock *tb)
1038 {
1039     TranslationBlock *tb1;
1040     uintptr_t *ptb, ntb;
1041     unsigned int n1;
1042 
1043     ptb = &tb->jmp_list_first;
1044     for (;;) {
1045         ntb = *ptb;
1046         n1 = ntb & 3;
1047         tb1 = (TranslationBlock *)(ntb & ~3);
1048         if (n1 == 2) {
1049             break;
1050         }
1051         tb_reset_jump(tb1, n1);
1052         *ptb = tb1->jmp_list_next[n1];
1053         tb1->jmp_list_next[n1] = (uintptr_t)NULL;
1054     }
1055 }
1056 
1057 /* invalidate one TB
1058  *
1059  * Called with tb_lock held.
1060  */
1061 void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr)
1062 {
1063     CPUState *cpu;
1064     PageDesc *p;
1065     uint32_t h;
1066     tb_page_addr_t phys_pc;
1067 
1068     assert_tb_locked();
1069 
1070     atomic_set(&tb->invalid, true);
1071 
1072     /* remove the TB from the hash list */
1073     phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
1074     h = tb_hash_func(phys_pc, tb->pc, tb->flags);
1075     qht_remove(&tcg_ctx.tb_ctx.htable, tb, h);
1076 
1077     /* remove the TB from the page list */
1078     if (tb->page_addr[0] != page_addr) {
1079         p = page_find(tb->page_addr[0] >> TARGET_PAGE_BITS);
1080         tb_page_remove(&p->first_tb, tb);
1081         invalidate_page_bitmap(p);
1082     }
1083     if (tb->page_addr[1] != -1 && tb->page_addr[1] != page_addr) {
1084         p = page_find(tb->page_addr[1] >> TARGET_PAGE_BITS);
1085         tb_page_remove(&p->first_tb, tb);
1086         invalidate_page_bitmap(p);
1087     }
1088 
1089     /* remove the TB from the hash list */
1090     h = tb_jmp_cache_hash_func(tb->pc);
1091     CPU_FOREACH(cpu) {
1092         if (atomic_read(&cpu->tb_jmp_cache[h]) == tb) {
1093             atomic_set(&cpu->tb_jmp_cache[h], NULL);
1094         }
1095     }
1096 
1097     /* suppress this TB from the two jump lists */
1098     tb_remove_from_jmp_list(tb, 0);
1099     tb_remove_from_jmp_list(tb, 1);
1100 
1101     /* suppress any remaining jumps to this TB */
1102     tb_jmp_unlink(tb);
1103 
1104     tcg_ctx.tb_ctx.tb_phys_invalidate_count++;
1105 }
1106 
1107 #ifdef CONFIG_SOFTMMU
1108 static void build_page_bitmap(PageDesc *p)
1109 {
1110     int n, tb_start, tb_end;
1111     TranslationBlock *tb;
1112 
1113     p->code_bitmap = bitmap_new(TARGET_PAGE_SIZE);
1114 
1115     tb = p->first_tb;
1116     while (tb != NULL) {
1117         n = (uintptr_t)tb & 3;
1118         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1119         /* NOTE: this is subtle as a TB may span two physical pages */
1120         if (n == 0) {
1121             /* NOTE: tb_end may be after the end of the page, but
1122                it is not a problem */
1123             tb_start = tb->pc & ~TARGET_PAGE_MASK;
1124             tb_end = tb_start + tb->size;
1125             if (tb_end > TARGET_PAGE_SIZE) {
1126                 tb_end = TARGET_PAGE_SIZE;
1127              }
1128         } else {
1129             tb_start = 0;
1130             tb_end = ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);
1131         }
1132         bitmap_set(p->code_bitmap, tb_start, tb_end - tb_start);
1133         tb = tb->page_next[n];
1134     }
1135 }
1136 #endif
1137 
1138 /* add the tb in the target page and protect it if necessary
1139  *
1140  * Called with mmap_lock held for user-mode emulation.
1141  */
1142 static inline void tb_alloc_page(TranslationBlock *tb,
1143                                  unsigned int n, tb_page_addr_t page_addr)
1144 {
1145     PageDesc *p;
1146 #ifndef CONFIG_USER_ONLY
1147     bool page_already_protected;
1148 #endif
1149 
1150     assert_memory_lock();
1151 
1152     tb->page_addr[n] = page_addr;
1153     p = page_find_alloc(page_addr >> TARGET_PAGE_BITS, 1);
1154     tb->page_next[n] = p->first_tb;
1155 #ifndef CONFIG_USER_ONLY
1156     page_already_protected = p->first_tb != NULL;
1157 #endif
1158     p->first_tb = (TranslationBlock *)((uintptr_t)tb | n);
1159     invalidate_page_bitmap(p);
1160 
1161 #if defined(CONFIG_USER_ONLY)
1162     if (p->flags & PAGE_WRITE) {
1163         target_ulong addr;
1164         PageDesc *p2;
1165         int prot;
1166 
1167         /* force the host page as non writable (writes will have a
1168            page fault + mprotect overhead) */
1169         page_addr &= qemu_host_page_mask;
1170         prot = 0;
1171         for (addr = page_addr; addr < page_addr + qemu_host_page_size;
1172             addr += TARGET_PAGE_SIZE) {
1173 
1174             p2 = page_find(addr >> TARGET_PAGE_BITS);
1175             if (!p2) {
1176                 continue;
1177             }
1178             prot |= p2->flags;
1179             p2->flags &= ~PAGE_WRITE;
1180           }
1181         mprotect(g2h(page_addr), qemu_host_page_size,
1182                  (prot & PAGE_BITS) & ~PAGE_WRITE);
1183 #ifdef DEBUG_TB_INVALIDATE
1184         printf("protecting code page: 0x" TARGET_FMT_lx "\n",
1185                page_addr);
1186 #endif
1187     }
1188 #else
1189     /* if some code is already present, then the pages are already
1190        protected. So we handle the case where only the first TB is
1191        allocated in a physical page */
1192     if (!page_already_protected) {
1193         tlb_protect_code(page_addr);
1194     }
1195 #endif
1196 }
1197 
1198 /* add a new TB and link it to the physical page tables. phys_page2 is
1199  * (-1) to indicate that only one page contains the TB.
1200  *
1201  * Called with mmap_lock held for user-mode emulation.
1202  */
1203 static void tb_link_page(TranslationBlock *tb, tb_page_addr_t phys_pc,
1204                          tb_page_addr_t phys_page2)
1205 {
1206     uint32_t h;
1207 
1208     assert_memory_lock();
1209 
1210     /* add in the page list */
1211     tb_alloc_page(tb, 0, phys_pc & TARGET_PAGE_MASK);
1212     if (phys_page2 != -1) {
1213         tb_alloc_page(tb, 1, phys_page2);
1214     } else {
1215         tb->page_addr[1] = -1;
1216     }
1217 
1218     /* add in the hash table */
1219     h = tb_hash_func(phys_pc, tb->pc, tb->flags);
1220     qht_insert(&tcg_ctx.tb_ctx.htable, tb, h);
1221 
1222 #ifdef DEBUG_TB_CHECK
1223     tb_page_check();
1224 #endif
1225 }
1226 
1227 /* Called with mmap_lock held for user mode emulation.  */
1228 TranslationBlock *tb_gen_code(CPUState *cpu,
1229                               target_ulong pc, target_ulong cs_base,
1230                               uint32_t flags, int cflags)
1231 {
1232     CPUArchState *env = cpu->env_ptr;
1233     TranslationBlock *tb;
1234     tb_page_addr_t phys_pc, phys_page2;
1235     target_ulong virt_page2;
1236     tcg_insn_unit *gen_code_buf;
1237     int gen_code_size, search_size;
1238 #ifdef CONFIG_PROFILER
1239     int64_t ti;
1240 #endif
1241     assert_memory_lock();
1242 
1243     phys_pc = get_page_addr_code(env, pc);
1244     if (use_icount && !(cflags & CF_IGNORE_ICOUNT)) {
1245         cflags |= CF_USE_ICOUNT;
1246     }
1247 
1248     tb = tb_alloc(pc);
1249     if (unlikely(!tb)) {
1250  buffer_overflow:
1251         /* flush must be done */
1252         tb_flush(cpu);
1253         mmap_unlock();
1254         /* Make the execution loop process the flush as soon as possible.  */
1255         cpu->exception_index = EXCP_INTERRUPT;
1256         cpu_loop_exit(cpu);
1257     }
1258 
1259     gen_code_buf = tcg_ctx.code_gen_ptr;
1260     tb->tc_ptr = gen_code_buf;
1261     tb->pc = pc;
1262     tb->cs_base = cs_base;
1263     tb->flags = flags;
1264     tb->cflags = cflags;
1265     tb->invalid = false;
1266 
1267 #ifdef CONFIG_PROFILER
1268     tcg_ctx.tb_count1++; /* includes aborted translations because of
1269                        exceptions */
1270     ti = profile_getclock();
1271 #endif
1272 
1273     tcg_func_start(&tcg_ctx);
1274 
1275     tcg_ctx.cpu = ENV_GET_CPU(env);
1276     gen_intermediate_code(env, tb);
1277     tcg_ctx.cpu = NULL;
1278 
1279     trace_translate_block(tb, tb->pc, tb->tc_ptr);
1280 
1281     /* generate machine code */
1282     tb->jmp_reset_offset[0] = TB_JMP_RESET_OFFSET_INVALID;
1283     tb->jmp_reset_offset[1] = TB_JMP_RESET_OFFSET_INVALID;
1284     tcg_ctx.tb_jmp_reset_offset = tb->jmp_reset_offset;
1285 #ifdef USE_DIRECT_JUMP
1286     tcg_ctx.tb_jmp_insn_offset = tb->jmp_insn_offset;
1287     tcg_ctx.tb_jmp_target_addr = NULL;
1288 #else
1289     tcg_ctx.tb_jmp_insn_offset = NULL;
1290     tcg_ctx.tb_jmp_target_addr = tb->jmp_target_addr;
1291 #endif
1292 
1293 #ifdef CONFIG_PROFILER
1294     tcg_ctx.tb_count++;
1295     tcg_ctx.interm_time += profile_getclock() - ti;
1296     tcg_ctx.code_time -= profile_getclock();
1297 #endif
1298 
1299     /* ??? Overflow could be handled better here.  In particular, we
1300        don't need to re-do gen_intermediate_code, nor should we re-do
1301        the tcg optimization currently hidden inside tcg_gen_code.  All
1302        that should be required is to flush the TBs, allocate a new TB,
1303        re-initialize it per above, and re-do the actual code generation.  */
1304     gen_code_size = tcg_gen_code(&tcg_ctx, tb);
1305     if (unlikely(gen_code_size < 0)) {
1306         goto buffer_overflow;
1307     }
1308     search_size = encode_search(tb, (void *)gen_code_buf + gen_code_size);
1309     if (unlikely(search_size < 0)) {
1310         goto buffer_overflow;
1311     }
1312 
1313 #ifdef CONFIG_PROFILER
1314     tcg_ctx.code_time += profile_getclock();
1315     tcg_ctx.code_in_len += tb->size;
1316     tcg_ctx.code_out_len += gen_code_size;
1317     tcg_ctx.search_out_len += search_size;
1318 #endif
1319 
1320 #ifdef DEBUG_DISAS
1321     if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM) &&
1322         qemu_log_in_addr_range(tb->pc)) {
1323         qemu_log_lock();
1324         qemu_log("OUT: [size=%d]\n", gen_code_size);
1325         log_disas(tb->tc_ptr, gen_code_size);
1326         qemu_log("\n");
1327         qemu_log_flush();
1328         qemu_log_unlock();
1329     }
1330 #endif
1331 
1332     tcg_ctx.code_gen_ptr = (void *)
1333         ROUND_UP((uintptr_t)gen_code_buf + gen_code_size + search_size,
1334                  CODE_GEN_ALIGN);
1335 
1336     /* init jump list */
1337     assert(((uintptr_t)tb & 3) == 0);
1338     tb->jmp_list_first = (uintptr_t)tb | 2;
1339     tb->jmp_list_next[0] = (uintptr_t)NULL;
1340     tb->jmp_list_next[1] = (uintptr_t)NULL;
1341 
1342     /* init original jump addresses wich has been set during tcg_gen_code() */
1343     if (tb->jmp_reset_offset[0] != TB_JMP_RESET_OFFSET_INVALID) {
1344         tb_reset_jump(tb, 0);
1345     }
1346     if (tb->jmp_reset_offset[1] != TB_JMP_RESET_OFFSET_INVALID) {
1347         tb_reset_jump(tb, 1);
1348     }
1349 
1350     /* check next page if needed */
1351     virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;
1352     phys_page2 = -1;
1353     if ((pc & TARGET_PAGE_MASK) != virt_page2) {
1354         phys_page2 = get_page_addr_code(env, virt_page2);
1355     }
1356     /* As long as consistency of the TB stuff is provided by tb_lock in user
1357      * mode and is implicit in single-threaded softmmu emulation, no explicit
1358      * memory barrier is required before tb_link_page() makes the TB visible
1359      * through the physical hash table and physical page list.
1360      */
1361     tb_link_page(tb, phys_pc, phys_page2);
1362     return tb;
1363 }
1364 
1365 /*
1366  * Invalidate all TBs which intersect with the target physical address range
1367  * [start;end[. NOTE: start and end may refer to *different* physical pages.
1368  * 'is_cpu_write_access' should be true if called from a real cpu write
1369  * access: the virtual CPU will exit the current TB if code is modified inside
1370  * this TB.
1371  *
1372  * Called with mmap_lock held for user-mode emulation, grabs tb_lock
1373  * Called with tb_lock held for system-mode emulation
1374  */
1375 static void tb_invalidate_phys_range_1(tb_page_addr_t start, tb_page_addr_t end)
1376 {
1377     while (start < end) {
1378         tb_invalidate_phys_page_range(start, end, 0);
1379         start &= TARGET_PAGE_MASK;
1380         start += TARGET_PAGE_SIZE;
1381     }
1382 }
1383 
1384 #ifdef CONFIG_SOFTMMU
1385 void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end)
1386 {
1387     assert_tb_locked();
1388     tb_invalidate_phys_range_1(start, end);
1389 }
1390 #else
1391 void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end)
1392 {
1393     assert_memory_lock();
1394     tb_lock();
1395     tb_invalidate_phys_range_1(start, end);
1396     tb_unlock();
1397 }
1398 #endif
1399 /*
1400  * Invalidate all TBs which intersect with the target physical address range
1401  * [start;end[. NOTE: start and end must refer to the *same* physical page.
1402  * 'is_cpu_write_access' should be true if called from a real cpu write
1403  * access: the virtual CPU will exit the current TB if code is modified inside
1404  * this TB.
1405  *
1406  * Called with tb_lock/mmap_lock held for user-mode emulation
1407  * Called with tb_lock held for system-mode emulation
1408  */
1409 void tb_invalidate_phys_page_range(tb_page_addr_t start, tb_page_addr_t end,
1410                                    int is_cpu_write_access)
1411 {
1412     TranslationBlock *tb, *tb_next;
1413 #if defined(TARGET_HAS_PRECISE_SMC)
1414     CPUState *cpu = current_cpu;
1415     CPUArchState *env = NULL;
1416 #endif
1417     tb_page_addr_t tb_start, tb_end;
1418     PageDesc *p;
1419     int n;
1420 #ifdef TARGET_HAS_PRECISE_SMC
1421     int current_tb_not_found = is_cpu_write_access;
1422     TranslationBlock *current_tb = NULL;
1423     int current_tb_modified = 0;
1424     target_ulong current_pc = 0;
1425     target_ulong current_cs_base = 0;
1426     uint32_t current_flags = 0;
1427 #endif /* TARGET_HAS_PRECISE_SMC */
1428 
1429     assert_memory_lock();
1430     assert_tb_locked();
1431 
1432     p = page_find(start >> TARGET_PAGE_BITS);
1433     if (!p) {
1434         return;
1435     }
1436 #if defined(TARGET_HAS_PRECISE_SMC)
1437     if (cpu != NULL) {
1438         env = cpu->env_ptr;
1439     }
1440 #endif
1441 
1442     /* we remove all the TBs in the range [start, end[ */
1443     /* XXX: see if in some cases it could be faster to invalidate all
1444        the code */
1445     tb = p->first_tb;
1446     while (tb != NULL) {
1447         n = (uintptr_t)tb & 3;
1448         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1449         tb_next = tb->page_next[n];
1450         /* NOTE: this is subtle as a TB may span two physical pages */
1451         if (n == 0) {
1452             /* NOTE: tb_end may be after the end of the page, but
1453                it is not a problem */
1454             tb_start = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
1455             tb_end = tb_start + tb->size;
1456         } else {
1457             tb_start = tb->page_addr[1];
1458             tb_end = tb_start + ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);
1459         }
1460         if (!(tb_end <= start || tb_start >= end)) {
1461 #ifdef TARGET_HAS_PRECISE_SMC
1462             if (current_tb_not_found) {
1463                 current_tb_not_found = 0;
1464                 current_tb = NULL;
1465                 if (cpu->mem_io_pc) {
1466                     /* now we have a real cpu fault */
1467                     current_tb = tb_find_pc(cpu->mem_io_pc);
1468                 }
1469             }
1470             if (current_tb == tb &&
1471                 (current_tb->cflags & CF_COUNT_MASK) != 1) {
1472                 /* If we are modifying the current TB, we must stop
1473                 its execution. We could be more precise by checking
1474                 that the modification is after the current PC, but it
1475                 would require a specialized function to partially
1476                 restore the CPU state */
1477 
1478                 current_tb_modified = 1;
1479                 cpu_restore_state_from_tb(cpu, current_tb, cpu->mem_io_pc);
1480                 cpu_get_tb_cpu_state(env, &current_pc, &current_cs_base,
1481                                      &current_flags);
1482             }
1483 #endif /* TARGET_HAS_PRECISE_SMC */
1484             tb_phys_invalidate(tb, -1);
1485         }
1486         tb = tb_next;
1487     }
1488 #if !defined(CONFIG_USER_ONLY)
1489     /* if no code remaining, no need to continue to use slow writes */
1490     if (!p->first_tb) {
1491         invalidate_page_bitmap(p);
1492         tlb_unprotect_code(start);
1493     }
1494 #endif
1495 #ifdef TARGET_HAS_PRECISE_SMC
1496     if (current_tb_modified) {
1497         /* we generate a block containing just the instruction
1498            modifying the memory. It will ensure that it cannot modify
1499            itself */
1500         tb_gen_code(cpu, current_pc, current_cs_base, current_flags, 1);
1501         cpu_loop_exit_noexc(cpu);
1502     }
1503 #endif
1504 }
1505 
1506 #ifdef CONFIG_SOFTMMU
1507 /* len must be <= 8 and start must be a multiple of len.
1508  * Called via softmmu_template.h when code areas are written to with
1509  * iothread mutex not held.
1510  */
1511 void tb_invalidate_phys_page_fast(tb_page_addr_t start, int len)
1512 {
1513     PageDesc *p;
1514 
1515 #if 0
1516     if (1) {
1517         qemu_log("modifying code at 0x%x size=%d EIP=%x PC=%08x\n",
1518                   cpu_single_env->mem_io_vaddr, len,
1519                   cpu_single_env->eip,
1520                   cpu_single_env->eip +
1521                   (intptr_t)cpu_single_env->segs[R_CS].base);
1522     }
1523 #endif
1524     assert_memory_lock();
1525 
1526     p = page_find(start >> TARGET_PAGE_BITS);
1527     if (!p) {
1528         return;
1529     }
1530     if (!p->code_bitmap &&
1531         ++p->code_write_count >= SMC_BITMAP_USE_THRESHOLD) {
1532         /* build code bitmap.  FIXME: writes should be protected by
1533          * tb_lock, reads by tb_lock or RCU.
1534          */
1535         build_page_bitmap(p);
1536     }
1537     if (p->code_bitmap) {
1538         unsigned int nr;
1539         unsigned long b;
1540 
1541         nr = start & ~TARGET_PAGE_MASK;
1542         b = p->code_bitmap[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG - 1));
1543         if (b & ((1 << len) - 1)) {
1544             goto do_invalidate;
1545         }
1546     } else {
1547     do_invalidate:
1548         tb_invalidate_phys_page_range(start, start + len, 1);
1549     }
1550 }
1551 #else
1552 /* Called with mmap_lock held. If pc is not 0 then it indicates the
1553  * host PC of the faulting store instruction that caused this invalidate.
1554  * Returns true if the caller needs to abort execution of the current
1555  * TB (because it was modified by this store and the guest CPU has
1556  * precise-SMC semantics).
1557  */
1558 static bool tb_invalidate_phys_page(tb_page_addr_t addr, uintptr_t pc)
1559 {
1560     TranslationBlock *tb;
1561     PageDesc *p;
1562     int n;
1563 #ifdef TARGET_HAS_PRECISE_SMC
1564     TranslationBlock *current_tb = NULL;
1565     CPUState *cpu = current_cpu;
1566     CPUArchState *env = NULL;
1567     int current_tb_modified = 0;
1568     target_ulong current_pc = 0;
1569     target_ulong current_cs_base = 0;
1570     uint32_t current_flags = 0;
1571 #endif
1572 
1573     assert_memory_lock();
1574 
1575     addr &= TARGET_PAGE_MASK;
1576     p = page_find(addr >> TARGET_PAGE_BITS);
1577     if (!p) {
1578         return false;
1579     }
1580 
1581     tb_lock();
1582     tb = p->first_tb;
1583 #ifdef TARGET_HAS_PRECISE_SMC
1584     if (tb && pc != 0) {
1585         current_tb = tb_find_pc(pc);
1586     }
1587     if (cpu != NULL) {
1588         env = cpu->env_ptr;
1589     }
1590 #endif
1591     while (tb != NULL) {
1592         n = (uintptr_t)tb & 3;
1593         tb = (TranslationBlock *)((uintptr_t)tb & ~3);
1594 #ifdef TARGET_HAS_PRECISE_SMC
1595         if (current_tb == tb &&
1596             (current_tb->cflags & CF_COUNT_MASK) != 1) {
1597                 /* If we are modifying the current TB, we must stop
1598                    its execution. We could be more precise by checking
1599                    that the modification is after the current PC, but it
1600                    would require a specialized function to partially
1601                    restore the CPU state */
1602 
1603             current_tb_modified = 1;
1604             cpu_restore_state_from_tb(cpu, current_tb, pc);
1605             cpu_get_tb_cpu_state(env, &current_pc, &current_cs_base,
1606                                  &current_flags);
1607         }
1608 #endif /* TARGET_HAS_PRECISE_SMC */
1609         tb_phys_invalidate(tb, addr);
1610         tb = tb->page_next[n];
1611     }
1612     p->first_tb = NULL;
1613 #ifdef TARGET_HAS_PRECISE_SMC
1614     if (current_tb_modified) {
1615         /* we generate a block containing just the instruction
1616            modifying the memory. It will ensure that it cannot modify
1617            itself */
1618         tb_gen_code(cpu, current_pc, current_cs_base, current_flags, 1);
1619         /* tb_lock will be reset after cpu_loop_exit_noexc longjmps
1620          * back into the cpu_exec loop. */
1621         return true;
1622     }
1623 #endif
1624     tb_unlock();
1625 
1626     return false;
1627 }
1628 #endif
1629 
1630 /* find the TB 'tb' such that tb[0].tc_ptr <= tc_ptr <
1631    tb[1].tc_ptr. Return NULL if not found */
1632 static TranslationBlock *tb_find_pc(uintptr_t tc_ptr)
1633 {
1634     int m_min, m_max, m;
1635     uintptr_t v;
1636     TranslationBlock *tb;
1637 
1638     if (tcg_ctx.tb_ctx.nb_tbs <= 0) {
1639         return NULL;
1640     }
1641     if (tc_ptr < (uintptr_t)tcg_ctx.code_gen_buffer ||
1642         tc_ptr >= (uintptr_t)tcg_ctx.code_gen_ptr) {
1643         return NULL;
1644     }
1645     /* binary search (cf Knuth) */
1646     m_min = 0;
1647     m_max = tcg_ctx.tb_ctx.nb_tbs - 1;
1648     while (m_min <= m_max) {
1649         m = (m_min + m_max) >> 1;
1650         tb = tcg_ctx.tb_ctx.tbs[m];
1651         v = (uintptr_t)tb->tc_ptr;
1652         if (v == tc_ptr) {
1653             return tb;
1654         } else if (tc_ptr < v) {
1655             m_max = m - 1;
1656         } else {
1657             m_min = m + 1;
1658         }
1659     }
1660     return tcg_ctx.tb_ctx.tbs[m_max];
1661 }
1662 
1663 #if !defined(CONFIG_USER_ONLY)
1664 void tb_invalidate_phys_addr(AddressSpace *as, hwaddr addr)
1665 {
1666     ram_addr_t ram_addr;
1667     MemoryRegion *mr;
1668     hwaddr l = 1;
1669 
1670     rcu_read_lock();
1671     mr = address_space_translate(as, addr, &addr, &l, false);
1672     if (!(memory_region_is_ram(mr)
1673           || memory_region_is_romd(mr))) {
1674         rcu_read_unlock();
1675         return;
1676     }
1677     ram_addr = memory_region_get_ram_addr(mr) + addr;
1678     tb_lock();
1679     tb_invalidate_phys_page_range(ram_addr, ram_addr + 1, 0);
1680     tb_unlock();
1681     rcu_read_unlock();
1682 }
1683 #endif /* !defined(CONFIG_USER_ONLY) */
1684 
1685 /* Called with tb_lock held.  */
1686 void tb_check_watchpoint(CPUState *cpu)
1687 {
1688     TranslationBlock *tb;
1689 
1690     tb = tb_find_pc(cpu->mem_io_pc);
1691     if (tb) {
1692         /* We can use retranslation to find the PC.  */
1693         cpu_restore_state_from_tb(cpu, tb, cpu->mem_io_pc);
1694         tb_phys_invalidate(tb, -1);
1695     } else {
1696         /* The exception probably happened in a helper.  The CPU state should
1697            have been saved before calling it. Fetch the PC from there.  */
1698         CPUArchState *env = cpu->env_ptr;
1699         target_ulong pc, cs_base;
1700         tb_page_addr_t addr;
1701         uint32_t flags;
1702 
1703         cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);
1704         addr = get_page_addr_code(env, pc);
1705         tb_invalidate_phys_range(addr, addr + 1);
1706     }
1707 }
1708 
1709 #ifndef CONFIG_USER_ONLY
1710 /* in deterministic execution mode, instructions doing device I/Os
1711  * must be at the end of the TB.
1712  *
1713  * Called by softmmu_template.h, with iothread mutex not held.
1714  */
1715 void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
1716 {
1717 #if defined(TARGET_MIPS) || defined(TARGET_SH4)
1718     CPUArchState *env = cpu->env_ptr;
1719 #endif
1720     TranslationBlock *tb;
1721     uint32_t n, cflags;
1722     target_ulong pc, cs_base;
1723     uint32_t flags;
1724 
1725     tb_lock();
1726     tb = tb_find_pc(retaddr);
1727     if (!tb) {
1728         cpu_abort(cpu, "cpu_io_recompile: could not find TB for pc=%p",
1729                   (void *)retaddr);
1730     }
1731     n = cpu->icount_decr.u16.low + tb->icount;
1732     cpu_restore_state_from_tb(cpu, tb, retaddr);
1733     /* Calculate how many instructions had been executed before the fault
1734        occurred.  */
1735     n = n - cpu->icount_decr.u16.low;
1736     /* Generate a new TB ending on the I/O insn.  */
1737     n++;
1738     /* On MIPS and SH, delay slot instructions can only be restarted if
1739        they were already the first instruction in the TB.  If this is not
1740        the first instruction in a TB then re-execute the preceding
1741        branch.  */
1742 #if defined(TARGET_MIPS)
1743     if ((env->hflags & MIPS_HFLAG_BMASK) != 0 && n > 1) {
1744         env->active_tc.PC -= (env->hflags & MIPS_HFLAG_B16 ? 2 : 4);
1745         cpu->icount_decr.u16.low++;
1746         env->hflags &= ~MIPS_HFLAG_BMASK;
1747     }
1748 #elif defined(TARGET_SH4)
1749     if ((env->flags & ((DELAY_SLOT | DELAY_SLOT_CONDITIONAL))) != 0
1750             && n > 1) {
1751         env->pc -= 2;
1752         cpu->icount_decr.u16.low++;
1753         env->flags &= ~(DELAY_SLOT | DELAY_SLOT_CONDITIONAL);
1754     }
1755 #endif
1756     /* This should never happen.  */
1757     if (n > CF_COUNT_MASK) {
1758         cpu_abort(cpu, "TB too big during recompile");
1759     }
1760 
1761     cflags = n | CF_LAST_IO;
1762     pc = tb->pc;
1763     cs_base = tb->cs_base;
1764     flags = tb->flags;
1765     tb_phys_invalidate(tb, -1);
1766     if (tb->cflags & CF_NOCACHE) {
1767         if (tb->orig_tb) {
1768             /* Invalidate original TB if this TB was generated in
1769              * cpu_exec_nocache() */
1770             tb_phys_invalidate(tb->orig_tb, -1);
1771         }
1772         tb_free(tb);
1773     }
1774     /* FIXME: In theory this could raise an exception.  In practice
1775        we have already translated the block once so it's probably ok.  */
1776     tb_gen_code(cpu, pc, cs_base, flags, cflags);
1777 
1778     /* TODO: If env->pc != tb->pc (i.e. the faulting instruction was not
1779      * the first in the TB) then we end up generating a whole new TB and
1780      *  repeating the fault, which is horribly inefficient.
1781      *  Better would be to execute just this insn uncached, or generate a
1782      *  second new TB.
1783      *
1784      * cpu_loop_exit_noexc will longjmp back to cpu_exec where the
1785      * tb_lock gets reset.
1786      */
1787     cpu_loop_exit_noexc(cpu);
1788 }
1789 
1790 static void tb_jmp_cache_clear_page(CPUState *cpu, target_ulong page_addr)
1791 {
1792     unsigned int i, i0 = tb_jmp_cache_hash_page(page_addr);
1793 
1794     for (i = 0; i < TB_JMP_PAGE_SIZE; i++) {
1795         atomic_set(&cpu->tb_jmp_cache[i0 + i], NULL);
1796     }
1797 }
1798 
1799 void tb_flush_jmp_cache(CPUState *cpu, target_ulong addr)
1800 {
1801     /* Discard jump cache entries for any tb which might potentially
1802        overlap the flushed page.  */
1803     tb_jmp_cache_clear_page(cpu, addr - TARGET_PAGE_SIZE);
1804     tb_jmp_cache_clear_page(cpu, addr);
1805 }
1806 
1807 static void print_qht_statistics(FILE *f, fprintf_function cpu_fprintf,
1808                                  struct qht_stats hst)
1809 {
1810     uint32_t hgram_opts;
1811     size_t hgram_bins;
1812     char *hgram;
1813 
1814     if (!hst.head_buckets) {
1815         return;
1816     }
1817     cpu_fprintf(f, "TB hash buckets     %zu/%zu (%0.2f%% head buckets used)\n",
1818                 hst.used_head_buckets, hst.head_buckets,
1819                 (double)hst.used_head_buckets / hst.head_buckets * 100);
1820 
1821     hgram_opts =  QDIST_PR_BORDER | QDIST_PR_LABELS;
1822     hgram_opts |= QDIST_PR_100X   | QDIST_PR_PERCENT;
1823     if (qdist_xmax(&hst.occupancy) - qdist_xmin(&hst.occupancy) == 1) {
1824         hgram_opts |= QDIST_PR_NODECIMAL;
1825     }
1826     hgram = qdist_pr(&hst.occupancy, 10, hgram_opts);
1827     cpu_fprintf(f, "TB hash occupancy   %0.2f%% avg chain occ. Histogram: %s\n",
1828                 qdist_avg(&hst.occupancy) * 100, hgram);
1829     g_free(hgram);
1830 
1831     hgram_opts = QDIST_PR_BORDER | QDIST_PR_LABELS;
1832     hgram_bins = qdist_xmax(&hst.chain) - qdist_xmin(&hst.chain);
1833     if (hgram_bins > 10) {
1834         hgram_bins = 10;
1835     } else {
1836         hgram_bins = 0;
1837         hgram_opts |= QDIST_PR_NODECIMAL | QDIST_PR_NOBINRANGE;
1838     }
1839     hgram = qdist_pr(&hst.chain, hgram_bins, hgram_opts);
1840     cpu_fprintf(f, "TB hash avg chain   %0.3f buckets. Histogram: %s\n",
1841                 qdist_avg(&hst.chain), hgram);
1842     g_free(hgram);
1843 }
1844 
1845 void dump_exec_info(FILE *f, fprintf_function cpu_fprintf)
1846 {
1847     int i, target_code_size, max_target_code_size;
1848     int direct_jmp_count, direct_jmp2_count, cross_page;
1849     TranslationBlock *tb;
1850     struct qht_stats hst;
1851 
1852     tb_lock();
1853 
1854     target_code_size = 0;
1855     max_target_code_size = 0;
1856     cross_page = 0;
1857     direct_jmp_count = 0;
1858     direct_jmp2_count = 0;
1859     for (i = 0; i < tcg_ctx.tb_ctx.nb_tbs; i++) {
1860         tb = tcg_ctx.tb_ctx.tbs[i];
1861         target_code_size += tb->size;
1862         if (tb->size > max_target_code_size) {
1863             max_target_code_size = tb->size;
1864         }
1865         if (tb->page_addr[1] != -1) {
1866             cross_page++;
1867         }
1868         if (tb->jmp_reset_offset[0] != TB_JMP_RESET_OFFSET_INVALID) {
1869             direct_jmp_count++;
1870             if (tb->jmp_reset_offset[1] != TB_JMP_RESET_OFFSET_INVALID) {
1871                 direct_jmp2_count++;
1872             }
1873         }
1874     }
1875     /* XXX: avoid using doubles ? */
1876     cpu_fprintf(f, "Translation buffer state:\n");
1877     cpu_fprintf(f, "gen code size       %td/%zd\n",
1878                 tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer,
1879                 tcg_ctx.code_gen_highwater - tcg_ctx.code_gen_buffer);
1880     cpu_fprintf(f, "TB count            %d\n", tcg_ctx.tb_ctx.nb_tbs);
1881     cpu_fprintf(f, "TB avg target size  %d max=%d bytes\n",
1882             tcg_ctx.tb_ctx.nb_tbs ? target_code_size /
1883                     tcg_ctx.tb_ctx.nb_tbs : 0,
1884             max_target_code_size);
1885     cpu_fprintf(f, "TB avg host size    %td bytes (expansion ratio: %0.1f)\n",
1886             tcg_ctx.tb_ctx.nb_tbs ? (tcg_ctx.code_gen_ptr -
1887                                      tcg_ctx.code_gen_buffer) /
1888                                      tcg_ctx.tb_ctx.nb_tbs : 0,
1889                 target_code_size ? (double) (tcg_ctx.code_gen_ptr -
1890                                              tcg_ctx.code_gen_buffer) /
1891                                              target_code_size : 0);
1892     cpu_fprintf(f, "cross page TB count %d (%d%%)\n", cross_page,
1893             tcg_ctx.tb_ctx.nb_tbs ? (cross_page * 100) /
1894                                     tcg_ctx.tb_ctx.nb_tbs : 0);
1895     cpu_fprintf(f, "direct jump count   %d (%d%%) (2 jumps=%d %d%%)\n",
1896                 direct_jmp_count,
1897                 tcg_ctx.tb_ctx.nb_tbs ? (direct_jmp_count * 100) /
1898                         tcg_ctx.tb_ctx.nb_tbs : 0,
1899                 direct_jmp2_count,
1900                 tcg_ctx.tb_ctx.nb_tbs ? (direct_jmp2_count * 100) /
1901                         tcg_ctx.tb_ctx.nb_tbs : 0);
1902 
1903     qht_statistics_init(&tcg_ctx.tb_ctx.htable, &hst);
1904     print_qht_statistics(f, cpu_fprintf, hst);
1905     qht_statistics_destroy(&hst);
1906 
1907     cpu_fprintf(f, "\nStatistics:\n");
1908     cpu_fprintf(f, "TB flush count      %u\n",
1909             atomic_read(&tcg_ctx.tb_ctx.tb_flush_count));
1910     cpu_fprintf(f, "TB invalidate count %d\n",
1911             tcg_ctx.tb_ctx.tb_phys_invalidate_count);
1912     cpu_fprintf(f, "TLB flush count     %d\n", tlb_flush_count);
1913     tcg_dump_info(f, cpu_fprintf);
1914 
1915     tb_unlock();
1916 }
1917 
1918 void dump_opcount_info(FILE *f, fprintf_function cpu_fprintf)
1919 {
1920     tcg_dump_op_count(f, cpu_fprintf);
1921 }
1922 
1923 #else /* CONFIG_USER_ONLY */
1924 
1925 void cpu_interrupt(CPUState *cpu, int mask)
1926 {
1927     g_assert(qemu_mutex_iothread_locked());
1928     cpu->interrupt_request |= mask;
1929     cpu->icount_decr.u16.high = -1;
1930 }
1931 
1932 /*
1933  * Walks guest process memory "regions" one by one
1934  * and calls callback function 'fn' for each region.
1935  */
1936 struct walk_memory_regions_data {
1937     walk_memory_regions_fn fn;
1938     void *priv;
1939     target_ulong start;
1940     int prot;
1941 };
1942 
1943 static int walk_memory_regions_end(struct walk_memory_regions_data *data,
1944                                    target_ulong end, int new_prot)
1945 {
1946     if (data->start != -1u) {
1947         int rc = data->fn(data->priv, data->start, end, data->prot);
1948         if (rc != 0) {
1949             return rc;
1950         }
1951     }
1952 
1953     data->start = (new_prot ? end : -1u);
1954     data->prot = new_prot;
1955 
1956     return 0;
1957 }
1958 
1959 static int walk_memory_regions_1(struct walk_memory_regions_data *data,
1960                                  target_ulong base, int level, void **lp)
1961 {
1962     target_ulong pa;
1963     int i, rc;
1964 
1965     if (*lp == NULL) {
1966         return walk_memory_regions_end(data, base, 0);
1967     }
1968 
1969     if (level == 0) {
1970         PageDesc *pd = *lp;
1971 
1972         for (i = 0; i < V_L2_SIZE; ++i) {
1973             int prot = pd[i].flags;
1974 
1975             pa = base | (i << TARGET_PAGE_BITS);
1976             if (prot != data->prot) {
1977                 rc = walk_memory_regions_end(data, pa, prot);
1978                 if (rc != 0) {
1979                     return rc;
1980                 }
1981             }
1982         }
1983     } else {
1984         void **pp = *lp;
1985 
1986         for (i = 0; i < V_L2_SIZE; ++i) {
1987             pa = base | ((target_ulong)i <<
1988                 (TARGET_PAGE_BITS + V_L2_BITS * level));
1989             rc = walk_memory_regions_1(data, pa, level - 1, pp + i);
1990             if (rc != 0) {
1991                 return rc;
1992             }
1993         }
1994     }
1995 
1996     return 0;
1997 }
1998 
1999 int walk_memory_regions(void *priv, walk_memory_regions_fn fn)
2000 {
2001     struct walk_memory_regions_data data;
2002     uintptr_t i, l1_sz = v_l1_size;
2003 
2004     data.fn = fn;
2005     data.priv = priv;
2006     data.start = -1u;
2007     data.prot = 0;
2008 
2009     for (i = 0; i < l1_sz; i++) {
2010         target_ulong base = i << (v_l1_shift + TARGET_PAGE_BITS);
2011         int rc = walk_memory_regions_1(&data, base, v_l2_levels, l1_map + i);
2012         if (rc != 0) {
2013             return rc;
2014         }
2015     }
2016 
2017     return walk_memory_regions_end(&data, 0, 0);
2018 }
2019 
2020 static int dump_region(void *priv, target_ulong start,
2021     target_ulong end, unsigned long prot)
2022 {
2023     FILE *f = (FILE *)priv;
2024 
2025     (void) fprintf(f, TARGET_FMT_lx"-"TARGET_FMT_lx
2026         " "TARGET_FMT_lx" %c%c%c\n",
2027         start, end, end - start,
2028         ((prot & PAGE_READ) ? 'r' : '-'),
2029         ((prot & PAGE_WRITE) ? 'w' : '-'),
2030         ((prot & PAGE_EXEC) ? 'x' : '-'));
2031 
2032     return 0;
2033 }
2034 
2035 /* dump memory mappings */
2036 void page_dump(FILE *f)
2037 {
2038     const int length = sizeof(target_ulong) * 2;
2039     (void) fprintf(f, "%-*s %-*s %-*s %s\n",
2040             length, "start", length, "end", length, "size", "prot");
2041     walk_memory_regions(f, dump_region);
2042 }
2043 
2044 int page_get_flags(target_ulong address)
2045 {
2046     PageDesc *p;
2047 
2048     p = page_find(address >> TARGET_PAGE_BITS);
2049     if (!p) {
2050         return 0;
2051     }
2052     return p->flags;
2053 }
2054 
2055 /* Modify the flags of a page and invalidate the code if necessary.
2056    The flag PAGE_WRITE_ORG is positioned automatically depending
2057    on PAGE_WRITE.  The mmap_lock should already be held.  */
2058 void page_set_flags(target_ulong start, target_ulong end, int flags)
2059 {
2060     target_ulong addr, len;
2061 
2062     /* This function should never be called with addresses outside the
2063        guest address space.  If this assert fires, it probably indicates
2064        a missing call to h2g_valid.  */
2065 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2066     assert(end < ((target_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2067 #endif
2068     assert(start < end);
2069     assert_memory_lock();
2070 
2071     start = start & TARGET_PAGE_MASK;
2072     end = TARGET_PAGE_ALIGN(end);
2073 
2074     if (flags & PAGE_WRITE) {
2075         flags |= PAGE_WRITE_ORG;
2076     }
2077 
2078     for (addr = start, len = end - start;
2079          len != 0;
2080          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2081         PageDesc *p = page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
2082 
2083         /* If the write protection bit is set, then we invalidate
2084            the code inside.  */
2085         if (!(p->flags & PAGE_WRITE) &&
2086             (flags & PAGE_WRITE) &&
2087             p->first_tb) {
2088             tb_invalidate_phys_page(addr, 0);
2089         }
2090         p->flags = flags;
2091     }
2092 }
2093 
2094 int page_check_range(target_ulong start, target_ulong len, int flags)
2095 {
2096     PageDesc *p;
2097     target_ulong end;
2098     target_ulong addr;
2099 
2100     /* This function should never be called with addresses outside the
2101        guest address space.  If this assert fires, it probably indicates
2102        a missing call to h2g_valid.  */
2103 #if TARGET_ABI_BITS > L1_MAP_ADDR_SPACE_BITS
2104     assert(start < ((target_ulong)1 << L1_MAP_ADDR_SPACE_BITS));
2105 #endif
2106 
2107     if (len == 0) {
2108         return 0;
2109     }
2110     if (start + len - 1 < start) {
2111         /* We've wrapped around.  */
2112         return -1;
2113     }
2114 
2115     /* must do before we loose bits in the next step */
2116     end = TARGET_PAGE_ALIGN(start + len);
2117     start = start & TARGET_PAGE_MASK;
2118 
2119     for (addr = start, len = end - start;
2120          len != 0;
2121          len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
2122         p = page_find(addr >> TARGET_PAGE_BITS);
2123         if (!p) {
2124             return -1;
2125         }
2126         if (!(p->flags & PAGE_VALID)) {
2127             return -1;
2128         }
2129 
2130         if ((flags & PAGE_READ) && !(p->flags & PAGE_READ)) {
2131             return -1;
2132         }
2133         if (flags & PAGE_WRITE) {
2134             if (!(p->flags & PAGE_WRITE_ORG)) {
2135                 return -1;
2136             }
2137             /* unprotect the page if it was put read-only because it
2138                contains translated code */
2139             if (!(p->flags & PAGE_WRITE)) {
2140                 if (!page_unprotect(addr, 0)) {
2141                     return -1;
2142                 }
2143             }
2144         }
2145     }
2146     return 0;
2147 }
2148 
2149 /* called from signal handler: invalidate the code and unprotect the
2150  * page. Return 0 if the fault was not handled, 1 if it was handled,
2151  * and 2 if it was handled but the caller must cause the TB to be
2152  * immediately exited. (We can only return 2 if the 'pc' argument is
2153  * non-zero.)
2154  */
2155 int page_unprotect(target_ulong address, uintptr_t pc)
2156 {
2157     unsigned int prot;
2158     bool current_tb_invalidated;
2159     PageDesc *p;
2160     target_ulong host_start, host_end, addr;
2161 
2162     /* Technically this isn't safe inside a signal handler.  However we
2163        know this only ever happens in a synchronous SEGV handler, so in
2164        practice it seems to be ok.  */
2165     mmap_lock();
2166 
2167     p = page_find(address >> TARGET_PAGE_BITS);
2168     if (!p) {
2169         mmap_unlock();
2170         return 0;
2171     }
2172 
2173     /* if the page was really writable, then we change its
2174        protection back to writable */
2175     if ((p->flags & PAGE_WRITE_ORG) && !(p->flags & PAGE_WRITE)) {
2176         host_start = address & qemu_host_page_mask;
2177         host_end = host_start + qemu_host_page_size;
2178 
2179         prot = 0;
2180         current_tb_invalidated = false;
2181         for (addr = host_start ; addr < host_end ; addr += TARGET_PAGE_SIZE) {
2182             p = page_find(addr >> TARGET_PAGE_BITS);
2183             p->flags |= PAGE_WRITE;
2184             prot |= p->flags;
2185 
2186             /* and since the content will be modified, we must invalidate
2187                the corresponding translated code. */
2188             current_tb_invalidated |= tb_invalidate_phys_page(addr, pc);
2189 #ifdef DEBUG_TB_CHECK
2190             tb_invalidate_check(addr);
2191 #endif
2192         }
2193         mprotect((void *)g2h(host_start), qemu_host_page_size,
2194                  prot & PAGE_BITS);
2195 
2196         mmap_unlock();
2197         /* If current TB was invalidated return to main loop */
2198         return current_tb_invalidated ? 2 : 1;
2199     }
2200     mmap_unlock();
2201     return 0;
2202 }
2203 #endif /* CONFIG_USER_ONLY */
2204 
2205 /* This is a wrapper for common code that can not use CONFIG_SOFTMMU */
2206 void tcg_flush_softmmu_tlb(CPUState *cs)
2207 {
2208 #ifdef CONFIG_SOFTMMU
2209     tlb_flush(cs);
2210 #endif
2211 }
2212