// SPDX-License-Identifier: GPL-2.0 // Copyright (C) 2008 Gilles Chanteperdrix // Copyright (C) 2021 Philippe Gerum #include #include static void mach_arm64_prefault(struct vm_area_struct *vma) { unsigned long addr; unsigned int flags; if ((vma->vm_flags & VM_MAYREAD)) { flags = (vma->vm_flags & VM_MAYWRITE) ? FAULT_FLAG_WRITE : 0; for (addr = vma->vm_start; addr != vma->vm_end; addr += PAGE_SIZE) handle_mm_fault(vma, addr, flags, NULL); } } static const char *const fault_labels[] = { [ARM64_TRAP_ACCESS] = "Data or instruction abort", [ARM64_TRAP_ALIGN] = "SP/PC alignment abort", [ARM64_TRAP_SEA] = "Synchronous external abort", [ARM64_TRAP_DEBUG] = "Debug trap", [ARM64_TRAP_UNDI] = "Undefined instruction", [ARM64_TRAP_UNDSE] = "Undefined synchronous exception", [ARM64_TRAP_FPE] = "FPSIMD exception", [ARM64_TRAP_SVE] = "SVE access trap", [ARM64_TRAP_BTI] = "Branch target identification trap", [31] = NULL }; struct cobalt_machine cobalt_machine = { .name = "arm64", .init = NULL, .late_init = NULL, .cleanup = NULL, .prefault = mach_arm64_prefault, .fault_labels = fault_labels, };