Key: ELF symbol (primary) ELF symbol source (with column ║) frame instruction +variable (range start) -variable (range end) inlining control-flow forwards branch ──>   backwards branch ══>

Compilation unit 0000a6b8 0000af1c arch/arm64/kvm/hyp/nvhe/mm.c instructions

header .debug_abbrev die abbreviation table .debug_info die tree .debug_line line number info .debug_line evaluated line info simple die tree simple die tree globals simple die tree locals inlined subroutine info inlined subroutine info by range **0000a6b8 <__hyp_create_mappings>: 0000a6b8 <$x>: + __hyp_create_mappings params: +start param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x8) +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x10) +phys param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x18) +prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x10) __hyp_create_mappings:29.0 (mm.c) Sbepe ║{ +start param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x8) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:27 +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x10) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:27 +phys param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x18) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:28 +prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x10) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:28 +err var int (base type, DW_ATE_signed size:4) 0xa6b8 0xa720 (DW_OP_breg31 0xc) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:30 ~ 0000a6b8: d10103ff sub sp, sp, #0x40 <- 0000761c(bl)<__hyp_create_mappings>,0000a91c(bl)<__hyp_create_mappings>,0000a9d4(bl)<__hyp_create_mappings>,0000ae50(bl)<__hyp_create_mappings> ~ 0000a6bc: a9037bfd stp x29, x30, [sp, #48] 0000a6b8 CFA:r31 r29:u r30:u ~ 0000a6c0: 9100c3fd add x29, sp, #0x30 ~ 0000a6c4: f81f83a0 stur x0, [x29, #-8] ~ 0000a6c8: f81f03a1 stur x1, [x29, #-16] ~ 0000a6cc: f9000fe2 str x2, [sp, #24] ~ 0000a6d0: f9000be3 str x3, [sp, #16] __hyp_create_mappings:32.2 (mm.c) SbePe ║hyp_spin_lock(&__hyp_pgd_lock); ~ 0000a6d4: 90000088 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a6d8: 912dc108 add x8, x8, #0xb70 ~ 0000a6dc: aa0803e0 mov x0, x8 ~ 0000a6e0: f90003e8 str x8, [sp] ~ 0000a6e4: 9400000f bl a720 <hyp_spin_lock> __hyp_create_mappings:33.42 (mm.c) Sbepe err = kvm_pgtable_hyp_map(&hyp_pgtable, ║start, size, phys, prot); ~ 0000a6e8: f85f83a1 ldur x1, [x29, #-8] <- 0000a6e4(bl-succ)<return> __hyp_create_mappings:33.49 (mm.c) sbepe err = kvm_pgtable_hyp_map(&hyp_pgtable, start, ║size, phys, prot); ~ 0000a6ec: f85f03a2 ldur x2, [x29, #-16] __hyp_create_mappings:33.55 (mm.c) sbepe err = kvm_pgtable_hyp_map(&hyp_pgtable, start, size, ║phys, prot); ~ 0000a6f0: f9400fe3 ldr x3, [sp, #24] __hyp_create_mappings:33.61 (mm.c) sbepe err = kvm_pgtable_hyp_map(&hyp_pgtable, start, size, phys, ║prot); ~ 0000a6f4: b94013e4 ldr w4, [sp, #16] __hyp_create_mappings:33.8 (mm.c) sbepe err = ║kvm_pgtable_hyp_map(&hyp_pgtable, start, size, phys, prot); ~ 0000a6f8: 90000080 adrp x0, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a6fc: 912de000 add x0, x0, #0xb78 ~ 0000a700: 94002483 bl 1390c <kvm_pgtable_hyp_map> __hyp_create_mappings:33.6 (mm.c) sbepe err ║= kvm_pgtable_hyp_map(&hyp_pgtable, start, size, phys, prot); ~ 0000a704: b9000fe0 str w0, [sp, #12] <- 0000a700(bl-succ)<return> ~ 0000a708: f94003e0 ldr x0, [sp] __hyp_create_mappings:34.2 (mm.c) Sbepe ║hyp_spin_unlock(&__hyp_pgd_lock); ~ 0000a70c: 94000019 bl a770 <hyp_spin_unlock> __hyp_create_mappings:36.9 (mm.c) Sbepe return ║err; ~ 0000a710: b9400fe0 ldr w0, [sp, #12] <- 0000a70c(bl-succ)<return> __hyp_create_mappings:36.2 (mm.c) sbepe ║return err; ~ 0000a714: a9437bfd ldp x29, x30, [sp, #48] ~ 0000a718: 910103ff add sp, sp, #0x40 0000a6c4 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000a71c: d65f03c0 ret -start param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x8) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:27 -size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_fbreg -0x10) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:27 -phys param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x18) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:28 -prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa6b8 0xa720 (DW_OP_breg31 0x10) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:28 -err var int (base type, DW_ATE_signed size:4) 0xa6b8 0xa720 (DW_OP_breg31 0xc) __hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:30 **0000a720 <hyp_spin_lock>: + hyp_spin_lock params: +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa720 0xa770 (DW_OP_fbreg 0x18) hyp_spin_lock:36.0 (spinlock.h) Sbepe ║{ 0000a720 CFA:r31 +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa720 0xa770 (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:35 +tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xa720 0xa770 (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:37 +lockval var typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>) 0xa720 0xa770 (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:38 +newval var typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>) 0xa720 0xa770 (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:38 ~ 0000a720: d10083ff sub sp, sp, #0x20 <- 0000a6e4(bl)<hyp_spin_lock>,0000a7b4(bl)<hyp_spin_lock> ~ 0000a724: f9000fe0 str x0, [sp, #24] hyp_spin_lock:68.57 (spinlock.h) SbePe : "=&r" (lockval), "=&r" (newval), "=&r" (tmp), "+Q" (*║lock) ~ 0000a728: f9400fe8 ldr x8, [sp, #24] hyp_spin_lock:40.2 (spinlock.h) Sbepe ║asm volatile( ~ 0000a72c: f9800111 prfm pstl1strm, [x8] ~ ╔>0000a730: 885ffd09 ldaxr w9, [x8] <- v0000a73c(b.cc)<hyp_spin_lock+0x10> ~ 0000a734: 1140412a add w10, w9, #0x10, lsl #12 ~ 0000a738: 880b7d0a stxr w11, w10, [x8] ~ ╚═0000a73c: 35ffffab cbnz w11, a730 <hyp_spin_lock+0x10> ~ 0000a740: 4ac9412a eor w10, w9, w9, ror #16 <- 0000a73c(b.cc-succ)<fallthrough> ~ ┌──0000a744: 340000ca cbz w10, a75c <hyp_spin_lock+0x3c> ~ 0000a748: d50320bf sevl <- 0000a744(b.cc-succ)<fallthrough> ~ │╔>0000a74c: d503205f wfe <- v0000a758(b.cc)<hyp_spin_lock+0x2c> ~ │║ 0000a750: 485ffd0b ldaxrh w11, [x8] ~ │║ 0000a754: 4a49416a eor w10, w11, w9, lsr #16 ~ │╚═0000a758: 35ffffaa cbnz w10, a74c <hyp_spin_lock+0x2c> ~ └─>0000a75c: b90013e9 str w9, [sp, #16] <- 0000a744(b.cc)<hyp_spin_lock+0x3c>,0000a758(b.cc-succ)<fallthrough> ~ 0000a760: b9000bea str w10, [sp, #8] ~ 0000a764: b90017eb str w11, [sp, #20] hyp_spin_lock:71.1 (spinlock.h) Sbepe ║} ~ 0000a768: 910083ff add sp, sp, #0x20 0000a724 CFA:r31+32 ~ 0000a76c: d65f03c0 ret -lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa720 0xa770 (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:35 -tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xa720 0xa770 (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:37 -lockval var typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>) 0xa720 0xa770 (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:38 -newval var typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>) 0xa720 0xa770 (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mm.c:38 **0000a770 <hyp_spin_unlock>: + hyp_spin_unlock params: +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa770 0xa794 (DW_OP_fbreg 0x8) hyp_spin_unlock:74.0 (spinlock.h) Sbepe ║{ 0000a770 CFA:r31 +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa770 0xa794 (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mm.c:73 +tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xa770 0xa794 (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mm.c:75 ~ 0000a770: d10043ff sub sp, sp, #0x10 <- 0000a70c(bl)<hyp_spin_unlock>,0000a880(bl)<hyp_spin_unlock> ~ 0000a774: f90007e0 str x0, [sp, #8] hyp_spin_unlock:87.10 (spinlock.h) SbePe : "=Q" (║lock->owner), "=&r" (tmp) ~ 0000a778: f94007e8 ldr x8, [sp, #8] hyp_spin_unlock:77.2 (spinlock.h) Sbepe ║asm volatile( ~ 0000a77c: 79400109 ldrh w9, [x8] ~ 0000a780: 11000529 add w9, w9, #0x1 ~ 0000a784: 489ffd09 stlrh w9, [x8] ~ 0000a788: f90003e9 str x9, [sp] hyp_spin_unlock:90.1 (spinlock.h) Sbepe ║} ~ 0000a78c: 910043ff add sp, sp, #0x10 0000a774 CFA:r31+16 ~ 0000a790: d65f03c0 ret -lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<7b0a4>/<89622>)) 0xa770 0xa794 (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mm.c:73 -tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xa770 0xa794 (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mm.c:75 **0000a794 <__hyp_create_private_mapping>: + __hyp_create_private_mapping params: +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x8) +size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x10) +prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa794 0xa894 (DW_OP_breg31 0x18) __hyp_create_private_mapping:41.0 (mm.c) Sbepe ║{ +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x8) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:39 +size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x10) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:39 +prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa794 0xa894 (DW_OP_breg31 0x18) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:40 +addr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa794 0xa894 (DW_OP_breg31 0x10) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:42 +ret var int (base type, DW_ATE_signed size:4) 0xa794 0xa894 (DW_OP_breg31 0xc) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:43 ~ 0000a794: d10103ff sub sp, sp, #0x40 <- 0000767c(bl)<__hyp_create_private_mapping>,0000a670(bl)<__hyp_create_private_mapping>,0000ad0c(bl)<__hyp_create_private_mapping> ~ 0000a798: a9037bfd stp x29, x30, [sp, #48] 0000a794 CFA:r31 r29:u r30:u ~ 0000a79c: 9100c3fd add x29, sp, #0x30 ~ 0000a7a0: f81f83a0 stur x0, [x29, #-8] ~ 0000a7a4: f81f03a1 stur x1, [x29, #-16] ~ 0000a7a8: f9000fe2 str x2, [sp, #24] __hyp_create_private_mapping:45.2 (mm.c) SbePe ║hyp_spin_lock(&__hyp_pgd_lock); ~ 0000a7ac: 90000080 adrp x0, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a7b0: 912dc000 add x0, x0, #0xb70 ~ 0000a7b4: 97ffffdb bl a720 <hyp_spin_lock> __hyp_create_private_mapping:47.9 (mm.c) Sbepe size = ║PAGE_ALIGN(size + offset_in_page(phys)); ~ 0000a7b8: f85f03a8 ldur x8, [x29, #-16] <- 0000a7b4(bl-succ)<return> ~ 0000a7bc: f85f83a9 ldur x9, [x29, #-8] ~ 0000a7c0: 92402d29 and x9, x9, #0xfff ~ 0000a7c4: 8b090108 add x8, x8, x9 ~ 0000a7c8: 913ffd08 add x8, x8, #0xfff ~ 0000a7cc: 9274cd08 and x8, x8, #0xfffffffffffff000 __hyp_create_private_mapping:47.7 (mm.c) sbepe size ║= PAGE_ALIGN(size + offset_in_page(phys)); ~ 0000a7d0: f81f03a8 stur x8, [x29, #-16] __hyp_create_private_mapping:48.9 (mm.c) Sbepe addr = ║__io_map_base; ~ 0000a7d4: 90000088 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a7d8: f945cd09 ldr x9, [x8, #2968] __hyp_create_private_mapping:48.7 (mm.c) sbepe addr ║= __io_map_base; ~ 0000a7dc: f9000be9 str x9, [sp, #16] __hyp_create_private_mapping:49.19 (mm.c) Sbepe __io_map_base += ║size; ~ 0000a7e0: f85f03a9 ldur x9, [x29, #-16] __hyp_create_private_mapping:49.16 (mm.c) sbepe __io_map_base ║+= size; ~ 0000a7e4: f945cd0a ldr x10, [x8, #2968] ~ 0000a7e8: 8b090149 add x9, x10, x9 ~ 0000a7ec: f905cd09 str x9, [x8, #2968] __hyp_create_private_mapping:52.6 (mm.c) Sbepe if (║__io_map_base > __hyp_vmemmap) { ~ 0000a7f0: f945cd08 ldr x8, [x8, #2968] __hyp_create_private_mapping:52.22 (mm.c) sbepe if (__io_map_base > ║__hyp_vmemmap) { ~ 0000a7f4: 90000089 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a7f8: f944c529 ldr x9, [x9, #2440] __hyp_create_private_mapping:52.6 (mm.c) sbepe if (║__io_map_base > __hyp_vmemmap) { ~ 0000a7fc: eb090108 subs x8, x8, x9 ~ ┌──0000a800: 54000149 b.ls a828 <__hyp_create_private_mapping+0x94> // b.plast ~ │┌─0000a804: 14000001 b a808 <__hyp_create_private_mapping+0x74> <- 0000a800(b.cc-succ)<fallthrough> ││ ││ __hyp_create_private_mapping:53.20 (mm.c) Sbepe __io_map_base -= ║size; ~ │└>0000a808: f85f03a8 ldur x8, [x29, #-16] <- 0000a804(b)<__hyp_create_private_mapping+0x74> __hyp_create_private_mapping:53.17 (mm.c) sbepe __io_map_base ║-= size; ~ 0000a80c: 90000089 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a810: f945cd2a ldr x10, [x9, #2968] ~ 0000a814: eb080148 subs x8, x10, x8 ~ 0000a818: f905cd28 str x8, [x9, #2968] ~ 0000a81c: aa1f03e8 mov x8, xzr __hyp_create_private_mapping:54.8 (mm.c) Sbepe addr ║= 0; ~ 0000a820: f9000be8 str x8, [sp, #16] __hyp_create_private_mapping:55.3 (mm.c) Sbepe ║goto out; ~ ┌──┼──0000a824: 14000015 b a878 <__hyp_create_private_mapping+0xe4> │ │ │ │ __hyp_create_private_mapping:58.42 (mm.c) Sbepe ret = kvm_pgtable_hyp_map(&hyp_pgtable, ║addr, size, phys, prot); ~ │ └─>0000a828: f9400be1 ldr x1, [sp, #16] <- 0000a800(b.cc)<__hyp_create_private_mapping+0x94> __hyp_create_private_mapping:58.48 (mm.c) sbepe ret = kvm_pgtable_hyp_map(&hyp_pgtable, addr, ║size, phys, prot); ~ 0000a82c: f85f03a2 ldur x2, [x29, #-16] __hyp_create_private_mapping:58.54 (mm.c) sbepe ret = kvm_pgtable_hyp_map(&hyp_pgtable, addr, size, ║phys, prot); ~ 0000a830: f85f83a3 ldur x3, [x29, #-8] __hyp_create_private_mapping:58.60 (mm.c) sbepe ret = kvm_pgtable_hyp_map(&hyp_pgtable, addr, size, phys, ║prot); ~ 0000a834: b9401be4 ldr w4, [sp, #24] __hyp_create_private_mapping:58.8 (mm.c) sbepe ret = ║kvm_pgtable_hyp_map(&hyp_pgtable, addr, size, phys, prot); ~ 0000a838: 90000080 adrp x0, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a83c: 912de000 add x0, x0, #0xb78 ~ 0000a840: 94002433 bl 1390c <kvm_pgtable_hyp_map> __hyp_create_private_mapping:58.6 (mm.c) sbepe ret ║= kvm_pgtable_hyp_map(&hyp_pgtable, addr, size, phys, prot); ~ 0000a844: b9000fe0 str w0, [sp, #12] <- 0000a840(bl-succ)<return> __hyp_create_private_mapping:59.6 (mm.c) Sbepe if (║ret) { ~ 0000a848: b9400fe8 ldr w8, [sp, #12] __hyp_create_private_mapping:59.6 (mm.c) sbepe if (║ret) { ~ │ ┌──0000a84c: 340000a8 cbz w8, a860 <__hyp_create_private_mapping+0xcc> │ │ ~ │ │┌─0000a850: 14000001 b a854 <__hyp_create_private_mapping+0xc0> <- 0000a84c(b.cc-succ)<fallthrough> │ ││ ~ │ │└>0000a854: aa1f03e8 mov x8, xzr <- 0000a850(b)<__hyp_create_private_mapping+0xc0> │ │ __hyp_create_private_mapping:60.8 (mm.c) Sbepe addr ║= 0; ~ │ │ 0000a858: f9000be8 str x8, [sp, #16] │ │ __hyp_create_private_mapping:61.3 (mm.c) Sbepe ║goto out; ~ │ ┌┼──0000a85c: 14000007 b a878 <__hyp_create_private_mapping+0xe4> │ ││ │ ││ __hyp_create_private_mapping:64.9 (mm.c) Sbepe addr = ║addr + offset_in_page(phys); ~ │ │└─>0000a860: f9400be8 ldr x8, [sp, #16] <- 0000a84c(b.cc)<__hyp_create_private_mapping+0xcc> │ │ __hyp_create_private_mapping:64.16 (mm.c) sbepe addr = addr + ║offset_in_page(phys); ~ │ │ 0000a864: f85f83a9 ldur x9, [x29, #-8] ~ │ │ 0000a868: 92402d29 and x9, x9, #0xfff │ │ __hyp_create_private_mapping:64.14 (mm.c) sbepe addr = addr ║+ offset_in_page(phys); ~ │ │ 0000a86c: 8b090108 add x8, x8, x9 │ │ __hyp_create_private_mapping:64.7 (mm.c) sbepe addr ║= addr + offset_in_page(phys); ~ │ │ 0000a870: f9000be8 str x8, [sp, #16] │ │ __hyp_create_private_mapping:64.2 (mm.c) sbepe ║addr = addr + offset_in_page(phys); ~ │ │ ┌─0000a874: 14000001 b a878 <__hyp_create_private_mapping+0xe4> │ │ │ │ │ │ __hyp_create_private_mapping:66.2 (mm.c) Sbepe ║hyp_spin_unlock(&__hyp_pgd_lock); ~ └>└>└>0000a878: 90000080 adrp x0, 1a000 <hyp_cpu_logical_map+0xe0> <- 0000a824(b)<__hyp_create_private_mapping+0xe4>,0000a85c(b)<__hyp_create_private_mapping+0xe4>,0000a874(b)<__hyp_create_private_mapping+0xe4> ~ 0000a87c: 912dc000 add x0, x0, #0xb70 ~ 0000a880: 97ffffbc bl a770 <hyp_spin_unlock> __hyp_create_private_mapping:68.9 (mm.c) Sbepe return ║addr; ~ 0000a884: f9400be0 ldr x0, [sp, #16] <- 0000a880(bl-succ)<return> __hyp_create_private_mapping:68.2 (mm.c) sbepe ║return addr; ~ 0000a888: a9437bfd ldp x29, x30, [sp, #48] ~ 0000a88c: 910103ff add sp, sp, #0x40 0000a7a0 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000a890: d65f03c0 ret -phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x8) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:39 -size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa794 0xa894 (DW_OP_fbreg -0x10) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:39 -prot param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa794 0xa894 (DW_OP_breg31 0x18) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:40 -addr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa794 0xa894 (DW_OP_breg31 0x10) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:42 -ret var int (base type, DW_ATE_signed size:4) 0xa794 0xa894 (DW_OP_breg31 0xc) __hyp_create_private_mapping:arch/arm64/kvm/hyp/nvhe/mm.c:43 **0000a894 <hyp_create_mappings>: + hyp_create_mappings params: +from param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x10) +to param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x18) +prot param enum kvm_pgtable_prot<7b0a4>/<896dd> 0xa894 0xa96c (DW_OP_fbreg -0x1c) hyp_create_mappings:72.0 (mm.c) Sbepe ║{ +from param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x10) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 +to param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x18) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 +prot param enum kvm_pgtable_prot<7b0a4>/<896dd> 0xa894 0xa96c (DW_OP_fbreg -0x1c) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 +start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x28) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:73 +end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x20) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:74 +virt_addr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x18) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:75 +phys var typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa894 0xa96c (DW_OP_breg31 0x10) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:76 ~ 0000a894: d10183ff sub sp, sp, #0x60 <- 0000a06c(bl)<hyp_create_mappings>,0000a0c0(bl)<hyp_create_mappings>,0000a114(bl)<hyp_create_mappings>,0000a168(bl)<hyp_create_mappings>,0000a1bc(bl)<hyp_create_mappings>,0000a1f4(bl)<hyp_create_mappings>,0000a2a0(bl)<hyp_create_mappings> ~ 0000a898: a9057bfd stp x29, x30, [sp, #80] 0000a894 CFA:r31 r29:u r30:u ~ 0000a89c: 910143fd add x29, sp, #0x50 ~ 0000a8a0: f81f03a0 stur x0, [x29, #-16] ~ 0000a8a4: f81e83a1 stur x1, [x29, #-24] ~ 0000a8a8: b81e43a2 stur w2, [x29, #-28] hyp_create_mappings:73.39 (mm.c) SbePe unsigned long start = (unsigned long)║from; ~ 0000a8ac: f85f03a8 ldur x8, [x29, #-16] hyp_create_mappings:73.16 (mm.c) sbepe unsigned long ║start = (unsigned long)from; ~ 0000a8b0: f90017e8 str x8, [sp, #40] hyp_create_mappings:74.37 (mm.c) Sbepe unsigned long end = (unsigned long)║to; ~ 0000a8b4: f85e83a8 ldur x8, [x29, #-24] hyp_create_mappings:74.16 (mm.c) sbepe unsigned long ║end = (unsigned long)to; ~ 0000a8b8: f90013e8 str x8, [sp, #32] hyp_create_mappings:78.10 (mm.c) Sbepe start = ║start & PAGE_MASK; ~ 0000a8bc: f94017e8 ldr x8, [sp, #40] hyp_create_mappings:78.16 (mm.c) sbepe start = start ║& PAGE_MASK; ~ 0000a8c0: 9274cd08 and x8, x8, #0xfffffffffffff000 hyp_create_mappings:78.8 (mm.c) sbepe start ║= start & PAGE_MASK; ~ 0000a8c4: f90017e8 str x8, [sp, #40] hyp_create_mappings:79.8 (mm.c) Sbepe end = ║PAGE_ALIGN(end); ~ 0000a8c8: f94013e8 ldr x8, [sp, #32] ~ 0000a8cc: 913ffd08 add x8, x8, #0xfff ~ 0000a8d0: 9274cd08 and x8, x8, #0xfffffffffffff000 hyp_create_mappings:79.6 (mm.c) sbepe end ║= PAGE_ALIGN(end); ~ 0000a8d4: f90013e8 str x8, [sp, #32] hyp_create_mappings:81.19 (mm.c) Sbepe for (virt_addr = ║start; virt_addr < end; virt_addr += PAGE_SIZE) { ~ 0000a8d8: f94017e8 ldr x8, [sp, #40] hyp_create_mappings:81.17 (mm.c) sbepe for (virt_addr ║= start; virt_addr < end; virt_addr += PAGE_SIZE) { ~ 0000a8dc: f9000fe8 str x8, [sp, #24] hyp_create_mappings:81.7 (mm.c) sbepe for (║virt_addr = start; virt_addr < end; virt_addr += PAGE_SIZE) { ~ ┌─0000a8e0: 14000001 b a8e4 <hyp_create_mappings+0x50> hyp_create_mappings:81.26 (mm.c) sbepe for (virt_addr = start; ║virt_addr < end; virt_addr += PAGE_SIZE) { ~ ╔═══>└>0000a8e4: f9400fe8 ldr x8, [sp, #24] <- 0000a8e0(b)<hyp_create_mappings+0x50>,v0000a94c(b)<hyp_create_mappings+0x50> hyp_create_mappings:81.38 (mm.c) sbepe for (virt_addr = start; virt_addr < ║end; virt_addr += PAGE_SIZE) { ~ 0000a8e8: f94013e9 ldr x9, [sp, #32] hyp_create_mappings:81.2 (mm.c) sbepe ║for (virt_addr = start; virt_addr < end; virt_addr += PAGE_SIZE) { ~ 0000a8ec: eb090108 subs x8, x8, x9 ~ ║┌─────0000a8f0: 54000302 b.cs a950 <hyp_create_mappings+0xbc> // b.hs, b.nlast ║│ ~ ║│ ┌─0000a8f4: 14000001 b a8f8 <hyp_create_mappings+0x64> <- 0000a8f0(b.cc-succ)<fallthrough> ║│ │ ║│ │ hyp_create_mappings:84.35 (mm.c) Sbepe phys = hyp_virt_to_phys((void *)║virt_addr); +err var int (base type, DW_ATE_signed size:4) 0xa8f8 0xa940 (DW_OP_breg31 0xc) lexblock:hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:82 ~ ║│ └>0000a8f8: f9400fe0 ldr x0, [sp, #24] <- 0000a8f4(b)<hyp_create_mappings+0x64> ║│ hyp_create_mappings:84.10 (mm.c) sbepe phys = ║hyp_virt_to_phys((void *)virt_addr); ~ ║│ 0000a8fc: 9400001c bl a96c <hyp_virt_to_phys> ║│ ║│ hyp_create_mappings:84.8 (mm.c) sbepe phys ║= hyp_virt_to_phys((void *)virt_addr); ~ ║│ 0000a900: f9000be0 str x0, [sp, #16] <- 0000a8fc(bl-succ)<return> ║│ hyp_create_mappings:85.31 (mm.c) Sbepe err = __hyp_create_mappings(║virt_addr, PAGE_SIZE, phys, prot); ~ ║│ 0000a904: f9400fe0 ldr x0, [sp, #24] ║│ hyp_create_mappings:85.53 (mm.c) sbepe err = __hyp_create_mappings(virt_addr, PAGE_SIZE, ║phys, prot); ~ ║│ 0000a908: f9400be2 ldr x2, [sp, #16] ║│ hyp_create_mappings:85.59 (mm.c) sbepe err = __hyp_create_mappings(virt_addr, PAGE_SIZE, phys, ║prot); ~ ║│ 0000a90c: b85e43a8 ldur w8, [x29, #-28] ~ ║│ 0000a910: 2a0803e3 mov w3, w8 ~ ║│ 0000a914: 52820008 mov w8, #0x1000 // #4096 ~ ║│ 0000a918: 2a0803e1 mov w1, w8 ║│ hyp_create_mappings:85.9 (mm.c) sbepe err = ║__hyp_create_mappings(virt_addr, PAGE_SIZE, phys, prot); ~ ║│ 0000a91c: 97ffff67 bl a6b8 <__hyp_create_mappings> ║│ ║│ hyp_create_mappings:85.7 (mm.c) sbepe err ║= __hyp_create_mappings(virt_addr, PAGE_SIZE, phys, prot); ~ ║│ 0000a920: b9000fe0 str w0, [sp, #12] <- 0000a91c(bl-succ)<return> ║│ hyp_create_mappings:86.7 (mm.c) Sbepe if (║err) ~ ║│ 0000a924: b9400fe8 ldr w8, [sp, #12] ║│ hyp_create_mappings:86.7 (mm.c) sbepe if (║err) ~ ║│ ┌───0000a928: 340000a8 cbz w8, a93c <hyp_create_mappings+0xa8> ║│ │ ~ ║│ │ ┌─0000a92c: 14000001 b a930 <hyp_create_mappings+0x9c> <- 0000a928(b.cc-succ)<fallthrough> ║│ │ │ ║│ │ │ hyp_create_mappings:87.11 (mm.c) Sbepe return ║err; ~ ║│ │ └>0000a930: b9400fe8 ldr w8, [sp, #12] <- 0000a92c(b)<hyp_create_mappings+0x9c> ║│ │ hyp_create_mappings:87.4 (mm.c) sbepe ║return err; ~ ║│ │ 0000a934: b81fc3a8 stur w8, [x29, #-4] ~ ║│┌┼───0000a938: 14000009 b a95c <hyp_create_mappings+0xc8> ║│││ ║│││ hyp_create_mappings:88.2 (mm.c) Sbepe } ~ ║││└>┌─0000a93c: 14000001 b a940 <hyp_create_mappings+0xac> <- 0000a928(b.cc)<hyp_create_mappings+0xa8> -err var int (base type, DW_ATE_signed size:4) 0xa8f8 0xa940 (DW_OP_breg31 0xc) lexblock:hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:82 ║││ │ ║││ │ hyp_create_mappings:81.53 (mm.c) Sbepe for (virt_addr = start; virt_addr < end; virt_addr ║+= PAGE_SIZE) { ~ ║││ └>0000a940: f9400fe8 ldr x8, [sp, #24] <- 0000a93c(b)<hyp_create_mappings+0xac> ~ ║││ 0000a944: 91400508 add x8, x8, #0x1, lsl #12 ~ ║││ 0000a948: f9000fe8 str x8, [sp, #24] ║││ hyp_create_mappings:81.2 (mm.c) sbepe ║for (virt_addr = start; virt_addr < end; virt_addr += PAGE_SIZE) { ~ ╚╪╪════0000a94c: 17ffffe6 b a8e4 <hyp_create_mappings+0x50> ││ ~ └┼───>0000a950: 2a1f03e8 mov w8, wzr <- 0000a8f0(b.cc)<hyp_create_mappings+0xbc> hyp_create_mappings:90.2 (mm.c) Sbepe ║return 0; ~ 0000a954: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─0000a958: 14000001 b a95c <hyp_create_mappings+0xc8> │ │ │ │ hyp_create_mappings:91.1 (mm.c) Sbepe ║} ~ └─>└>0000a95c: b85fc3a0 ldur w0, [x29, #-4] <- 0000a938(b)<hyp_create_mappings+0xc8>,0000a958(b)<hyp_create_mappings+0xc8> ~ 0000a960: a9457bfd ldp x29, x30, [sp, #80] ~ 0000a964: 910183ff add sp, sp, #0x60 0000a8a0 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000a968: d65f03c0 ret -from param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x10) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 -to param pointer(no type) 0xa894 0xa96c (DW_OP_fbreg -0x18) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 -prot param enum kvm_pgtable_prot<7b0a4>/<896dd> 0xa894 0xa96c (DW_OP_fbreg -0x1c) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:71 -start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x28) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:73 -end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x20) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:74 -virt_addr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa894 0xa96c (DW_OP_breg31 0x18) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:75 -phys var typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa894 0xa96c (DW_OP_breg31 0x10) hyp_create_mappings:arch/arm64/kvm/hyp/nvhe/mm.c:76 **0000a96c <hyp_virt_to_phys>: + hyp_virt_to_phys params: +addr param pointer(no type) 0xa96c 0xa98c (DW_OP_fbreg 0x8) hyp_virt_to_phys:36.0 (memory.h) Sbepe ║{ 0000a96c CFA:r31 +addr param pointer(no type) 0xa96c 0xa98c (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mm.c:35 ~ 0000a96c: d10043ff sub sp, sp, #0x10 <- 0000a8fc(bl)<hyp_virt_to_phys>,0000ad80(bl)<hyp_virt_to_phys>,0000adb4(bl)<hyp_virt_to_phys> ~ 0000a970: f90007e0 str x0, [sp, #8] hyp_virt_to_phys:37.9 (memory.h) SbePe return ║__hyp_pa(addr); ~ 0000a974: f94007e8 ldr x8, [sp, #8] ~ 0000a978: 90000089 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000a97c: f9439d29 ldr x9, [x9, #1848] ~ 0000a980: 8b090100 add x0, x8, x9 hyp_virt_to_phys:37.2 (memory.h) sbepe ║return __hyp_pa(addr); ~ 0000a984: 910043ff add sp, sp, #0x10 0000a970 CFA:r31+16 ~ 0000a988: d65f03c0 ret -addr param pointer(no type) 0xa96c 0xa98c (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mm.c:35 **0000a98c <hyp_back_vmemmap>: + hyp_back_vmemmap params: +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_fbreg -0x8) +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_fbreg -0x10) +back param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_breg31 0x18) hyp_back_vmemmap:94.0 (mm.c) Sbepe ║{ +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_fbreg -0x8) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_fbreg -0x10) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 +back param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_breg31 0x18) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 +start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_breg31 0x10) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:95 +end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_breg31 0x8) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:95 ~ 0000a98c: d10103ff sub sp, sp, #0x40 <- 0000a018(bl)<hyp_back_vmemmap> ~ 0000a990: a9037bfd stp x29, x30, [sp, #48] 0000a98c CFA:r31 r29:u r30:u ~ 0000a994: 9100c3fd add x29, sp, #0x30 ~ 0000a998: f81f83a0 stur x0, [x29, #-8] ~ 0000a99c: f81f03a1 stur x1, [x29, #-16] ~ 0000a9a0: f9000fe2 str x2, [sp, #24] hyp_back_vmemmap:97.20 (mm.c) SbePe hyp_vmemmap_range(║phys, size, &start, &end); ~ 0000a9a4: f85f83a0 ldur x0, [x29, #-8] hyp_back_vmemmap:97.26 (mm.c) sbepe hyp_vmemmap_range(phys, ║size, &start, &end); ~ 0000a9a8: f85f03a1 ldur x1, [x29, #-16] ~ 0000a9ac: 910043e2 add x2, sp, #0x10 ~ 0000a9b0: 910023e3 add x3, sp, #0x8 hyp_back_vmemmap:97.2 (mm.c) sbepe ║hyp_vmemmap_range(phys, size, &start, &end); ~ 0000a9b4: 9400000c bl a9e4 <hyp_vmemmap_range> hyp_back_vmemmap:99.31 (mm.c) Sbepe return __hyp_create_mappings(║start, end - start, back, PAGE_HYP); ~ 0000a9b8: f9400be8 ldr x8, [sp, #16] <- 0000a9b4(bl-succ)<return> hyp_back_vmemmap:99.38 (mm.c) sbepe return __hyp_create_mappings(start, ║end - start, back, PAGE_HYP); ~ 0000a9bc: f94007e9 ldr x9, [sp, #8] hyp_back_vmemmap:99.42 (mm.c) sbepe return __hyp_create_mappings(start, end ║- start, back, PAGE_HYP); ~ 0000a9c0: eb080121 subs x1, x9, x8 hyp_back_vmemmap:99.51 (mm.c) sbepe return __hyp_create_mappings(start, end - start, ║back, PAGE_HYP); ~ 0000a9c4: f9400fe2 ldr x2, [sp, #24] ~ 0000a9c8: 528000ca mov w10, #0x6 // #6 ~ 0000a9cc: 2a0a03e3 mov w3, w10 hyp_back_vmemmap:99.9 (mm.c) sbepe return ║__hyp_create_mappings(start, end - start, back, PAGE_HYP); ~ 0000a9d0: aa0803e0 mov x0, x8 ~ 0000a9d4: 97ffff39 bl a6b8 <__hyp_create_mappings> hyp_back_vmemmap:99.2 (mm.c) sbepe ║return __hyp_create_mappings(start, end - start, back, PAGE_HYP); ~ 0000a9d8: a9437bfd ldp x29, x30, [sp, #48] <- 0000a9d4(bl-succ)<return> ~ 0000a9dc: 910103ff add sp, sp, #0x40 0000a998 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000a9e0: d65f03c0 ret -phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_fbreg -0x8) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 -size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_fbreg -0x10) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 -back param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa98c 0xa9e4 (DW_OP_breg31 0x18) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:93 -start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_breg31 0x10) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:95 -end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa98c 0xa9e4 (DW_OP_breg31 0x8) hyp_back_vmemmap:arch/arm64/kvm/hyp/nvhe/mm.c:95 **0000a9e4 <hyp_vmemmap_range>: + hyp_vmemmap_range params: +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa9e4 0xaa70 (DW_OP_fbreg 0x28) +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa9e4 0xaa70 (DW_OP_fbreg 0x20) +start param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x18) +end param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x10) hyp_vmemmap_range:32.0 (mm.h) Sbepe ║{ 0000a9e4 CFA:r31 +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa9e4 0xaa70 (DW_OP_fbreg 0x28) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:30 +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa9e4 0xaa70 (DW_OP_fbreg 0x20) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:30 +start param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x18) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:31 +end param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x10) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:31 +nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa9e4 0xaa70 (DW_OP_fbreg 0x8) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:33 +p var pointer(struct hyp_page<7b0a4>/<89741>) 0xa9e4 0xaa70 (DW_OP_fbreg 0x0) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:34 ~ 0000a9e4: d100c3ff sub sp, sp, #0x30 <- 0000a9b4(bl)<hyp_vmemmap_range> ~ 0000a9e8: f90017e0 str x0, [sp, #40] ~ 0000a9ec: f90013e1 str x1, [sp, #32] ~ 0000a9f0: f9000fe2 str x2, [sp, #24] ~ 0000a9f4: f9000be3 str x3, [sp, #16] hyp_vmemmap_range:33.27 (mm.h) SbePe unsigned long nr_pages = ║size >> PAGE_SHIFT; ~ 0000a9f8: f94013e8 ldr x8, [sp, #32] hyp_vmemmap_range:33.32 (mm.h) sbepe unsigned long nr_pages = size ║>> PAGE_SHIFT; ~ 0000a9fc: d34cfd08 lsr x8, x8, #12 hyp_vmemmap_range:33.16 (mm.h) sbepe unsigned long ║nr_pages = size >> PAGE_SHIFT; ~ 0000aa00: f90007e8 str x8, [sp, #8] hyp_vmemmap_range:34.23 (mm.h) Sbepe struct hyp_page *p = ║hyp_phys_to_page(phys); ~ 0000aa04: 90000088 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000aa08: f944c508 ldr x8, [x8, #2440] ~ 0000aa0c: f94017e9 ldr x9, [sp, #40] ~ 0000aa10: d347fd29 lsr x9, x9, #7 ~ 0000aa14: 927bcd29 and x9, x9, #0x1ffffffffffffe0 ~ 0000aa18: 8b090108 add x8, x8, x9 hyp_vmemmap_range:34.19 (mm.h) sbepe struct hyp_page *║p = hyp_phys_to_page(phys); ~ 0000aa1c: f90003e8 str x8, [sp] hyp_vmemmap_range:36.26 (mm.h) Sbepe *start = (unsigned long)p; ~ 0000aa20: f94003e8 ldr x8, [sp] hyp_vmemmap_range:36.3 (mm.h) sbepe *║start = (unsigned long)p; ~ 0000aa24: f9400fe9 ldr x9, [sp, #24] hyp_vmemmap_range:36.9 (mm.h) sbepe *start ║= (unsigned long)p; ~ 0000aa28: f9000128 str x8, [x9] hyp_vmemmap_range:37.10 (mm.h) Sbepe *end = *║start + nr_pages * sizeof(struct hyp_page); ~ 0000aa2c: f9400fe8 ldr x8, [sp, #24] hyp_vmemmap_range:37.9 (mm.h) sbepe *end = ║*start + nr_pages * sizeof(struct hyp_page); ~ 0000aa30: f9400108 ldr x8, [x8] hyp_vmemmap_range:37.18 (mm.h) sbepe *end = *start + ║nr_pages * sizeof(struct hyp_page); ~ 0000aa34: f94007e9 ldr x9, [sp, #8] hyp_vmemmap_range:37.16 (mm.h) sbepe *end = *start ║+ nr_pages * sizeof(struct hyp_page); ~ 0000aa38: 8b091508 add x8, x8, x9, lsl #5 hyp_vmemmap_range:37.3 (mm.h) sbepe *║end = *start + nr_pages * sizeof(struct hyp_page); ~ 0000aa3c: f9400be9 ldr x9, [sp, #16] hyp_vmemmap_range:37.7 (mm.h) sbepe *end ║= *start + nr_pages * sizeof(struct hyp_page); ~ 0000aa40: f9000128 str x8, [x9] hyp_vmemmap_range:38.11 (mm.h) Sbepe *start = ║ALIGN_DOWN(*start, PAGE_SIZE); ~ 0000aa44: f9400fe8 ldr x8, [sp, #24] ~ 0000aa48: f9400109 ldr x9, [x8] ~ 0000aa4c: 9274cd29 and x9, x9, #0xfffffffffffff000 hyp_vmemmap_range:38.9 (mm.h) sbepe *start ║= ALIGN_DOWN(*start, PAGE_SIZE); ~ 0000aa50: f9000109 str x9, [x8] hyp_vmemmap_range:39.9 (mm.h) Sbepe *end = ║ALIGN(*end, PAGE_SIZE); ~ 0000aa54: f9400be8 ldr x8, [sp, #16] ~ 0000aa58: f9400109 ldr x9, [x8] ~ 0000aa5c: 913ffd29 add x9, x9, #0xfff ~ 0000aa60: 9274cd29 and x9, x9, #0xfffffffffffff000 hyp_vmemmap_range:39.7 (mm.h) sbepe *end ║= ALIGN(*end, PAGE_SIZE); ~ 0000aa64: f9000109 str x9, [x8] hyp_vmemmap_range:40.1 (mm.h) Sbepe ║} ~ 0000aa68: 9100c3ff add sp, sp, #0x30 0000a9e8 CFA:r31+48 ~ 0000aa6c: d65f03c0 ret -phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xa9e4 0xaa70 (DW_OP_fbreg 0x28) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:30 -size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xa9e4 0xaa70 (DW_OP_fbreg 0x20) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:30 -start param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x18) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:31 -end param pointer(long unsigned int (base type, DW_ATE_unsigned size:8)) 0xa9e4 0xaa70 (DW_OP_fbreg 0x10) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:31 -nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xa9e4 0xaa70 (DW_OP_fbreg 0x8) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:33 -p var pointer(struct hyp_page<7b0a4>/<89741>) 0xa9e4 0xaa70 (DW_OP_fbreg 0x0) hyp_vmemmap_range:arch/arm64/kvm/hyp/nvhe/mm.c:34 **0000aa70 <hyp_cpu_set_vector>: + hyp_cpu_set_vector params: +slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xaa70 0xab90 (DW_OP_fbreg -0x8) hyp_cpu_set_vector:104.0 (mm.c) Sbepe ║{ +slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xaa70 0xab90 (DW_OP_fbreg -0x8) hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:103 +vector var pointer(no type) 0xaa70 0xab90 (DW_OP_fbreg -0x10) hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:105 ~ 0000aa70: d10203ff sub sp, sp, #0x80 <- 000076b4(bl)<hyp_cpu_set_vector> ~ 0000aa74: a9077bfd stp x29, x30, [sp, #112] 0000aa70 CFA:r31 r29:u r30:u ~ 0000aa78: 9101c3fd add x29, sp, #0x70 ~ 0000aa7c: b81f83a0 stur w0, [x29, #-8] hyp_cpu_set_vector:107.10 (mm.c) SbePe switch (║slot) { ~ 0000aa80: b85f83a8 ldur w8, [x29, #-8] hyp_cpu_set_vector:107.2 (mm.c) sbepe ║switch (slot) { ~ 0000aa84: 2a0803e9 mov w9, w8 ~ 0000aa88: b9001fe9 str w9, [sp, #28] ~ ┌──0000aa8c: 34000168 cbz w8, aab8 <hyp_cpu_set_vector+0x48> ~ │┌─0000aa90: 14000001 b aa94 <hyp_cpu_set_vector+0x24> <- 0000aa8c(b.cc-succ)<fallthrough> ││ ~ │└>0000aa94: b9401fe8 ldr w8, [sp, #28] <- 0000aa90(b)<hyp_cpu_set_vector+0x24> hyp_cpu_set_vector:107.2 (mm.c) sbepe ║switch (slot) { ~ 0000aa98: 71000509 subs w9, w8, #0x1 ~ ┌┼──0000aa9c: 540001e0 b.eq aad8 <hyp_cpu_set_vector+0x68> // b.none ││ ~ ││┌─0000aaa0: 14000001 b aaa4 <hyp_cpu_set_vector+0x34> <- 0000aa9c(b.cc-succ)<fallthrough> │││ ~ ││└>0000aaa4: b9401fe8 ldr w8, [sp, #28] <- 0000aaa0(b)<hyp_cpu_set_vector+0x34> ││ hyp_cpu_set_vector:107.2 (mm.c) sbepe ║switch (slot) { ~ ││ 0000aaa8: 71000909 subs w9, w8, #0x2 ~ ││ 0000aaac: 71000929 subs w9, w9, #0x2 ~ ││┌─0000aab0: 54000243 b.cc aaf8 <hyp_cpu_set_vector+0x88> // b.lo, b.ul, b.last │││ ~ ┌┼┼┼─0000aab4: 14000015 b ab08 <hyp_cpu_set_vector+0x98> <- 0000aab0(b.cc-succ)<fallthrough> ││││ ││││ hyp_cpu_set_vector:109.12 (mm.c) Sbepe vector = ║hyp_symbol_addr(__kvm_hyp_vector); +addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xaab8 0xaad0 (DW_OP_fbreg -0x18) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:109 ~ ││└┼>0000aab8: d0000028 adrp x8, 10000 <el1_sync> <- 0000aa8c(b.cc)<hyp_cpu_set_vector+0x48> ~ ││ │ 0000aabc: 91200108 add x8, x8, #0x800 ~ ││ │ 0000aac0: f81e83a8 stur x8, [x29, #-24] ~ ││ │ 0000aac4: f85e83a8 ldur x8, [x29, #-24] ~ ││ │ 0000aac8: f81e03a8 stur x8, [x29, #-32] ~ ││ │ 0000aacc: f85e03a8 ldur x8, [x29, #-32] -addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xaab8 0xaad0 (DW_OP_fbreg -0x18) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:109 ││ │ hyp_cpu_set_vector:109.10 (mm.c) sbepe vector ║= hyp_symbol_addr(__kvm_hyp_vector); ~ ││ │ 0000aad0: f81f03a8 stur x8, [x29, #-16] ││ │ hyp_cpu_set_vector:110.3 (mm.c) Sbepe ║break; ~ ┌┼┼─┼─0000aad4: 14000010 b ab14 <hyp_cpu_set_vector+0xa4> │││ │ │││ │ hyp_cpu_set_vector:113.12 (mm.c) Sbepe vector = ║hyp_symbol_addr(__bp_harden_hyp_vecs); +addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xaad8 0xaaf0 (DW_OP_fbreg -0x28) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:113 ~ ││└─┼>0000aad8: f0000028 adrp x8, 11000 <__bp_harden_hyp_vecs> <- 0000aa9c(b.cc)<hyp_cpu_set_vector+0x68> ~ ││ │ 0000aadc: 91000108 add x8, x8, #0x0 ~ ││ │ 0000aae0: f81d83a8 stur x8, [x29, #-40] ~ ││ │ 0000aae4: f85d83a8 ldur x8, [x29, #-40] ~ ││ │ 0000aae8: f81d03a8 stur x8, [x29, #-48] ~ ││ │ 0000aaec: f85d03a8 ldur x8, [x29, #-48] -addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xaad8 0xaaf0 (DW_OP_fbreg -0x28) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:113 ││ │ hyp_cpu_set_vector:113.10 (mm.c) sbepe vector ║= hyp_symbol_addr(__bp_harden_hyp_vecs); ~ ││ │ 0000aaf0: f81f03a8 stur x8, [x29, #-16] ││ │ hyp_cpu_set_vector:114.3 (mm.c) Sbepe ║break; ~ ││┌─┼─0000aaf4: 14000008 b ab14 <hyp_cpu_set_vector+0xa4> │││ │ │││ │ hyp_cpu_set_vector:118.20 (mm.c) Sbepe vector = (void *)║__hyp_bp_vect_base; ~ │││ └>0000aaf8: b0000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000aab0(b.cc)<hyp_cpu_set_vector+0x88> ~ │││ 0000aafc: f941d508 ldr x8, [x8, #936] │││ hyp_cpu_set_vector:118.10 (mm.c) sbepe vector ║= (void *)__hyp_bp_vect_base; ~ │││ 0000ab00: f81f03a8 stur x8, [x29, #-16] │││ hyp_cpu_set_vector:119.3 (mm.c) Sbepe ║break; ~ │││ ┌─0000ab04: 14000004 b ab14 <hyp_cpu_set_vector+0xa4> │││ │ ~ │└┼─┼>0000ab08: 128002a8 mov w8, #0xffffffea // #-22 <- 0000aab4(b)<hyp_cpu_set_vector+0x98> │ │ │ hyp_cpu_set_vector:122.3 (mm.c) Sbepe ║return -EINVAL; ~ │ │ │ 0000ab0c: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼─┼─┼─0000ab10: 1400001c b ab80 <hyp_cpu_set_vector+0x110> ││ │ │ ││ │ │ hyp_cpu_set_vector:125.34 (mm.c) Sbepe vector = __kvm_vector_slot2addr(║vector, slot); ~ │└>└>└>0000ab14: f85f03a0 ldur x0, [x29, #-16] <- 0000aad4(b)<hyp_cpu_set_vector+0xa4>,0000aaf4(b)<hyp_cpu_set_vector+0xa4>,0000ab04(b)<hyp_cpu_set_vector+0xa4> hyp_cpu_set_vector:125.42 (mm.c) sbepe vector = __kvm_vector_slot2addr(vector, ║slot); ~ 0000ab18: b85f83a1 ldur w1, [x29, #-8] hyp_cpu_set_vector:125.11 (mm.c) sbepe vector = ║__kvm_vector_slot2addr(vector, slot); ~ 0000ab1c: 9400001d bl ab90 <__kvm_vector_slot2addr> hyp_cpu_set_vector:125.9 (mm.c) sbepe vector ║= __kvm_vector_slot2addr(vector, slot); ~ 0000ab20: f81f03a0 stur x0, [x29, #-16] <- 0000ab1c(bl-succ)<return> hyp_cpu_set_vector:126.50 (mm.c) Sbepe *this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)║vector; ~ 0000ab24: f85f03a8 ldur x8, [x29, #-16] ~ 0000ab28: f9000be8 str x8, [sp, #16] hyp_cpu_set_vector:126.3 (mm.c) sbepe *║this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)vector; ~ │ ┌─0000ab2c: 14000001 b ab30 <hyp_cpu_set_vector+0xc0> │ │ ~ │ └>0000ab30: aa1f03e8 mov x8, xzr <- 0000ab2c(b)<hyp_cpu_set_vector+0xc0> hyp_cpu_set_vector:126.3 (mm.c) sbepe *║this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)vector; +__vpp_verify var pointer(const(no type)) 0xab34 0xab3c (DW_OP_breg31 0x38) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 ~ 0000ab34: f9001fe8 str x8, [sp, #56] ~ │ ┌─0000ab38: 14000001 b ab3c <hyp_cpu_set_vector+0xcc> -__vpp_verify var pointer(const(no type)) 0xab34 0xab3c (DW_OP_breg31 0x38) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 │ │ │ │ hyp_cpu_set_vector:126.3 (mm.c) sbepe *║this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)vector; +__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xab3c 0xab64 (DW_OP_breg31 0x28) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 ~ │ └>0000ab3c: f0000068 adrp x8, 19000 <kvm_host_data> <- 0000ab38(b)<hyp_cpu_set_vector+0xcc> ~ 0000ab40: 91384108 add x8, x8, #0xe10 ~ 0000ab44: f90017e8 str x8, [sp, #40] ~ 0000ab48: f94017e8 ldr x8, [sp, #40] ~ 0000ab4c: f90007e8 str x8, [sp, #8] ~ 0000ab50: 9400001e bl abc8 <__hyp_my_cpu_offset> ~ 0000ab54: f94007e8 ldr x8, [sp, #8] <- 0000ab50(bl-succ)<return> ~ 0000ab58: 8b000108 add x8, x8, x0 ~ 0000ab5c: f90013e8 str x8, [sp, #32] ~ 0000ab60: f94013e8 ldr x8, [sp, #32] -__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xab3c 0xab64 (DW_OP_breg31 0x28) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 hyp_cpu_set_vector:126.3 (mm.c) sbepe *║this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)vector; +__vpp_verify var pointer(const(no type)) 0xab64 0xab68 (DW_OP_breg31 0x38) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 ~ 0000ab64: f9001be8 str x8, [sp, #48] -__vpp_verify var pointer(const(no type)) 0xab64 0xab68 (DW_OP_breg31 0x38) lexblock:hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:126 hyp_cpu_set_vector:126.3 (mm.c) sbepe *║this_cpu_ptr(&kvm_hyp_vector) = (unsigned long)vector; ~ 0000ab68: f9401be8 ldr x8, [sp, #48] ~ 0000ab6c: f9400be9 ldr x9, [sp, #16] hyp_cpu_set_vector:126.33 (mm.c) sbepe *this_cpu_ptr(&kvm_hyp_vector) ║= (unsigned long)vector; ~ 0000ab70: f9000109 str x9, [x8] ~ 0000ab74: 2a1f03ea mov w10, wzr hyp_cpu_set_vector:128.2 (mm.c) Sbepe ║return 0; ~ 0000ab78: b81fc3aa stur w10, [x29, #-4] ~ │ ┌─0000ab7c: 14000001 b ab80 <hyp_cpu_set_vector+0x110> │ │ │ │ hyp_cpu_set_vector:129.1 (mm.c) Sbepe ║} ~ └───>└>0000ab80: b85fc3a0 ldur w0, [x29, #-4] <- 0000ab10(b)<hyp_cpu_set_vector+0x110>,0000ab7c(b)<hyp_cpu_set_vector+0x110> ~ 0000ab84: a9477bfd ldp x29, x30, [sp, #112] ~ 0000ab88: 910203ff add sp, sp, #0x80 0000aa7c CFA:r29+16 r29:c-16 r30:c-8 ~ 0000ab8c: d65f03c0 ret -slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xaa70 0xab90 (DW_OP_fbreg -0x8) hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:103 -vector var pointer(no type) 0xaa70 0xab90 (DW_OP_fbreg -0x10) hyp_cpu_set_vector:arch/arm64/kvm/hyp/nvhe/mm.c:105 **0000ab90 <__kvm_vector_slot2addr>: + __kvm_vector_slot2addr params: +base param pointer(no type) 0xab90 0xabc8 (DW_OP_fbreg 0x8) +slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xab90 0xabc8 (DW_OP_fbreg 0x4) __kvm_vector_slot2addr:200.0 (kvm_mmu.h) Sbepe ║{ 0000ab90 CFA:r31 +base param pointer(no type) 0xab90 0xabc8 (DW_OP_fbreg 0x8) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:198 +slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xab90 0xabc8 (DW_OP_fbreg 0x4) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:199 +idx var int (base type, DW_ATE_signed size:4) 0xab90 0xabc8 (DW_OP_fbreg 0x0) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:201 ~ 0000ab90: d10043ff sub sp, sp, #0x10 <- 0000ab1c(bl)<__kvm_vector_slot2addr> ~ 0000ab94: f90007e0 str x0, [sp, #8] ~ 0000ab98: b90007e1 str w1, [sp, #4] __kvm_vector_slot2addr:201.12 (kvm_mmu.h) SbePe int idx = ║slot - (slot != HYP_VECTOR_DIRECT); ~ 0000ab9c: b94007e8 ldr w8, [sp, #4] __kvm_vector_slot2addr:201.25 (kvm_mmu.h) sbepe int idx = slot - (slot ║!= HYP_VECTOR_DIRECT); ~ 0000aba0: 71000109 subs w9, w8, #0x0 ~ 0000aba4: 1a9f07ea cset w10, ne // ne = any __kvm_vector_slot2addr:201.17 (kvm_mmu.h) sbepe int idx = slot ║- (slot != HYP_VECTOR_DIRECT); ~ 0000aba8: 6b0a0108 subs w8, w8, w10 __kvm_vector_slot2addr:201.6 (kvm_mmu.h) sbepe int ║idx = slot - (slot != HYP_VECTOR_DIRECT); ~ 0000abac: b90003e8 str w8, [sp] __kvm_vector_slot2addr:203.9 (kvm_mmu.h) Sbepe return ║base + (idx * SZ_2K); ~ 0000abb0: f94007eb ldr x11, [sp, #8] __kvm_vector_slot2addr:203.17 (kvm_mmu.h) sbepe return base + (║idx * SZ_2K); ~ 0000abb4: b94003e8 ldr w8, [sp] __kvm_vector_slot2addr:203.21 (kvm_mmu.h) sbepe return base + (idx ║* SZ_2K); ~ 0000abb8: 53155108 lsl w8, w8, #11 __kvm_vector_slot2addr:203.14 (kvm_mmu.h) sbepe return base ║+ (idx * SZ_2K); ~ 0000abbc: 8b28c160 add x0, x11, w8, sxtw __kvm_vector_slot2addr:203.2 (kvm_mmu.h) sbepe ║return base + (idx * SZ_2K); ~ 0000abc0: 910043ff add sp, sp, #0x10 0000ab94 CFA:r31+16 ~ 0000abc4: d65f03c0 ret -base param pointer(no type) 0xab90 0xabc8 (DW_OP_fbreg 0x8) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:198 -slot param enum arm64_hyp_spectre_vector<7b0a4>/<89702> 0xab90 0xabc8 (DW_OP_fbreg 0x4) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:199 -idx var int (base type, DW_ATE_signed size:4) 0xab90 0xabc8 (DW_OP_fbreg 0x0) __kvm_vector_slot2addr:arch/arm64/kvm/hyp/nvhe/mm.c:201 **0000abc8 <__hyp_my_cpu_offset>: + __hyp_my_cpu_offset params: none __hyp_my_cpu_offset:23.0 (percpu.h) Sbepe ║{ 0000abc8 CFA:r31 ~ 0000abc8: d10043ff sub sp, sp, #0x10 <- 0000ab50(bl)<__hyp_my_cpu_offset> __hyp_my_cpu_offset:28.9 (percpu.h) SbePe return ║read_sysreg(tpidr_el2); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xabcc 0xabe0 (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mm.c:28 ~ 0000abcc: d53cd048 mrs x8, tpidr_el2 ~ 0000abd0: f90007e8 str x8, [sp, #8] ~ 0000abd4: f94007e8 ldr x8, [sp, #8] ~ 0000abd8: f90003e8 str x8, [sp] ~ 0000abdc: f94003e0 ldr x0, [sp] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xabcc 0xabe0 (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mm.c:28 __hyp_my_cpu_offset:28.2 (percpu.h) sbepe ║return read_sysreg(tpidr_el2); ~ 0000abe0: 910043ff add sp, sp, #0x10 0000abcc CFA:r31+16 ~ 0000abe4: d65f03c0 ret **0000abe8 <hyp_map_vectors>: + hyp_map_vectors params: none hyp_map_vectors:132.0 (mm.c) Sbepe ║{ +bp_base var long unsigned int (base type, DW_ATE_unsigned size:8) 0xabe8 0xad54 (DW_OP_breg31 0x18) hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c:133 ~ 0000abe8: d101c3ff sub sp, sp, #0x70 <- 00009fc4(bl)<hyp_map_vectors> ~ 0000abec: a9067bfd stp x29, x30, [sp, #96] 0000abe8 CFA:r31 r29:u r30:u ~ 0000abf0: 910183fd add x29, sp, #0x60 ~ 0000abf4: 528001c8 mov w8, #0xe // #14 ~ 0000abf8: b9002be8 str w8, [sp, #40] u: 0xabfc 0xacb4 cpus_have_const_cap inlined from hyp_map_vectors:135 (mm.c) <89c63>: u cpus_have_const_cap:479.30 (cpufeature.h) SbePe return cpus_have_final_cap(║num); +num param int (base type, DW_ATE_signed size:4) 0xabfc 0xacb4 (DW_OP_breg31 0x28) cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ~u 0000abfc: b9402be8 ldr w8, [sp, #40] ~u 0000ac00: b90033e8 str w8, [sp, #48] v: 0xac04 0xacac cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <89c7f>:<89c63>: w: 0xac04 0xac2c system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <89c9c>:<89c7f>:<89c63>: uvw system_capabilities_finalized:419.9 (cpufeature.h) Sbepe return ║static_branch_likely(&arm64_const_caps_ready); +num param int (base type, DW_ATE_signed size:4) 0xac04 0xacac (DW_OP_breg31 0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xac04 0xac2c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ~uvw 0000ac04: b0000089 adrp x9, 1b000 <hyp_memory+0x460> ~uvw 0000ac08: b9479928 ldr w8, [x9, #1944] ~uvw 0000ac0c: 71000108 subs w8, w8, #0x0 ~uvw 0000ac10: 1a9f07ea cset w10, ne // ne = any ~uvw 0000ac14: 381e43aa sturb w10, [x29, #-28] uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 0000ac18: 385e43aa ldurb w10, [x29, #-28] ~uvw 0000ac1c: 2a0a03e9 mov w9, w10 ~uvw 0000ac20: 92400129 and x9, x9, #0x1 uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 0000ac24: f81d83a9 stur x9, [x29, #-40] uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 0000ac28: f85d83a9 ldur x9, [x29, #-40] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xac04 0xac2c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c uv cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~uv ┌────0000ac2c: b4000389 cbz x9, ac9c <hyp_map_vectors+0xb4> ~uv │ ┌─0000ac30: 14000001 b ac34 <hyp_map_vectors+0x4c> <- 0000ac2c(b.cc-succ)<fallthrough> │ │ uv │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~uv │ └>0000ac34: b94033e8 ldr w8, [sp, #48] <- 0000ac30(b)<hyp_map_vectors+0x4c> ~uv 0000ac38: b81f83a8 stur w8, [x29, #-8] x: 0xac3c 0xac9c (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <89cc8>:<89c7f>:<89c63>: uvx __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0xac3c 0xac9c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ~uvx 0000ac3c: b85f83a8 ldur w8, [x29, #-8] uvx __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~uvx 0000ac40: 7100f508 subs w8, w8, #0x3d ~uvx │ ┌──0000ac44: 540000ab b.lt ac58 <hyp_map_vectors+0x70> // b.tstop │ │ ~uvx │ │┌─0000ac48: 14000001 b ac4c <hyp_map_vectors+0x64> <- 0000ac44(b.cc-succ)<fallthrough> │ ││ ~uvx │ │└>0000ac4c: 2a1f03e8 mov w8, wzr <- 0000ac48(b)<hyp_map_vectors+0x64> uvx │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~uvx │ │ 0000ac50: 381ff3a8 sturb w8, [x29, #-1] ~uvx │┌┼──0000ac54: 14000013 b aca0 <hyp_map_vectors+0xb8> │││ uvx │││ __cpus_have_const_cap:446.9 (cpufeature.h) Sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xac58 0xac8c (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ~uvx ││└─>0000ac58: b89f83a8 ldursw x8, [x29, #-8] <- 0000ac44(b.cc)<hyp_map_vectors+0x70> ~uvx ││ 0000ac5c: d37ced08 lsl x8, x8, #4 ~uvx ││ 0000ac60: b0000089 adrp x9, 1b000 <hyp_memory+0x460> ~uvx ││ 0000ac64: 911e8129 add x9, x9, #0x7a0 ~uvx ││ 0000ac68: b868692a ldr w10, [x9, x8] ~uvx ││ 0000ac6c: 7100014a subs w10, w10, #0x0 ~uvx ││ 0000ac70: 1a9f07eb cset w11, ne // ne = any ~uvx ││ 0000ac74: 381f43ab sturb w11, [x29, #-12] uvx ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx ││ 0000ac78: 385f43ab ldurb w11, [x29, #-12] ~uvx ││ 0000ac7c: 2a0b03e8 mov w8, w11 ~uvx ││ 0000ac80: 92400108 and x8, x8, #0x1 uvx ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx ││ 0000ac84: f81e83a8 stur x8, [x29, #-24] uvx ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx ││ 0000ac88: f85e83a8 ldur x8, [x29, #-24] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xac58 0xac8c (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c uvx ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx ││ 0000ac8c: f1000108 subs x8, x8, #0x0 ~uvx ││ 0000ac90: 1a9f07eb cset w11, ne // ne = any uvx ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx ││ 0000ac94: 381ff3ab sturb w11, [x29, #-1] ~uvx ││ ┌─0000ac98: 14000002 b aca0 <hyp_map_vectors+0xb8> -num param int (base type, DW_ATE_signed size:4) 0xac3c 0xac9c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ││ │ uv ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~uv └┼─┼>0000ac9c: d4210000 brk #0x800 <- 0000ac2c(b.cc)<hyp_map_vectors+0xb4> │ │ y: 0xaca0 0xaca4 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <89cc8>:<89c7f>:<89c63>: uvy │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0xaca0 0xaca4 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c ~uvy └>└>0000aca0: 385ff3a8 ldurb w8, [x29, #-1] <- 0000ac54(b)<hyp_map_vectors+0xb8>,0000ac98(b)<hyp_map_vectors+0xb8> -num param int (base type, DW_ATE_signed size:4) 0xaca0 0xaca4 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c uv cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~uv 0000aca4: 381d73a8 sturb w8, [x29, #-41] uv cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~uv 0000aca8: 385d73a8 ldurb w8, [x29, #-41] -num param int (base type, DW_ATE_signed size:4) 0xac04 0xacac (DW_OP_breg31 0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c u cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~u 0000acac: 3900bfe8 strb w8, [sp, #47] u cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~u 0000acb0: 3940bfe8 ldrb w8, [sp, #47] -num param int (base type, DW_ATE_signed size:4) 0xabfc 0xacb4 (DW_OP_breg31 0x28) cpus_have_const_cap(inlined):hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c hyp_map_vectors:135.6 (mm.c) Sbepe if (║!cpus_have_const_cap(ARM64_SPECTRE_V3A)) ~ ┌──0000acb4: 370000a8 tbnz w8, #0, acc8 <hyp_map_vectors+0xe0> ~ │┌─0000acb8: 14000001 b acbc <hyp_map_vectors+0xd4> <- 0000acb4(b.cc-succ)<fallthrough> ││ ~ │└>0000acbc: 2a1f03e8 mov w8, wzr <- 0000acb8(b)<hyp_map_vectors+0xd4> hyp_map_vectors:136.3 (mm.c) Sbepe ║return 0; ~ 0000acc0: b90027e8 str w8, [sp, #36] ~ ┌──┼──0000acc4: 14000020 b ad44 <hyp_map_vectors+0x15c> │ │ │ │ hyp_map_vectors:138.27 (mm.c) Sbepe bp_base = (unsigned long)║hyp_symbol_addr(__bp_harden_hyp_vecs); +addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xacc8 0xace0 (DW_OP_breg31 0x10) lexblock:hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c:138 ~ │ └─>0000acc8: f0000028 adrp x8, 11000 <__bp_harden_hyp_vecs> <- 0000acb4(b.cc)<hyp_map_vectors+0xe0> ~ 0000accc: 91000108 add x8, x8, #0x0 ~ 0000acd0: f9000be8 str x8, [sp, #16] ~ 0000acd4: f9400be8 ldr x8, [sp, #16] ~ 0000acd8: f90007e8 str x8, [sp, #8] ~ 0000acdc: f94007e8 ldr x8, [sp, #8] -addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xacc8 0xace0 (DW_OP_breg31 0x10) lexblock:hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c:138 hyp_map_vectors:138.10 (mm.c) sbepe bp_base ║= (unsigned long)hyp_symbol_addr(__bp_harden_hyp_vecs); ~ 0000ace0: f9000fe8 str x8, [sp, #24] hyp_map_vectors:139.12 (mm.c) Sbepe bp_base = ║__hyp_pa(bp_base); ~ 0000ace4: f9400fe8 ldr x8, [sp, #24] ~ 0000ace8: 90000089 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000acec: f9439d29 ldr x9, [x9, #1848] ~ 0000acf0: 8b090108 add x8, x8, x9 hyp_map_vectors:139.10 (mm.c) sbepe bp_base ║= __hyp_pa(bp_base); ~ 0000acf4: f9000fe8 str x8, [sp, #24] hyp_map_vectors:140.41 (mm.c) Sbepe bp_base = __hyp_create_private_mapping(║bp_base, __BP_HARDEN_HYP_VECS_SZ, ~ 0000acf8: f9400fe0 ldr x0, [sp, #24] ~ 0000acfc: 5283000a mov w10, #0x1800 // #6144 ~ 0000ad00: 2a0a03e1 mov w1, w10 ~ 0000ad04: 528000aa mov w10, #0x5 // #5 ~ 0000ad08: 2a0a03e2 mov w2, w10 hyp_map_vectors:140.12 (mm.c) sbepe bp_base = ║__hyp_create_private_mapping(bp_base, __BP_HARDEN_HYP_VECS_SZ, ~ 0000ad0c: 97fffea2 bl a794 <__hyp_create_private_mapping> hyp_map_vectors:140.10 (mm.c) sbepe bp_base ║= __hyp_create_private_mapping(bp_base, __BP_HARDEN_HYP_VECS_SZ, ~ 0000ad10: f9000fe0 str x0, [sp, #24] <- 0000ad0c(bl-succ)<return> hyp_map_vectors:142.7 (mm.c) Sbepe if (!║bp_base) ~ 0000ad14: f9400fe8 ldr x8, [sp, #24] hyp_map_vectors:142.6 (mm.c) sbepe if (║!bp_base) ~ │ ┌──0000ad18: b50000a8 cbnz x8, ad2c <hyp_map_vectors+0x144> │ │ ~ │ │┌─0000ad1c: 14000001 b ad20 <hyp_map_vectors+0x138> <- 0000ad18(b.cc-succ)<fallthrough> │ ││ ~ │ │└>0000ad20: 12800008 mov w8, #0xffffffff // #-1 <- 0000ad1c(b)<hyp_map_vectors+0x138> │ │ hyp_map_vectors:143.3 (mm.c) Sbepe ║return -1; ~ │ │ 0000ad24: b90027e8 str w8, [sp, #36] ~ │ ┌┼──0000ad28: 14000007 b ad44 <hyp_map_vectors+0x15c> │ ││ │ ││ hyp_map_vectors:145.31 (mm.c) Sbepe __hyp_bp_vect_base = (void *)║bp_base; ~ │ │└─>0000ad2c: f9400fe8 ldr x8, [sp, #24] <- 0000ad18(b.cc)<hyp_map_vectors+0x144> │ │ hyp_map_vectors:145.21 (mm.c) sbepe __hyp_bp_vect_base ║= (void *)bp_base; ~ │ │ 0000ad30: b0000089 adrp x9, 1b000 <hyp_memory+0x460> ~ │ │ 0000ad34: f901d528 str x8, [x9, #936] ~ │ │ 0000ad38: 2a1f03ea mov w10, wzr │ │ hyp_map_vectors:147.2 (mm.c) Sbepe ║return 0; ~ │ │ 0000ad3c: b90027ea str w10, [sp, #36] ~ │ │ ┌─0000ad40: 14000001 b ad44 <hyp_map_vectors+0x15c> │ │ │ │ │ │ hyp_map_vectors:148.1 (mm.c) Sbepe ║} ~ └>└>└>0000ad44: b94027e0 ldr w0, [sp, #36] <- 0000acc4(b)<hyp_map_vectors+0x15c>,0000ad28(b)<hyp_map_vectors+0x15c>,0000ad40(b)<hyp_map_vectors+0x15c> ~ 0000ad48: a9467bfd ldp x29, x30, [sp, #96] ~ 0000ad4c: 9101c3ff add sp, sp, #0x70 0000abf4 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000ad50: d65f03c0 ret -bp_base var long unsigned int (base type, DW_ATE_unsigned size:8) 0xabe8 0xad54 (DW_OP_breg31 0x18) hyp_map_vectors:arch/arm64/kvm/hyp/nvhe/mm.c:133 **0000ad54 <hyp_create_idmap>: + hyp_create_idmap params: none hyp_create_idmap:151.0 (mm.c) Sbepe ║{ +start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xad54 0xae60 (DW_OP_fbreg -0x8) hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:152 +end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xad54 0xae60 (DW_OP_fbreg -0x10) hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:152 ~ 0000ad54: d10103ff sub sp, sp, #0x40 <- 00009fa4(bl)<hyp_create_idmap> ~ 0000ad58: a9037bfd stp x29, x30, [sp, #48] 0000ad54 CFA:r31 r29:u r30:u ~ 0000ad5c: 9100c3fd add x29, sp, #0x30 hyp_create_idmap:154.25 (mm.c) SbePe start = (unsigned long)║hyp_symbol_addr(__hyp_idmap_text_start); +addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xad60 0xad78 (DW_OP_breg31 0x18) lexblock:hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:154 ~ 0000ad60: b0000088 adrp x8, 1b000 <hyp_memory+0x460> ~ 0000ad64: 91200108 add x8, x8, #0x800 ~ 0000ad68: f9000fe8 str x8, [sp, #24] ~ 0000ad6c: f9400fe8 ldr x8, [sp, #24] ~ 0000ad70: f9000be8 str x8, [sp, #16] ~ 0000ad74: f9400be8 ldr x8, [sp, #16] -addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xad60 0xad78 (DW_OP_breg31 0x18) lexblock:hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:154 hyp_create_idmap:154.8 (mm.c) sbepe start ║= (unsigned long)hyp_symbol_addr(__hyp_idmap_text_start); ~ 0000ad78: f81f83a8 stur x8, [x29, #-8] hyp_create_idmap:155.35 (mm.c) Sbepe start = hyp_virt_to_phys((void *)║start); ~ 0000ad7c: f85f83a0 ldur x0, [x29, #-8] hyp_create_idmap:155.10 (mm.c) sbepe start = ║hyp_virt_to_phys((void *)start); ~ 0000ad80: 97fffefb bl a96c <hyp_virt_to_phys> hyp_create_idmap:155.8 (mm.c) sbepe start ║= hyp_virt_to_phys((void *)start); ~ 0000ad84: f81f83a0 stur x0, [x29, #-8] <- 0000ad80(bl-succ)<return> hyp_create_idmap:156.10 (mm.c) Sbepe start = ║ALIGN_DOWN(start, PAGE_SIZE); ~ 0000ad88: f85f83a8 ldur x8, [x29, #-8] ~ 0000ad8c: 9274cd08 and x8, x8, #0xfffffffffffff000 hyp_create_idmap:156.8 (mm.c) sbepe start ║= ALIGN_DOWN(start, PAGE_SIZE); ~ 0000ad90: f81f83a8 stur x8, [x29, #-8] hyp_create_idmap:158.23 (mm.c) Sbepe end = (unsigned long)║hyp_symbol_addr(__hyp_idmap_text_end); +addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xad94 0xadac (DW_OP_breg31 0x8) lexblock:hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:158 ~ 0000ad94: b0000088 adrp x8, 1b000 <hyp_memory+0x460> ~ 0000ad98: 91202108 add x8, x8, #0x808 ~ 0000ad9c: f90007e8 str x8, [sp, #8] ~ 0000ada0: f94007e8 ldr x8, [sp, #8] ~ 0000ada4: f90003e8 str x8, [sp] ~ 0000ada8: f94003e8 ldr x8, [sp] -addr var pointer(char (base type, DW_ATE_unsigned_char size:1)[no count]) 0xad94 0xadac (DW_OP_breg31 0x8) lexblock:hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:158 hyp_create_idmap:158.6 (mm.c) sbepe end ║= (unsigned long)hyp_symbol_addr(__hyp_idmap_text_end); ~ 0000adac: f81f03a8 stur x8, [x29, #-16] hyp_create_idmap:159.33 (mm.c) Sbepe end = hyp_virt_to_phys((void *)║end); ~ 0000adb0: f85f03a0 ldur x0, [x29, #-16] hyp_create_idmap:159.8 (mm.c) sbepe end = ║hyp_virt_to_phys((void *)end); ~ 0000adb4: 97fffeee bl a96c <hyp_virt_to_phys> hyp_create_idmap:159.6 (mm.c) sbepe end ║= hyp_virt_to_phys((void *)end); ~ 0000adb8: f81f03a0 stur x0, [x29, #-16] <- 0000adb4(bl-succ)<return> hyp_create_idmap:160.8 (mm.c) Sbepe end = ║ALIGN(end, PAGE_SIZE); ~ 0000adbc: f85f03a8 ldur x8, [x29, #-16] ~ 0000adc0: 913ffd08 add x8, x8, #0xfff ~ 0000adc4: 9274cd08 and x8, x8, #0xfffffffffffff000 hyp_create_idmap:160.6 (mm.c) sbepe end ║= ALIGN(end, PAGE_SIZE); ~ 0000adc8: f81f03a8 stur x8, [x29, #-16] hyp_create_idmap:170.18 (mm.c) Sbepe __io_map_base = ║start & BIT(hyp_va_bits - 2); ~ 0000adcc: f85f83a8 ldur x8, [x29, #-8] hyp_create_idmap:170.26 (mm.c) sbepe __io_map_base = start & ║BIT(hyp_va_bits - 2); ~ 0000add0: b0000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000add4: b947d92a ldr w10, [x9, #2008] ~ 0000add8: 7100094a subs w10, w10, #0x2 ~ 0000addc: 2a0a03eb mov w11, w10 ~ 0000ade0: 5280002a mov w10, #0x1 // #1 ~ 0000ade4: 2a0a03ec mov w12, w10 ~ 0000ade8: 9acb218b lsl x11, x12, x11 hyp_create_idmap:170.24 (mm.c) sbepe __io_map_base = start ║& BIT(hyp_va_bits - 2); ~ 0000adec: 8a0b0108 and x8, x8, x11 hyp_create_idmap:170.16 (mm.c) sbepe __io_map_base ║= start & BIT(hyp_va_bits - 2); ~ 0000adf0: 9000008b adrp x11, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000adf4: f905cd68 str x8, [x11, #2968] hyp_create_idmap:171.19 (mm.c) Sbepe __io_map_base ^= ║BIT(hyp_va_bits - 2); ~ 0000adf8: b947d92a ldr w10, [x9, #2008] ~ 0000adfc: 7100094a subs w10, w10, #0x2 ~ 0000ae00: 2a0a03e8 mov w8, w10 ~ 0000ae04: 9ac82188 lsl x8, x12, x8 hyp_create_idmap:171.16 (mm.c) sbepe __io_map_base ║^= BIT(hyp_va_bits - 2); ~ 0000ae08: f945cd6d ldr x13, [x11, #2968] ~ 0000ae0c: ca0801a8 eor x8, x13, x8 ~ 0000ae10: f905cd68 str x8, [x11, #2968] hyp_create_idmap:172.18 (mm.c) Sbepe __hyp_vmemmap = ║__io_map_base | BIT(hyp_va_bits - 3); ~ 0000ae14: f945cd68 ldr x8, [x11, #2968] hyp_create_idmap:172.34 (mm.c) sbepe __hyp_vmemmap = __io_map_base | ║BIT(hyp_va_bits - 3); ~ 0000ae18: b947d92a ldr w10, [x9, #2008] ~ 0000ae1c: 71000d4a subs w10, w10, #0x3 ~ 0000ae20: 2a0a03e9 mov w9, w10 ~ 0000ae24: 9ac92189 lsl x9, x12, x9 hyp_create_idmap:172.32 (mm.c) sbepe __hyp_vmemmap = __io_map_base ║| BIT(hyp_va_bits - 3); ~ 0000ae28: aa090108 orr x8, x8, x9 hyp_create_idmap:172.16 (mm.c) sbepe __hyp_vmemmap ║= __io_map_base | BIT(hyp_va_bits - 3); ~ 0000ae2c: 90000089 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000ae30: f904c528 str x8, [x9, #2440] hyp_create_idmap:174.31 (mm.c) Sbepe return __hyp_create_mappings(║start, end - start, start, PAGE_HYP_EXEC); ~ 0000ae34: f85f83a8 ldur x8, [x29, #-8] hyp_create_idmap:174.38 (mm.c) sbepe return __hyp_create_mappings(start, ║end - start, start, PAGE_HYP_EXEC); ~ 0000ae38: f85f03a9 ldur x9, [x29, #-16] hyp_create_idmap:174.42 (mm.c) sbepe return __hyp_create_mappings(start, end ║- start, start, PAGE_HYP_EXEC); ~ 0000ae3c: eb080121 subs x1, x9, x8 ~ 0000ae40: 528000aa mov w10, #0x5 // #5 ~ 0000ae44: 2a0a03e3 mov w3, w10 hyp_create_idmap:174.9 (mm.c) sbepe return ║__hyp_create_mappings(start, end - start, start, PAGE_HYP_EXEC); ~ 0000ae48: aa0803e0 mov x0, x8 ~ 0000ae4c: aa0803e2 mov x2, x8 ~ 0000ae50: 97fffe1a bl a6b8 <__hyp_create_mappings> hyp_create_idmap:174.2 (mm.c) sbepe ║return __hyp_create_mappings(start, end - start, start, PAGE_HYP_EXEC); ~ 0000ae54: a9437bfd ldp x29, x30, [sp, #48] <- 0000ae50(bl-succ)<return> ~ 0000ae58: 910103ff add sp, sp, #0x40 0000ad60 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000ae5c: d65f03c0 ret -start var long unsigned int (base type, DW_ATE_unsigned size:8) 0xad54 0xae60 (DW_OP_fbreg -0x8) hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:152 -end var long unsigned int (base type, DW_ATE_unsigned size:8) 0xad54 0xae60 (DW_OP_fbreg -0x10) hyp_create_idmap:arch/arm64/kvm/hyp/nvhe/mm.c:152 **0000ae60 <cpus_have_cap>: + cpus_have_cap params: +num param unsigned int (base type, DW_ATE_unsigned size:4) 0xae60 0xaebc (DW_OP_breg31 0x8) cpus_have_cap:428.0 (cpufeature.h) Sbepe ║{ +num param unsigned int (base type, DW_ATE_unsigned size:4) 0xae60 0xaebc (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mm.c:427 ~ 0000ae60: d10083ff sub sp, sp, #0x20 ~ 0000ae64: a9017bfd stp x29, x30, [sp, #16] 0000ae60 CFA:r31 r29:u r30:u ~ 0000ae68: 910043fd add x29, sp, #0x10 ~ 0000ae6c: b9000be0 str w0, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) SbePe if (║num >= ARM64_NCAPS) ~ 0000ae70: b9400be8 ldr w8, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~ 0000ae74: 7100f508 subs w8, w8, #0x3d ~ ┌──0000ae78: 540000a3 b.cc ae8c <cpus_have_cap+0x2c> // b.lo, b.ul, b.last ~ │┌─0000ae7c: 14000001 b ae80 <cpus_have_cap+0x20> <- 0000ae78(b.cc-succ)<fallthrough> ││ ~ │└>0000ae80: 2a1f03e8 mov w8, wzr <- 0000ae7c(b)<cpus_have_cap+0x20> cpus_have_cap:430.3 (cpufeature.h) Sbepe ║return false; ~ 0000ae84: 381ff3a8 sturb w8, [x29, #-1] ~ ┌┼──0000ae88: 14000009 b aeac <cpus_have_cap+0x4c> ││ ││ cpus_have_cap:431.18 (cpufeature.h) Sbepe return test_bit(║num, cpu_hwcaps); ~ │└─>0000ae8c: b9400be0 ldr w0, [sp, #8] <- 0000ae78(b.cc)<cpus_have_cap+0x2c> cpus_have_cap:431.9 (cpufeature.h) sbepe return ║test_bit(num, cpu_hwcaps); ~ 0000ae90: b0000081 adrp x1, 1b000 <hyp_memory+0x460> ~ 0000ae94: 91218021 add x1, x1, #0x860 ~ 0000ae98: 94000009 bl aebc <test_bit> ~ 0000ae9c: 71000008 subs w8, w0, #0x0 <- 0000ae98(bl-succ)<return> ~ 0000aea0: 1a9f07e9 cset w9, ne // ne = any cpus_have_cap:431.2 (cpufeature.h) sbepe ║return test_bit(num, cpu_hwcaps); ~ 0000aea4: 381ff3a9 sturb w9, [x29, #-1] ~ │ ┌─0000aea8: 14000001 b aeac <cpus_have_cap+0x4c> │ │ │ │ cpus_have_cap:432.1 (cpufeature.h) Sbepe ║} ~ └>└>0000aeac: 385ff3a0 ldurb w0, [x29, #-1] <- 0000ae88(b)<cpus_have_cap+0x4c>,0000aea8(b)<cpus_have_cap+0x4c> ~ 0000aeb0: a9417bfd ldp x29, x30, [sp, #16] ~ 0000aeb4: 910083ff add sp, sp, #0x20 0000ae6c CFA:r29+16 r29:c-16 r30:c-8 ~ 0000aeb8: d65f03c0 ret -num param unsigned int (base type, DW_ATE_unsigned size:4) 0xae60 0xaebc (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mm.c:427 **0000aebc <test_bit>: + test_bit params: +nr param int (base type, DW_ATE_signed size:4) 0xaebc 0xaefc (DW_OP_fbreg 0xc) +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xaebc 0xaefc (DW_OP_fbreg 0x0) test_bit:105.0 (non-atomic.h) Sbepe ║{ 0000aebc CFA:r31 +nr param int (base type, DW_ATE_signed size:4) 0xaebc 0xaefc (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mm.c:104 +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xaebc 0xaefc (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mm.c:104 ~ 0000aebc: d10043ff sub sp, sp, #0x10 <- 0000ae98(bl)<test_bit> ~ 0000aec0: b9000fe0 str w0, [sp, #12] ~ 0000aec4: f90003e1 str x1, [sp] test_bit:106.16 (non-atomic.h) SbePe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000aec8: f94003e8 ldr x8, [sp] test_bit:106.21 (non-atomic.h) sbepe return 1UL & (addr[║BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000aecc: b9400fe9 ldr w9, [sp, #12] ~ 0000aed0: 1100fd2a add w10, w9, #0x3f ~ 0000aed4: 7100012b subs w11, w9, #0x0 ~ 0000aed8: 1a89b149 csel w9, w10, w9, lt // lt = tstop ~ 0000aedc: 13067d29 asr w9, w9, #6 test_bit:106.16 (non-atomic.h) sbepe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000aee0: f869d908 ldr x8, [x8, w9, sxtw #3] test_bit:106.39 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] >> (║nr & (BITS_PER_LONG-1))); ~ 0000aee4: b9400fe9 ldr w9, [sp, #12] ~ 0000aee8: 2a0903ec mov w12, w9 test_bit:106.35 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] ║>> (nr & (BITS_PER_LONG-1))); ~ 0000aeec: 9acc2508 lsr x8, x8, x12 test_bit:106.13 (non-atomic.h) sbepe return 1UL ║& (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000aef0: 12000100 and w0, w8, #0x1 test_bit:106.2 (non-atomic.h) sbepe ║return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000aef4: 910043ff add sp, sp, #0x10 ~ 0000aef8: d65f03c0 ret -nr param int (base type, DW_ATE_signed size:4) 0xaebc 0xaefc (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mm.c:104 -addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xaebc 0xaefc (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mm.c:104 ~ 0000aefc: 52a0002b mov w11, #0x10000 // #65536 ~ 0000af00: b8ab0109 ldadda w11, w9, [x8] ~ 0000af04: d503201f nop ~ 0000af08: d503201f nop ~ 0000af0c: d503201f nop ~ 0000af10: 52800029 mov w9, #0x1 // #1 ~ 0000af14: 7869011f staddlh w9, [x8] 0000aec0 CFA:r31+16 ~ 0000af18: d503201f nop