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 ---