user-exec.c (4329d049d5b8d4af71c6b399d64a6d1b98856318) | user-exec.c (6d03226b42247b68ab2f0b3663e0f624335a4055) |
---|---|
1/* 2 * User emulator execution 3 * 4 * Copyright (c) 2003-2005 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 --- 731 unchanged lines hidden (view full) --- 740 break; 741 default: 742 g_assert_not_reached(); 743 } 744 745 if (guest_addr_valid_untagged(addr)) { 746 int page_flags = page_get_flags(addr); 747 if (page_flags & acc_flag) { | 1/* 2 * User emulator execution 3 * 4 * Copyright (c) 2003-2005 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 --- 731 unchanged lines hidden (view full) --- 740 break; 741 default: 742 g_assert_not_reached(); 743 } 744 745 if (guest_addr_valid_untagged(addr)) { 746 int page_flags = page_get_flags(addr); 747 if (page_flags & acc_flag) { |
748 if ((acc_flag == PAGE_READ || acc_flag == PAGE_WRITE) 749 && cpu_plugin_mem_cbs_enabled(env_cpu(env))) { 750 return TLB_MMIO; 751 } |
|
748 return 0; /* success */ 749 } 750 maperr = !(page_flags & PAGE_VALID); 751 } else { 752 maperr = true; 753 } 754 755 if (nonfault) { --- 6 unchanged lines hidden (view full) --- 762int probe_access_flags(CPUArchState *env, vaddr addr, int size, 763 MMUAccessType access_type, int mmu_idx, 764 bool nonfault, void **phost, uintptr_t ra) 765{ 766 int flags; 767 768 g_assert(-(addr | TARGET_PAGE_MASK) >= size); 769 flags = probe_access_internal(env, addr, size, access_type, nonfault, ra); | 752 return 0; /* success */ 753 } 754 maperr = !(page_flags & PAGE_VALID); 755 } else { 756 maperr = true; 757 } 758 759 if (nonfault) { --- 6 unchanged lines hidden (view full) --- 766int probe_access_flags(CPUArchState *env, vaddr addr, int size, 767 MMUAccessType access_type, int mmu_idx, 768 bool nonfault, void **phost, uintptr_t ra) 769{ 770 int flags; 771 772 g_assert(-(addr | TARGET_PAGE_MASK) >= size); 773 flags = probe_access_internal(env, addr, size, access_type, nonfault, ra); |
770 *phost = flags ? NULL : g2h(env_cpu(env), addr); | 774 *phost = (flags & TLB_INVALID_MASK) ? NULL : g2h(env_cpu(env), addr); |
771 return flags; 772} 773 774void *probe_access(CPUArchState *env, vaddr addr, int size, 775 MMUAccessType access_type, int mmu_idx, uintptr_t ra) 776{ 777 int flags; 778 779 g_assert(-(addr | TARGET_PAGE_MASK) >= size); 780 flags = probe_access_internal(env, addr, size, access_type, false, ra); | 775 return flags; 776} 777 778void *probe_access(CPUArchState *env, vaddr addr, int size, 779 MMUAccessType access_type, int mmu_idx, uintptr_t ra) 780{ 781 int flags; 782 783 g_assert(-(addr | TARGET_PAGE_MASK) >= size); 784 flags = probe_access_internal(env, addr, size, access_type, false, ra); |
781 g_assert(flags == 0); | 785 g_assert((flags & ~TLB_MMIO) == 0); |
782 783 return size ? g2h(env_cpu(env), addr) : NULL; 784} 785 786tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, vaddr addr, 787 void **hostp) 788{ 789 int flags; --- 598 unchanged lines hidden --- | 786 787 return size ? g2h(env_cpu(env), addr) : NULL; 788} 789 790tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, vaddr addr, 791 void **hostp) 792{ 793 int flags; --- 598 unchanged lines hidden --- |