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 0000af1c 0000c258 arch/arm64/kvm/hyp/nvhe/mem_protect.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
**0000af1c <kvm_host_prepare_stage2>:
0000af1c <$x>:
+ kvm_host_prepare_stage2 params:
+mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80)
+dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78)
kvm_host_prepare_stage2:80.0 (mem_protect.c) Sbepe ║{
+mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79
+dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79
+mmu var pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xaf1c 0xb380 (DW_OP_breg31 0x70) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:81
+params var pointer(struct kvm_nvhe_init_params<89e06>/<98494>) 0xaf1c 0xb380 (DW_OP_breg31 0x68) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:82
+ret var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x64) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83
+i var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x60) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83
~ 0000af1c: d10643ff sub sp, sp, #0x190 <- 00009aa0(bl)<kvm_host_prepare_stage2>
~ 0000af20: a9177bfd stp x29, x30, [sp, #368]
~ 0000af24: f900c3fc str x28, [sp, #384]
0000af1c CFA:r31 r28:u r29:u r30:u
~ 0000af28: 9105c3fd add x29, sp, #0x170
~ 0000af2c: f90043e0 str x0, [sp, #128]
~ 0000af30: f9003fe1 str x1, [sp, #120]
kvm_host_prepare_stage2:81.21 (mem_protect.c) SbePe struct kvm_s2_mmu *║mmu = &host_kvm.arch.mmu;
~ 0000af34: b0000088 adrp x8, 1b000 <hyp_memory+0x460>
~ 0000af38: 910ec108 add x8, x8, #0x3b0
~ 0000af3c: f9003be8 str x8, [sp, #112]
kvm_host_prepare_stage2:85.2 (mem_protect.c) Sbepe ║prepare_host_vtcr();
~ 0000af40: 94000110 bl b380 <prepare_host_vtcr>
kvm_host_prepare_stage2:86.2 (mem_protect.c) Sbepe ║hyp_spin_lock_init(&host_kvm.lock);
~ ┌─0000af44: 14000001 b af48 <kvm_host_prepare_stage2+0x2c> <- 0000af40(bl-succ)<return>
│
~ └>0000af48: 2a1f03e8 mov w8, wzr <- 0000af44(b)<kvm_host_prepare_stage2+0x2c>
kvm_host_prepare_stage2:86.2 (mem_protect.c) sbepe ║hyp_spin_lock_init(&host_kvm.lock);
~ 0000af4c: b9005be8 str w8, [sp, #88]
~ 0000af50: b0000089 adrp x9, 1b000 <hyp_memory+0x460>
~ 0000af54: b9405be8 ldr w8, [sp, #88]
~ 0000af58: b9059928 str w8, [x9, #1432]
~ ┌─0000af5c: 14000001 b af60 <kvm_host_prepare_stage2+0x44>
│
│ kvm_host_prepare_stage2:88.25 (mem_protect.c) Sbepe ret = prepare_s2_pools(║mem_pgt_pool, dev_pgt_pool);
~ └>0000af60: f94043e0 ldr x0, [sp, #128] <- 0000af5c(b)<kvm_host_prepare_stage2+0x44>
kvm_host_prepare_stage2:88.39 (mem_protect.c) sbepe ret = prepare_s2_pools(mem_pgt_pool, ║dev_pgt_pool);
~ 0000af64: f9403fe1 ldr x1, [sp, #120]
kvm_host_prepare_stage2:88.8 (mem_protect.c) sbepe ret = ║prepare_s2_pools(mem_pgt_pool, dev_pgt_pool);
~ 0000af68: 9400011e bl b3e0 <prepare_s2_pools>
kvm_host_prepare_stage2:88.6 (mem_protect.c) sbepe ret ║= prepare_s2_pools(mem_pgt_pool, dev_pgt_pool);
~ 0000af6c: b90067e0 str w0, [sp, #100] <- 0000af68(bl-succ)<return>
kvm_host_prepare_stage2:89.6 (mem_protect.c) Sbepe if (║ret)
~ 0000af70: b94067e8 ldr w8, [sp, #100]
kvm_host_prepare_stage2:89.6 (mem_protect.c) sbepe if (║ret)
~ ┌──0000af74: 340000a8 cbz w8, af88 <kvm_host_prepare_stage2+0x6c>
│
~ │┌─0000af78: 14000001 b af7c <kvm_host_prepare_stage2+0x60> <- 0000af74(b.cc-succ)<fallthrough>
││
││ kvm_host_prepare_stage2:90.10 (mem_protect.c) Sbepe return ║ret;
~ │└>0000af7c: b94067e8 ldr w8, [sp, #100] <- 0000af78(b)<kvm_host_prepare_stage2+0x60>
│ kvm_host_prepare_stage2:90.3 (mem_protect.c) sbepe ║return ret;
~ │ 0000af80: b9008fe8 str w8, [sp, #140]
~ ┌──────┼──0000af84: 140000fa b b36c <kvm_host_prepare_stage2+0x450>
│ │
│ │ kvm_host_prepare_stage2:92.8 (mem_protect.c) Sbepe ret = ║kvm_pgtable_stage2_init(&host_kvm.pgt, &host_kvm.arch,
~ │ └─>0000af88: b0000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000af74(b.cc)<kvm_host_prepare_stage2+0x6c>
~ │ 0000af8c: 910ec108 add x8, x8, #0x3b0
~ │ 0000af90: 91062100 add x0, x8, #0x188
~ │ 0000af94: 9106a102 add x2, x8, #0x1a8
~ │ 0000af98: aa0803e1 mov x1, x8
~ │ 0000af9c: 940026b1 bl 14a60 <kvm_pgtable_stage2_init>
│
│ kvm_host_prepare_stage2:92.6 (mem_protect.c) sbepe ret ║= kvm_pgtable_stage2_init(&host_kvm.pgt, &host_kvm.arch,
~ │ 0000afa0: b90067e0 str w0, [sp, #100] <- 0000af9c(bl-succ)<return>
│ kvm_host_prepare_stage2:94.6 (mem_protect.c) Sbepe if (║ret)
~ │ 0000afa4: b94067e9 ldr w9, [sp, #100]
│ kvm_host_prepare_stage2:94.6 (mem_protect.c) sbepe if (║ret)
~ │ ┌──0000afa8: 340000a9 cbz w9, afbc <kvm_host_prepare_stage2+0xa0>
│ │
~ │ │┌─0000afac: 14000001 b afb0 <kvm_host_prepare_stage2+0x94> <- 0000afa8(b.cc-succ)<fallthrough>
│ ││
│ ││ kvm_host_prepare_stage2:95.10 (mem_protect.c) Sbepe return ║ret;
~ │ │└>0000afb0: b94067e8 ldr w8, [sp, #100] <- 0000afac(b)<kvm_host_prepare_stage2+0x94>
│ │ kvm_host_prepare_stage2:95.3 (mem_protect.c) sbepe ║return ret;
~ │ │ 0000afb4: b9008fe8 str w8, [sp, #140]
~ │ ┌────┼──0000afb8: 140000ed b b36c <kvm_host_prepare_stage2+0x450>
│ │ │
│ │ │ kvm_host_prepare_stage2:97.18 (mem_protect.c) Sbepe mmu->pgd_phys = ║__hyp_pa(host_kvm.pgt.pgd);
~ │ │ └─>0000afbc: b0000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000afa8(b.cc)<kvm_host_prepare_stage2+0xa0>
~ │ │ 0000afc0: 910ec108 add x8, x8, #0x3b0
~ │ │ 0000afc4: 91062109 add x9, x8, #0x188
~ │ │ 0000afc8: f940c90a ldr x10, [x8, #400]
~ │ │ 0000afcc: 9000008b adrp x11, 1a000 <hyp_cpu_logical_map+0xe0>
~ │ │ 0000afd0: f9439d6b ldr x11, [x11, #1848]
~ │ │ 0000afd4: 8b0b014a add x10, x10, x11
│ │ kvm_host_prepare_stage2:97.2 (mem_protect.c) sbepe ║mmu->pgd_phys = __hyp_pa(host_kvm.pgt.pgd);
~ │ │ 0000afd8: f9403beb ldr x11, [sp, #112]
│ │ kvm_host_prepare_stage2:97.16 (mem_protect.c) sbepe mmu->pgd_phys ║= __hyp_pa(host_kvm.pgt.pgd);
~ │ │ 0000afdc: f900096a str x10, [x11, #16]
│ │ kvm_host_prepare_stage2:98.2 (mem_protect.c) Sbepe ║mmu->arch = &host_kvm.arch;
~ │ │ 0000afe0: f9403bea ldr x10, [sp, #112]
│ │ kvm_host_prepare_stage2:98.12 (mem_protect.c) sbepe mmu->arch ║= &host_kvm.arch;
~ │ │ 0000afe4: f9001548 str x8, [x10, #40]
│ │ kvm_host_prepare_stage2:99.2 (mem_protect.c) Sbepe ║mmu->pgt = &host_kvm.pgt;
~ │ │ 0000afe8: f9403be8 ldr x8, [sp, #112]
│ │ kvm_host_prepare_stage2:99.11 (mem_protect.c) sbepe mmu->pgt ║= &host_kvm.pgt;
~ │ │ 0000afec: f9000d09 str x9, [x8, #24]
│ │ kvm_host_prepare_stage2:100.2 (mem_protect.c) Sbepe ║mmu->vmid.vmid_gen = 0;
~ │ │ 0000aff0: f9403be8 ldr x8, [sp, #112]
~ │ │ 0000aff4: aa1f03e9 mov x9, xzr
│ │ kvm_host_prepare_stage2:100.21 (mem_protect.c) sbepe mmu->vmid.vmid_gen ║= 0;
~ │ │ 0000aff8: f9000109 str x9, [x8]
│ │ kvm_host_prepare_stage2:101.2 (mem_protect.c) Sbepe ║mmu->vmid.vmid = 0;
~ │ │ 0000affc: f9403be8 ldr x8, [sp, #112]
~ │ │ 0000b000: 2a1f03ec mov w12, wzr
│ │ kvm_host_prepare_stage2:101.17 (mem_protect.c) sbepe mmu->vmid.vmid ║= 0;
~ │ │ 0000b004: b900090c str w12, [x8, #8]
│ │ kvm_host_prepare_stage2:103.9 (mem_protect.c) Sbepe for (i ║= 0; i < hyp_nr_cpus; i++) {
~ │ │ 0000b008: b90063ec str w12, [sp, #96]
│ │ kvm_host_prepare_stage2:103.7 (mem_protect.c) sbepe for (║i = 0; i < hyp_nr_cpus; i++) {
~ │ │ ┌─0000b00c: 14000001 b b010 <kvm_host_prepare_stage2+0xf4>
│ │ │
│ │ │ kvm_host_prepare_stage2:103.14 (mem_protect.c) sbepe for (i = 0; ║i < hyp_nr_cpus; i++) {
~ │ │╔═══>└>0000b010: b98063e8 ldrsw x8, [sp, #96] <- 0000b00c(b)<kvm_host_prepare_stage2+0xf4>,v0000b1c4(b)<kvm_host_prepare_stage2+0xf4>
│ │║ kvm_host_prepare_stage2:103.18 (mem_protect.c) sbepe for (i = 0; i < ║hyp_nr_cpus; i++) {
~ │ │║ 0000b014: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ │ │║ 0000b018: f9459d29 ldr x9, [x9, #2872]
│ │║ kvm_host_prepare_stage2:103.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_nr_cpus; i++) {
~ │ │║ 0000b01c: eb090108 subs x8, x8, x9
~ │ │║┌─────0000b020: 54000d42 b.cs b1c8 <kvm_host_prepare_stage2+0x2ac> // b.hs, b.nlast
│ │║│
~ │ │║│ ┌─0000b024: 14000001 b b028 <kvm_host_prepare_stage2+0x10c> <- 0000b020(b.cc-succ)<fallthrough>
│ │║│ │
│ │║│ │ kvm_host_prepare_stage2:104.12 (mem_protect.c) Sbepe params = ║per_cpu_ptr(&kvm_init_params, i);
~ │ │║│ ┌─└>0000b028: 14000001 b b02c <kvm_host_prepare_stage2+0x110> <- 0000b024(b)<kvm_host_prepare_stage2+0x10c>
│ │║│ │
~ │ │║│ └──>0000b02c: aa1f03e8 mov x8, xzr <- 0000b028(b)<kvm_host_prepare_stage2+0x110>
│ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i);
+__vpp_verify var pointer(const(no type)) 0xb030 0xb038 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
~ │ │║│ 0000b030: f9002be8 str x8, [sp, #80]
~ │ │║│ ┌─0000b034: 14000001 b b038 <kvm_host_prepare_stage2+0x11c>
-__vpp_verify var pointer(const(no type)) 0xb030 0xb038 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
│ │║│ │
│ │║│ │ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i);
+__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb038 0xb064 (DW_OP_breg31 0x40) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
~ │ │║│ └>0000b038: d0000068 adrp x8, 19000 <kvm_host_data> <- 0000b034(b)<kvm_host_prepare_stage2+0x11c>
~ │ │║│ 0000b03c: 91386108 add x8, x8, #0xe18
~ │ │║│ 0000b040: f90023e8 str x8, [sp, #64]
~ │ │║│ 0000b044: f94023e8 ldr x8, [sp, #64]
~ │ │║│ 0000b048: b94063e0 ldr w0, [sp, #96]
~ │ │║│ 0000b04c: f90007e8 str x8, [sp, #8]
~ │ │║│ 0000b050: 97fff1ce bl 7788 <__hyp_per_cpu_offset>
│ │║│
~ │ │║│ 0000b054: f94007e8 ldr x8, [sp, #8] <- 0000b050(bl-succ)<return>
~ │ │║│ 0000b058: 8b000108 add x8, x8, x0
~ │ │║│ 0000b05c: f9001fe8 str x8, [sp, #56]
~ │ │║│ 0000b060: f9401fe8 ldr x8, [sp, #56]
-__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb038 0xb064 (DW_OP_breg31 0x40) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
│ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i);
+__vpp_verify var pointer(const(no type)) 0xb064 0xb068 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
~ │ │║│ 0000b064: f90027e8 str x8, [sp, #72]
-__vpp_verify var pointer(const(no type)) 0xb064 0xb068 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
│ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i);
~ │ │║│ 0000b068: f94027e8 ldr x8, [sp, #72]
│ │║│ kvm_host_prepare_stage2:104.10 (mem_protect.c) sbepe params ║= per_cpu_ptr(&kvm_init_params, i);
~ │ │║│ 0000b06c: f90037e8 str x8, [sp, #104]
│ │║│ kvm_host_prepare_stage2:105.33 (mem_protect.c) Sbepe params->vttbr = kvm_get_vttbr(║mmu);
~ │ │║│ 0000b070: f9403be8 ldr x8, [sp, #112]
~ │ │║│ 0000b074: f9005be8 str x8, [sp, #176]
z: 0xb078 0xb17c kvm_get_vttbr inlined from kvm_host_prepare_stage2:105 (mem_protect.c) <98706>:
z │ │║│ kvm_get_vttbr:335.27 (kvm_mmu.h) Sbepe struct kvm_vmid *vmid = &║mmu->vmid;
+mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb078 0xb17c (DW_OP_breg31 0xb0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb078 0xb17c (DW_OP_breg31 0xa8) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0xa0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x98) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x90) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~z │ │║│ 0000b078: f9405be8 ldr x8, [sp, #176]
z │ │║│ kvm_get_vttbr:335.19 (kvm_mmu.h) sbepe struct kvm_vmid *║vmid = &mmu->vmid;
~z │ │║│ 0000b07c: f90057e8 str x8, [sp, #168]
~z │ │║│ 0000b080: 528001e9 mov w9, #0xf // #15
~z │ │║│ 0000b084: b900bbe9 str w9, [sp, #184]
a: 0xb088 0xb144 cpus_have_const_cap inlined from system_supports_cnp:694 (cpufeature.h) <9875c>:<98747>:<98706>:
b: 0xb088 0xb144 system_supports_cnp inlined from kvm_get_vttbr:337 (kvm_mmu.h) <98747>:<98706>:
zab │ │║│ 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) 0xb088 0xb144 (DW_OP_breg31 0xb8) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~zab │ │║│ 0000b088: b940bbe9 ldr w9, [sp, #184]
~zab │ │║│ 0000b08c: b81503a9 stur w9, [x29, #-176]
c: 0xb090 0xb138 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <9877a>:<9875c>:<98747>:<98706>:
d: 0xb090 0xb0b8 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98798>:<9877a>:<9875c>:<98747>:<98706>:
zabcd │ │║│ 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) 0xb090 0xb138 (DW_OP_fbreg -0xb0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb090 0xb0b8 (DW_OP_fbreg -0x9c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~zabcd │ │║│ 0000b090: 90000088 adrp x8, 1b000 <hyp_memory+0x460>
~zabcd │ │║│ 0000b094: b9479909 ldr w9, [x8, #1944]
~zabcd │ │║│ 0000b098: 71000129 subs w9, w9, #0x0
~zabcd │ │║│ 0000b09c: 1a9f07ea cset w10, ne // ne = any
~zabcd │ │║│ 0000b0a0: 381643aa sturb w10, [x29, #-156]
zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~zabcd │ │║│ 0000b0a4: 385643aa ldurb w10, [x29, #-156]
~zabcd │ │║│ 0000b0a8: 2a0a03e8 mov w8, w10
~zabcd │ │║│ 0000b0ac: 92400108 and x8, x8, #0x1
zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~zabcd │ │║│ 0000b0b0: f81583a8 stur x8, [x29, #-168]
zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~zabcd │ │║│ 0000b0b4: f85583a8 ldur x8, [x29, #-168]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb090 0xb0b8 (DW_OP_fbreg -0x9c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
zabc │ │║│ cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized())
~zabc │ │║│┌────0000b0b8: b4000388 cbz x8, b128 <kvm_host_prepare_stage2+0x20c>
│ │║││
~zabc │ │║││ ┌─0000b0bc: 14000001 b b0c0 <kvm_host_prepare_stage2+0x1a4> <- 0000b0b8(b.cc-succ)<fallthrough>
│ │║││ │
zabc │ │║││ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num);
~zabc │ │║││ └>0000b0c0: b85503a8 ldur w8, [x29, #-176] <- 0000b0bc(b)<kvm_host_prepare_stage2+0x1a4>
~zabc │ │║││ 0000b0c4: b81783a8 stur w8, [x29, #-136]
e: 0xb0c8 0xb128 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <987c5>:<9877a>:<9875c>:<98747>:<98706>:
zabce │ │║││ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS)
+num param int (base type, DW_ATE_signed size:4) 0xb0c8 0xb128 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~zabce │ │║││ 0000b0c8: b85783a8 ldur w8, [x29, #-136]
zabce │ │║││ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS)
~zabce │ │║││ 0000b0cc: 7100f508 subs w8, w8, #0x3d
~zabce │ │║││ ┌──0000b0d0: 540000ab b.lt b0e4 <kvm_host_prepare_stage2+0x1c8> // b.tstop
│ │║││ │
~zabce │ │║││ │┌─0000b0d4: 14000001 b b0d8 <kvm_host_prepare_stage2+0x1bc> <- 0000b0d0(b.cc-succ)<fallthrough>
│ │║││ ││
~zabce │ │║││ │└>0000b0d8: 2a1f03e8 mov w8, wzr <- 0000b0d4(b)<kvm_host_prepare_stage2+0x1bc>
zabce │ │║││ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false;
~zabce │ │║││ │ 0000b0dc: 3817f3a8 sturb w8, [x29, #-129]
~zabce │ │║││┌┼──0000b0e0: 14000013 b b12c <kvm_host_prepare_stage2+0x210>
│ │║││││
zabce │ │║││││ __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)) 0xb0e4 0xb118 (DW_OP_fbreg -0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~zabce │ │║│││└─>0000b0e4: b89783a8 ldursw x8, [x29, #-136] <- 0000b0d0(b.cc)<kvm_host_prepare_stage2+0x1c8>
~zabce │ │║│││ 0000b0e8: d37ced08 lsl x8, x8, #4
~zabce │ │║│││ 0000b0ec: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~zabce │ │║│││ 0000b0f0: 911e8129 add x9, x9, #0x7a0
~zabce │ │║│││ 0000b0f4: b868692a ldr w10, [x9, x8]
~zabce │ │║│││ 0000b0f8: 7100014a subs w10, w10, #0x0
~zabce │ │║│││ 0000b0fc: 1a9f07eb cset w11, ne // ne = any
~zabce │ │║│││ 0000b100: 381743ab sturb w11, [x29, #-140]
zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~zabce │ │║│││ 0000b104: 385743ab ldurb w11, [x29, #-140]
~zabce │ │║│││ 0000b108: 2a0b03e8 mov w8, w11
~zabce │ │║│││ 0000b10c: 92400108 and x8, x8, #0x1
zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~zabce │ │║│││ 0000b110: f81683a8 stur x8, [x29, #-152]
zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~zabce │ │║│││ 0000b114: f85683a8 ldur x8, [x29, #-152]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb0e4 0xb118 (DW_OP_fbreg -0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~zabce │ │║│││ 0000b118: f1000108 subs x8, x8, #0x0
~zabce │ │║│││ 0000b11c: 1a9f07eb cset w11, ne // ne = any
zabce │ │║│││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]);
~zabce │ │║│││ 0000b120: 3817f3ab sturb w11, [x29, #-129]
~zabce │ │║│││ ┌─0000b124: 14000002 b b12c <kvm_host_prepare_stage2+0x210>
-num param int (base type, DW_ATE_signed size:4) 0xb0c8 0xb128 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ │║│││ │
zabc │ │║│││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG();
~zabc │ │║│└┼─┼>0000b128: d4210000 brk #0x800 <- 0000b0b8(b.cc)<kvm_host_prepare_stage2+0x20c>
│ │║│ │ │
f: 0xb12c 0xb130 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <987c5>:<9877a>:<9875c>:<98747>:<98706>:
zabcf │ │║│ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║}
+num param int (base type, DW_ATE_signed size:4) 0xb12c 0xb130 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~zabcf │ │║│ └>└>0000b12c: 3857f3a8 ldurb w8, [x29, #-129] <- 0000b0e0(b)<kvm_host_prepare_stage2+0x210>,0000b124(b)<kvm_host_prepare_stage2+0x210>
-num param int (base type, DW_ATE_signed size:4) 0xb12c 0xb130 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
zabc │ │║│ cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num);
~zabc │ │║│ 0000b130: 381573a8 sturb w8, [x29, #-169]
zabc │ │║│ cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║}
~zabc │ │║│ 0000b134: 385573a8 ldurb w8, [x29, #-169]
-num param int (base type, DW_ATE_signed size:4) 0xb090 0xb138 (DW_OP_fbreg -0xb0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
zab │ │║│ cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num);
~zab │ │║│ 0000b138: 3814f3a8 sturb w8, [x29, #-177]
zab │ │║│ cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║}
~zab │ │║│ 0000b13c: 3854f3a8 ldurb w8, [x29, #-177]
~zab │ │║│ 0000b140: 2a0803e9 mov w9, w8
-num param int (base type, DW_ATE_signed size:4) 0xb088 0xb144 (DW_OP_breg31 0xb8) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
z │ │║│ kvm_get_vttbr:337.6 (kvm_mmu.h) Sbepe u64 ║cnp = system_supports_cnp() ? VTTBR_CNP_BIT : 0;
~z │ │║│ 0000b144: f9004be9 str x9, [sp, #144]
z │ │║│ kvm_get_vttbr:339.10 (kvm_mmu.h) Sbepe baddr = ║mmu->pgd_phys;
~z │ │║│ 0000b148: f9405be9 ldr x9, [sp, #176]
z │ │║│ kvm_get_vttbr:339.15 (kvm_mmu.h) sbepe baddr = mmu->║pgd_phys;
~z │ │║│ 0000b14c: f9400929 ldr x9, [x9, #16]
z │ │║│ kvm_get_vttbr:339.8 (kvm_mmu.h) sbepe baddr ║= mmu->pgd_phys;
~z │ │║│ 0000b150: f9004fe9 str x9, [sp, #152]
z │ │║│ kvm_get_vttbr:340.20 (kvm_mmu.h) Sbepe vmid_field = (u64)║vmid->vmid << VTTBR_VMID_SHIFT;
~z │ │║│ 0000b154: f94057e9 ldr x9, [sp, #168]
z │ │║│ kvm_get_vttbr:340.15 (kvm_mmu.h) sbepe vmid_field = ║(u64)vmid->vmid << VTTBR_VMID_SHIFT;
~z │ │║│ 0000b158: b9400928 ldr w8, [x9, #8]
~z │ │║│ 0000b15c: 2a0803e9 mov w9, w8
z │ │║│ kvm_get_vttbr:340.31 (kvm_mmu.h) sbepe vmid_field = (u64)vmid->vmid ║<< VTTBR_VMID_SHIFT;
~z │ │║│ 0000b160: d3503d29 lsl x9, x9, #48
z │ │║│ kvm_get_vttbr:340.13 (kvm_mmu.h) sbepe vmid_field ║= (u64)vmid->vmid << VTTBR_VMID_SHIFT;
~z │ │║│ 0000b164: f90053e9 str x9, [sp, #160]
z │ │║│ kvm_get_vttbr:341.9 (kvm_mmu.h) Sbepe return ║kvm_phys_to_vttbr(baddr) | vmid_field | cnp;
~z │ │║│ 0000b168: f9404fe9 ldr x9, [sp, #152]
z │ │║│ kvm_get_vttbr:341.36 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | ║vmid_field | cnp;
~z │ │║│ 0000b16c: f94053ea ldr x10, [sp, #160]
z │ │║│ kvm_get_vttbr:341.34 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) ║| vmid_field | cnp;
~z │ │║│ 0000b170: aa0a0129 orr x9, x9, x10
z │ │║│ kvm_get_vttbr:341.49 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field | ║cnp;
~z │ │║│ 0000b174: f9404bea ldr x10, [sp, #144]
z │ │║│ kvm_get_vttbr:341.47 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field ║| cnp;
~z │ │║│ 0000b178: aa0a0129 orr x9, x9, x10
-mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb078 0xb17c (DW_OP_breg31 0xb0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb078 0xb17c (DW_OP_breg31 0xa8) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0xa0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x98) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x90) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ │║│ kvm_host_prepare_stage2:105.3 (mem_protect.c) Sbepe ║params->vttbr = kvm_get_vttbr(mmu);
~ │ │║│ 0000b17c: f94037ea ldr x10, [sp, #104]
│ │║│ kvm_host_prepare_stage2:105.17 (mem_protect.c) sbepe params->vttbr ║= kvm_get_vttbr(mmu);
~ │ │║│ 0000b180: f9001949 str x9, [x10, #48]
│ │║│ kvm_host_prepare_stage2:106.32 (mem_protect.c) Sbepe params->vtcr = host_kvm.arch.║vtcr;
~ │ │║│ 0000b184: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ │ │║│ 0000b188: f941f129 ldr x9, [x9, #992]
│ │║│ kvm_host_prepare_stage2:106.3 (mem_protect.c) sbepe ║params->vtcr = host_kvm.arch.vtcr;
~ │ │║│ 0000b18c: f94037ea ldr x10, [sp, #104]
│ │║│ kvm_host_prepare_stage2:106.16 (mem_protect.c) sbepe params->vtcr ║= host_kvm.arch.vtcr;
~ │ │║│ 0000b190: f9001d49 str x9, [x10, #56]
│ │║│ kvm_host_prepare_stage2:107.3 (mem_protect.c) Sbepe ║params->hcr_el2 |= HCR_VM;
~ │ │║│ 0000b194: f94037e9 ldr x9, [sp, #104]
│ │║│ kvm_host_prepare_stage2:107.19 (mem_protect.c) sbepe params->hcr_el2 ║|= HCR_VM;
~ │ │║│ 0000b198: f940152a ldr x10, [x9, #40]
~ │ │║│ 0000b19c: b240014a orr x10, x10, #0x1
~ │ │║│ 0000b1a0: f900152a str x10, [x9, #40]
│ │║│ kvm_host_prepare_stage2:108.23 (mem_protect.c) Sbepe __flush_dcache_area(║params, sizeof(*params));
~ │ │║│ 0000b1a4: f94037e0 ldr x0, [sp, #104]
~ │ │║│ 0000b1a8: 52800808 mov w8, #0x40 // #64
~ │ │║│ 0000b1ac: 2a0803e1 mov w1, w8
│ │║│ kvm_host_prepare_stage2:108.3 (mem_protect.c) sbepe ║__flush_dcache_area(params, sizeof(*params));
~ │ │║│ 0000b1b0: 97fff9fe bl 99a8 <__flush_dcache_area>
│ │║│
│ │║│ kvm_host_prepare_stage2:109.2 (mem_protect.c) Sbepe }
~ │ │║│ ┌─0000b1b4: 14000001 b b1b8 <kvm_host_prepare_stage2+0x29c> <- 0000b1b0(bl-succ)<return>
│ │║│ │
│ │║│ │ kvm_host_prepare_stage2:103.32 (mem_protect.c) Sbepe for (i = 0; i < hyp_nr_cpus; i║++) {
~ │ │║│ └>0000b1b8: b94063e8 ldr w8, [sp, #96] <- 0000b1b4(b)<kvm_host_prepare_stage2+0x29c>
~ │ │║│ 0000b1bc: 11000508 add w8, w8, #0x1
~ │ │║│ 0000b1c0: b90063e8 str w8, [sp, #96]
│ │║│ kvm_host_prepare_stage2:103.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_nr_cpus; i++) {
~ │ │╚╪═════0000b1c4: 17ffff93 b b010 <kvm_host_prepare_stage2+0xf4>
│ │ │
│ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) Sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
~ │ │ └──>┌─0000b1c8: 14000001 b b1cc <kvm_host_prepare_stage2+0x2b0> <- 0000b020(b.cc)<kvm_host_prepare_stage2+0x2ac>
│ │ │
│ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb1cc 0xb220 (DW_OP_breg31 0x30) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
~ │ │ ┌─└>0000b1cc: 14000001 b b1d0 <kvm_host_prepare_stage2+0x2b4> <- 0000b1c8(b)<kvm_host_prepare_stage2+0x2b0>
│ │ │
~ │ │ └──>0000b1d0: aa1f03e8 mov x8, xzr <- 0000b1cc(b)<kvm_host_prepare_stage2+0x2b4>
│ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
+__vpp_verify var pointer(const(no type)) 0xb1d4 0xb1dc (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
~ │ │ 0000b1d4: f90017e8 str x8, [sp, #40]
~ │ │ ┌─0000b1d8: 14000001 b b1dc <kvm_host_prepare_stage2+0x2c0>
-__vpp_verify var pointer(const(no type)) 0xb1d4 0xb1dc (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
│ │ │
│ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
+__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb1dc 0xb204 (DW_OP_breg31 0x18) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
~ │ │ └>0000b1dc: d0000068 adrp x8, 19000 <kvm_host_data> <- 0000b1d8(b)<kvm_host_prepare_stage2+0x2c0>
~ │ │ 0000b1e0: 91386108 add x8, x8, #0xe18
~ │ │ 0000b1e4: f9000fe8 str x8, [sp, #24]
~ │ │ 0000b1e8: f9400fe8 ldr x8, [sp, #24]
~ │ │ 0000b1ec: f90003e8 str x8, [sp]
~ │ │ 0000b1f0: 940000c5 bl b504 <__hyp_my_cpu_offset>
│ │
~ │ │ 0000b1f4: f94003e8 ldr x8, [sp] <- 0000b1f0(bl-succ)<return>
~ │ │ 0000b1f8: 8b000108 add x8, x8, x0
~ │ │ 0000b1fc: f9000be8 str x8, [sp, #16]
~ │ │ 0000b200: f9400be8 ldr x8, [sp, #16]
-__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb1dc 0xb204 (DW_OP_breg31 0x18) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
│ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
+__vpp_verify var pointer(const(no type)) 0xb204 0xb208 (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
~ │ │ 0000b204: f90013e8 str x8, [sp, #32]
-__vpp_verify var pointer(const(no type)) 0xb204 0xb208 (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
│ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
~ │ │ 0000b208: f94013e8 ldr x8, [sp, #32]
│ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
~ │ │ 0000b20c: f9401508 ldr x8, [x8, #40]
~ │ │ 0000b210: f9001be8 str x8, [sp, #48]
~ │ │ 0000b214: f9401be8 ldr x8, [sp, #48]
~ │ │ 0000b218: d51c1108 msr hcr_el2, x8
~ │ │ ┌─0000b21c: 14000001 b b220 <kvm_host_prepare_stage2+0x304>
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb1cc 0xb220 (DW_OP_breg31 0x30) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111
│ │ │
│ │ │ kvm_host_prepare_stage2:112.50 (mem_protect.c) Sbepe __load_stage2(&host_kvm.arch.mmu, host_kvm.arch.║vtcr);
~ │ │ └>0000b220: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b21c(b)<kvm_host_prepare_stage2+0x304>
~ │ │ 0000b224: 910ec108 add x8, x8, #0x3b0
~ │ │ 0000b228: f9401909 ldr x9, [x8, #48]
~ │ │ 0000b22c: f81983a8 stur x8, [x29, #-104]
~ │ │ 0000b230: f81903a9 stur x9, [x29, #-112]
g: 0xb234 0xb364 __load_stage2 inlined from kvm_host_prepare_stage2:112 (mem_protect.c) <98843>:
g │ │ __load_stage2:350.2 (kvm_mmu.h) Sbepe ║write_sysreg(vtcr, vtcr_el2);
+mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb234 0xb364 (DW_OP_fbreg -0x68) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+vtcr param long unsigned int (base type, DW_ATE_unsigned size:8) 0xb234 0xb364 (DW_OP_fbreg -0x70) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb234 0xb244 (DW_OP_fbreg -0x78) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~g │ │ 0000b234: f85903a8 ldur x8, [x29, #-112]
~g │ │ 0000b238: f81883a8 stur x8, [x29, #-120]
~g │ │ 0000b23c: f85883a8 ldur x8, [x29, #-120]
~g │ │ 0000b240: d51c2148 msr vtcr_el2, x8
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb234 0xb244 (DW_OP_fbreg -0x78) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
g │ │ __load_stage2:351.2 (kvm_mmu.h) Sbepe ║write_sysreg(kvm_get_vttbr(mmu), vttbr_el2);
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb244 0xb35c (DW_OP_fbreg -0x80) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~g │ │ 0000b244: f85983a8 ldur x8, [x29, #-104]
~g │ │ 0000b248: f81c03a8 stur x8, [x29, #-64]
h: 0xb24c 0xb350 kvm_get_vttbr inlined from __load_stage2:351 (kvm_mmu.h) <98896>:<lexical_block>:<98843>:
gh │ │ kvm_get_vttbr:335.27 (kvm_mmu.h) Sbepe struct kvm_vmid *vmid = &║mmu->vmid;
+mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb24c 0xb350 (DW_OP_fbreg -0x40) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb24c 0xb350 (DW_OP_fbreg -0x48) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x50) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x58) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x60) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~gh │ │ 0000b24c: f85c03a8 ldur x8, [x29, #-64]
gh │ │ kvm_get_vttbr:335.19 (kvm_mmu.h) sbepe struct kvm_vmid *║vmid = &mmu->vmid;
~gh │ │ 0000b250: f81b83a8 stur x8, [x29, #-72]
~gh │ │ 0000b254: 528001ea mov w10, #0xf // #15
~gh │ │ 0000b258: b81c83aa stur w10, [x29, #-56]
i: 0xb25c 0xb318 cpus_have_const_cap inlined from system_supports_cnp:694 (cpufeature.h) <988ec>:<988d7>:<98896>:<lexical_block>:<98843>:
j: 0xb25c 0xb318 system_supports_cnp inlined from kvm_get_vttbr:337 (kvm_mmu.h) <988d7>:<98896>:<lexical_block>:<98843>:
ghij │ │ 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) 0xb25c 0xb318 (DW_OP_fbreg -0x38) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ghij │ │ 0000b25c: b85c83aa ldur w10, [x29, #-56]
~ghij │ │ 0000b260: b81d03aa stur w10, [x29, #-48]
k: 0xb264 0xb30c cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>:
l: 0xb264 0xb28c system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98926>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>:
ghijkl │ │ 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) 0xb264 0xb30c (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb264 0xb28c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ghijkl │ │ 0000b264: 90000088 adrp x8, 1b000 <hyp_memory+0x460>
~ghijkl │ │ 0000b268: b947990a ldr w10, [x8, #1944]
~ghijkl │ │ 0000b26c: 7100014a subs w10, w10, #0x0
~ghijkl │ │ 0000b270: 1a9f07eb cset w11, ne // ne = any
~ghijkl │ │ 0000b274: 381e43ab sturb w11, [x29, #-28]
ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~ghijkl │ │ 0000b278: 385e43ab ldurb w11, [x29, #-28]
~ghijkl │ │ 0000b27c: 2a0b03e8 mov w8, w11
~ghijkl │ │ 0000b280: 92400108 and x8, x8, #0x1
ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~ghijkl │ │ 0000b284: f81d83a8 stur x8, [x29, #-40]
ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~ghijkl │ │ 0000b288: f85d83a8 ldur x8, [x29, #-40]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb264 0xb28c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
ghijk │ │ cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized())
~ghijk │ │ ┌────0000b28c: b4000388 cbz x8, b2fc <kvm_host_prepare_stage2+0x3e0>
│ │ │
~ghijk │ │ │ ┌─0000b290: 14000001 b b294 <kvm_host_prepare_stage2+0x378> <- 0000b28c(b.cc-succ)<fallthrough>
│ │ │ │
ghijk │ │ │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num);
~ghijk │ │ │ └>0000b294: b85d03a8 ldur w8, [x29, #-48] <- 0000b290(b)<kvm_host_prepare_stage2+0x378>
~ghijk │ │ │ 0000b298: b81f83a8 stur w8, [x29, #-8]
m: 0xb29c 0xb2fc (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98952>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>:
ghijkm │ │ │ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS)
+num param int (base type, DW_ATE_signed size:4) 0xb29c 0xb2fc (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ghijkm │ │ │ 0000b29c: b85f83a8 ldur w8, [x29, #-8]
ghijkm │ │ │ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS)
~ghijkm │ │ │ 0000b2a0: 7100f508 subs w8, w8, #0x3d
~ghijkm │ │ │ ┌──0000b2a4: 540000ab b.lt b2b8 <kvm_host_prepare_stage2+0x39c> // b.tstop
│ │ │ │
~ghijkm │ │ │ │┌─0000b2a8: 14000001 b b2ac <kvm_host_prepare_stage2+0x390> <- 0000b2a4(b.cc-succ)<fallthrough>
│ │ │ ││
~ghijkm │ │ │ │└>0000b2ac: 2a1f03e8 mov w8, wzr <- 0000b2a8(b)<kvm_host_prepare_stage2+0x390>
ghijkm │ │ │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false;
~ghijkm │ │ │ │ 0000b2b0: 381ff3a8 sturb w8, [x29, #-1]
~ghijkm │ │ │┌┼──0000b2b4: 14000013 b b300 <kvm_host_prepare_stage2+0x3e4>
│ │ │││
ghijkm │ │ │││ __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)) 0xb2b8 0xb2ec (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ghijkm │ │ ││└─>0000b2b8: b89f83a8 ldursw x8, [x29, #-8] <- 0000b2a4(b.cc)<kvm_host_prepare_stage2+0x39c>
~ghijkm │ │ ││ 0000b2bc: d37ced08 lsl x8, x8, #4
~ghijkm │ │ ││ 0000b2c0: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ghijkm │ │ ││ 0000b2c4: 911e8129 add x9, x9, #0x7a0
~ghijkm │ │ ││ 0000b2c8: b868692a ldr w10, [x9, x8]
~ghijkm │ │ ││ 0000b2cc: 7100014a subs w10, w10, #0x0
~ghijkm │ │ ││ 0000b2d0: 1a9f07eb cset w11, ne // ne = any
~ghijkm │ │ ││ 0000b2d4: 381f43ab sturb w11, [x29, #-12]
ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~ghijkm │ │ ││ 0000b2d8: 385f43ab ldurb w11, [x29, #-12]
~ghijkm │ │ ││ 0000b2dc: 2a0b03e8 mov w8, w11
~ghijkm │ │ ││ 0000b2e0: 92400108 and x8, x8, #0x1
ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~ghijkm │ │ ││ 0000b2e4: f81e83a8 stur x8, [x29, #-24]
ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~ghijkm │ │ ││ 0000b2e8: f85e83a8 ldur x8, [x29, #-24]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb2b8 0xb2ec (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~ghijkm │ │ ││ 0000b2ec: f1000108 subs x8, x8, #0x0
~ghijkm │ │ ││ 0000b2f0: 1a9f07eb cset w11, ne // ne = any
ghijkm │ │ ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]);
~ghijkm │ │ ││ 0000b2f4: 381ff3ab sturb w11, [x29, #-1]
~ghijkm │ │ ││ ┌─0000b2f8: 14000002 b b300 <kvm_host_prepare_stage2+0x3e4>
-num param int (base type, DW_ATE_signed size:4) 0xb29c 0xb2fc (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ │ ││ │
ghijk │ │ ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG();
~ghijk │ │ └┼─┼>0000b2fc: d4210000 brk #0x800 <- 0000b28c(b.cc)<kvm_host_prepare_stage2+0x3e0>
│ │ │ │
n: 0xb300 0xb304 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98952>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>:
ghijkn │ │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║}
+num param int (base type, DW_ATE_signed size:4) 0xb300 0xb304 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ghijkn │ │ └>└>0000b300: 385ff3a8 ldurb w8, [x29, #-1] <- 0000b2b4(b)<kvm_host_prepare_stage2+0x3e4>,0000b2f8(b)<kvm_host_prepare_stage2+0x3e4>
-num param int (base type, DW_ATE_signed size:4) 0xb300 0xb304 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
ghijk │ │ cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num);
~ghijk │ │ 0000b304: 381d73a8 sturb w8, [x29, #-41]
ghijk │ │ cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║}
~ghijk │ │ 0000b308: 385d73a8 ldurb w8, [x29, #-41]
-num param int (base type, DW_ATE_signed size:4) 0xb264 0xb30c (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
ghij │ │ cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num);
~ghij │ │ 0000b30c: 381cf3a8 sturb w8, [x29, #-49]
ghij │ │ cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║}
~ghij │ │ 0000b310: 385cf3a8 ldurb w8, [x29, #-49]
~ghij │ │ 0000b314: 2a0803e9 mov w9, w8
-num param int (base type, DW_ATE_signed size:4) 0xb25c 0xb318 (DW_OP_fbreg -0x38) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
gh │ │ kvm_get_vttbr:337.6 (kvm_mmu.h) Sbepe u64 ║cnp = system_supports_cnp() ? VTTBR_CNP_BIT : 0;
~gh │ │ 0000b318: f81a03a9 stur x9, [x29, #-96]
gh │ │ kvm_get_vttbr:339.10 (kvm_mmu.h) Sbepe baddr = ║mmu->pgd_phys;
~gh │ │ 0000b31c: f85c03a9 ldur x9, [x29, #-64]
gh │ │ kvm_get_vttbr:339.15 (kvm_mmu.h) sbepe baddr = mmu->║pgd_phys;
~gh │ │ 0000b320: f9400929 ldr x9, [x9, #16]
gh │ │ kvm_get_vttbr:339.8 (kvm_mmu.h) sbepe baddr ║= mmu->pgd_phys;
~gh │ │ 0000b324: f81a83a9 stur x9, [x29, #-88]
gh │ │ kvm_get_vttbr:340.20 (kvm_mmu.h) Sbepe vmid_field = (u64)║vmid->vmid << VTTBR_VMID_SHIFT;
~gh │ │ 0000b328: f85b83a9 ldur x9, [x29, #-72]
gh │ │ kvm_get_vttbr:340.15 (kvm_mmu.h) sbepe vmid_field = ║(u64)vmid->vmid << VTTBR_VMID_SHIFT;
~gh │ │ 0000b32c: b9400928 ldr w8, [x9, #8]
~gh │ │ 0000b330: 2a0803e9 mov w9, w8
gh │ │ kvm_get_vttbr:340.31 (kvm_mmu.h) sbepe vmid_field = (u64)vmid->vmid ║<< VTTBR_VMID_SHIFT;
~gh │ │ 0000b334: d3503d29 lsl x9, x9, #48
gh │ │ kvm_get_vttbr:340.13 (kvm_mmu.h) sbepe vmid_field ║= (u64)vmid->vmid << VTTBR_VMID_SHIFT;
~gh │ │ 0000b338: f81b03a9 stur x9, [x29, #-80]
gh │ │ kvm_get_vttbr:341.9 (kvm_mmu.h) Sbepe return ║kvm_phys_to_vttbr(baddr) | vmid_field | cnp;
~gh │ │ 0000b33c: f85a83a9 ldur x9, [x29, #-88]
gh │ │ kvm_get_vttbr:341.36 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | ║vmid_field | cnp;
~gh │ │ 0000b340: f85b03aa ldur x10, [x29, #-80]
gh │ │ kvm_get_vttbr:341.34 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) ║| vmid_field | cnp;
~gh │ │ 0000b344: aa0a0129 orr x9, x9, x10
gh │ │ kvm_get_vttbr:341.49 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field | ║cnp;
~gh │ │ 0000b348: f85a03aa ldur x10, [x29, #-96]
gh │ │ kvm_get_vttbr:341.47 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field ║| cnp;
~gh │ │ 0000b34c: aa0a0129 orr x9, x9, x10
-mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb24c 0xb350 (DW_OP_fbreg -0x40) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb24c 0xb350 (DW_OP_fbreg -0x48) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x50) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x58) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x60) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
g │ │ __load_stage2:351.2 (kvm_mmu.h) Sbepe ║write_sysreg(kvm_get_vttbr(mmu), vttbr_el2);
~g │ │ 0000b350: f81803a9 stur x9, [x29, #-128]
~g │ │ 0000b354: f85803a9 ldur x9, [x29, #-128]
~g │ │ 0000b358: d51c2109 msr vttbr_el2, x9
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb244 0xb35c (DW_OP_fbreg -0x80) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
g │ │ __load_stage2:358.2 (kvm_mmu.h) Sbepe ║asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT));
~g │ │ 0000b35c: d503201f nop
~g │ │ 0000b360: 2a1f03e8 mov w8, wzr
-mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb234 0xb364 (DW_OP_fbreg -0x68) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-vtcr param long unsigned int (base type, DW_ATE_unsigned size:8) 0xb234 0xb364 (DW_OP_fbreg -0x70) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ │ kvm_host_prepare_stage2:114.2 (mem_protect.c) Sbepe ║return 0;
~ │ │ 0000b364: b9008fe8 str w8, [sp, #140]
~ │ │ ┌─0000b368: 14000001 b b36c <kvm_host_prepare_stage2+0x450>
│ │ │
│ │ │ kvm_host_prepare_stage2:115.1 (mem_protect.c) Sbepe ║}
~ └>└────>└>0000b36c: b9408fe0 ldr w0, [sp, #140] <- 0000af84(b)<kvm_host_prepare_stage2+0x450>,0000afb8(b)<kvm_host_prepare_stage2+0x450>,0000b368(b)<kvm_host_prepare_stage2+0x450>
~ 0000b370: f940c3fc ldr x28, [sp, #384]
~ 0000b374: a9577bfd ldp x29, x30, [sp, #368]
~ 0000b378: 910643ff add sp, sp, #0x190
0000af2c CFA:r29+32 r28:c-16 r29:c-32 r30:c-24
~ 0000b37c: d65f03c0 ret
-mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79
-dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79
-mmu var pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xaf1c 0xb380 (DW_OP_breg31 0x70) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:81
-params var pointer(struct kvm_nvhe_init_params<89e06>/<98494>) 0xaf1c 0xb380 (DW_OP_breg31 0x68) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:82
-ret var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x64) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83
-i var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x60) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83
**0000b380 <prepare_host_vtcr>:
+ prepare_host_vtcr params: none
prepare_host_vtcr:65.0 (mem_protect.c) Sbepe ║{
+parange var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x4) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66
+phys_shift var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66
+mmfr0 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x10) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67
+mmfr1 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67
~ 0000b380: d100c3ff sub sp, sp, #0x30 <- 0000af40(bl)<prepare_host_vtcr>
~ 0000b384: a9027bfd stp x29, x30, [sp, #32]
0000b380 CFA:r31 r29:u r30:u
~ 0000b388: 910083fd add x29, sp, #0x20
prepare_host_vtcr:69.41 (mem_protect.c) SbePe mmfr0 = arm64_ftr_reg_id_aa64mmfr0_el1.║sys_val;
~ 0000b38c: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000b390: f944ed08 ldr x8, [x8, #2520]
prepare_host_vtcr:69.8 (mem_protect.c) sbepe mmfr0 ║= arm64_ftr_reg_id_aa64mmfr0_el1.sys_val;
~ 0000b394: f9000be8 str x8, [sp, #16]
prepare_host_vtcr:70.41 (mem_protect.c) Sbepe mmfr1 = arm64_ftr_reg_id_aa64mmfr1_el1.║sys_val;
~ 0000b398: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000b39c: f9450508 ldr x8, [x8, #2568]
prepare_host_vtcr:70.8 (mem_protect.c) sbepe mmfr1 ║= arm64_ftr_reg_id_aa64mmfr1_el1.sys_val;
~ 0000b3a0: f90007e8 str x8, [sp, #8]
prepare_host_vtcr:73.28 (mem_protect.c) Sbepe parange = kvm_get_parange(║mmfr0);
~ 0000b3a4: f9400be0 ldr x0, [sp, #16]
prepare_host_vtcr:73.12 (mem_protect.c) sbepe parange = ║kvm_get_parange(mmfr0);
~ 0000b3a8: 94000111 bl b7ec <kvm_get_parange>
prepare_host_vtcr:73.10 (mem_protect.c) sbepe parange ║= kvm_get_parange(mmfr0);
~ 0000b3ac: b81fc3a0 stur w0, [x29, #-4] <- 0000b3a8(bl-succ)<return>
prepare_host_vtcr:74.50 (mem_protect.c) Sbepe phys_shift = id_aa64mmfr0_parange_to_phys_shift(║parange);
~ 0000b3b0: b85fc3a0 ldur w0, [x29, #-4]
prepare_host_vtcr:74.15 (mem_protect.c) sbepe phys_shift = ║id_aa64mmfr0_parange_to_phys_shift(parange);
~ 0000b3b4: 94000132 bl b87c <id_aa64mmfr0_parange_to_phys_shift>
prepare_host_vtcr:74.13 (mem_protect.c) sbepe phys_shift ║= id_aa64mmfr0_parange_to_phys_shift(parange);
~ 0000b3b8: b81f83a0 stur w0, [x29, #-8] <- 0000b3b4(bl-succ)<return>
prepare_host_vtcr:76.36 (mem_protect.c) Sbepe host_kvm.arch.vtcr = kvm_get_vtcr(║mmfr0, mmfr1, phys_shift);
~ 0000b3bc: f9400be0 ldr x0, [sp, #16]
prepare_host_vtcr:76.43 (mem_protect.c) sbepe host_kvm.arch.vtcr = kvm_get_vtcr(mmfr0, ║mmfr1, phys_shift);
~ 0000b3c0: f94007e1 ldr x1, [sp, #8]
prepare_host_vtcr:76.50 (mem_protect.c) sbepe host_kvm.arch.vtcr = kvm_get_vtcr(mmfr0, mmfr1, ║phys_shift);
~ 0000b3c4: b85f83a2 ldur w2, [x29, #-8]
prepare_host_vtcr:76.23 (mem_protect.c) sbepe host_kvm.arch.vtcr = ║kvm_get_vtcr(mmfr0, mmfr1, phys_shift);
~ 0000b3c8: 94000156 bl b920 <kvm_get_vtcr>
prepare_host_vtcr:76.21 (mem_protect.c) sbepe host_kvm.arch.vtcr ║= kvm_get_vtcr(mmfr0, mmfr1, phys_shift);
~ 0000b3cc: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b3c8(bl-succ)<return>
~ 0000b3d0: f901f100 str x0, [x8, #992]
prepare_host_vtcr:77.1 (mem_protect.c) Sbepe ║}
~ 0000b3d4: a9427bfd ldp x29, x30, [sp, #32]
~ 0000b3d8: 9100c3ff add sp, sp, #0x30
0000b38c CFA:r29+16 r29:c-16 r30:c-8
~ 0000b3dc: d65f03c0 ret
-parange var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x4) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66
-phys_shift var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66
-mmfr0 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x10) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67
-mmfr1 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67
**0000b3e0 <prepare_s2_pools>:
+ prepare_s2_pools params:
+mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10)
+dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18)
prepare_s2_pools:39.0 (mem_protect.c) Sbepe ║{
+mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
+dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
+nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb3e0 0xb504 (DW_OP_breg31 0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:40
+ret var int (base type, DW_ATE_signed size:4) 0xb3e0 0xb504 (DW_OP_breg31 0xc) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:41
~ 0000b3e0: d10103ff sub sp, sp, #0x40 <- 0000af68(bl)<prepare_s2_pools>
~ 0000b3e4: a9037bfd stp x29, x30, [sp, #48]
0000b3e0 CFA:r31 r29:u r30:u
~ 0000b3e8: 9100c3fd add x29, sp, #0x30
~ 0000b3ec: f81f03a0 stur x0, [x29, #-16]
~ 0000b3f0: f9000fe1 str x1, [sp, #24]
prepare_s2_pools:43.13 (mem_protect.c) SbePe nr_pages = ║host_s2_mem_pgtable_size() >> PAGE_SHIFT;
~ 0000b3f4: 940001ad bl baa8 <host_s2_mem_pgtable_size>
prepare_s2_pools:43.40 (mem_protect.c) sbepe nr_pages = host_s2_mem_pgtable_size() ║>> PAGE_SHIFT;
~ 0000b3f8: d34cfc08 lsr x8, x0, #12 <- 0000b3f4(bl-succ)<return>
prepare_s2_pools:43.11 (mem_protect.c) sbepe nr_pages ║= host_s2_mem_pgtable_size() >> PAGE_SHIFT;
~ 0000b3fc: f9000be8 str x8, [sp, #16]
prepare_s2_pools:44.36 (mem_protect.c) Sbepe ret = hyp_pool_init(&host_s2_mem, ║__hyp_pa(mem_pgt_pool), nr_pages, 0);
~ 0000b400: f85f03a8 ldur x8, [x29, #-16]
~ 0000b404: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000b408: f9439d29 ldr x9, [x9, #1848]
~ 0000b40c: 8b090101 add x1, x8, x9
prepare_s2_pools:44.60 (mem_protect.c) sbepe ret = hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), ║nr_pages, 0);
~ 0000b410: b94013e2 ldr w2, [sp, #16]
prepare_s2_pools:44.8 (mem_protect.c) sbepe ret = ║hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), nr_pages, 0);
~ 0000b414: 90000080 adrp x0, 1b000 <hyp_memory+0x460>
~ 0000b418: 91168000 add x0, x0, #0x5a0
~ 0000b41c: 2a1f03e3 mov w3, wzr
~ 0000b420: 97fff7cf bl 935c <hyp_pool_init>
prepare_s2_pools:44.6 (mem_protect.c) sbepe ret ║= hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), nr_pages, 0);
~ 0000b424: b9000fe0 str w0, [sp, #12] <- 0000b420(bl-succ)<return>
prepare_s2_pools:45.6 (mem_protect.c) Sbepe if (║ret)
~ 0000b428: b9400fea ldr w10, [sp, #12]
prepare_s2_pools:45.6 (mem_protect.c) sbepe if (║ret)
~ ┌──0000b42c: 340000aa cbz w10, b440 <prepare_s2_pools+0x60>
│
~ │┌─0000b430: 14000001 b b434 <prepare_s2_pools+0x54> <- 0000b42c(b.cc-succ)<fallthrough>
││
││ prepare_s2_pools:46.10 (mem_protect.c) Sbepe return ║ret;
~ │└>0000b434: b9400fe8 ldr w8, [sp, #12] <- 0000b430(b)<prepare_s2_pools+0x54>
│ prepare_s2_pools:46.3 (mem_protect.c) sbepe ║return ret;
~ │ 0000b438: b81fc3a8 stur w8, [x29, #-4]
~ ┌──┼──0000b43c: 1400002e b b4f4 <prepare_s2_pools+0x114>
│ │
│ │ prepare_s2_pools:48.13 (mem_protect.c) Sbepe nr_pages = ║host_s2_dev_pgtable_size() >> PAGE_SHIFT;
~ │ └─>0000b440: 940001b1 bl bb04 <host_s2_dev_pgtable_size> <- 0000b42c(b.cc)<prepare_s2_pools+0x60>
│
│ prepare_s2_pools:48.40 (mem_protect.c) sbepe nr_pages = host_s2_dev_pgtable_size() ║>> PAGE_SHIFT;
~ │ 0000b444: d34cfc08 lsr x8, x0, #12 <- 0000b440(bl-succ)<return>
│ prepare_s2_pools:48.11 (mem_protect.c) sbepe nr_pages ║= host_s2_dev_pgtable_size() >> PAGE_SHIFT;
~ │ 0000b448: f9000be8 str x8, [sp, #16]
│ prepare_s2_pools:49.36 (mem_protect.c) Sbepe ret = hyp_pool_init(&host_s2_dev, ║__hyp_pa(dev_pgt_pool), nr_pages, 0);
~ │ 0000b44c: f9400fe8 ldr x8, [sp, #24]
~ │ 0000b450: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ │ 0000b454: f9439d29 ldr x9, [x9, #1848]
~ │ 0000b458: 8b090101 add x1, x8, x9
│ prepare_s2_pools:49.60 (mem_protect.c) sbepe ret = hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), ║nr_pages, 0);
~ │ 0000b45c: b94013e2 ldr w2, [sp, #16]
│ prepare_s2_pools:49.8 (mem_protect.c) sbepe ret = ║hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), nr_pages, 0);
~ │ 0000b460: 90000080 adrp x0, 1b000 <hyp_memory+0x460>
~ │ 0000b464: 9119e000 add x0, x0, #0x678
~ │ 0000b468: 2a1f03e3 mov w3, wzr
~ │ 0000b46c: 97fff7bc bl 935c <hyp_pool_init>
│
│ prepare_s2_pools:49.6 (mem_protect.c) sbepe ret ║= hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), nr_pages, 0);
~ │ 0000b470: b9000fe0 str w0, [sp, #12] <- 0000b46c(bl-succ)<return>
│ prepare_s2_pools:50.6 (mem_protect.c) Sbepe if (║ret)
~ │ 0000b474: b9400fea ldr w10, [sp, #12]
│ prepare_s2_pools:50.6 (mem_protect.c) sbepe if (║ret)
~ │ ┌──0000b478: 340000aa cbz w10, b48c <prepare_s2_pools+0xac>
│ │
~ │ │┌─0000b47c: 14000001 b b480 <prepare_s2_pools+0xa0> <- 0000b478(b.cc-succ)<fallthrough>
│ ││
│ ││ prepare_s2_pools:51.10 (mem_protect.c) Sbepe return ║ret;
~ │ │└>0000b480: b9400fe8 ldr w8, [sp, #12] <- 0000b47c(b)<prepare_s2_pools+0xa0>
│ │ prepare_s2_pools:51.3 (mem_protect.c) sbepe ║return ret;
~ │ │ 0000b484: b81fc3a8 stur w8, [x29, #-4]
~ │ ┌┼──0000b488: 1400001b b b4f4 <prepare_s2_pools+0x114>
│ ││
│ ││ prepare_s2_pools:53.37 (mem_protect.c) Sbepe host_kvm.mm_ops.zalloc_pages_exact ║= host_s2_zalloc_pages_exact;
~ │ │└─>0000b48c: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b478(b.cc)<prepare_s2_pools+0xac>
~ │ │ 0000b490: 91156108 add x8, x8, #0x558
~ │ │ 0000b494: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4>
~ │ │ 0000b498: 912d6129 add x9, x9, #0xb58
~ │ │ 0000b49c: f9000509 str x9, [x8, #8]
│ │ prepare_s2_pools:54.30 (mem_protect.c) Sbepe host_kvm.mm_ops.zalloc_page ║= host_s2_zalloc_page;
~ │ │ 0000b4a0: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4>
~ │ │ 0000b4a4: 912ff129 add x9, x9, #0xbfc
~ │ │ 0000b4a8: f9000109 str x9, [x8]
│ │ prepare_s2_pools:55.31 (mem_protect.c) Sbepe host_kvm.mm_ops.phys_to_virt ║= hyp_phys_to_virt;
~ │ │ 0000b4ac: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4>
~ │ │ 0000b4b0: 9130a129 add x9, x9, #0xc28
~ │ │ 0000b4b4: f9001909 str x9, [x8, #48]
│ │ prepare_s2_pools:56.31 (mem_protect.c) Sbepe host_kvm.mm_ops.virt_to_phys ║= hyp_virt_to_phys;
~ │ │ 0000b4b8: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4>
~ │ │ 0000b4bc: 91312129 add x9, x9, #0xc48
~ │ │ 0000b4c0: f9001d09 str x9, [x8, #56]
│ │ prepare_s2_pools:57.29 (mem_protect.c) Sbepe host_kvm.mm_ops.page_count ║= hyp_page_count;
~ │ │ 0000b4c4: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4>
~ │ │ 0000b4c8: 9131a129 add x9, x9, #0xc68
~ │ │ 0000b4cc: f9001509 str x9, [x8, #40]
│ │ prepare_s2_pools:58.27 (mem_protect.c) Sbepe host_kvm.mm_ops.get_page ║= hyp_get_page;
~ │ │ 0000b4d0: d0ffffe9 adrp x9, 9000 <__hyp_attach_page+0x4>
~ │ │ 0000b4d4: 91052129 add x9, x9, #0x148
~ │ │ 0000b4d8: f9000d09 str x9, [x8, #24]
│ │ prepare_s2_pools:59.27 (mem_protect.c) Sbepe host_kvm.mm_ops.put_page ║= hyp_put_page;
~ │ │ 0000b4dc: b0ffffe9 adrp x9, 8000 <psci_1_0_handler+0x7c>
~ │ │ 0000b4e0: 913c2129 add x9, x9, #0xf08
~ │ │ 0000b4e4: f9001109 str x9, [x8, #32]
~ │ │ 0000b4e8: 2a1f03ea mov w10, wzr
│ │ prepare_s2_pools:61.2 (mem_protect.c) Sbepe ║return 0;
~ │ │ 0000b4ec: b81fc3aa stur w10, [x29, #-4]
~ │ │ ┌─0000b4f0: 14000001 b b4f4 <prepare_s2_pools+0x114>
│ │ │
│ │ │ prepare_s2_pools:62.1 (mem_protect.c) Sbepe ║}
~ └>└>└>0000b4f4: b85fc3a0 ldur w0, [x29, #-4] <- 0000b43c(b)<prepare_s2_pools+0x114>,0000b488(b)<prepare_s2_pools+0x114>,0000b4f0(b)<prepare_s2_pools+0x114>
~ 0000b4f8: a9437bfd ldp x29, x30, [sp, #48]
~ 0000b4fc: 910103ff add sp, sp, #0x40
0000b3ec CFA:r29+16 r29:c-16 r30:c-8
~ 0000b500: d65f03c0 ret
-mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
-dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
-nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb3e0 0xb504 (DW_OP_breg31 0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:40
-ret var int (base type, DW_ATE_signed size:4) 0xb3e0 0xb504 (DW_OP_breg31 0xc) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:41
**0000b504 <__hyp_my_cpu_offset>:
+ __hyp_my_cpu_offset params: none
__hyp_my_cpu_offset:23.0 (percpu.h) Sbepe ║{
0000b504 CFA:r31
~ 0000b504: d10043ff sub sp, sp, #0x10 <- 0000b1f0(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))) 0xb508 0xb51c (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28
~ 0000b508: d53cd048 mrs x8, tpidr_el2
~ 0000b50c: f90007e8 str x8, [sp, #8]
~ 0000b510: f94007e8 ldr x8, [sp, #8]
~ 0000b514: f90003e8 str x8, [sp]
~ 0000b518: f94003e0 ldr x0, [sp]
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb508 0xb51c (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28
__hyp_my_cpu_offset:28.2 (percpu.h) sbepe ║return read_sysreg(tpidr_el2);
~ 0000b51c: 910043ff add sp, sp, #0x10
0000b508 CFA:r31+16
~ 0000b520: d65f03c0 ret
**0000b524 <handle_host_mem_abort>:
+ handle_host_mem_abort params:
+host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8)
handle_host_mem_abort:177.0 (mem_protect.c) Sbepe ║{
+host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:176
+prot var enum kvm_pgtable_prot<89e06>/<98455> 0xb524 0xb5b4 (DW_OP_fbreg -0xc) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:178
+far var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x18) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
+hpfar var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
+esr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x28) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
+ipa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
+ret var int (base type, DW_ATE_signed size:4) 0xb524 0xb5b4 (DW_OP_breg31 0x1c) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:180
~ 0000b524: d10183ff sub sp, sp, #0x60 <- 00007084(bl)<handle_host_mem_abort>
~ 0000b528: a9057bfd stp x29, x30, [sp, #80]
0000b524 CFA:r31 r29:u r30:u
~ 0000b52c: 910143fd add x29, sp, #0x50
~ 0000b530: f81f83a0 stur x0, [x29, #-8]
+reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb534 0xb548 (DW_OP_breg31 0x10) lexblock:handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:182
~ 0000b534: d53c5208 mrs x8, esr_el2
handle_host_mem_abort:182.8 (mem_protect.c) SbePe esr = ║read_sysreg_el2(SYS_ESR);
~ 0000b538: f9000be8 str x8, [sp, #16]
~ 0000b53c: f9400be8 ldr x8, [sp, #16]
~ 0000b540: f90007e8 str x8, [sp, #8]
~ 0000b544: f94007e8 ldr x8, [sp, #8]
-reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb534 0xb548 (DW_OP_breg31 0x10) lexblock:handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:182
handle_host_mem_abort:182.6 (mem_protect.c) sbepe esr ║= read_sysreg_el2(SYS_ESR);
~ 0000b548: f90017e8 str x8, [sp, #40]
handle_host_mem_abort:183.24 (mem_protect.c) Sbepe if (!__get_fault_info(║esr, &far, &hpfar))
~ 0000b54c: f94017e0 ldr x0, [sp, #40]
~ 0000b550: d10063a1 sub x1, x29, #0x18
~ 0000b554: d10083a2 sub x2, x29, #0x20
handle_host_mem_abort:183.7 (mem_protect.c) sbepe if (!║__get_fault_info(esr, &far, &hpfar))
~ 0000b558: 94000017 bl b5b4 <__get_fault_info>
handle_host_mem_abort:183.6 (mem_protect.c) sbepe if (║!__get_fault_info(esr, &far, &hpfar))
~ ┌──0000b55c: 37000060 tbnz w0, #0, b568 <handle_host_mem_abort+0x44> <- 0000b558(bl-succ)<return>
│
~ │┌─0000b560: 14000001 b b564 <handle_host_mem_abort+0x40> <- 0000b55c(b.cc-succ)<fallthrough>
││
││ handle_host_mem_abort:184.3 (mem_protect.c) Sbepe ║hyp_panic();
~ │└>0000b564: 97ffe055 bl 36b8 <hyp_panic> <- 0000b560(b)<handle_host_mem_abort+0x40>
│
~ └─>0000b568: 528000e8 mov w8, #0x7 // #7 <- 0000b55c(b.cc)<handle_host_mem_abort+0x44>,0000b564(bl-succ)<return>
handle_host_mem_abort:186.7 (mem_protect.c) Sbepe prot ║= KVM_PGTABLE_PROT_R | KVM_PGTABLE_PROT_W | KVM_PGTABLE_PROT_X;
~ 0000b56c: b81f43a8 stur w8, [x29, #-12]
handle_host_mem_abort:187.9 (mem_protect.c) Sbepe ipa = (║hpfar & HPFAR_MASK) << 8;
~ 0000b570: f85e03a9 ldur x9, [x29, #-32]
handle_host_mem_abort:187.15 (mem_protect.c) sbepe ipa = (hpfar ║& HPFAR_MASK) << 8;
~ 0000b574: 927ccd29 and x9, x9, #0xfffffffffffff0
handle_host_mem_abort:187.29 (mem_protect.c) sbepe ipa = (hpfar & HPFAR_MASK) ║<< 8;
~ 0000b578: d378dd29 lsl x9, x9, #8
handle_host_mem_abort:187.6 (mem_protect.c) sbepe ipa ║= (hpfar & HPFAR_MASK) << 8;
~ 0000b57c: f90013e9 str x9, [sp, #32]
handle_host_mem_abort:188.24 (mem_protect.c) Sbepe ret = host_stage2_map(║ipa, PAGE_SIZE, prot);
~ 0000b580: f94013e0 ldr x0, [sp, #32]
handle_host_mem_abort:188.40 (mem_protect.c) sbepe ret = host_stage2_map(ipa, PAGE_SIZE, ║prot);
~ 0000b584: b85f43a2 ldur w2, [x29, #-12]
~ 0000b588: 52820008 mov w8, #0x1000 // #4096
~ 0000b58c: 2a0803e1 mov w1, w8
handle_host_mem_abort:188.8 (mem_protect.c) sbepe ret = ║host_stage2_map(ipa, PAGE_SIZE, prot);
~ 0000b590: 94000065 bl b724 <host_stage2_map>
handle_host_mem_abort:188.6 (mem_protect.c) sbepe ret ║= host_stage2_map(ipa, PAGE_SIZE, prot);
~ 0000b594: b9001fe0 str w0, [sp, #28] <- 0000b590(bl-succ)<return>
handle_host_mem_abort:189.6 (mem_protect.c) Sbepe if (║ret)
~ 0000b598: b9401fe8 ldr w8, [sp, #28]
handle_host_mem_abort:189.6 (mem_protect.c) sbepe if (║ret)
~ ┌──0000b59c: 34000068 cbz w8, b5a8 <handle_host_mem_abort+0x84>
│
~ │┌─0000b5a0: 14000001 b b5a4 <handle_host_mem_abort+0x80> <- 0000b59c(b.cc-succ)<fallthrough>
││
││ handle_host_mem_abort:190.3 (mem_protect.c) Sbepe ║hyp_panic();
~ │└>0000b5a4: 97ffe045 bl 36b8 <hyp_panic> <- 0000b5a0(b)<handle_host_mem_abort+0x80>
│
│ handle_host_mem_abort:191.1 (mem_protect.c) Sbepe ║}
~ └─>0000b5a8: a9457bfd ldp x29, x30, [sp, #80] <- 0000b59c(b.cc)<handle_host_mem_abort+0x84>,0000b5a4(bl-succ)<return>
~ 0000b5ac: 910183ff add sp, sp, #0x60
0000b530 CFA:r29+16 r29:c-16 r30:c-8
~ 0000b5b0: d65f03c0 ret
-host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:176
-prot var enum kvm_pgtable_prot<89e06>/<98455> 0xb524 0xb5b4 (DW_OP_fbreg -0xc) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:178
-far var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x18) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
-hpfar var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
-esr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x28) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
-ipa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179
-ret var int (base type, DW_ATE_signed size:4) 0xb524 0xb5b4 (DW_OP_breg31 0x1c) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:180
**0000b5b4 <__get_fault_info>:
+ __get_fault_info params:
+esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30)
+far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28)
+hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20)
__get_fault_info:161.0 (switch.h) Sbepe ║{
+esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
+far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
+hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
~ 0000b5b4: d10203ff sub sp, sp, #0x80 <- 0000b558(bl)<__get_fault_info>
~ 0000b5b8: a9077bfd stp x29, x30, [sp, #112]
0000b5b4 CFA:r31 r29:u r30:u
~ 0000b5bc: 9101c3fd add x29, sp, #0x70
~ 0000b5c0: f9001be0 str x0, [sp, #48]
~ 0000b5c4: f90017e1 str x1, [sp, #40]
~ 0000b5c8: f90013e2 str x2, [sp, #32]
+reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5cc 0xb5e0 (DW_OP_breg31 0x18) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:162
~ 0000b5cc: d53c6008 mrs x8, far_el2
__get_fault_info:162.9 (switch.h) SbePe *far = ║read_sysreg_el2(SYS_FAR);
~ 0000b5d0: f9000fe8 str x8, [sp, #24]
~ 0000b5d4: f9400fe8 ldr x8, [sp, #24]
~ 0000b5d8: f9000be8 str x8, [sp, #16]
~ 0000b5dc: f9400be8 ldr x8, [sp, #16]
-reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5cc 0xb5e0 (DW_OP_breg31 0x18) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:162
__get_fault_info:162.3 (switch.h) sbepe *║far = read_sysreg_el2(SYS_FAR);
~ 0000b5e0: f94017e9 ldr x9, [sp, #40]
__get_fault_info:162.7 (switch.h) sbepe *far ║= read_sysreg_el2(SYS_FAR);
~ 0000b5e4: f9000128 str x8, [x9]
__get_fault_info:175.29 (switch.h) Sbepe if (!(esr & ESR_ELx_S1PTW) &&
~ 0000b5e8: 3940c3ea ldrb w10, [sp, #48]
~ ┌───────0000b5ec: 373807ea tbnz w10, #7, b6e8 <__get_fault_info+0x134>
│
~ │ ┌─0000b5f0: 14000001 b b5f4 <__get_fault_info+0x40> <- 0000b5ec(b.cc-succ)<fallthrough>
│ │
~ │ └>0000b5f4: 528000e8 mov w8, #0x7 // #7 <- 0000b5f0(b)<__get_fault_info+0x40>
~ │ 0000b5f8: b81d03a8 stur w8, [x29, #-48]
o: 0xb5fc 0xb6a4 cpus_have_final_cap inlined from __get_fault_info:176 (switch.h) <98b4e>:
p: 0xb5fc 0xb624 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98b6a>:<98b4e>:
op │ 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) 0xb5fc 0xb6a4 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb5fc 0xb624 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~op │ 0000b5fc: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~op │ 0000b600: b9479928 ldr w8, [x9, #1944]
~op │ 0000b604: 71000108 subs w8, w8, #0x0
~op │ 0000b608: 1a9f07ea cset w10, ne // ne = any
~op │ 0000b60c: 381e43aa sturb w10, [x29, #-28]
op │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~op │ 0000b610: 385e43aa ldurb w10, [x29, #-28]
~op │ 0000b614: 2a0a03e9 mov w9, w10
~op │ 0000b618: 92400129 and x9, x9, #0x1
op │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~op │ 0000b61c: f81d83a9 stur x9, [x29, #-40]
op │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready);
~op │ 0000b620: f85d83a9 ldur x9, [x29, #-40]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb5fc 0xb624 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
o │ cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized())
~o │ ┌────0000b624: b4000389 cbz x9, b694 <__get_fault_info+0xe0>
│ │
~o │ │ ┌─0000b628: 14000001 b b62c <__get_fault_info+0x78> <- 0000b624(b.cc-succ)<fallthrough>
│ │ │
o │ │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num);
~o │ │ └>0000b62c: b85d03a8 ldur w8, [x29, #-48] <- 0000b628(b)<__get_fault_info+0x78>
~o │ │ 0000b630: b81f83a8 stur w8, [x29, #-8]
q: 0xb634 0xb694 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98b96>:<98b4e>:
oq │ │ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS)
+num param int (base type, DW_ATE_signed size:4) 0xb634 0xb694 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~oq │ │ 0000b634: b85f83a8 ldur w8, [x29, #-8]
oq │ │ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS)
~oq │ │ 0000b638: 7100f508 subs w8, w8, #0x3d
~oq │ │ ┌──0000b63c: 540000ab b.lt b650 <__get_fault_info+0x9c> // b.tstop
│ │ │
~oq │ │ │┌─0000b640: 14000001 b b644 <__get_fault_info+0x90> <- 0000b63c(b.cc-succ)<fallthrough>
│ │ ││
~oq │ │ │└>0000b644: 2a1f03e8 mov w8, wzr <- 0000b640(b)<__get_fault_info+0x90>
oq │ │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false;
~oq │ │ │ 0000b648: 381ff3a8 sturb w8, [x29, #-1]
~oq │ │┌┼──0000b64c: 14000013 b b698 <__get_fault_info+0xe4>
│ │││
oq │ │││ __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)) 0xb650 0xb684 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~oq │ ││└─>0000b650: b89f83a8 ldursw x8, [x29, #-8] <- 0000b63c(b.cc)<__get_fault_info+0x9c>
~oq │ ││ 0000b654: d37ced08 lsl x8, x8, #4
~oq │ ││ 0000b658: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~oq │ ││ 0000b65c: 911e8129 add x9, x9, #0x7a0
~oq │ ││ 0000b660: b868692a ldr w10, [x9, x8]
~oq │ ││ 0000b664: 7100014a subs w10, w10, #0x0
~oq │ ││ 0000b668: 1a9f07eb cset w11, ne // ne = any
~oq │ ││ 0000b66c: 381f43ab sturb w11, [x29, #-12]
oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~oq │ ││ 0000b670: 385f43ab ldurb w11, [x29, #-12]
~oq │ ││ 0000b674: 2a0b03e8 mov w8, w11
~oq │ ││ 0000b678: 92400108 and x8, x8, #0x1
oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~oq │ ││ 0000b67c: f81e83a8 stur x8, [x29, #-24]
oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~oq │ ││ 0000b680: f85e83a8 ldur x8, [x29, #-24]
-branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb650 0xb684 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]);
~oq │ ││ 0000b684: f1000108 subs x8, x8, #0x0
~oq │ ││ 0000b688: 1a9f07eb cset w11, ne // ne = any
oq │ ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]);
~oq │ ││ 0000b68c: 381ff3ab sturb w11, [x29, #-1]
~oq │ ││ ┌─0000b690: 14000002 b b698 <__get_fault_info+0xe4>
-num param int (base type, DW_ATE_signed size:4) 0xb634 0xb694 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ ││ │
o │ ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG();
~o │ └┼─┼>0000b694: d4210000 brk #0x800 <- 0000b624(b.cc)<__get_fault_info+0xe0>
│ │ │
r: 0xb698 0xb69c (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98b96>:<98b4e>:
or │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║}
+num param int (base type, DW_ATE_signed size:4) 0xb698 0xb69c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~or │ └>└>0000b698: 385ff3a8 ldurb w8, [x29, #-1] <- 0000b64c(b)<__get_fault_info+0xe4>,0000b690(b)<__get_fault_info+0xe4>
-num param int (base type, DW_ATE_signed size:4) 0xb698 0xb69c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
o │ cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num);
~o │ 0000b69c: 381d73a8 sturb w8, [x29, #-41]
o │ cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║}
~o │ 0000b6a0: 385d73a8 ldurb w8, [x29, #-41]
-num param int (base type, DW_ATE_signed size:4) 0xb5fc 0xb6a4 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c
│ __get_fault_info:176.52 (switch.h) Sbepe (cpus_have_final_cap(ARM64_WORKAROUND_834220) ||
~ │ ┌───0000b6a4: 370000e8 tbnz w8, #0, b6c0 <__get_fault_info+0x10c>
│ │
~ │ │ ┌─0000b6a8: 14000001 b b6ac <__get_fault_info+0xf8> <- 0000b6a4(b.cc-succ)<fallthrough>
│ │ │
│ │ │ __get_fault_info:177.8 (switch.h) Sbepe (║esr & ESR_ELx_FSC_TYPE) == FSC_PERM)) {
~ │ │ └>0000b6ac: f9401be8 ldr x8, [sp, #48] <- 0000b6a8(b)<__get_fault_info+0xf8>
│ │ __get_fault_info:177.12 (switch.h) sbepe (esr ║& ESR_ELx_FSC_TYPE) == FSC_PERM)) {
~ │ │ 0000b6b0: 927e0d08 and x8, x8, #0x3c
│ │ __get_fault_info:175.6 (switch.h) Sbepe if (║!(esr & ESR_ELx_S1PTW) &&
~ │ │ 0000b6b4: f1003108 subs x8, x8, #0xc
~ │ ┌─┼───0000b6b8: 54000181 b.ne b6e8 <__get_fault_info+0x134> // b.any
│ │ │
~ │ │ │ ┌─0000b6bc: 14000001 b b6c0 <__get_fault_info+0x10c> <- 0000b6b8(b.cc-succ)<fallthrough>
│ │ │ │
│ │ │ │ __get_fault_info:178.34 (switch.h) Sbepe if (!__translate_far_to_hpfar(*║far, hpfar))
~ │ │ └>└>0000b6c0: f94017e8 ldr x8, [sp, #40] <- 0000b6a4(b.cc)<__get_fault_info+0x10c>,0000b6bc(b)<__get_fault_info+0x10c>
│ │ __get_fault_info:178.33 (switch.h) sbepe if (!__translate_far_to_hpfar(║*far, hpfar))
~ │ │ 0000b6c4: f9400100 ldr x0, [x8]
│ │ __get_fault_info:178.39 (switch.h) sbepe if (!__translate_far_to_hpfar(*far, ║hpfar))
~ │ │ 0000b6c8: f94013e1 ldr x1, [sp, #32]
│ │ __get_fault_info:178.8 (switch.h) sbepe if (!║__translate_far_to_hpfar(*far, hpfar))
~ │ │ 0000b6cc: 940001f8 bl beac <__translate_far_to_hpfar>
│ │
│ │ __get_fault_info:178.7 (switch.h) sbepe if (║!__translate_far_to_hpfar(*far, hpfar))
~ │ │ ┌──0000b6d0: 370000a0 tbnz w0, #0, b6e4 <__get_fault_info+0x130> <- 0000b6cc(bl-succ)<return>
│ │ │
~ │ │ │┌─0000b6d4: 14000001 b b6d8 <__get_fault_info+0x124> <- 0000b6d0(b.cc-succ)<fallthrough>
│ │ ││
~ │ │ │└>0000b6d8: 2a1f03e8 mov w8, wzr <- 0000b6d4(b)<__get_fault_info+0x124>
│ │ │ __get_fault_info:179.4 (switch.h) Sbepe ║return false;
~ │ │ │ 0000b6dc: 381cf3a8 sturb w8, [x29, #-49]
~ │ │ ┌┼──0000b6e0: 1400000d b b714 <__get_fault_info+0x160>
│ │ ││
│ │ ││ __get_fault_info:180.2 (switch.h) Sbepe ║} else {
~ │ │┌┼└─>0000b6e4: 14000009 b b708 <__get_fault_info+0x154> <- 0000b6d0(b.cc)<__get_fault_info+0x130>
│ │││
│ │││ __get_fault_info:181.12 (switch.h) Sbepe *hpfar = ║read_sysreg(hpfar_el2);
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb6e8 0xb6fc (DW_OP_breg31 0x8) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:181
~ └>└┼┼──>0000b6e8: d53c6088 mrs x8, hpfar_el2 <- 0000b5ec(b.cc)<__get_fault_info+0x134>,0000b6b8(b.cc)<__get_fault_info+0x134>
~ ││ 0000b6ec: f90007e8 str x8, [sp, #8]
~ ││ 0000b6f0: f94007e8 ldr x8, [sp, #8]
~ ││ 0000b6f4: f90003e8 str x8, [sp]
~ ││ 0000b6f8: f94003e8 ldr x8, [sp]
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb6e8 0xb6fc (DW_OP_breg31 0x8) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:181
││ __get_fault_info:181.4 (switch.h) sbepe *║hpfar = read_sysreg(hpfar_el2);
~ ││ 0000b6fc: f94013e9 ldr x9, [sp, #32]
││ __get_fault_info:181.10 (switch.h) sbepe *hpfar ║= read_sysreg(hpfar_el2);
~ ││ 0000b700: f9000128 str x8, [x9]
~ ││ ┌─0000b704: 14000001 b b708 <__get_fault_info+0x154>
││ │
~ └┼>└>0000b708: 52800028 mov w8, #0x1 // #1 <- 0000b6e4(b)<__get_fault_info+0x154>,0000b704(b)<__get_fault_info+0x154>
│ __get_fault_info:184.2 (switch.h) Sbepe ║return true;
~ │ 0000b70c: 381cf3a8 sturb w8, [x29, #-49]
~ │ ┌─0000b710: 14000001 b b714 <__get_fault_info+0x160>
│ │
│ │ __get_fault_info:185.1 (switch.h) Sbepe ║}
~ └>└>0000b714: 385cf3a0 ldurb w0, [x29, #-49] <- 0000b6e0(b)<__get_fault_info+0x160>,0000b710(b)<__get_fault_info+0x160>
~ 0000b718: a9477bfd ldp x29, x30, [sp, #112]
~ 0000b71c: 910203ff add sp, sp, #0x80
0000b5c0 CFA:r29+16 r29:c-16 r30:c-8
~ 0000b720: d65f03c0 ret
-esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
-far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
-hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
**0000b724 <host_stage2_map>:
+ host_stage2_map params:
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8)
+size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10)
+prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14)
host_stage2_map:159.0 (mem_protect.c) Sbepe ║{
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
+size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
+prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
+ret var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x18) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
+is_memory var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
+pool var pointer(struct hyp_pool<89e06>/<983fb>) 0xb724 0xb7ec (DW_OP_breg31 0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:161
~ 0000b724: d10103ff sub sp, sp, #0x40 <- 0000b590(bl)<host_stage2_map>
~ 0000b728: a9037bfd stp x29, x30, [sp, #48]
0000b724 CFA:r31 r29:u r30:u
~ 0000b72c: 9100c3fd add x29, sp, #0x30
~ 0000b730: f81f83a0 stur x0, [x29, #-8]
~ 0000b734: f81f03a1 stur x1, [x29, #-16]
~ 0000b738: b81ec3a2 stur w2, [x29, #-20]
host_stage2_map:160.37 (mem_protect.c) SbePe int ret, is_memory = ipa_is_memory(║ipa);
~ 0000b73c: f85f83a0 ldur x0, [x29, #-8]
host_stage2_map:160.23 (mem_protect.c) sbepe int ret, is_memory = ║ipa_is_memory(ipa);
~ 0000b740: 94000226 bl bfd8 <ipa_is_memory>
~ 0000b744: 12000008 and w8, w0, #0x1 <- 0000b740(bl-succ)<return>
host_stage2_map:160.11 (mem_protect.c) sbepe int ret, ║is_memory = ipa_is_memory(ipa);
~ 0000b748: b90017e8 str w8, [sp, #20]
host_stage2_map:163.9 (mem_protect.c) Sbepe pool = ║is_memory ? &host_s2_mem : &host_s2_dev;
~ 0000b74c: b94017e8 ldr w8, [sp, #20]
~ 0000b750: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ 0000b754: 9119e129 add x9, x9, #0x678
~ 0000b758: 9000008a adrp x10, 1b000 <hyp_memory+0x460>
~ 0000b75c: 9116814a add x10, x10, #0x5a0
~ 0000b760: 71000108 subs w8, w8, #0x0
~ 0000b764: 9a891149 csel x9, x10, x9, ne // ne = any
host_stage2_map:163.7 (mem_protect.c) sbepe pool ║= is_memory ? &host_s2_mem : &host_s2_dev;
~ 0000b768: f90007e9 str x9, [sp, #8]
host_stage2_map:165.2 (mem_protect.c) Sbepe ║hyp_spin_lock(&host_kvm.lock);
~ 0000b76c: 90000080 adrp x0, 1b000 <hyp_memory+0x460>
~ 0000b770: 91166000 add x0, x0, #0x598
~ 0000b774: b90007e8 str w8, [sp, #4]
~ 0000b778: 9400024d bl c0ac <hyp_spin_lock>
host_stage2_map:166.26 (mem_protect.c) Sbepe ret = __host_stage2_map(║ipa, size, prot, pool);
~ 0000b77c: f85f83a0 ldur x0, [x29, #-8] <- 0000b778(bl-succ)<return>
host_stage2_map:166.31 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, ║size, prot, pool);
~ 0000b780: f85f03a1 ldur x1, [x29, #-16]
host_stage2_map:166.37 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, ║prot, pool);
~ 0000b784: b85ec3a2 ldur w2, [x29, #-20]
host_stage2_map:166.43 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, prot, ║pool);
~ 0000b788: f94007e3 ldr x3, [sp, #8]
host_stage2_map:166.8 (mem_protect.c) sbepe ret = ║__host_stage2_map(ipa, size, prot, pool);
~ 0000b78c: 9400025c bl c0fc <__host_stage2_map>
host_stage2_map:166.6 (mem_protect.c) sbepe ret ║= __host_stage2_map(ipa, size, prot, pool);
~ 0000b790: b9001be0 str w0, [sp, #24] <- 0000b78c(bl-succ)<return>
host_stage2_map:167.6 (mem_protect.c) Sbepe if (║ret == -ENOMEM && !is_memory) {
~ 0000b794: b9401be8 ldr w8, [sp, #24]
host_stage2_map:167.21 (mem_protect.c) sbepe if (ret == -ENOMEM ║&& !is_memory) {
~ 0000b798: 31003108 adds w8, w8, #0xc
~ ┌─────0000b79c: 540001a1 b.ne b7d0 <host_stage2_map+0xac> // b.any
│
~ │ ┌─0000b7a0: 14000001 b b7a4 <host_stage2_map+0x80> <- 0000b79c(b.cc-succ)<fallthrough>
│ │
│ │ host_stage2_map:167.25 (mem_protect.c) sbepe if (ret == -ENOMEM && !║is_memory) {
~ │ └>0000b7a4: b94017e8 ldr w8, [sp, #20] <- 0000b7a0(b)<host_stage2_map+0x80>
│ host_stage2_map:167.6 (mem_protect.c) sbepe if (║ret == -ENOMEM && !is_memory) {
~ │ ┌───0000b7a8: 35000148 cbnz w8, b7d0 <host_stage2_map+0xac>
│ │
~ │ │ ┌─0000b7ac: 14000001 b b7b0 <host_stage2_map+0x8c> <- 0000b7a8(b.cc-succ)<fallthrough>
│ │ │
│ │ │ host_stage2_map:168.3 (mem_protect.c) Sbepe ║host_stage2_unmap_dev_all();
~ │ │ └>0000b7b0: 94000266 bl c148 <host_stage2_unmap_dev_all> <- 0000b7ac(b)<host_stage2_map+0x8c>
│ │
│ │ host_stage2_map:169.27 (mem_protect.c) Sbepe ret = __host_stage2_map(║ipa, size, prot, pool);
~ │ │ 0000b7b4: f85f83a0 ldur x0, [x29, #-8] <- 0000b7b0(bl-succ)<return>
│ │ host_stage2_map:169.32 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, ║size, prot, pool);
~ │ │ 0000b7b8: f85f03a1 ldur x1, [x29, #-16]
│ │ host_stage2_map:169.38 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, ║prot, pool);
~ │ │ 0000b7bc: b85ec3a2 ldur w2, [x29, #-20]
│ │ host_stage2_map:169.44 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, prot, ║pool);
~ │ │ 0000b7c0: f94007e3 ldr x3, [sp, #8]
│ │ host_stage2_map:169.9 (mem_protect.c) sbepe ret = ║__host_stage2_map(ipa, size, prot, pool);
~ │ │ 0000b7c4: 9400024e bl c0fc <__host_stage2_map>
│ │
│ │ host_stage2_map:169.7 (mem_protect.c) sbepe ret ║= __host_stage2_map(ipa, size, prot, pool);
~ │ │ 0000b7c8: b9001be0 str w0, [sp, #24] <- 0000b7c4(bl-succ)<return>
│ │ host_stage2_map:170.2 (mem_protect.c) Sbepe }
~ │ │ ┌─0000b7cc: 14000001 b b7d0 <host_stage2_map+0xac>
│ │ │
│ │ │ host_stage2_map:171.2 (mem_protect.c) Sbepe ║hyp_spin_unlock(&host_kvm.lock);
~ └>└>└>0000b7d0: 90000080 adrp x0, 1b000 <hyp_memory+0x460> <- 0000b79c(b.cc)<host_stage2_map+0xac>,0000b7a8(b.cc)<host_stage2_map+0xac>,0000b7cc(b)<host_stage2_map+0xac>
~ 0000b7d4: 91166000 add x0, x0, #0x598
~ 0000b7d8: 94000288 bl c1f8 <hyp_spin_unlock>
host_stage2_map:173.9 (mem_protect.c) Sbepe return ║ret;
~ 0000b7dc: b9401be0 ldr w0, [sp, #24] <- 0000b7d8(bl-succ)<return>
host_stage2_map:173.2 (mem_protect.c) sbepe ║return ret;
~ 0000b7e0: a9437bfd ldp x29, x30, [sp, #48]
~ 0000b7e4: 910103ff add sp, sp, #0x40
0000b730 CFA:r29+16 r29:c-16 r30:c-8
~ 0000b7e8: d65f03c0 ret
-ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
-size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
-prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158
-ret var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x18) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
-is_memory var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160
-pool var pointer(struct hyp_pool<89e06>/<983fb>) 0xb724 0xb7ec (DW_OP_breg31 0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:161
**0000b7ec <kvm_get_parange>:
+ kvm_get_parange params:
+mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8)
kvm_get_parange:284.0 (kvm_mmu.h) Sbepe ║{
0000b7ec CFA:r31
+mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:283
+parange var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x0) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:285
~ 0000b7ec: d100c3ff sub sp, sp, #0x30 <- 0000b3a8(bl)<kvm_get_parange>,0000b94c(bl)<kvm_get_parange>
~ 0000b7f0: f90007e0 str x0, [sp, #8]
kvm_get_parange:285.53 (kvm_mmu.h) SbePe u64 parange = cpuid_feature_extract_unsigned_field(║mmfr0,
~ 0000b7f4: f94007e8 ldr x8, [sp, #8]
~ 0000b7f8: f9000fe8 str x8, [sp, #24]
s: 0xb7fc 0xb848 cpuid_feature_extract_unsigned_field inlined from kvm_get_parange:285 (kvm_mmu.h) <98cde>:
t: 0xb7fc 0xb804 (0 of 2) cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98d03>:<98cde>:
st cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) Sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width);
+features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb848 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb848 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb804 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+width param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~st 0000b7fc: 2a1f03e9 mov w9, wzr
~st 0000b800: b90017e9 str w9, [sp, #20]
-features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb804 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-width param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
s cpuid_feature_extract_unsigned_field:517.52 (cpufeature.h) Sbepe return cpuid_feature_extract_unsigned_field_width(║features, field, 4);
~s 0000b804: f9400fe8 ldr x8, [sp, #24]
s cpuid_feature_extract_unsigned_field:517.62 (cpufeature.h) sbepe return cpuid_feature_extract_unsigned_field_width(features, ║field, 4);
~s 0000b808: b94017ea ldr w10, [sp, #20]
~s 0000b80c: f90017e8 str x8, [sp, #40]
~s 0000b810: b90027ea str w10, [sp, #36]
~s 0000b814: 5280008a mov w10, #0x4 // #4
~s 0000b818: b90023ea str w10, [sp, #32]
u: 0xb81c 0xb848 (1 of 2) cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98d03>:<98cde>:
su cpuid_feature_extract_unsigned_field_width:511.15 (cpufeature.h) Sbepe return (u64)(║features << (64 - width - field)) >> (64 - width);
+features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb81c 0xb848 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+field param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+width param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~su 0000b81c: f94017e8 ldr x8, [sp, #40]
su cpuid_feature_extract_unsigned_field_width:511.33 (cpufeature.h) sbepe return (u64)(features << (64 - ║width - field)) >> (64 - width);
~su 0000b820: b94023ea ldr w10, [sp, #32]
~su 0000b824: 5280080b mov w11, #0x40 // #64
su cpuid_feature_extract_unsigned_field_width:511.31 (cpufeature.h) sbepe return (u64)(features << (64 ║- width - field)) >> (64 - width);
~su 0000b828: 6b0a016b subs w11, w11, w10
su cpuid_feature_extract_unsigned_field_width:511.41 (cpufeature.h) sbepe return (u64)(features << (64 - width - ║field)) >> (64 - width);
~su 0000b82c: b94027ec ldr w12, [sp, #36]
su cpuid_feature_extract_unsigned_field_width:511.39 (cpufeature.h) sbepe return (u64)(features << (64 - width ║- field)) >> (64 - width);
~su 0000b830: 6b0c016b subs w11, w11, w12
su cpuid_feature_extract_unsigned_field_width:511.24 (cpufeature.h) sbepe return (u64)(features ║<< (64 - width - field)) >> (64 - width);
~su 0000b834: 2a0b03ed mov w13, w11
~su 0000b838: 9acd2108 lsl x8, x8, x13
su cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width);
~su 0000b83c: 4b0a0129 sub w9, w9, w10
~su 0000b840: 2a0903ed mov w13, w9
~su 0000b844: 9acd2508 lsr x8, x8, x13
-features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb848 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb848 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb81c 0xb848 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-field param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-width param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c
kvm_get_parange:285.16 (kvm_mmu.h) Sbepe u64 parange = ║cpuid_feature_extract_unsigned_field(mmfr0,
~ 0000b848: 92407d08 and x8, x8, #0xffffffff
kvm_get_parange:285.6 (kvm_mmu.h) sbepe u64 ║parange = cpuid_feature_extract_unsigned_field(mmfr0,
~ 0000b84c: f90003e8 str x8, [sp]
kvm_get_parange:287.6 (kvm_mmu.h) Sbepe if (║parange > ID_AA64MMFR0_PARANGE_MAX)
~ 0000b850: f94003e8 ldr x8, [sp]
kvm_get_parange:287.6 (kvm_mmu.h) sbepe if (║parange > ID_AA64MMFR0_PARANGE_MAX)
~ 0000b854: f1001908 subs x8, x8, #0x6
~ ┌───0000b858: 540000c3 b.cc b870 <kvm_get_parange+0x84> // b.lo, b.ul, b.last
│
~ │ ┌─0000b85c: 14000001 b b860 <kvm_get_parange+0x74> <- 0000b858(b.cc-succ)<fallthrough>
│ │
~ │ └>0000b860: 528000a8 mov w8, #0x5 // #5 <- 0000b85c(b)<kvm_get_parange+0x74>
~ │ 0000b864: 2a0803e9 mov w9, w8
│ kvm_get_parange:288.11 (kvm_mmu.h) Sbepe parange ║= ID_AA64MMFR0_PARANGE_MAX;
~ │ 0000b868: f90003e9 str x9, [sp]
│ kvm_get_parange:288.3 (kvm_mmu.h) sbepe ║parange = ID_AA64MMFR0_PARANGE_MAX;
~ │ ┌─0000b86c: 14000001 b b870 <kvm_get_parange+0x84>
│ │
│ │ kvm_get_parange:290.9 (kvm_mmu.h) Sbepe return ║parange;
~ └>└>0000b870: f94003e0 ldr x0, [sp] <- 0000b858(b.cc)<kvm_get_parange+0x84>,0000b86c(b)<kvm_get_parange+0x84>
kvm_get_parange:290.2 (kvm_mmu.h) sbepe ║return parange;
~ 0000b874: 9100c3ff add sp, sp, #0x30
0000b7f0 CFA:r31+48
~ 0000b878: d65f03c0 ret
-mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:283
-parange var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x0) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:285
**0000b87c <id_aa64mmfr0_parange_to_phys_shift>:
+ id_aa64mmfr0_parange_to_phys_shift params:
+parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8)
id_aa64mmfr0_parange_to_phys_shift:746.0 (cpufeature.h) Sbepe ║{
0000b87c CFA:r31
+parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8) id_aa64mmfr0_parange_to_phys_shift:arch/arm64/kvm/hyp/nvhe/mem_protect.c:745
~ 0000b87c: d10043ff sub sp, sp, #0x10 <- 0000b3b4(bl)<id_aa64mmfr0_parange_to_phys_shift>
~ 0000b880: b9000be0 str w0, [sp, #8]
id_aa64mmfr0_parange_to_phys_shift:747.10 (cpufeature.h) SbePe switch (║parange) {
~ 0000b884: b9400be8 ldr w8, [sp, #8]
~ 0000b888: 2a0803e9 mov w9, w8
~ 0000b88c: 2a0903e8 mov w8, w9
id_aa64mmfr0_parange_to_phys_shift:747.2 (cpufeature.h) sbepe ║switch (parange) {
~ 0000b890: 71001908 subs w8, w8, #0x6
~ 0000b894: f90003e9 str x9, [sp]
~ ┌─0000b898: 54000388 b.hi b908 <id_aa64mmfr0_parange_to_phys_shift+0x8c> // b.pmore
│
~ │ 0000b89c: 90000068 adrp x8, 17000 <___kvm_hyp_init+0x3c> <- 0000b898(b.cc-succ)<fallthrough>
~ │ 0000b8a0: 913ac108 add x8, x8, #0xeb0
~ │ 0000b8a4: f94003eb ldr x11, [sp]
~ │ 0000b8a8: b8ab790a ldrsw x10, [x8, x11, lsl #2]
~ │ 0000b8ac: 8b0a0109 add x9, x8, x10
│
~ │X0000b8b0: d61f0120 br x9 -> 0000b8b0<indirect0> <- 0000b8b0(br)<indirect0>
~ │ 0000b8b4: 52800408 mov w8, #0x20 // #32
│ id_aa64mmfr0_parange_to_phys_shift:748.10 (cpufeature.h) Sbepe case 0: ║return 32;
~ │ 0000b8b8: b9000fe8 str w8, [sp, #12]
~ ┌─────────────┼─0000b8bc: 14000016 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ 0000b8c0: 52800488 mov w8, #0x24 // #36
│ │ id_aa64mmfr0_parange_to_phys_shift:749.10 (cpufeature.h) Sbepe case 1: ║return 36;
~ │ │ 0000b8c4: b9000fe8 str w8, [sp, #12]
~ │ ┌───────────┼─0000b8c8: 14000013 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ │ 0000b8cc: 52800508 mov w8, #0x28 // #40
│ │ │ id_aa64mmfr0_parange_to_phys_shift:750.10 (cpufeature.h) Sbepe case 2: ║return 40;
~ │ │ │ 0000b8d0: b9000fe8 str w8, [sp, #12]
~ │ │ ┌─────────┼─0000b8d4: 14000010 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ │ │ 0000b8d8: 52800548 mov w8, #0x2a // #42
│ │ │ │ id_aa64mmfr0_parange_to_phys_shift:751.10 (cpufeature.h) Sbepe case 3: ║return 42;
~ │ │ │ │ 0000b8dc: b9000fe8 str w8, [sp, #12]
~ │ │ │ ┌───────┼─0000b8e0: 1400000d b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ │ │ │ 0000b8e4: 52800588 mov w8, #0x2c // #44
│ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:752.10 (cpufeature.h) Sbepe case 4: ║return 44;
~ │ │ │ │ │ 0000b8e8: b9000fe8 str w8, [sp, #12]
~ │ │ │ │ ┌─────┼─0000b8ec: 1400000a b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ │ │ │ │ 0000b8f0: 52800608 mov w8, #0x30 // #48
│ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:753.10 (cpufeature.h) Sbepe case 5: ║return 48;
~ │ │ │ │ │ │ 0000b8f4: b9000fe8 str w8, [sp, #12]
~ │ │ │ │ │ ┌───┼─0000b8f8: 14000007 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
~ │ │ │ │ │ │ │ 0000b8fc: 52800688 mov w8, #0x34 // #52
│ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:754.10 (cpufeature.h) Sbepe case 6: ║return 52;
~ │ │ │ │ │ │ │ 0000b900: b9000fe8 str w8, [sp, #12]
~ │ │ │ │ │ │ ┌─┼─0000b904: 14000004 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
│ │ │ │ │ │ │ │
~ │ │ │ │ │ │ │ └>0000b908: 52800608 mov w8, #0x30 // #48 <- 0000b898(b.cc)<id_aa64mmfr0_parange_to_phys_shift+0x8c>
│ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:762.11 (cpufeature.h) Sbepe default: ║return CONFIG_ARM64_PA_BITS;
~ │ │ │ │ │ │ │ 0000b90c: b9000fe8 str w8, [sp, #12]
~ │ │ │ │ │ │ │ ┌─0000b910: 14000001 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98>
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:764.1 (cpufeature.h) Sbepe ║}
~ └>└>└>└>└>└>└>└>0000b914: b9400fe0 ldr w0, [sp, #12] <- 0000b8bc(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8c8(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8d4(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8e0(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8ec(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8f8(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b904(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b910(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>
~ 0000b918: 910043ff add sp, sp, #0x10
0000b880 CFA:r31+16
~ 0000b91c: d65f03c0 ret
-parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8) id_aa64mmfr0_parange_to_phys_shift:arch/arm64/kvm/hyp/nvhe/mem_protect.c:745
**0000b920 <kvm_get_vtcr>:
+ kvm_get_vtcr params:
+mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8)
+mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10)
+phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14)
kvm_get_vtcr:301.0 (kvm_mmu.h) Sbepe ║{
+mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
+mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
+phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
+vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_breg31 0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:302
+lvls var typedef(u8=typedef(__u8=unsigned char (base type, DW_ATE_unsigned_char size:1))) 0xb920 0xba14 (DW_OP_breg31 0xc) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:303
~ 0000b920: d10103ff sub sp, sp, #0x40 <- 0000b3c8(bl)<kvm_get_vtcr>
~ 0000b924: a9037bfd stp x29, x30, [sp, #48]
0000b920 CFA:r31 r29:u r30:u
~ 0000b928: 9100c3fd add x29, sp, #0x30
~ 0000b92c: f81f83a0 stur x0, [x29, #-8]
~ 0000b930: f81f03a1 stur x1, [x29, #-16]
~ 0000b934: b81ec3a2 stur w2, [x29, #-20]
~ 0000b938: 5286a008 mov w8, #0x3500 // #13568
~ 0000b93c: 72b00008 movk w8, #0x8000, lsl #16
~ 0000b940: 2a0803e9 mov w9, w8
kvm_get_vtcr:302.6 (kvm_mmu.h) SbePe u64 ║vtcr = VTCR_EL2_FLAGS;
~ 0000b944: f9000be9 str x9, [sp, #16]
kvm_get_vtcr:305.26 (kvm_mmu.h) Sbepe vtcr |= kvm_get_parange(║mmfr0) << VTCR_EL2_PS_SHIFT;
~ 0000b948: f85f83a0 ldur x0, [x29, #-8]
kvm_get_vtcr:305.10 (kvm_mmu.h) sbepe vtcr |= ║kvm_get_parange(mmfr0) << VTCR_EL2_PS_SHIFT;
~ 0000b94c: 97ffffa8 bl b7ec <kvm_get_parange>
kvm_get_vtcr:305.7 (kvm_mmu.h) sbepe vtcr ║|= kvm_get_parange(mmfr0) << VTCR_EL2_PS_SHIFT;
~ 0000b950: f9400be9 ldr x9, [sp, #16] <- 0000b94c(bl-succ)<return>
~ 0000b954: aa004129 orr x9, x9, x0, lsl #16
~ 0000b958: f9000be9 str x9, [sp, #16]
kvm_get_vtcr:306.10 (kvm_mmu.h) Sbepe vtcr |= ║VTCR_EL2_T0SZ(phys_shift);
~ 0000b95c: b85ec3a8 ldur w8, [x29, #-20]
~ 0000b960: 2a0803e9 mov w9, w8
~ 0000b964: 52800808 mov w8, #0x40 // #64
~ 0000b968: 2a0803ea mov w10, w8
~ 0000b96c: eb090149 subs x9, x10, x9
kvm_get_vtcr:306.7 (kvm_mmu.h) sbepe vtcr ║|= VTCR_EL2_T0SZ(phys_shift);
~ 0000b970: f9400bea ldr x10, [sp, #16]
~ 0000b974: aa090149 orr x9, x10, x9
~ 0000b978: f9000be9 str x9, [sp, #16]
kvm_get_vtcr:311.9 (kvm_mmu.h) Sbepe lvls = ║stage2_pgtable_levels(phys_shift);
~ 0000b97c: b85ec3a8 ldur w8, [x29, #-20]
~ 0000b980: 71002108 subs w8, w8, #0x8
~ 0000b984: 5291c72b mov w11, #0x8e39 // #36409
~ 0000b988: 72a71c6b movk w11, #0x38e3, lsl #16
~ 0000b98c: 9bab7d09 umull x9, w8, w11
~ 0000b990: d361fd29 lsr x9, x9, #33
kvm_get_vtcr:311.7 (kvm_mmu.h) sbepe lvls ║= stage2_pgtable_levels(phys_shift);
~ 0000b994: 390033e9 strb w9, [sp, #12]
kvm_get_vtcr:312.6 (kvm_mmu.h) Sbepe if (║lvls < 2)
~ 0000b998: 394033e8 ldrb w8, [sp, #12]
kvm_get_vtcr:312.6 (kvm_mmu.h) sbepe if (║lvls < 2)
~ 0000b99c: 71000508 subs w8, w8, #0x1
~ ┌───0000b9a0: 540000ac b.gt b9b4 <kvm_get_vtcr+0x94>
│
~ │ ┌─0000b9a4: 14000001 b b9a8 <kvm_get_vtcr+0x88> <- 0000b9a0(b.cc-succ)<fallthrough>
│ │
~ │ └>0000b9a8: 52800048 mov w8, #0x2 // #2 <- 0000b9a4(b)<kvm_get_vtcr+0x88>
│ kvm_get_vtcr:313.8 (kvm_mmu.h) Sbepe lvls ║= 2;
~ │ 0000b9ac: 390033e8 strb w8, [sp, #12]
│ kvm_get_vtcr:313.3 (kvm_mmu.h) sbepe ║lvls = 2;
~ │ ┌─0000b9b0: 14000001 b b9b4 <kvm_get_vtcr+0x94>
│ │
│ │ kvm_get_vtcr:314.10 (kvm_mmu.h) Sbepe vtcr |= ║VTCR_EL2_LVLS_TO_SL0(lvls);
~ └>└>0000b9b4: 394033e8 ldrb w8, [sp, #12] <- 0000b9a0(b.cc)<kvm_get_vtcr+0x94>,0000b9b0(b)<kvm_get_vtcr+0x94>
~ 0000b9b8: 52800089 mov w9, #0x4 // #4
~ 0000b9bc: 6b080128 subs w8, w9, w8
~ 0000b9c0: 52800049 mov w9, #0x2 // #2
~ 0000b9c4: 2a0903ea mov w10, w9
~ 0000b9c8: eb28c14a subs x10, x10, w8, sxtw
kvm_get_vtcr:314.7 (kvm_mmu.h) sbepe vtcr ║|= VTCR_EL2_LVLS_TO_SL0(lvls);
~ 0000b9cc: f9400beb ldr x11, [sp, #16]
~ 0000b9d0: aa0a196a orr x10, x11, x10, lsl #6
~ 0000b9d4: f9000bea str x10, [sp, #16]
kvm_get_vtcr:321.7 (kvm_mmu.h) Sbepe vtcr ║|= VTCR_EL2_HA;
~ 0000b9d8: f9400bea ldr x10, [sp, #16]
~ 0000b9dc: b26b014a orr x10, x10, #0x200000
~ 0000b9e0: f9000bea str x10, [sp, #16]
kvm_get_vtcr:324.25 (kvm_mmu.h) Sbepe vtcr |= (get_vmid_bits(║mmfr1) == 16) ?
~ 0000b9e4: f85f03a0 ldur x0, [x29, #-16]
kvm_get_vtcr:324.11 (kvm_mmu.h) sbepe vtcr |= (║get_vmid_bits(mmfr1) == 16) ?
~ 0000b9e8: 9400000b bl ba14 <get_vmid_bits>
~ 0000b9ec: 71004008 subs w8, w0, #0x10 <- 0000b9e8(bl-succ)<return>
~ 0000b9f0: 1a9f17e9 cset w9, eq // eq = none
kvm_get_vtcr:324.10 (kvm_mmu.h) sbepe vtcr |= ║(get_vmid_bits(mmfr1) == 16) ?
~ 0000b9f4: 2a0903ea mov w10, w9
kvm_get_vtcr:324.7 (kvm_mmu.h) sbepe vtcr ║|= (get_vmid_bits(mmfr1) == 16) ?
~ 0000b9f8: f9400beb ldr x11, [sp, #16]
~ 0000b9fc: aa0a4d6a orr x10, x11, x10, lsl #19
~ 0000ba00: f9000bea str x10, [sp, #16]
kvm_get_vtcr:328.9 (kvm_mmu.h) Sbepe return ║vtcr;
~ 0000ba04: f9400be0 ldr x0, [sp, #16]
kvm_get_vtcr:328.2 (kvm_mmu.h) sbepe ║return vtcr;
~ 0000ba08: a9437bfd ldp x29, x30, [sp, #48]
~ 0000ba0c: 910103ff add sp, sp, #0x40
0000b92c CFA:r29+16 r29:c-16 r30:c-8
~ 0000ba10: d65f03c0 ret
-mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
-mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
-phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300
-vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_breg31 0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:302
-lvls var typedef(u8=typedef(__u8=unsigned char (base type, DW_ATE_unsigned_char size:1))) 0xb920 0xba14 (DW_OP_breg31 0xc) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:303
**0000ba14 <get_vmid_bits>:
+ get_vmid_bits params:
+mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8)
get_vmid_bits:800.0 (cpufeature.h) Sbepe ║{
0000ba14 CFA:r31
+mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:799
+vmid_bits var int (base type, DW_ATE_signed size:4) 0xba14 0xbaa8 (DW_OP_fbreg 0x4) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:801
~ 0000ba14: d100c3ff sub sp, sp, #0x30 <- 0000b9e8(bl)<get_vmid_bits>
~ 0000ba18: f90007e0 str x0, [sp, #8]
get_vmid_bits:803.51 (cpufeature.h) SbePe vmid_bits = cpuid_feature_extract_unsigned_field(║mmfr1,
~ 0000ba1c: f94007e8 ldr x8, [sp, #8]
~ 0000ba20: f9000fe8 str x8, [sp, #24]
~ 0000ba24: 52800089 mov w9, #0x4 // #4
~ 0000ba28: b90017e9 str w9, [sp, #20]
v: 0xba2c 0xba70 cpuid_feature_extract_unsigned_field inlined from get_vmid_bits:803 (cpufeature.h) <98df3>:
v cpuid_feature_extract_unsigned_field:517.52 (cpufeature.h) Sbepe return cpuid_feature_extract_unsigned_field_width(║features, field, 4);
+features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba2c 0xba70 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+field param int (base type, DW_ATE_signed size:4) 0xba2c 0xba70 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~v 0000ba2c: f9400fe8 ldr x8, [sp, #24]
v cpuid_feature_extract_unsigned_field:517.62 (cpufeature.h) sbepe return cpuid_feature_extract_unsigned_field_width(features, ║field, 4);
~v 0000ba30: b94017ea ldr w10, [sp, #20]
~v 0000ba34: f90017e8 str x8, [sp, #40]
~v 0000ba38: b90027ea str w10, [sp, #36]
~v 0000ba3c: b90023e9 str w9, [sp, #32]
w: 0xba40 0xba70 cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98e18>:<98df3>:
vw cpuid_feature_extract_unsigned_field_width:511.15 (cpufeature.h) Sbepe return (u64)(║features << (64 - width - field)) >> (64 - width);
+features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba40 0xba70 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+field param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
+width param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~vw 0000ba40: f94017e8 ldr x8, [sp, #40]
vw cpuid_feature_extract_unsigned_field_width:511.33 (cpufeature.h) sbepe return (u64)(features << (64 - ║width - field)) >> (64 - width);
~vw 0000ba44: b94023e9 ldr w9, [sp, #32]
~vw 0000ba48: 5280080a mov w10, #0x40 // #64
vw cpuid_feature_extract_unsigned_field_width:511.31 (cpufeature.h) sbepe return (u64)(features << (64 ║- width - field)) >> (64 - width);
~vw 0000ba4c: 6b09014a subs w10, w10, w9
vw cpuid_feature_extract_unsigned_field_width:511.41 (cpufeature.h) sbepe return (u64)(features << (64 - width - ║field)) >> (64 - width);
~vw 0000ba50: b94027eb ldr w11, [sp, #36]
vw cpuid_feature_extract_unsigned_field_width:511.39 (cpufeature.h) sbepe return (u64)(features << (64 - width ║- field)) >> (64 - width);
~vw 0000ba54: 6b0b014a subs w10, w10, w11
vw cpuid_feature_extract_unsigned_field_width:511.24 (cpufeature.h) sbepe return (u64)(features ║<< (64 - width - field)) >> (64 - width);
~vw 0000ba58: 2a0a03ec mov w12, w10
~vw 0000ba5c: 9acc2108 lsl x8, x8, x12
vw cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width);
~vw 0000ba60: 2a1f03ea mov w10, wzr
~vw 0000ba64: 4b090149 sub w9, w10, w9
~vw 0000ba68: 2a0903ec mov w12, w9
~vw 0000ba6c: 9acc2508 lsr x8, x8, x12
-features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba2c 0xba70 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-field param int (base type, DW_ATE_signed size:4) 0xba2c 0xba70 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba40 0xba70 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-field param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
-width param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c
get_vmid_bits:803.12 (cpufeature.h) Sbepe vmid_bits ║= cpuid_feature_extract_unsigned_field(mmfr1,
~ 0000ba70: b90007e8 str w8, [sp, #4]
get_vmid_bits:805.6 (cpufeature.h) Sbepe if (║vmid_bits == ID_AA64MMFR1_VMIDBITS_16)
~ 0000ba74: b94007e8 ldr w8, [sp, #4]
get_vmid_bits:805.6 (cpufeature.h) sbepe if (║vmid_bits == ID_AA64MMFR1_VMIDBITS_16)
~ 0000ba78: 71000908 subs w8, w8, #0x2
~ ┌──0000ba7c: 540000a1 b.ne ba90 <get_vmid_bits+0x7c> // b.any
│
~ │┌─0000ba80: 14000001 b ba84 <get_vmid_bits+0x70> <- 0000ba7c(b.cc-succ)<fallthrough>
││
~ │└>0000ba84: 52800208 mov w8, #0x10 // #16 <- 0000ba80(b)<get_vmid_bits+0x70>
│ get_vmid_bits:806.3 (cpufeature.h) Sbepe ║return 16;
~ │ 0000ba88: b90013e8 str w8, [sp, #16]
~ ┌┼──0000ba8c: 14000004 b ba9c <get_vmid_bits+0x88>
││
~ │└─>0000ba90: 52800108 mov w8, #0x8 // #8 <- 0000ba7c(b.cc)<get_vmid_bits+0x7c>
│ get_vmid_bits:812.2 (cpufeature.h) Sbepe ║return 8;
~ │ 0000ba94: b90013e8 str w8, [sp, #16]
~ │ ┌─0000ba98: 14000001 b ba9c <get_vmid_bits+0x88>
│ │
│ │ get_vmid_bits:813.1 (cpufeature.h) Sbepe ║}
~ └>└>0000ba9c: b94013e0 ldr w0, [sp, #16] <- 0000ba8c(b)<get_vmid_bits+0x88>,0000ba98(b)<get_vmid_bits+0x88>
~ 0000baa0: 9100c3ff add sp, sp, #0x30
0000ba18 CFA:r31+48
~ 0000baa4: d65f03c0 ret
-mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:799
-vmid_bits var int (base type, DW_ATE_signed size:4) 0xba14 0xbaa8 (DW_OP_fbreg 0x4) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:801
**0000baa8 <host_s2_mem_pgtable_size>:
+ host_s2_mem_pgtable_size params: none
host_s2_mem_pgtable_size:89.0 (mm.h) Sbepe ║{
+max_pgd_sz var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbaa8 0xbb04 (DW_OP_breg31 0x0) host_s2_mem_pgtable_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:90
~ 0000baa8: d10083ff sub sp, sp, #0x20 <- 0000b3f4(bl)<host_s2_mem_pgtable_size>
~ 0000baac: a9017bfd stp x29, x30, [sp, #16]
0000baa8 CFA:r31 r29:u r30:u
~ 0000bab0: 910043fd add x29, sp, #0x10
~ 0000bab4: 52a00028 mov w8, #0x10000 // #65536
~ 0000bab8: 2a0803e9 mov w9, w8
host_s2_mem_pgtable_size:90.16 (mm.h) SbePe unsigned long ║max_pgd_sz = 16 << PAGE_SHIFT;
~ 0000babc: f90003e9 str x9, [sp]
host_s2_mem_pgtable_size:92.6 (mm.h) Sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0)
~ 0000bac0: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ 0000bac4: b943a128 ldr w8, [x9, #928]
host_s2_mem_pgtable_size:92.6 (mm.h) sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0)
~ 0000bac8: 71000108 subs w8, w8, #0x0
~ ┌──0000bacc: 540000ac b.gt bae0 <host_s2_mem_pgtable_size+0x38>
│
~ │┌─0000bad0: 14000001 b bad4 <host_s2_mem_pgtable_size+0x2c> <- 0000bacc(b.cc-succ)<fallthrough>
││
~ │└>0000bad4: aa1f03e8 mov x8, xzr <- 0000bad0(b)<host_s2_mem_pgtable_size+0x2c>
│ host_s2_mem_pgtable_size:93.3 (mm.h) Sbepe ║return 0;
~ │ 0000bad8: f90007e8 str x8, [sp, #8]
~ ┌┼──0000badc: 14000006 b baf4 <host_s2_mem_pgtable_size+0x4c>
││
││ host_s2_mem_pgtable_size:95.9 (mm.h) Sbepe return ║__hyp_pgtable_total_size() + max_pgd_sz;
~ │└─>0000bae0: 94000072 bl bca8 <__hyp_pgtable_total_size> <- 0000bacc(b.cc)<host_s2_mem_pgtable_size+0x38>
│
│ host_s2_mem_pgtable_size:95.38 (mm.h) sbepe return __hyp_pgtable_total_size() + ║max_pgd_sz;
~ │ 0000bae4: f94003e8 ldr x8, [sp] <- 0000bae0(bl-succ)<return>
│ host_s2_mem_pgtable_size:95.36 (mm.h) sbepe return __hyp_pgtable_total_size() ║+ max_pgd_sz;
~ │ 0000bae8: 8b080008 add x8, x0, x8
│ host_s2_mem_pgtable_size:95.2 (mm.h) sbepe ║return __hyp_pgtable_total_size() + max_pgd_sz;
~ │ 0000baec: f90007e8 str x8, [sp, #8]
~ │ ┌─0000baf0: 14000001 b baf4 <host_s2_mem_pgtable_size+0x4c>
│ │
│ │ host_s2_mem_pgtable_size:96.1 (mm.h) Sbepe ║}
~ └>└>0000baf4: f94007e0 ldr x0, [sp, #8] <- 0000badc(b)<host_s2_mem_pgtable_size+0x4c>,0000baf0(b)<host_s2_mem_pgtable_size+0x4c>
~ 0000baf8: a9417bfd ldp x29, x30, [sp, #16]
~ 0000bafc: 910083ff add sp, sp, #0x20
0000bab4 CFA:r29+16 r29:c-16 r30:c-8
~ 0000bb00: d65f03c0 ret
-max_pgd_sz var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbaa8 0xbb04 (DW_OP_breg31 0x0) host_s2_mem_pgtable_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:90
**0000bb04 <host_s2_dev_pgtable_size>:
+ host_s2_dev_pgtable_size params: none
host_s2_dev_pgtable_size:99.0 (mm.h) Sbepe ║{
~ 0000bb04: d10083ff sub sp, sp, #0x20 <- 0000b440(bl)<host_s2_dev_pgtable_size>
~ 0000bb08: a9017bfd stp x29, x30, [sp, #16]
0000bb04 CFA:r31 r29:u r30:u
~ 0000bb0c: 910043fd add x29, sp, #0x10
host_s2_dev_pgtable_size:100.6 (mm.h) SbePe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0)
~ 0000bb10: 90000088 adrp x8, 1b000 <hyp_memory+0x460>
~ 0000bb14: b943a109 ldr w9, [x8, #928]
host_s2_dev_pgtable_size:100.6 (mm.h) sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0)
~ 0000bb18: 71000129 subs w9, w9, #0x0
~ ┌──0000bb1c: 540000ac b.gt bb30 <host_s2_dev_pgtable_size+0x2c>
│
~ │┌─0000bb20: 14000001 b bb24 <host_s2_dev_pgtable_size+0x20> <- 0000bb1c(b.cc-succ)<fallthrough>
││
~ │└>0000bb24: aa1f03e8 mov x8, xzr <- 0000bb20(b)<host_s2_dev_pgtable_size+0x20>
│ host_s2_dev_pgtable_size:101.3 (mm.h) Sbepe ║return 0;
~ │ 0000bb28: f90007e8 str x8, [sp, #8]
~ ┌┼──0000bb2c: 14000007 b bb48 <host_s2_dev_pgtable_size+0x44>
││
~ │└─>0000bb30: 52a00088 mov w8, #0x40000 // #262144 <- 0000bb1c(b.cc)<host_s2_dev_pgtable_size+0x2c>
~ │ 0000bb34: 2a0803e0 mov w0, w8
│ host_s2_dev_pgtable_size:104.9 (mm.h) Sbepe return ║__hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) << PAGE_SHIFT;
~ │ 0000bb38: 94000085 bl bd4c <__hyp_pgtable_max_pages>
│
│ host_s2_dev_pgtable_size:104.58 (mm.h) sbepe return __hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) ║<< PAGE_SHIFT;
~ │ 0000bb3c: d374cc09 lsl x9, x0, #12 <- 0000bb38(bl-succ)<return>
│ host_s2_dev_pgtable_size:104.2 (mm.h) sbepe ║return __hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) << PAGE_SHIFT;
~ │ 0000bb40: f90007e9 str x9, [sp, #8]
~ │ ┌─0000bb44: 14000001 b bb48 <host_s2_dev_pgtable_size+0x44>
│ │
│ │ host_s2_dev_pgtable_size:105.1 (mm.h) Sbepe ║}
~ └>└>0000bb48: f94007e0 ldr x0, [sp, #8] <- 0000bb2c(b)<host_s2_dev_pgtable_size+0x44>,0000bb44(b)<host_s2_dev_pgtable_size+0x44>
~ 0000bb4c: a9417bfd ldp x29, x30, [sp, #16]
~ 0000bb50: 910083ff add sp, sp, #0x20
0000bb10 CFA:r29+16 r29:c-16 r30:c-8
~ 0000bb54: d65f03c0 ret
**0000bb58 <host_s2_zalloc_pages_exact>:
+ host_s2_zalloc_pages_exact params:
+size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0)
host_s2_zalloc_pages_exact:29.0 (mem_protect.c) Sbepe ║{
+size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0) host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28
~ 0000bb58: d10103ff sub sp, sp, #0x40
~ 0000bb5c: a9037bfd stp x29, x30, [sp, #48]
0000bb58 CFA:r31 r29:u r30:u
~ 0000bb60: 9100c3fd add x29, sp, #0x30
~ 0000bb64: f90003e0 str x0, [sp]
host_s2_zalloc_pages_exact:30.63 (mem_protect.c) SbePe return hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(║size));
~ 0000bb68: f94003e8 ldr x8, [sp]
~ 0000bb6c: f90007e8 str x8, [sp, #8]
~ ┌─0000bb70: 14000001 b bb74 <host_s2_zalloc_pages_exact+0x1c>
│
x: 0xbb74 0xbbe0 get_order inlined from host_s2_zalloc_pages_exact:30 (mem_protect.c) <98ef8>:
x │ get_order:41.6 (getorder.h) Sbepe size║--;
+size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbb74 0xbbe0 (DW_OP_breg31 0x8) get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~x └>0000bb74: f94007e8 ldr x8, [sp, #8] <- 0000bb70(b)<host_s2_zalloc_pages_exact+0x1c>
~x 0000bb78: f1000508 subs x8, x8, #0x1
~x 0000bb7c: f90007e8 str x8, [sp, #8]
x get_order:42.7 (getorder.h) Sbepe size ║>>= PAGE_SHIFT;
~x 0000bb80: f94007e8 ldr x8, [sp, #8]
~x 0000bb84: d34cfd08 lsr x8, x8, #12
~x 0000bb88: f90007e8 str x8, [sp, #8]
x get_order:46.15 (getorder.h) Sbepe return fls64(║size);
~x 0000bb8c: f94007e8 ldr x8, [sp, #8]
~x 0000bb90: f9000fe8 str x8, [sp, #24]
y: 0xbb94 0xbbd4 fls64 inlined from get_order:46 (getorder.h) <98f14>:<98ef8>:
xy fls64:29.6 (fls64.h) Sbepe if (║x == 0)
+x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbb94 0xbbd4 (DW_OP_breg31 0x18) fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~xy 0000bb94: f9400fe8 ldr x8, [sp, #24]
xy fls64:29.6 (fls64.h) sbepe if (║x == 0)
~xy ┌──0000bb98: b50000a8 cbnz x8, bbac <host_s2_zalloc_pages_exact+0x54>
│
~xy │┌─0000bb9c: 14000001 b bba0 <host_s2_zalloc_pages_exact+0x48> <- 0000bb98(b.cc-succ)<fallthrough>
││
~xy │└>0000bba0: 2a1f03e8 mov w8, wzr <- 0000bb9c(b)<host_s2_zalloc_pages_exact+0x48>
xy │ fls64:30.3 (fls64.h) Sbepe ║return 0;
~xy │ 0000bba4: b81f43a8 stur w8, [x29, #-12]
~xy ┌┼──0000bba8: 1400000a b bbd0 <host_s2_zalloc_pages_exact+0x78>
││
xy ││ fls64:31.15 (fls64.h) Sbepe return __fls(║x) + 1;
~xy │└─>0000bbac: f9400fe8 ldr x8, [sp, #24] <- 0000bb98(b.cc)<host_s2_zalloc_pages_exact+0x54>
~xy │ 0000bbb0: f81f83a8 stur x8, [x29, #-8]
z: 0xbbb4 0xbbc0 __fls inlined from fls64:31 (fls64.h) <98f30>:<98f14>:<98ef8>:
xyz │ __fls:13.49 (builtin-__fls.h) Sbepe return (sizeof(word) * 8) - 1 - __builtin_clzl(║word);
+word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbbb4 0xbbc0 (DW_OP_fbreg -0x8) __fls(inlined):fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~xyz │ 0000bbb4: f85f83a8 ldur x8, [x29, #-8]
xyz │ __fls:13.34 (builtin-__fls.h) sbepe return (sizeof(word) * 8) - 1 - ║__builtin_clzl(word);
~xyz │ 0000bbb8: dac01108 clz x8, x8
~xyz │ 0000bbbc: 52800809 mov w9, #0x40 // #64
-word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbbb4 0xbbc0 (DW_OP_fbreg -0x8) __fls(inlined):fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
xy │ fls64:31.18 (fls64.h) Sbepe return __fls(x) ║+ 1;
~xy │ 0000bbc0: 6b080128 subs w8, w9, w8
~xy │ 0000bbc4: 2a0803e0 mov w0, w8
xy │ fls64:31.2 (fls64.h) sbepe ║return __fls(x) + 1;
~xy │ 0000bbc8: b81f43a0 stur w0, [x29, #-12]
~xy │ ┌─0000bbcc: 14000001 b bbd0 <host_s2_zalloc_pages_exact+0x78>
│ │
xy │ │ fls64:32.1 (fls64.h) Sbepe ║}
~xy └>└>0000bbd0: b85f43a8 ldur w8, [x29, #-12] <- 0000bba8(b)<host_s2_zalloc_pages_exact+0x78>,0000bbcc(b)<host_s2_zalloc_pages_exact+0x78>
-x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbb94 0xbbd4 (DW_OP_breg31 0x18) fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
x get_order:46.2 (getorder.h) Sbepe ║return fls64(size);
~x 0000bbd4: b90017e8 str w8, [sp, #20]
~x ┌─0000bbd8: 14000001 b bbdc <host_s2_zalloc_pages_exact+0x84>
│
x │ get_order:48.1 (getorder.h) Sbepe ║}
~x └>0000bbdc: b94017e2 ldr w2, [sp, #20] <- 0000bbd8(b)<host_s2_zalloc_pages_exact+0x84>
-size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbb74 0xbbe0 (DW_OP_breg31 0x8) get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c
host_s2_zalloc_pages_exact:30.9 (mem_protect.c) Sbepe return ║hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(size));
~ 0000bbe0: 90000080 adrp x0, 1b000 <hyp_memory+0x460>
~ 0000bbe4: 91168000 add x0, x0, #0x5a0
~ 0000bbe8: 52800021 mov w1, #0x1 // #1
~ 0000bbec: 97fff573 bl 91b8 <hyp_alloc_pages>
host_s2_zalloc_pages_exact:30.2 (mem_protect.c) sbepe ║return hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(size));
~ 0000bbf0: a9437bfd ldp x29, x30, [sp, #48] <- 0000bbec(bl-succ)<return>
~ 0000bbf4: 910103ff add sp, sp, #0x40
0000bb64 CFA:r29+16 r29:c-16 r30:c-8
~ 0000bbf8: d65f03c0 ret
-size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0) host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28
**0000bbfc <host_s2_zalloc_page>:
+ host_s2_zalloc_page params:
+pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8)
host_s2_zalloc_page:34.0 (mem_protect.c) Sbepe ║{
+pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8) host_s2_zalloc_page:arch/arm64/kvm/hyp/nvhe/mem_protect.c:33
~ 0000bbfc: d10083ff sub sp, sp, #0x20
~ 0000bc00: a9017bfd stp x29, x30, [sp, #16]
0000bbfc CFA:r31 r29:u r30:u
~ 0000bc04: 910043fd add x29, sp, #0x10
~ 0000bc08: f90007e0 str x0, [sp, #8]
host_s2_zalloc_page:35.25 (mem_protect.c) SbePe return hyp_alloc_pages(║pool, HYP_GFP_ZERO, 0);
~ 0000bc0c: f94007e0 ldr x0, [sp, #8]
~ 0000bc10: 52800021 mov w1, #0x1 // #1
~ 0000bc14: 2a1f03e2 mov w2, wzr
host_s2_zalloc_page:35.9 (mem_protect.c) sbepe return ║hyp_alloc_pages(pool, HYP_GFP_ZERO, 0);
~ 0000bc18: 97fff568 bl 91b8 <hyp_alloc_pages>
host_s2_zalloc_page:35.2 (mem_protect.c) sbepe ║return hyp_alloc_pages(pool, HYP_GFP_ZERO, 0);
~ 0000bc1c: a9417bfd ldp x29, x30, [sp, #16] <- 0000bc18(bl-succ)<return>
~ 0000bc20: 910083ff add sp, sp, #0x20
0000bc08 CFA:r29+16 r29:c-16 r30:c-8
~ 0000bc24: d65f03c0 ret
-pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8) host_s2_zalloc_page:arch/arm64/kvm/hyp/nvhe/mem_protect.c:33
**0000bc28 <hyp_phys_to_virt>:
+ hyp_phys_to_virt params:
+phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8)
hyp_phys_to_virt:31.0 (memory.h) Sbepe ║{
0000bc28 CFA:r31
+phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8) hyp_phys_to_virt:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30
~ 0000bc28: d10043ff sub sp, sp, #0x10
~ 0000bc2c: f90007e0 str x0, [sp, #8]
hyp_phys_to_virt:32.9 (memory.h) SbePe return ║__hyp_va(phys);
~ 0000bc30: f94007e8 ldr x8, [sp, #8]
~ 0000bc34: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000bc38: f9439d29 ldr x9, [x9, #1848]
~ 0000bc3c: eb090100 subs x0, x8, x9
hyp_phys_to_virt:32.2 (memory.h) sbepe ║return __hyp_va(phys);
~ 0000bc40: 910043ff add sp, sp, #0x10
0000bc2c CFA:r31+16
~ 0000bc44: d65f03c0 ret
-phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8) hyp_phys_to_virt:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30
**0000bc48 <hyp_virt_to_phys>:
+ hyp_virt_to_phys params:
+addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8)
hyp_virt_to_phys:36.0 (memory.h) Sbepe ║{
0000bc48 CFA:r31
+addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35
~ 0000bc48: d10043ff sub sp, sp, #0x10
~ 0000bc4c: f90007e0 str x0, [sp, #8]
hyp_virt_to_phys:37.9 (memory.h) SbePe return ║__hyp_pa(addr);
~ 0000bc50: f94007e8 ldr x8, [sp, #8]
~ 0000bc54: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000bc58: f9439d29 ldr x9, [x9, #1848]
~ 0000bc5c: 8b090100 add x0, x8, x9
hyp_virt_to_phys:37.2 (memory.h) sbepe ║return __hyp_pa(addr);
~ 0000bc60: 910043ff add sp, sp, #0x10
0000bc4c CFA:r31+16
~ 0000bc64: d65f03c0 ret
-addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35
**0000bc68 <hyp_page_count>:
+ hyp_page_count params:
+addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8)
hyp_page_count:49.0 (memory.h) Sbepe ║{
0000bc68 CFA:r31
+addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:48
+p var pointer(struct hyp_page<89e06>/<98502>) 0xbc68 0xbca8 (DW_OP_fbreg 0x0) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:50
~ 0000bc68: d10043ff sub sp, sp, #0x10
~ 0000bc6c: f90007e0 str x0, [sp, #8]
hyp_page_count:50.23 (memory.h) SbePe struct hyp_page *p = ║hyp_virt_to_page(addr);
~ 0000bc70: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000bc74: f944c508 ldr x8, [x8, #2440]
~ 0000bc78: f94007e9 ldr x9, [sp, #8]
~ 0000bc7c: f000006a adrp x10, 1a000 <hyp_cpu_logical_map+0xe0>
~ 0000bc80: f9439d4a ldr x10, [x10, #1848]
~ 0000bc84: 8b0a0129 add x9, x9, x10
~ 0000bc88: d347fd29 lsr x9, x9, #7
~ 0000bc8c: 927bcd29 and x9, x9, #0x1ffffffffffffe0
~ 0000bc90: 8b090108 add x8, x8, x9
hyp_page_count:50.19 (memory.h) sbepe struct hyp_page *║p = hyp_virt_to_page(addr);
~ 0000bc94: f90003e8 str x8, [sp]
hyp_page_count:52.9 (memory.h) Sbepe return ║p->refcount;
~ 0000bc98: f94003e8 ldr x8, [sp]
hyp_page_count:52.12 (memory.h) sbepe return p->║refcount;
~ 0000bc9c: b9400100 ldr w0, [x8]
hyp_page_count:52.2 (memory.h) sbepe ║return p->refcount;
~ 0000bca0: 910043ff add sp, sp, #0x10
0000bc6c CFA:r31+16
~ 0000bca4: d65f03c0 ret
-addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:48
-p var pointer(struct hyp_page<89e06>/<98502>) 0xbc68 0xbca8 (DW_OP_fbreg 0x0) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:50
**0000bca8 <__hyp_pgtable_total_size>:
+ __hyp_pgtable_total_size params: none
__hyp_pgtable_total_size:56.0 (mm.h) Sbepe ║{
+reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbca8 0xbd4c (DW_OP_fbreg -0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:57
+nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x10) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58
+res var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58
+i var int (base type, DW_ATE_signed size:4) 0xbca8 0xbd4c (DW_OP_breg31 0x4) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:59
~ 0000bca8: d100c3ff sub sp, sp, #0x30 <- 0000bae0(bl)<__hyp_pgtable_total_size>
~ 0000bcac: a9027bfd stp x29, x30, [sp, #32]
0000bca8 CFA:r31 r29:u r30:u
~ 0000bcb0: 910083fd add x29, sp, #0x20
~ 0000bcb4: aa1f03e8 mov x8, xzr
__hyp_pgtable_total_size:58.26 (mm.h) SbePe unsigned long nr_pages, ║res = 0;
~ 0000bcb8: f90007e8 str x8, [sp, #8]
~ 0000bcbc: 2a1f03e9 mov w9, wzr
__hyp_pgtable_total_size:61.9 (mm.h) Sbepe for (i ║= 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ 0000bcc0: b90007e9 str w9, [sp, #4]
__hyp_pgtable_total_size:61.7 (mm.h) sbepe for (║i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ ┌─0000bcc4: 14000001 b bcc8 <__hyp_pgtable_total_size+0x20>
│
│ __hyp_pgtable_total_size:61.14 (mm.h) sbepe for (i = 0; ║i < kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ ╔>└>0000bcc8: b94007e8 ldr w8, [sp, #4] <- 0000bcc4(b)<__hyp_pgtable_total_size+0x20>,v0000bd38(b)<__hyp_pgtable_total_size+0x20>
║ __hyp_pgtable_total_size:61.18 (mm.h) sbepe for (i = 0; i < ║kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ ║ 0000bccc: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ ║ 0000bcd0: b943a12a ldr w10, [x9, #928]
║ __hyp_pgtable_total_size:61.2 (mm.h) sbepe ║for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ ║ 0000bcd4: 6b0a0108 subs w8, w8, w10
~ ║┌──0000bcd8: 5400032a b.ge bd3c <__hyp_pgtable_total_size+0x94> // b.tcont
║│
~ ║│┌─0000bcdc: 14000001 b bce0 <__hyp_pgtable_total_size+0x38> <- 0000bcd8(b.cc-succ)<fallthrough>
║││
║││ __hyp_pgtable_total_size:62.35 (mm.h) Sbepe reg = &kvm_nvhe_sym(hyp_memory)[║i];
~ ║│└>0000bce0: b98007e8 ldrsw x8, [sp, #4] <- 0000bcdc(b)<__hyp_pgtable_total_size+0x38>
║│ __hyp_pgtable_total_size:62.10 (mm.h) sbepe reg = &║kvm_nvhe_sym(hyp_memory)[i];
~ ║│ 0000bce4: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ ║│ 0000bce8: 912e8129 add x9, x9, #0xba0
~ ║│ 0000bcec: 8b081128 add x8, x9, x8, lsl #4
║│ __hyp_pgtable_total_size:62.7 (mm.h) sbepe reg ║= &kvm_nvhe_sym(hyp_memory)[i];
~ ║│ 0000bcf0: f81f83a8 stur x8, [x29, #-8]
║│ __hyp_pgtable_total_size:63.15 (mm.h) Sbepe nr_pages = (║reg->end - reg->start) >> PAGE_SHIFT;
~ ║│ 0000bcf4: f85f83a8 ldur x8, [x29, #-8]
║│ __hyp_pgtable_total_size:63.20 (mm.h) sbepe nr_pages = (reg->║end - reg->start) >> PAGE_SHIFT;
~ ║│ 0000bcf8: f9400509 ldr x9, [x8, #8]
║│ __hyp_pgtable_total_size:63.31 (mm.h) sbepe nr_pages = (reg->end - reg->║start) >> PAGE_SHIFT;
~ ║│ 0000bcfc: f9400108 ldr x8, [x8]
║│ __hyp_pgtable_total_size:63.24 (mm.h) sbepe nr_pages = (reg->end ║- reg->start) >> PAGE_SHIFT;
~ ║│ 0000bd00: eb080128 subs x8, x9, x8
║│ __hyp_pgtable_total_size:63.38 (mm.h) sbepe nr_pages = (reg->end - reg->start) ║>> PAGE_SHIFT;
~ ║│ 0000bd04: d34cfd08 lsr x8, x8, #12
║│ __hyp_pgtable_total_size:63.12 (mm.h) sbepe nr_pages ║= (reg->end - reg->start) >> PAGE_SHIFT;
~ ║│ 0000bd08: f9000be8 str x8, [sp, #16]
║│ __hyp_pgtable_total_size:64.38 (mm.h) Sbepe nr_pages = __hyp_pgtable_max_pages(║nr_pages);
~ ║│ 0000bd0c: f9400be0 ldr x0, [sp, #16]
║│ __hyp_pgtable_total_size:64.14 (mm.h) sbepe nr_pages = ║__hyp_pgtable_max_pages(nr_pages);
~ ║│ 0000bd10: 9400000f bl bd4c <__hyp_pgtable_max_pages>
║│
║│ __hyp_pgtable_total_size:64.12 (mm.h) sbepe nr_pages ║= __hyp_pgtable_max_pages(nr_pages);
~ ║│ 0000bd14: f9000be0 str x0, [sp, #16] <- 0000bd10(bl-succ)<return>
║│ __hyp_pgtable_total_size:65.10 (mm.h) Sbepe res += ║nr_pages << PAGE_SHIFT;
~ ║│ 0000bd18: f9400be8 ldr x8, [sp, #16]
║│ __hyp_pgtable_total_size:65.7 (mm.h) sbepe res ║+= nr_pages << PAGE_SHIFT;
~ ║│ 0000bd1c: f94007e9 ldr x9, [sp, #8]
~ ║│ 0000bd20: 8b083128 add x8, x9, x8, lsl #12
~ ║│ 0000bd24: f90007e8 str x8, [sp, #8]
║│ __hyp_pgtable_total_size:66.2 (mm.h) Sbepe }
~ ║│┌─0000bd28: 14000001 b bd2c <__hyp_pgtable_total_size+0x84>
║││
║││ __hyp_pgtable_total_size:61.50 (mm.h) Sbepe for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i║++) {
~ ║│└>0000bd2c: b94007e8 ldr w8, [sp, #4] <- 0000bd28(b)<__hyp_pgtable_total_size+0x84>
~ ║│ 0000bd30: 11000508 add w8, w8, #0x1
~ ║│ 0000bd34: b90007e8 str w8, [sp, #4]
║│ __hyp_pgtable_total_size:61.2 (mm.h) sbepe ║for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) {
~ ╚╪══0000bd38: 17ffffe4 b bcc8 <__hyp_pgtable_total_size+0x20>
│
│ __hyp_pgtable_total_size:68.9 (mm.h) Sbepe return ║res;
~ └─>0000bd3c: f94007e0 ldr x0, [sp, #8] <- 0000bcd8(b.cc)<__hyp_pgtable_total_size+0x94>
__hyp_pgtable_total_size:68.2 (mm.h) sbepe ║return res;
~ 0000bd40: a9427bfd ldp x29, x30, [sp, #32]
~ 0000bd44: 9100c3ff add sp, sp, #0x30
0000bcb4 CFA:r29+16 r29:c-16 r30:c-8
~ 0000bd48: d65f03c0 ret
-reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbca8 0xbd4c (DW_OP_fbreg -0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:57
-nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x10) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58
-res var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58
-i var int (base type, DW_ATE_signed size:4) 0xbca8 0xbd4c (DW_OP_breg31 0x4) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:59
**0000bd4c <__hyp_pgtable_max_pages>:
+ __hyp_pgtable_max_pages params:
+nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18)
__hyp_pgtable_max_pages:43.0 (mm.h) Sbepe ║{
0000bd4c CFA:r31
+nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:42
+total var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x10) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44
+i var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x8) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44
~ 0000bd4c: d10083ff sub sp, sp, #0x20 <- 0000bb38(bl)<__hyp_pgtable_max_pages>,0000bd10(bl)<__hyp_pgtable_max_pages>
~ 0000bd50: f9000fe0 str x0, [sp, #24]
~ 0000bd54: aa1f03e8 mov x8, xzr
__hyp_pgtable_max_pages:44.16 (mm.h) SbePe unsigned long ║total = 0, i;
~ 0000bd58: f9000be8 str x8, [sp, #16]
__hyp_pgtable_max_pages:47.9 (mm.h) Sbepe for (i ║= 0; i < 4; i++) {
~ 0000bd5c: f90007e8 str x8, [sp, #8]
__hyp_pgtable_max_pages:47.7 (mm.h) sbepe for (║i = 0; i < 4; i++) {
~ ┌─0000bd60: 14000001 b bd64 <__hyp_pgtable_max_pages+0x18>
│
│ __hyp_pgtable_max_pages:47.14 (mm.h) sbepe for (i = 0; ║i < 4; i++) {
~ ╔>└>0000bd64: f94007e8 ldr x8, [sp, #8] <- 0000bd60(b)<__hyp_pgtable_max_pages+0x18>,v0000bda4(b)<__hyp_pgtable_max_pages+0x18>
║ __hyp_pgtable_max_pages:47.2 (mm.h) sbepe ║for (i = 0; i < 4; i++) {
~ ║ 0000bd68: f1000d08 subs x8, x8, #0x3
~ ║┌──0000bd6c: 540001e8 b.hi bda8 <__hyp_pgtable_max_pages+0x5c> // b.pmore
║│
~ ║│┌─0000bd70: 14000001 b bd74 <__hyp_pgtable_max_pages+0x28> <- 0000bd6c(b.cc-succ)<fallthrough>
║││
║││ __hyp_pgtable_max_pages:48.14 (mm.h) Sbepe nr_pages = ║DIV_ROUND_UP(nr_pages, PTRS_PER_PTE);
~ ║│└>0000bd74: f9400fe8 ldr x8, [sp, #24] <- 0000bd70(b)<__hyp_pgtable_max_pages+0x28>
~ ║│ 0000bd78: 9107fd08 add x8, x8, #0x1ff
~ ║│ 0000bd7c: d349fd08 lsr x8, x8, #9
║│ __hyp_pgtable_max_pages:48.12 (mm.h) sbepe nr_pages ║= DIV_ROUND_UP(nr_pages, PTRS_PER_PTE);
~ ║│ 0000bd80: f9000fe8 str x8, [sp, #24]
║│ __hyp_pgtable_max_pages:49.12 (mm.h) Sbepe total += ║nr_pages;
~ ║│ 0000bd84: f9400fe8 ldr x8, [sp, #24]
║│ __hyp_pgtable_max_pages:49.9 (mm.h) sbepe total ║+= nr_pages;
~ ║│ 0000bd88: f9400be9 ldr x9, [sp, #16]
~ ║│ 0000bd8c: 8b080128 add x8, x9, x8
~ ║│ 0000bd90: f9000be8 str x8, [sp, #16]
║│ __hyp_pgtable_max_pages:50.2 (mm.h) Sbepe }
~ ║│┌─0000bd94: 14000001 b bd98 <__hyp_pgtable_max_pages+0x4c>
║││
║││ __hyp_pgtable_max_pages:47.22 (mm.h) Sbepe for (i = 0; i < 4; i║++) {
~ ║│└>0000bd98: f94007e8 ldr x8, [sp, #8] <- 0000bd94(b)<__hyp_pgtable_max_pages+0x4c>
~ ║│ 0000bd9c: 91000508 add x8, x8, #0x1
~ ║│ 0000bda0: f90007e8 str x8, [sp, #8]
║│ __hyp_pgtable_max_pages:47.2 (mm.h) sbepe ║for (i = 0; i < 4; i++) {
~ ╚╪══0000bda4: 17fffff0 b bd64 <__hyp_pgtable_max_pages+0x18>
│
│ __hyp_pgtable_max_pages:52.9 (mm.h) Sbepe return ║total;
~ └─>0000bda8: f9400be0 ldr x0, [sp, #16] <- 0000bd6c(b.cc)<__hyp_pgtable_max_pages+0x5c>
__hyp_pgtable_max_pages:52.2 (mm.h) sbepe ║return total;
~ 0000bdac: 910083ff add sp, sp, #0x20
0000bd50 CFA:r31+32
~ 0000bdb0: d65f03c0 ret
-nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:42
-total var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x10) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44
-i var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x8) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44
**0000bdb4 <__ilog2_u64>:
+ __ilog2_u64 params:
+n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0)
__ilog2_u64:31.0 (log2.h) Sbepe ║{
0000bdb4 CFA:r31
+n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0) __ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30
~ 0000bdb4: d10083ff sub sp, sp, #0x20
~ 0000bdb8: f90003e0 str x0, [sp]
__ilog2_u64:32.15 (log2.h) SbePe return fls64(║n) - 1;
~ 0000bdbc: f94003e8 ldr x8, [sp]
~ 0000bdc0: f90007e8 str x8, [sp, #8]
a: 0xbdc4 0xbe04 fls64 inlined from __ilog2_u64:32 (log2.h) <990bb>:
a fls64:29.6 (fls64.h) Sbepe if (║x == 0)
+x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbdc4 0xbe04 (DW_OP_fbreg 0x8) fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~a 0000bdc4: f94007e8 ldr x8, [sp, #8]
a fls64:29.6 (fls64.h) sbepe if (║x == 0)
~a ┌──0000bdc8: b50000a8 cbnz x8, bddc <__ilog2_u64+0x28>
│
~a │┌─0000bdcc: 14000001 b bdd0 <__ilog2_u64+0x1c> <- 0000bdc8(b.cc-succ)<fallthrough>
││
~a │└>0000bdd0: 2a1f03e8 mov w8, wzr <- 0000bdcc(b)<__ilog2_u64+0x1c>
a │ fls64:30.3 (fls64.h) Sbepe ║return 0;
~a │ 0000bdd4: b90017e8 str w8, [sp, #20]
~a ┌┼──0000bdd8: 1400000a b be00 <__ilog2_u64+0x4c>
││
a ││ fls64:31.15 (fls64.h) Sbepe return __fls(║x) + 1;
~a │└─>0000bddc: f94007e8 ldr x8, [sp, #8] <- 0000bdc8(b.cc)<__ilog2_u64+0x28>
~a │ 0000bde0: f9000fe8 str x8, [sp, #24]
b: 0xbde4 0xbdf0 __fls inlined from fls64:31 (fls64.h) <990d7>:<990bb>:
ab │ __fls:13.49 (builtin-__fls.h) Sbepe return (sizeof(word) * 8) - 1 - __builtin_clzl(║word);
+word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbde4 0xbdf0 (DW_OP_fbreg 0x18) __fls(inlined):fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c
~ab │ 0000bde4: f9400fe8 ldr x8, [sp, #24]
ab │ __fls:13.34 (builtin-__fls.h) sbepe return (sizeof(word) * 8) - 1 - ║__builtin_clzl(word);
~ab │ 0000bde8: dac01108 clz x8, x8
~ab │ 0000bdec: 52800809 mov w9, #0x40 // #64
-word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbde4 0xbdf0 (DW_OP_fbreg 0x18) __fls(inlined):fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c
a │ fls64:31.18 (fls64.h) Sbepe return __fls(x) ║+ 1;
~a │ 0000bdf0: 6b080128 subs w8, w9, w8
~a │ 0000bdf4: 2a0803e0 mov w0, w8
a │ fls64:31.2 (fls64.h) sbepe ║return __fls(x) + 1;
~a │ 0000bdf8: b90017e0 str w0, [sp, #20]
~a │ ┌─0000bdfc: 14000001 b be00 <__ilog2_u64+0x4c>
│ │
a │ │ fls64:32.1 (fls64.h) Sbepe ║}
~a └>└>0000be00: b94017e8 ldr w8, [sp, #20] <- 0000bdd8(b)<__ilog2_u64+0x4c>,0000bdfc(b)<__ilog2_u64+0x4c>
-x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbdc4 0xbe04 (DW_OP_fbreg 0x8) fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c
__ilog2_u64:32.18 (log2.h) sbepe return fls64(n) ║- 1;
~ 0000be04: 71000500 subs w0, w8, #0x1
__ilog2_u64:32.2 (log2.h) sbepe ║return fls64(n) - 1;
~ 0000be08: 910083ff add sp, sp, #0x20
0000bdb8 CFA:r31+32
~ 0000be0c: d65f03c0 ret
-n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0) __ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30
**0000be10 <cpus_have_cap>:
+ cpus_have_cap params:
+num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8)
cpus_have_cap:428.0 (cpufeature.h) Sbepe ║{
+num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mem_protect.c:427
~ 0000be10: d10083ff sub sp, sp, #0x20
~ 0000be14: a9017bfd stp x29, x30, [sp, #16]
0000be10 CFA:r31 r29:u r30:u
~ 0000be18: 910043fd add x29, sp, #0x10
~ 0000be1c: b9000be0 str w0, [sp, #8]
cpus_have_cap:429.6 (cpufeature.h) SbePe if (║num >= ARM64_NCAPS)
~ 0000be20: b9400be8 ldr w8, [sp, #8]
cpus_have_cap:429.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS)
~ 0000be24: 7100f508 subs w8, w8, #0x3d
~ ┌──0000be28: 540000a3 b.cc be3c <cpus_have_cap+0x2c> // b.lo, b.ul, b.last
│
~ │┌─0000be2c: 14000001 b be30 <cpus_have_cap+0x20> <- 0000be28(b.cc-succ)<fallthrough>
││
~ │└>0000be30: 2a1f03e8 mov w8, wzr <- 0000be2c(b)<cpus_have_cap+0x20>
│ cpus_have_cap:430.3 (cpufeature.h) Sbepe ║return false;
~ │ 0000be34: 381ff3a8 sturb w8, [x29, #-1]
~ ┌┼──0000be38: 14000009 b be5c <cpus_have_cap+0x4c>
││
││ cpus_have_cap:431.18 (cpufeature.h) Sbepe return test_bit(║num, cpu_hwcaps);
~ │└─>0000be3c: b9400be0 ldr w0, [sp, #8] <- 0000be28(b.cc)<cpus_have_cap+0x2c>
│ cpus_have_cap:431.9 (cpufeature.h) sbepe return ║test_bit(num, cpu_hwcaps);
~ │ 0000be40: 90000081 adrp x1, 1b000 <hyp_memory+0x460>
~ │ 0000be44: 91218021 add x1, x1, #0x860
~ │ 0000be48: 94000009 bl be6c <test_bit>
│
~ │ 0000be4c: 71000008 subs w8, w0, #0x0 <- 0000be48(bl-succ)<return>
~ │ 0000be50: 1a9f07e9 cset w9, ne // ne = any
│ cpus_have_cap:431.2 (cpufeature.h) sbepe ║return test_bit(num, cpu_hwcaps);
~ │ 0000be54: 381ff3a9 sturb w9, [x29, #-1]
~ │ ┌─0000be58: 14000001 b be5c <cpus_have_cap+0x4c>
│ │
│ │ cpus_have_cap:432.1 (cpufeature.h) Sbepe ║}
~ └>└>0000be5c: 385ff3a0 ldurb w0, [x29, #-1] <- 0000be38(b)<cpus_have_cap+0x4c>,0000be58(b)<cpus_have_cap+0x4c>
~ 0000be60: a9417bfd ldp x29, x30, [sp, #16]
~ 0000be64: 910083ff add sp, sp, #0x20
0000be1c CFA:r29+16 r29:c-16 r30:c-8
~ 0000be68: d65f03c0 ret
-num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mem_protect.c:427
**0000be6c <test_bit>:
+ test_bit params:
+nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc)
+addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0)
test_bit:105.0 (non-atomic.h) Sbepe ║{
0000be6c CFA:r31
+nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
+addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
~ 0000be6c: d10043ff sub sp, sp, #0x10 <- 0000be48(bl)<test_bit>
~ 0000be70: b9000fe0 str w0, [sp, #12]
~ 0000be74: f90003e1 str x1, [sp]
test_bit:106.16 (non-atomic.h) SbePe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
~ 0000be78: f94003e8 ldr x8, [sp]
test_bit:106.21 (non-atomic.h) sbepe return 1UL & (addr[║BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
~ 0000be7c: b9400fe9 ldr w9, [sp, #12]
~ 0000be80: 1100fd2a add w10, w9, #0x3f
~ 0000be84: 7100012b subs w11, w9, #0x0
~ 0000be88: 1a89b149 csel w9, w10, w9, lt // lt = tstop
~ 0000be8c: 13067d29 asr w9, w9, #6
test_bit:106.16 (non-atomic.h) sbepe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
~ 0000be90: 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)));
~ 0000be94: b9400fe9 ldr w9, [sp, #12]
~ 0000be98: 2a0903ec mov w12, w9
test_bit:106.35 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] ║>> (nr & (BITS_PER_LONG-1)));
~ 0000be9c: 9acc2508 lsr x8, x8, x12
test_bit:106.13 (non-atomic.h) sbepe return 1UL ║& (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
~ 0000bea0: 12000100 and w0, w8, #0x1
test_bit:106.2 (non-atomic.h) sbepe ║return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
~ 0000bea4: 910043ff add sp, sp, #0x10
0000be70 CFA:r31+16
~ 0000bea8: d65f03c0 ret
-nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
-addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104
**0000beac <__translate_far_to_hpfar>:
+ __translate_far_to_hpfar params:
+far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80)
+hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78)
__translate_far_to_hpfar:132.0 (switch.h) Sbepe ║{
0000beac CFA:r31
+far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131
+hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131
+par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x70) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133
+tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x68) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133
~ 0000beac: d10243ff sub sp, sp, #0x90 <- 0000b6cc(bl)<__translate_far_to_hpfar>
~ 0000beb0: f90043e0 str x0, [sp, #128]
~ 0000beb4: f9003fe1 str x1, [sp, #120]
__translate_far_to_hpfar:145.8 (switch.h) SbePe par = ║read_sysreg_par();
+par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeb8 0xbee4 (DW_OP_fbreg 0x60) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145
~ 0000beb8: d503201f nop
__translate_far_to_hpfar:145.8 (switch.h) sbepe par = ║read_sysreg_par();
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbebc 0xbed0 (DW_OP_fbreg 0x58) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145
~ 0000bebc: d5387408 mrs x8, par_el1
~ 0000bec0: f9002fe8 str x8, [sp, #88]
~ 0000bec4: f9402fe8 ldr x8, [sp, #88]
~ 0000bec8: f9002be8 str x8, [sp, #80]
~ 0000becc: f9402be8 ldr x8, [sp, #80]
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbebc 0xbed0 (DW_OP_fbreg 0x58) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145
__translate_far_to_hpfar:145.8 (switch.h) sbepe par = ║read_sysreg_par();
~ 0000bed0: f90033e8 str x8, [sp, #96]
~ 0000bed4: d503201f nop
~ 0000bed8: f94033e8 ldr x8, [sp, #96]
~ 0000bedc: f90027e8 str x8, [sp, #72]
~ 0000bee0: f94027e8 ldr x8, [sp, #72]
-par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeb8 0xbee4 (DW_OP_fbreg 0x60) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145
__translate_far_to_hpfar:145.6 (switch.h) sbepe par ║= read_sysreg_par();
~ 0000bee4: f9003be8 str x8, [sp, #112]
~ 0000bee8: 2a1f03e9 mov w9, wzr
__translate_far_to_hpfar:146.7 (switch.h) Sbepe if (!║__kvm_at("s1e1r", far))
+__kvm_at_err var int (base type, DW_ATE_signed size:4) 0xbeec 0xbf30 (DW_OP_fbreg 0x44) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
+spsr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x38) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
+elr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x30) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
~ 0000beec: b90047e9 str w9, [sp, #68]
~ 0000bef0: b94047e9 ldr w9, [sp, #68]
~ 0000bef4: f94043e8 ldr x8, [sp, #128]
~ 0000bef8: d53c400a mrs x10, spsr_el2
~ 0000befc: d53c402b mrs x11, elr_el2
~ 0000bf00: d5087808 at s1e1r, x8
~ 0000bf04: d5033fdf isb
~ ┌─0000bf08: 14000004 b bf18 <__translate_far_to_hpfar+0x6c>
~ │ 0000bf0c: d51c400a msr spsr_el2, x10
~ │ 0000bf10: d51c402b msr elr_el2, x11
~ │ 0000bf14: 128001a9 mov w9, #0xfffffff2 // #-14
│
~ └>0000bf18: b90047e9 str w9, [sp, #68] <- 0000bf08(b)<__translate_far_to_hpfar+0x6c>
~ 0000bf1c: f9001fea str x10, [sp, #56]
~ 0000bf20: f9001beb str x11, [sp, #48]
~ 0000bf24: b94047e9 ldr w9, [sp, #68]
~ 0000bf28: b9002fe9 str w9, [sp, #44]
~ 0000bf2c: b9402fe9 ldr w9, [sp, #44]
-__kvm_at_err var int (base type, DW_ATE_signed size:4) 0xbeec 0xbf30 (DW_OP_fbreg 0x44) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
-spsr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x38) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
-elr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x30) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146
__translate_far_to_hpfar:146.6 (switch.h) sbepe if (║!__kvm_at("s1e1r", far))
~ ┌──0000bf30: 350001e9 cbnz w9, bf6c <__translate_far_to_hpfar+0xc0>
│
~ │┌─0000bf34: 14000001 b bf38 <__translate_far_to_hpfar+0x8c> <- 0000bf30(b.cc-succ)<fallthrough>
││
││ __translate_far_to_hpfar:147.9 (switch.h) Sbepe tmp = ║read_sysreg_par();
+par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf38 0xbf64 (DW_OP_fbreg 0x20) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147
~ │└>0000bf38: d503201f nop <- 0000bf34(b)<__translate_far_to_hpfar+0x8c>
│ __translate_far_to_hpfar:147.9 (switch.h) sbepe tmp = ║read_sysreg_par();
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf3c 0xbf50 (DW_OP_fbreg 0x18) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147
~ │ 0000bf3c: d5387408 mrs x8, par_el1
~ │ 0000bf40: f9000fe8 str x8, [sp, #24]
~ │ 0000bf44: f9400fe8 ldr x8, [sp, #24]
~ │ 0000bf48: f9000be8 str x8, [sp, #16]
~ │ 0000bf4c: f9400be8 ldr x8, [sp, #16]
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf3c 0xbf50 (DW_OP_fbreg 0x18) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147
│ __translate_far_to_hpfar:147.9 (switch.h) sbepe tmp = ║read_sysreg_par();
~ │ 0000bf50: f90013e8 str x8, [sp, #32]
~ │ 0000bf54: d503201f nop
~ │ 0000bf58: f94013e8 ldr x8, [sp, #32]
~ │ 0000bf5c: f90007e8 str x8, [sp, #8]
~ │ 0000bf60: f94007e8 ldr x8, [sp, #8]
-par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf38 0xbf64 (DW_OP_fbreg 0x20) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147
│ __translate_far_to_hpfar:147.7 (switch.h) sbepe tmp ║= read_sysreg_par();
~ │ 0000bf64: f90037e8 str x8, [sp, #104]
│ __translate_far_to_hpfar:147.3 (switch.h) sbepe ║tmp = read_sysreg_par();
~ ┌──┼──0000bf68: 14000005 b bf7c <__translate_far_to_hpfar+0xd0>
│ │
~ │ └─>0000bf6c: 52800028 mov w8, #0x1 // #1 <- 0000bf30(b.cc)<__translate_far_to_hpfar+0xc0>
~ │ 0000bf70: 2a0803e9 mov w9, w8
│ __translate_far_to_hpfar:149.7 (switch.h) Sbepe tmp ║= SYS_PAR_EL1_F; /* back to the guest */
~ │ 0000bf74: f90037e9 str x9, [sp, #104]
~ │ ┌─0000bf78: 14000001 b bf7c <__translate_far_to_hpfar+0xd0>
│ │
│ │ __translate_far_to_hpfar:150.2 (switch.h) Sbepe ║write_sysreg(par, par_el1);
~ └>┌─└>0000bf7c: 14000001 b bf80 <__translate_far_to_hpfar+0xd4> <- 0000bf68(b)<__translate_far_to_hpfar+0xd0>,0000bf78(b)<__translate_far_to_hpfar+0xd0>
│
│ __translate_far_to_hpfar:150.2 (switch.h) sbepe ║write_sysreg(par, par_el1);
+__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf80 0xbf94 (DW_OP_fbreg 0x0) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:150
~ └──>0000bf80: f9403be8 ldr x8, [sp, #112] <- 0000bf7c(b)<__translate_far_to_hpfar+0xd4>
~ 0000bf84: f90003e8 str x8, [sp]
~ 0000bf88: f94003e8 ldr x8, [sp]
~ 0000bf8c: d5187408 msr par_el1, x8
~ ┌─0000bf90: 14000001 b bf94 <__translate_far_to_hpfar+0xe8>
-__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf80 0xbf94 (DW_OP_fbreg 0x0) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:150
│
│ __translate_far_to_hpfar:152.6 (switch.h) Sbepe if (║unlikely(tmp & SYS_PAR_EL1_F))
~ └>0000bf94: 3941a3e8 ldrb w8, [sp, #104] <- 0000bf90(b)<__translate_far_to_hpfar+0xe8>
__translate_far_to_hpfar:152.6 (switch.h) sbepe if (║unlikely(tmp & SYS_PAR_EL1_F))
~ ┌──0000bf98: 360000a8 tbz w8, #0, bfac <__translate_far_to_hpfar+0x100>
│
~ │┌─0000bf9c: 14000001 b bfa0 <__translate_far_to_hpfar+0xf4> <- 0000bf98(b.cc-succ)<fallthrough>
││
~ │└>0000bfa0: 2a1f03e8 mov w8, wzr <- 0000bf9c(b)<__translate_far_to_hpfar+0xf4>
│ __translate_far_to_hpfar:153.3 (switch.h) Sbepe ║return false; /* Translation failed, back to guest */
~ │ 0000bfa4: 39023fe8 strb w8, [sp, #143]
~ ┌┼──0000bfa8: 14000009 b bfcc <__translate_far_to_hpfar+0x120>
││
││ __translate_far_to_hpfar:156.11 (switch.h) Sbepe *hpfar = ║PAR_TO_HPFAR(tmp);
~ │└─>0000bfac: f94037e8 ldr x8, [sp, #104] <- 0000bf98(b.cc)<__translate_far_to_hpfar+0x100>
~ │ 0000bfb0: 92748d08 and x8, x8, #0xfffffffff000
~ │ 0000bfb4: d348fd08 lsr x8, x8, #8
│ __translate_far_to_hpfar:156.3 (switch.h) sbepe *║hpfar = PAR_TO_HPFAR(tmp);
~ │ 0000bfb8: f9403fe9 ldr x9, [sp, #120]
│ __translate_far_to_hpfar:156.9 (switch.h) sbepe *hpfar ║= PAR_TO_HPFAR(tmp);
~ │ 0000bfbc: f9000128 str x8, [x9]
~ │ 0000bfc0: 5280002a mov w10, #0x1 // #1
│ __translate_far_to_hpfar:157.2 (switch.h) Sbepe ║return true;
~ │ 0000bfc4: 39023fea strb w10, [sp, #143]
~ │ ┌─0000bfc8: 14000001 b bfcc <__translate_far_to_hpfar+0x120>
│ │
│ │ __translate_far_to_hpfar:158.1 (switch.h) Sbepe ║}
~ └>└>0000bfcc: 39423fe0 ldrb w0, [sp, #143] <- 0000bfa8(b)<__translate_far_to_hpfar+0x120>,0000bfc8(b)<__translate_far_to_hpfar+0x120>
~ 0000bfd0: 910243ff add sp, sp, #0x90
0000beb0 CFA:r31+144
~ 0000bfd4: d65f03c0 ret
-far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131
-hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131
-par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x70) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133
-tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x68) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133
**0000bfd8 <ipa_is_memory>:
+ ipa_is_memory params:
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20)
ipa_is_memory:133.0 (mem_protect.c) Sbepe ║{
0000bfd8 CFA:r31
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:132
+cur var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x1c) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
+left var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x18) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
+right var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x14) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
+reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbfd8 0xc0ac (DW_OP_fbreg 0x8) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:135
~ 0000bfd8: d100c3ff sub sp, sp, #0x30 <- 0000b740(bl)<ipa_is_memory>
~ 0000bfdc: f90013e0 str x0, [sp, #32]
~ 0000bfe0: 2a1f03e8 mov w8, wzr
ipa_is_memory:134.11 (mem_protect.c) SbePe int cur, ║left = 0, right = hyp_memblock_nr;
~ 0000bfe4: b9001be8 str w8, [sp, #24]
ipa_is_memory:134.29 (mem_protect.c) sbepe int cur, left = 0, right = ║hyp_memblock_nr;
~ 0000bfe8: 90000089 adrp x9, 1b000 <hyp_memory+0x460>
~ 0000bfec: b943a128 ldr w8, [x9, #928]
ipa_is_memory:134.21 (mem_protect.c) sbepe int cur, left = 0, ║right = hyp_memblock_nr;
~ 0000bff0: b90017e8 str w8, [sp, #20]
ipa_is_memory:138.2 (mem_protect.c) Sbepe ║while (left < right) {
~ ┌─0000bff4: 14000001 b bff8 <ipa_is_memory+0x20>
│
│ ipa_is_memory:138.9 (mem_protect.c) sbepe while (║left < right) {
~ ╔════>└>0000bff8: b9401be8 ldr w8, [sp, #24] <- 0000bff4(b)<ipa_is_memory+0x20>,v0000c090(b)<ipa_is_memory+0x20>
║ ipa_is_memory:138.16 (mem_protect.c) sbepe while (left < ║right) {
~ ║ 0000bffc: b94017e9 ldr w9, [sp, #20]
║ ipa_is_memory:138.2 (mem_protect.c) sbepe ║while (left < right) {
~ ║ 0000c000: 6b090108 subs w8, w8, w9
~ ║┌──────0000c004: 5400048a b.ge c094 <ipa_is_memory+0xbc> // b.tcont
║│
~ ║│ ┌─0000c008: 14000001 b c00c <ipa_is_memory+0x34> <- 0000c004(b.cc-succ)<fallthrough>
║│ │
║│ │ ipa_is_memory:139.10 (mem_protect.c) Sbepe cur = (║left + right) >> 1;
~ ║│ └>0000c00c: b9401be8 ldr w8, [sp, #24] <- 0000c008(b)<ipa_is_memory+0x34>
║│ ipa_is_memory:139.17 (mem_protect.c) sbepe cur = (left + ║right) >> 1;
~ ║│ 0000c010: b94017e9 ldr w9, [sp, #20]
║│ ipa_is_memory:139.15 (mem_protect.c) sbepe cur = (left ║+ right) >> 1;
~ ║│ 0000c014: 0b090108 add w8, w8, w9
║│ ipa_is_memory:139.24 (mem_protect.c) sbepe cur = (left + right) ║>> 1;
~ ║│ 0000c018: 13017d08 asr w8, w8, #1
║│ ipa_is_memory:139.7 (mem_protect.c) sbepe cur ║= (left + right) >> 1;
~ ║│ 0000c01c: b9001fe8 str w8, [sp, #28]
║│ ipa_is_memory:140.21 (mem_protect.c) Sbepe reg = &hyp_memory[║cur];
~ ║│ 0000c020: b9801fea ldrsw x10, [sp, #28]
║│ ipa_is_memory:140.10 (mem_protect.c) sbepe reg = &║hyp_memory[cur];
~ ║│ 0000c024: d000006b adrp x11, 1a000 <hyp_cpu_logical_map+0xe0>
~ ║│ 0000c028: 912e816b add x11, x11, #0xba0
~ ║│ 0000c02c: 8b0a116a add x10, x11, x10, lsl #4
║│ ipa_is_memory:140.7 (mem_protect.c) sbepe reg ║= &hyp_memory[cur];
~ ║│ 0000c030: f90007ea str x10, [sp, #8]
║│ ipa_is_memory:141.7 (mem_protect.c) Sbepe if (║ipa < reg->start)
~ ║│ 0000c034: f94013ea ldr x10, [sp, #32]
║│ ipa_is_memory:141.13 (mem_protect.c) sbepe if (ipa < ║reg->start)
~ ║│ 0000c038: f94007eb ldr x11, [sp, #8]
║│ ipa_is_memory:141.18 (mem_protect.c) sbepe if (ipa < reg->║start)
~ ║│ 0000c03c: f940016b ldr x11, [x11]
║│ ipa_is_memory:141.7 (mem_protect.c) sbepe if (║ipa < reg->start)
~ ║│ 0000c040: eb0b014a subs x10, x10, x11
~ ║│ ┌──0000c044: 540000a2 b.cs c058 <ipa_is_memory+0x80> // b.hs, b.nlast
║│ │
~ ║│ │┌─0000c048: 14000001 b c04c <ipa_is_memory+0x74> <- 0000c044(b.cc-succ)<fallthrough>
║│ ││
║│ ││ ipa_is_memory:142.12 (mem_protect.c) Sbepe right = ║cur;
~ ║│ │└>0000c04c: b9401fe8 ldr w8, [sp, #28] <- 0000c048(b)<ipa_is_memory+0x74>
║│ │ ipa_is_memory:142.10 (mem_protect.c) sbepe right ║= cur;
~ ║│ │ 0000c050: b90017e8 str w8, [sp, #20]
║│ │ ipa_is_memory:142.4 (mem_protect.c) sbepe ║right = cur;
~ ║│┌──┼──0000c054: 1400000f b c090 <ipa_is_memory+0xb8>
║││ │
║││ │ ipa_is_memory:143.12 (mem_protect.c) Sbepe else if (║ipa >= reg->end)
~ ║││ └─>0000c058: f94013e8 ldr x8, [sp, #32] <- 0000c044(b.cc)<ipa_is_memory+0x80>
║││ ipa_is_memory:143.19 (mem_protect.c) sbepe else if (ipa >= ║reg->end)
~ ║││ 0000c05c: f94007e9 ldr x9, [sp, #8]
║││ ipa_is_memory:143.24 (mem_protect.c) sbepe else if (ipa >= reg->║end)
~ ║││ 0000c060: f9400529 ldr x9, [x9, #8]
║││ ipa_is_memory:143.12 (mem_protect.c) sbepe else if (║ipa >= reg->end)
~ ║││ 0000c064: eb090108 subs x8, x8, x9
~ ║││ ┌──0000c068: 540000c3 b.cc c080 <ipa_is_memory+0xa8> // b.lo, b.ul, b.last
║││ │
~ ║││ │┌─0000c06c: 14000001 b c070 <ipa_is_memory+0x98> <- 0000c068(b.cc-succ)<fallthrough>
║││ ││
║││ ││ ipa_is_memory:144.11 (mem_protect.c) Sbepe left = ║cur + 1;
~ ║││ │└>0000c070: b9401fe8 ldr w8, [sp, #28] <- 0000c06c(b)<ipa_is_memory+0x98>
║││ │ ipa_is_memory:144.15 (mem_protect.c) sbepe left = cur ║+ 1;
~ ║││ │ 0000c074: 11000508 add w8, w8, #0x1
║││ │ ipa_is_memory:144.9 (mem_protect.c) sbepe left ║= cur + 1;
~ ║││ │ 0000c078: b9001be8 str w8, [sp, #24]
║││ │ ipa_is_memory:144.4 (mem_protect.c) sbepe ║left = cur + 1;
~ ║││ ┌┼──0000c07c: 14000004 b c08c <ipa_is_memory+0xb4>
║││ ││
~ ║││ │└─>0000c080: 52800028 mov w8, #0x1 // #1 <- 0000c068(b.cc)<ipa_is_memory+0xa8>
║││ │ ipa_is_memory:146.4 (mem_protect.c) Sbepe ║return true;
~ ║││ │ 0000c084: 3900bfe8 strb w8, [sp, #47]
~ ║││┌┼───0000c088: 14000006 b c0a0 <ipa_is_memory+0xc8>
║││││
~ ║│││└>┌─0000c08c: 14000001 b c090 <ipa_is_memory+0xb8> <- 0000c07c(b)<ipa_is_memory+0xb4>
║│││ │
║│││ │ ipa_is_memory:138.2 (mem_protect.c) Sbepe ║while (left < right) {
~ ╚╪└┼─>└>0000c090: 17ffffda b bff8 <ipa_is_memory+0x20> <- 0000c054(b)<ipa_is_memory+0xb8>,0000c08c(b)<ipa_is_memory+0xb8>
│ │
~ └─┼───>0000c094: 2a1f03e8 mov w8, wzr <- 0000c004(b.cc)<ipa_is_memory+0xbc>
│ ipa_is_memory:149.2 (mem_protect.c) Sbepe ║return false;
~ │ 0000c098: 3900bfe8 strb w8, [sp, #47]
~ │ ┌─0000c09c: 14000001 b c0a0 <ipa_is_memory+0xc8>
│ │
│ │ ipa_is_memory:150.1 (mem_protect.c) Sbepe ║}
~ └─>└>0000c0a0: 3940bfe0 ldrb w0, [sp, #47] <- 0000c088(b)<ipa_is_memory+0xc8>,0000c09c(b)<ipa_is_memory+0xc8>
~ 0000c0a4: 9100c3ff add sp, sp, #0x30
0000bfdc CFA:r31+48
~ 0000c0a8: d65f03c0 ret
-ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:132
-cur var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x1c) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
-left var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x18) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
-right var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x14) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134
-reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbfd8 0xc0ac (DW_OP_fbreg 0x8) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:135
**0000c0ac <hyp_spin_lock>:
+ hyp_spin_lock params:
+lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18)
hyp_spin_lock:36.0 (spinlock.h) Sbepe ║{
0000c0ac CFA:r31
+lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35
+tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xc0ac 0xc0fc (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:37
+lockval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
+newval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
~ 0000c0ac: d10083ff sub sp, sp, #0x20 <- 0000b778(bl)<hyp_spin_lock>
~ 0000c0b0: f9000fe0 str x0, [sp, #24]
hyp_spin_lock:68.57 (spinlock.h) SbePe : "=&r" (lockval), "=&r" (newval), "=&r" (tmp), "+Q" (*║lock)
~ 0000c0b4: f9400fe8 ldr x8, [sp, #24]
hyp_spin_lock:40.2 (spinlock.h) Sbepe ║asm volatile(
~ 0000c0b8: f9800111 prfm pstl1strm, [x8]
~ ╔>0000c0bc: 885ffd09 ldaxr w9, [x8] <- v0000c0c8(b.cc)<hyp_spin_lock+0x10>
~ ║ 0000c0c0: 1140412a add w10, w9, #0x10, lsl #12
~ ║ 0000c0c4: 880b7d0a stxr w11, w10, [x8]
~ ╚═0000c0c8: 35ffffab cbnz w11, c0bc <hyp_spin_lock+0x10>
~ 0000c0cc: 4ac9412a eor w10, w9, w9, ror #16 <- 0000c0c8(b.cc-succ)<fallthrough>
~ ┌──0000c0d0: 340000ca cbz w10, c0e8 <hyp_spin_lock+0x3c>
│
~ │ 0000c0d4: d50320bf sevl <- 0000c0d0(b.cc-succ)<fallthrough>
│
~ │╔>0000c0d8: d503205f wfe <- v0000c0e4(b.cc)<hyp_spin_lock+0x2c>
~ │║ 0000c0dc: 485ffd0b ldaxrh w11, [x8]
~ │║ 0000c0e0: 4a49416a eor w10, w11, w9, lsr #16
~ │╚═0000c0e4: 35ffffaa cbnz w10, c0d8 <hyp_spin_lock+0x2c>
│
~ └─>0000c0e8: b90013e9 str w9, [sp, #16] <- 0000c0d0(b.cc)<hyp_spin_lock+0x3c>,0000c0e4(b.cc-succ)<fallthrough>
~ 0000c0ec: b9000bea str w10, [sp, #8]
~ 0000c0f0: b90017eb str w11, [sp, #20]
hyp_spin_lock:71.1 (spinlock.h) Sbepe ║}
~ 0000c0f4: 910083ff add sp, sp, #0x20
0000c0b0 CFA:r31+32
~ 0000c0f8: d65f03c0 ret
-lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35
-tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xc0ac 0xc0fc (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:37
-lockval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
-newval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38
**0000c0fc <__host_stage2_map>:
+ __host_stage2_map params:
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8)
+size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10)
+prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc)
+p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0)
__host_stage2_map:154.0 (mem_protect.c) Sbepe ║{
+ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
+size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
+prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
+p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:153
~ 0000c0fc: d100c3ff sub sp, sp, #0x30 <- 0000b78c(bl)<__host_stage2_map>,0000b7c4(bl)<__host_stage2_map>
~ 0000c100: a9027bfd stp x29, x30, [sp, #32]
0000c0fc CFA:r31 r29:u r30:u
~ 0000c104: 910083fd add x29, sp, #0x20
~ 0000c108: f81f83a0 stur x0, [x29, #-8]
~ 0000c10c: f9000be1 str x1, [sp, #16]
~ 0000c110: b9000fe2 str w2, [sp, #12]
~ 0000c114: f90003e3 str x3, [sp]
__host_stage2_map:155.47 (mem_protect.c) SbePe return kvm_pgtable_stage2_map(&host_kvm.pgt, ║ipa, size, ipa, prot, p);
~ 0000c118: f85f83a8 ldur x8, [x29, #-8]
__host_stage2_map:155.52 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, ║size, ipa, prot, p);
~ 0000c11c: f9400be2 ldr x2, [sp, #16]
__host_stage2_map:155.63 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, ║prot, p);
~ 0000c120: b9400fe4 ldr w4, [sp, #12]
__host_stage2_map:155.69 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, ║p);
~ 0000c124: f94003e5 ldr x5, [sp]
__host_stage2_map:155.9 (mem_protect.c) sbepe return ║kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, p);
~ 0000c128: f0000060 adrp x0, 1b000 <hyp_memory+0x460>
~ 0000c12c: 9114e000 add x0, x0, #0x538
~ 0000c130: aa0803e1 mov x1, x8
~ 0000c134: aa0803e3 mov x3, x8
~ 0000c138: 94001f51 bl 13e7c <kvm_pgtable_stage2_map>
__host_stage2_map:155.2 (mem_protect.c) sbepe ║return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, p);
~ 0000c13c: a9427bfd ldp x29, x30, [sp, #32] <- 0000c138(bl-succ)<return>
~ 0000c140: 9100c3ff add sp, sp, #0x30
0000c108 CFA:r29+16 r29:c-16 r30:c-8
~ 0000c144: d65f03c0 ret
-ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
-size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
-prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152
-p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:153
**0000c148 <host_stage2_unmap_dev_all>:
+ host_stage2_unmap_dev_all params: none
host_stage2_unmap_dev_all:118.0 (mem_protect.c) Sbepe ║{
+pgt var pointer(struct kvm_pgtable<89e06>/<89fba>) 0xc148 0xc1f8 (DW_OP_fbreg -0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:119
+reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xc148 0xc1f8 (DW_OP_breg31 0x10) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:120
+addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc148 0xc1f8 (DW_OP_breg31 0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:121
+i var int (base type, DW_ATE_signed size:4) 0xc148 0xc1f8 (DW_OP_breg31 0x4) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:122
~ 0000c148: d100c3ff sub sp, sp, #0x30 <- 0000b7b0(bl)<host_stage2_unmap_dev_all>
~ 0000c14c: a9027bfd stp x29, x30, [sp, #32]
0000c148 CFA:r31 r29:u r30:u
~ 0000c150: 910083fd add x29, sp, #0x20
host_stage2_unmap_dev_all:119.22 (mem_protect.c) SbePe struct kvm_pgtable *║pgt = &host_kvm.pgt;
~ 0000c154: f0000068 adrp x8, 1b000 <hyp_memory+0x460>
~ 0000c158: 9114e108 add x8, x8, #0x538
~ 0000c15c: f81f83a8 stur x8, [x29, #-8]
~ 0000c160: aa1f03e8 mov x8, xzr
host_stage2_unmap_dev_all:121.6 (mem_protect.c) Sbepe u64 ║addr = 0;
~ 0000c164: f90007e8 str x8, [sp, #8]
~ 0000c168: 2a1f03e9 mov w9, wzr
host_stage2_unmap_dev_all:125.9 (mem_protect.c) Sbepe for (i ║= 0; i < hyp_memblock_nr; i++, addr = reg->end) {
~ 0000c16c: b90007e9 str w9, [sp, #4]
host_stage2_unmap_dev_all:125.7 (mem_protect.c) sbepe for (║i = 0; i < hyp_memblock_nr; i++, addr = reg->end) {
~ ┌─0000c170: 14000001 b c174 <host_stage2_unmap_dev_all+0x2c>
│
│ host_stage2_unmap_dev_all:125.14 (mem_protect.c) sbepe for (i = 0; ║i < hyp_memblock_nr; i++, addr = reg->end) {
~ ╔>└>0000c174: b94007e8 ldr w8, [sp, #4] <- 0000c170(b)<host_stage2_unmap_dev_all+0x2c>,v0000c1d8(b)<host_stage2_unmap_dev_all+0x2c>
║ host_stage2_unmap_dev_all:125.18 (mem_protect.c) sbepe for (i = 0; i < ║hyp_memblock_nr; i++, addr = reg->end) {
~ ║ 0000c178: f0000069 adrp x9, 1b000 <hyp_memory+0x460>
~ ║ 0000c17c: b943a12a ldr w10, [x9, #928]
║ host_stage2_unmap_dev_all:125.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_memblock_nr; i++, addr = reg->end) {
~ ║ 0000c180: 6b0a0108 subs w8, w8, w10
~ ║┌──0000c184: 540002ca b.ge c1dc <host_stage2_unmap_dev_all+0x94> // b.tcont
║│
~ ║│┌─0000c188: 14000001 b c18c <host_stage2_unmap_dev_all+0x44> <- 0000c184(b.cc-succ)<fallthrough>
║││
║││ host_stage2_unmap_dev_all:126.21 (mem_protect.c) Sbepe reg = &hyp_memory[║i];
~ ║│└>0000c18c: b98007e8 ldrsw x8, [sp, #4] <- 0000c188(b)<host_stage2_unmap_dev_all+0x44>
║│ host_stage2_unmap_dev_all:126.10 (mem_protect.c) sbepe reg = &║hyp_memory[i];
~ ║│ 0000c190: d0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0>
~ ║│ 0000c194: 912e8129 add x9, x9, #0xba0
~ ║│ 0000c198: 8b081128 add x8, x9, x8, lsl #4
║│ host_stage2_unmap_dev_all:126.7 (mem_protect.c) sbepe reg ║= &hyp_memory[i];
~ ║│ 0000c19c: f9000be8 str x8, [sp, #16]
║│ host_stage2_unmap_dev_all:127.28 (mem_protect.c) Sbepe kvm_pgtable_stage2_unmap(║pgt, addr, reg->start - addr);
~ ║│ 0000c1a0: f85f83a0 ldur x0, [x29, #-8]
║│ host_stage2_unmap_dev_all:127.33 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, ║addr, reg->start - addr);
~ ║│ 0000c1a4: f94007e8 ldr x8, [sp, #8]
║│ host_stage2_unmap_dev_all:127.39 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, ║reg->start - addr);
~ ║│ 0000c1a8: f9400be9 ldr x9, [sp, #16]
║│ host_stage2_unmap_dev_all:127.44 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, reg->║start - addr);
~ ║│ 0000c1ac: f9400129 ldr x9, [x9]
║│ host_stage2_unmap_dev_all:127.50 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, reg->start ║- addr);
~ ║│ 0000c1b0: eb080122 subs x2, x9, x8
║│ host_stage2_unmap_dev_all:127.3 (mem_protect.c) sbepe ║kvm_pgtable_stage2_unmap(pgt, addr, reg->start - addr);
~ ║│ 0000c1b4: aa0803e1 mov x1, x8
~ ║│ 0000c1b8: 94002067 bl 14354 <kvm_pgtable_stage2_unmap>
║│
║│ host_stage2_unmap_dev_all:128.2 (mem_protect.c) Sbepe }
~ ║│┌─0000c1bc: 14000001 b c1c0 <host_stage2_unmap_dev_all+0x78> <- 0000c1b8(bl-succ)<return>
║││
║││ host_stage2_unmap_dev_all:125.36 (mem_protect.c) Sbepe for (i = 0; i < hyp_memblock_nr; i║++, addr = reg->end) {
~ ║│└>0000c1c0: b94007e8 ldr w8, [sp, #4] <- 0000c1bc(b)<host_stage2_unmap_dev_all+0x78>
~ ║│ 0000c1c4: 11000508 add w8, w8, #0x1
~ ║│ 0000c1c8: b90007e8 str w8, [sp, #4]
║│ host_stage2_unmap_dev_all:125.47 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr = ║reg->end) {
~ ║│ 0000c1cc: f9400be9 ldr x9, [sp, #16]
║│ host_stage2_unmap_dev_all:125.52 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr = reg->║end) {
~ ║│ 0000c1d0: f9400529 ldr x9, [x9, #8]
║│ host_stage2_unmap_dev_all:125.45 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr ║= reg->end) {
~ ║│ 0000c1d4: f90007e9 str x9, [sp, #8]
║│ host_stage2_unmap_dev_all:125.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_memblock_nr; i++, addr = reg->end) {
~ ╚╪══0000c1d8: 17ffffe7 b c174 <host_stage2_unmap_dev_all+0x2c>
│
│ host_stage2_unmap_dev_all:129.27 (mem_protect.c) Sbepe kvm_pgtable_stage2_unmap(║pgt, addr, ULONG_MAX);
~ └─>0000c1dc: f85f83a0 ldur x0, [x29, #-8] <- 0000c184(b.cc)<host_stage2_unmap_dev_all+0x94>
host_stage2_unmap_dev_all:129.32 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, ║addr, ULONG_MAX);
~ 0000c1e0: f94007e1 ldr x1, [sp, #8]
~ 0000c1e4: 92800002 mov x2, #0xffffffffffffffff // #-1
host_stage2_unmap_dev_all:129.2 (mem_protect.c) sbepe ║kvm_pgtable_stage2_unmap(pgt, addr, ULONG_MAX);
~ 0000c1e8: 9400205b bl 14354 <kvm_pgtable_stage2_unmap>
host_stage2_unmap_dev_all:130.1 (mem_protect.c) Sbepe ║}
~ 0000c1ec: a9427bfd ldp x29, x30, [sp, #32] <- 0000c1e8(bl-succ)<return>
~ 0000c1f0: 9100c3ff add sp, sp, #0x30
0000c154 CFA:r29+16 r29:c-16 r30:c-8
~ 0000c1f4: d65f03c0 ret
-pgt var pointer(struct kvm_pgtable<89e06>/<89fba>) 0xc148 0xc1f8 (DW_OP_fbreg -0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:119
-reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xc148 0xc1f8 (DW_OP_breg31 0x10) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:120
-addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc148 0xc1f8 (DW_OP_breg31 0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:121
-i var int (base type, DW_ATE_signed size:4) 0xc148 0xc1f8 (DW_OP_breg31 0x4) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:122
**0000c1f8 <hyp_spin_unlock>:
+ hyp_spin_unlock params:
+lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8)
hyp_spin_unlock:74.0 (spinlock.h) Sbepe ║{
0000c1f8 CFA:r31
+lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:73
+tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc1f8 0xc21c (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:75
~ 0000c1f8: d10043ff sub sp, sp, #0x10 <- 0000b7d8(bl)<hyp_spin_unlock>
~ 0000c1fc: f90007e0 str x0, [sp, #8]
hyp_spin_unlock:87.10 (spinlock.h) SbePe : "=Q" (║lock->owner), "=&r" (tmp)
~ 0000c200: f94007e8 ldr x8, [sp, #8]
hyp_spin_unlock:77.2 (spinlock.h) Sbepe ║asm volatile(
~ 0000c204: 79400109 ldrh w9, [x8]
~ 0000c208: 11000529 add w9, w9, #0x1
~ 0000c20c: 489ffd09 stlrh w9, [x8]
~ 0000c210: f90003e9 str x9, [sp]
hyp_spin_unlock:90.1 (spinlock.h) Sbepe ║}
~ 0000c214: 910043ff add sp, sp, #0x10
~ 0000c218: d65f03c0 ret
-lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:73
-tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc1f8 0xc21c (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:75
~ 0000c21c: d5033fdf isb
~ 0000c220: d5385208 mrs x8, esr_el1
~ 0000c224: d5386008 mrs x8, far_el1
~ 0000c228: d5033fbf dmb sy
~ 0000c22c: d5033fbf dmb sy
~ 0000c230: d5033fbf dmb sy
~ 0000c234: d5033fbf dmb sy
~ 0000c238: 52a0002b mov w11, #0x10000 // #65536
~ 0000c23c: b8ab0109 ldadda w11, w9, [x8]
~ 0000c240: d503201f nop
~ 0000c244: d503201f nop
~ 0000c248: d503201f nop
~ 0000c24c: 52800029 mov w9, #0x1 // #1
~ 0000c250: 7869011f staddlh w9, [x8]
0000c1fc CFA:r31+16
~ 0000c254: d503201f nop